2025-09-14 18:54:56 -04:00
|
|
|
import discord
|
|
|
|
|
from discord.ext import commands
|
|
|
|
|
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-09-28 22:53:25 -04:00
|
|
|
def serverinfo_command():
|
2025-09-14 18:54:56 -04:00
|
|
|
@commands.hybrid_command(
|
|
|
|
|
name="serverinfo",
|
|
|
|
|
description="Get some useful (or not) information about the server.",
|
|
|
|
|
)
|
2025-09-28 22:53:25 -04:00
|
|
|
@commands.guild_only()
|
|
|
|
|
async def serverinfo(self, context):
|
2025-09-15 13:50:24 -04:00
|
|
|
if context.guild is None:
|
|
|
|
|
await context.send("This command can only be used in a server, not in DMs!")
|
|
|
|
|
return
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
guild = context.guild
|
2025-11-02 23:32:52 -05:00
|
|
|
|
|
|
|
|
text_channels = len(
|
|
|
|
|
[c for c in guild.channels if isinstance(c, discord.TextChannel)]
|
|
|
|
|
)
|
|
|
|
|
voice_channels = len(
|
|
|
|
|
[c for c in guild.channels if isinstance(c, discord.VoiceChannel)]
|
|
|
|
|
)
|
|
|
|
|
category_channels = len(
|
|
|
|
|
[c for c in guild.channels if isinstance(c, discord.CategoryChannel)]
|
|
|
|
|
)
|
|
|
|
|
forum_channels = len(
|
|
|
|
|
[c for c in guild.channels if isinstance(c, discord.ForumChannel)]
|
|
|
|
|
)
|
|
|
|
|
stage_channels = len(
|
|
|
|
|
[c for c in guild.channels if isinstance(c, discord.StageChannel)]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
age_restricted = len(
|
|
|
|
|
[c for c in guild.channels if hasattr(c, "nsfw") and c.nsfw]
|
|
|
|
|
)
|
|
|
|
|
hidden_channels = len(
|
|
|
|
|
[
|
|
|
|
|
c
|
|
|
|
|
for c in guild.channels
|
|
|
|
|
if c.permissions_for(guild.default_role).view_channel == False
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
managed_roles = len([r for r in guild.roles if r.managed])
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
animated_emojis = len([e for e in guild.emojis if e.animated])
|
|
|
|
|
managed_emojis = len([e for e in guild.emojis if e.managed])
|
|
|
|
|
unavailable_emojis = len([e for e in guild.emojis if not e.available])
|
2025-11-02 23:32:52 -05:00
|
|
|
|
|
|
|
|
png_stickers = len(
|
|
|
|
|
[s for s in guild.stickers if s.format == discord.StickerFormatType.png]
|
|
|
|
|
)
|
|
|
|
|
apng_stickers = len(
|
|
|
|
|
[s for s in guild.stickers if s.format == discord.StickerFormatType.apng]
|
|
|
|
|
)
|
|
|
|
|
gif_stickers = len(
|
|
|
|
|
[s for s in guild.stickers if s.format == discord.StickerFormatType.lottie]
|
|
|
|
|
)
|
|
|
|
|
lottie_stickers = len(
|
|
|
|
|
[s for s in guild.stickers if s.format == discord.StickerFormatType.lottie]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
online_members = len(
|
|
|
|
|
[m for m in guild.members if m.status == discord.Status.online]
|
|
|
|
|
)
|
|
|
|
|
idle_members = len(
|
|
|
|
|
[m for m in guild.members if m.status == discord.Status.idle]
|
|
|
|
|
)
|
2025-10-09 22:56:43 -04:00
|
|
|
dnd_members = len([m for m in guild.members if m.status == discord.Status.dnd])
|
2025-11-02 23:32:52 -05:00
|
|
|
offline_members = len(
|
|
|
|
|
[m for m in guild.members if m.status == discord.Status.offline]
|
|
|
|
|
)
|
|
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
bot_count = len([m for m in guild.members if m.bot])
|
|
|
|
|
human_count = guild.member_count - bot_count
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
created_delta = discord.utils.utcnow() - guild.created_at
|
|
|
|
|
years_ago = created_delta.days // 365
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-09-14 18:54:56 -04:00
|
|
|
embed = discord.Embed(
|
2025-11-02 23:32:52 -05:00
|
|
|
title=f"**Server Name:** {guild.name}", color=0x7289DA
|
|
|
|
|
).set_author(
|
|
|
|
|
name="Server Information",
|
|
|
|
|
icon_url="https://yes.nighty.works/raw/gSxqzV.png",
|
|
|
|
|
)
|
|
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
if guild.icon is not None:
|
|
|
|
|
embed.set_thumbnail(url=guild.icon.url)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
|
|
|
|
owner_value = (
|
|
|
|
|
guild.owner.mention
|
|
|
|
|
if guild.owner
|
|
|
|
|
else (f"<@{guild.owner_id}>" if guild.owner_id else "Unknown")
|
2025-10-09 22:56:43 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
embed.add_field(name="Owner", value=owner_value, inline=True)
|
|
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name="Created",
|
|
|
|
|
value=f"{years_ago} year{'s' if years_ago != 1 else ''} ago",
|
|
|
|
|
inline=True,
|
2025-10-09 22:56:43 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-09-14 18:54:56 -04:00
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name="Max Members",
|
|
|
|
|
value=f"{guild.max_members:,}" if guild.max_members else "Unknown",
|
|
|
|
|
inline=True,
|
2025-09-15 13:50:24 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
boost_level = guild.premium_tier
|
|
|
|
|
boost_count = guild.premium_subscription_count or 0
|
|
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name="Boost Status",
|
|
|
|
|
value=f"Level {boost_level}, {boost_count} Boost{'s' if boost_count != 1 else ''}",
|
|
|
|
|
inline=False,
|
2025-10-09 22:56:43 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
channels_info = f"{text_channels} text, {voice_channels} voice, {category_channels} category"
|
|
|
|
|
if forum_channels > 0:
|
|
|
|
|
channels_info += f", {forum_channels} forum"
|
|
|
|
|
if stage_channels > 0:
|
|
|
|
|
channels_info += f", {stage_channels} stage"
|
|
|
|
|
channels_info += f"\n{age_restricted} age restricted, {hidden_channels} hidden"
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name=f"Channels ({len(guild.channels)})", value=channels_info, inline=True
|
2025-10-09 22:56:43 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
roles_info = f"{len(guild.roles)} total\n{managed_roles} managed"
|
2025-09-15 13:50:24 -04:00
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name=f"Roles ({len(guild.roles)})", value=roles_info, inline=True
|
2025-09-14 18:54:56 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
emotes_info = f"{len(guild.emojis)} total\n{animated_emojis} animated, {managed_emojis} managed"
|
|
|
|
|
if unavailable_emojis > 0:
|
|
|
|
|
emotes_info += f"\n{unavailable_emojis} unavailable"
|
|
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name=f"Emotes ({len(guild.emojis)})", value=emotes_info, inline=True
|
2025-10-09 22:56:43 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
if len(guild.stickers) > 0:
|
|
|
|
|
stickers_info = f"{len(guild.stickers)} total\n{png_stickers} PNG, {apng_stickers} APNG, {gif_stickers} GIF, {lottie_stickers} Lottie"
|
|
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name=f"Stickers ({len(guild.stickers)})",
|
|
|
|
|
value=stickers_info,
|
|
|
|
|
inline=True,
|
2025-10-09 22:56:43 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
2025-10-09 22:56:43 -04:00
|
|
|
embed.add_field(
|
2025-11-02 23:32:52 -05:00
|
|
|
name="Member Count", value=f"{guild.member_count}", inline=False
|
2025-10-09 22:56:43 -04:00
|
|
|
)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
|
|
|
|
embed.set_footer(
|
|
|
|
|
text=f"Server ID: {guild.id} • Created: {guild.created_at.strftime('%m/%d/%Y')}"
|
|
|
|
|
)
|
|
|
|
|
|
2025-09-15 13:50:24 -04:00
|
|
|
if getattr(context, "interaction", None):
|
2025-11-02 23:32:52 -05:00
|
|
|
await context.interaction.response.send_message(
|
|
|
|
|
embed=embed, ephemeral=False
|
|
|
|
|
)
|
2025-09-15 13:50:24 -04:00
|
|
|
else:
|
|
|
|
|
await context.send(embed=embed)
|
2025-11-02 23:32:52 -05:00
|
|
|
|
|
|
|
|
return serverinfo
|