import discord from discord.ext import commands from discord.ext.commands import Context class ServerInfo(commands.Cog, name="serverinfo"): def __init__(self, bot) -> None: self.bot = bot @commands.hybrid_command( name="serverinfo", description="Get some useful (or not) information about the server.", ) @commands.guild_only() # This decorator ensures the command only works in servers async def serverinfo(self, context: Context) -> None: """ Get some useful (or not) information about the server. :param context: The hybrid command context. """ # Additional check (though @commands.guild_only() should handle this) if context.guild is None: await context.send("This command can only be used in a server, not in DMs!") return roles = [role.name for role in context.guild.roles] num_roles = len(roles) if num_roles > 50: roles = roles[:50] roles.append(f">>>> Displaying [50/{num_roles}] Roles") roles = ", ".join(roles) embed = discord.Embed( title="**Server Name:**", description=f"{context.guild}", color=0x7289DA ).set_author(name="Server Information", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") if context.guild.icon is not None: embed.set_thumbnail(url=context.guild.icon.url) embed.add_field(name="Server ID", value=context.guild.id) embed.add_field(name="Member Count", value=context.guild.member_count) embed.add_field( name="Text/Voice Channels", value=f"{len(context.guild.channels)}" ) embed.add_field( name=f"Roles ({len(context.guild.roles)})", value=roles ) embed.set_footer(text=f"Created at: {context.guild.created_at.strftime('%m/%d/%Y')}") if getattr(context, "interaction", None): await context.interaction.response.send_message(embed=embed, ephemeral=True) else: await context.send(embed=embed) async def setup(bot) -> None: await bot.add_cog(ServerInfo(bot))