From 26c28fcc7a47254e31a5e0bcf47ed1b9d9b26ecb Mon Sep 17 00:00:00 2001 From: neoarz Date: Mon, 15 Sep 2025 13:50:24 -0400 Subject: [PATCH] feat: (description) move invite to make all general commands ep and more Moved the invite command from general to owner cogs and updated help command category mapping accordingly. Improved ephemeral response handling in botinfo, ping, and serverinfo commands. Enhanced help command to avoid duplicate command listings and include application commands. Cleaned up serverinfo code and added guild-only enforcement. --- cogs/general/botinfo.py | 2 +- cogs/general/feedback.py | 3 ++- cogs/general/help.py | 22 ++++++++++++++-- cogs/general/ping.py | 5 +++- cogs/general/serverinfo.py | 42 ++++++++++++++++++------------- cogs/{general => owner}/invite.py | 8 ------ 6 files changed, 52 insertions(+), 30 deletions(-) rename cogs/{general => owner}/invite.py (86%) diff --git a/cogs/general/botinfo.py b/cogs/general/botinfo.py index 47cf10b..62d0acd 100644 --- a/cogs/general/botinfo.py +++ b/cogs/general/botinfo.py @@ -32,7 +32,7 @@ class BotInfo(commands.Cog, name="botinfo"): value=f"/ (Slash Commands) or {self.bot.bot_prefix} for normal commands", inline=False, ) - if context.interaction: + if getattr(context, "interaction", None): await context.interaction.response.send_message(embed=embed, ephemeral=True) else: await context.send(embed=embed) diff --git a/cogs/general/feedback.py b/cogs/general/feedback.py index 43471f7..2a31971 100644 --- a/cogs/general/feedback.py +++ b/cogs/general/feedback.py @@ -41,7 +41,8 @@ class Feedback(commands.Cog, name="feedback"): title="Thank You!", description="Your feedback has been submitted, the owners have been notified about it.", color=0x7289DA, - ).set_author(name="Feedback System", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") + ).set_author(name="Feedback System", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp"), + ephemeral=True, ) app_owner = (await self.bot.application_info()).owner diff --git a/cogs/general/help.py b/cogs/general/help.py index febc43e..876ffbe 100644 --- a/cogs/general/help.py +++ b/cogs/general/help.py @@ -42,7 +42,6 @@ class Help(commands.Cog, name="help"): "botinfo": "general", "serverinfo": "general", "ping": "general", - "invite": "general", "feedback": "general", # "context_menus": "general", @@ -63,6 +62,7 @@ class Help(commands.Cog, name="help"): "cog_management": "owner", "shutdown": "owner", "say": "owner", + "invite": "owner", "testcommand": "template" } @@ -134,14 +134,32 @@ class Help(commands.Cog, name="help"): return commands_in_category = [] + seen_names = set() for cog_name in self.bot.cogs: if category_mapping.get(cog_name.lower()) == category: cog = self.bot.get_cog(cog_name) if cog: commands_list = cog.get_commands() for command in commands_list: + name = command.name + if name in seen_names: + continue description = command.description.partition("\n")[0] if command.description else "No description available" - commands_in_category.append((command.name, description)) + commands_in_category.append((name, description)) + seen_names.add(name) + + for app_command in self.bot.tree.get_commands(): + bound_cog = getattr(app_command, "binding", None) + if bound_cog is None: + continue + bound_cog_name = getattr(bound_cog, "qualified_name", "").lower() + if category_mapping.get(bound_cog_name) != category: + continue + if app_command.name in seen_names: + continue + description = app_command.description.partition("\n")[0] if getattr(app_command, "description", None) else "No description available" + commands_in_category.append((app_command.name, description)) + seen_names.add(app_command.name) if not commands_in_category: embed = discord.Embed( diff --git a/cogs/general/ping.py b/cogs/general/ping.py index 445a25f..b9f90f6 100644 --- a/cogs/general/ping.py +++ b/cogs/general/ping.py @@ -31,7 +31,10 @@ class Ping(commands.Cog, name="ping"): color=0xBEBEFE, ) embed.set_author(name="Ping", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp") - await context.send(embed=embed) + 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: diff --git a/cogs/general/serverinfo.py b/cogs/general/serverinfo.py index c025f2b..1c499c9 100644 --- a/cogs/general/serverinfo.py +++ b/cogs/general/serverinfo.py @@ -1,16 +1,7 @@ -""" -Copyright © Krypton 2019-Present - https://github.com/kkrypt0nn (https://krypton.ninja) -Description: -🐍 A simple template to start to code your own and personalized Discord bot in Python - -Version: 6.4.0 -""" - 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 @@ -19,33 +10,50 @@ class ServerInfo(commands.Cog, name="serverinfo"): 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=0xBEBEFE - ) + 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)}" + name="Text/Voice Channels", + value=f"{len(context.guild.channels)}" + ) + embed.add_field( + name=f"Roles ({len(context.guild.roles)})", + value=roles ) - embed.add_field(name=f"Roles ({len(context.guild.roles)})", value=roles) embed.set_footer(text=f"Created at: {context.guild.created_at}") - await context.send(embed=embed) - + + 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)) + diff --git a/cogs/general/invite.py b/cogs/owner/invite.py similarity index 86% rename from cogs/general/invite.py rename to cogs/owner/invite.py index 1cbfc92..7c93e9a 100644 --- a/cogs/general/invite.py +++ b/cogs/owner/invite.py @@ -1,11 +1,3 @@ -""" -Copyright © Krypton 2019-Present - https://github.com/kkrypt0nn (https://krypton.ninja) -Description: -🐍 A simple template to start to code your own and personalized Discord bot in Python - -Version: 6.4.0 -""" - import os import discord from discord.ext import commands