import discord, json from discord.ext import commands from discord import app_commands from customs.log import AuroraLogger from customs.help_embeds import embedModeration, embedSettings, embedUtility, embedImage, embedSearch, embedMiscs, embedTodo # LOGGER error_logger = AuroraLogger("AuroraErrorLog", "logs/errors.log") # config.json file = open("config.json", "r") config = json.loads(file.read()) # VIEW class HelpView(discord.ui.View): def __init__(self): super().__init__() self.add_item(HelpSelect()) self.add_item(HelpButton()) self.add_item( discord.ui.Button(label="Invite Me", style=discord.ButtonStyle.url, url=config["METADATA"]["INVITE_LINK"], emoji="<:invite:993158095721201764>")) self.add_item(discord.ui.Button(label="Github", style=discord.ButtonStyle.url, url=f'{config["METADATA"]["GITHUB_REPOSITORY"]}', emoji="<:link:908297685545656370>")) class HelpOnlyButtons(discord.ui.View): def __init__(self): super().__init__() self.add_item(HelpButton()) self.add_item( discord.ui.Button(label="Invite Me", style=discord.ButtonStyle.url, url=config["METADATA"]["INVITE_LINK"], emoji="<:invite:993158095721201764>")) self.add_item(discord.ui.Button(label="Github", style=discord.ButtonStyle.url, url=f'{config["METADATA"]["GITHUB_REPOSITORY"]}', emoji="<:link:908297685545656370>")) # INTERACTIONS class HelpSelect(discord.ui.Select): def __init__(self): options = [ discord.SelectOption(label="Moderation", description="clear, ban, kick, etc.", emoji="<:mod:992770697921310780>"), discord.SelectOption(label="Settings", description="about, etc.", emoji="<:settings:957629477087760436>"), discord.SelectOption(label="Utility", description="avatar, meminfo, etc.", emoji="<:utilitywhat:992784837205311498>"), discord.SelectOption(label="Image", description="b_w, negative, etc.", emoji="<:photo:995519248006905896>"), discord.SelectOption(label="Search", description="anime, movie, etc.", emoji="<:search:997798789354107030>"), discord.SelectOption(label="Miscs", description="waifu, etc.", emoji="<:meow_sus:1003184781971963905>"), discord.SelectOption(label="Todo", description="add, delete, remove, etc.", emoji="<:todo:1003109477375037500>"), ] super().__init__(placeholder="Select a Help Category", max_values=1, options=options) async def callback(self, interaction: discord.Interaction): if self.values[0].lower() == "moderation": await interaction.response.edit_message(embed=embedModeration) if self.values[0].lower() == "settings": await interaction.response.edit_message(embed=embedSettings) if self.values[0].lower() == "utility": await interaction.response.edit_message(embed=embedUtility) if self.values[0].lower() == "image": await interaction.response.edit_message(embed=embedImage) if self.values[0].lower() == "search": await interaction.response.edit_message(embed=embedSearch) if self.values[0].lower() == "miscs": await interaction.response.edit_message(embed=embedMiscs) if self.values[0].lower() == "todo": await interaction.response.edit_message(embed=embedTodo) class HelpButton(discord.ui.Button): def __init__(self): super().__init__(label="🗑️", style=discord.ButtonStyle.red) async def callback(self, interaction: discord.Interaction): if self.label == "🗑️": await interaction.message.delete() # COMMANDS class AuroraHelp(commands.Cog): def __init__(self, client): self.client = client @app_commands.command(name="help", description="Shows the help message for the bot.") async def _help(self, interaction: discord.Interaction, category: str = None): try: view = HelpView() onlyButtons = HelpOnlyButtons() if not category: embed = discord.Embed( title=" Aurora Help", colour=discord.Colour.blurple(), description=f"**Use `/help` or `/help [category]` for seeing this help message or help on a category.\n\nTotal Commands `{len(list(self.client.tree.walk_commands())):,}` | Total members `{len(list(self.client.get_all_members())):,}` | Total Guilds `{len(list(self.client.guilds))}`**", timestamp=interaction.created_at) embed.set_thumbnail(url=self.client.user.display_avatar) embed.set_footer(text="There are hundreds of documented reports of ‘auroral sound’", icon_url=interaction.user.display_avatar) embed.add_field(name="<:mod:992770697921310780> Moderation", value="`/help moderation`") embed.add_field(name="<:settings:957629477087760436> Settings", value="`/help settings`") embed.add_field(name="<:utilitywhat:992784837205311498> Utility", value="`/help utility`") embed.add_field(name="<:photo:995519248006905896> Image", value="`/help image`") embed.add_field(name="<:search:997798789354107030> Search", value="`/help search`") embed.add_field(name="<:meow_sus:1003184781971963905> Miscs", value="`/help miscs`") embed.add_field(name="<:todo:1003109477375037500> Todo", value="`/help todo`") await interaction.response.send_message(embed=embed, view=view) elif category.lower() == "moderation": await interaction.response.send_message(embed=embedModeration, view=onlyButtons) elif category.lower() == "settings": await interaction.response.send_message(embed=embedSettings, view=onlyButtons) elif category.lower() == "utility": await interaction.response.send_message(embed=embedUtility, view=onlyButtons) elif category.lower() == "image": await interaction.response.send_message(embed=embedImage, view=onlyButtons) elif category.lower() == "search": await interaction.response.send_message(embed=embedSearch, view=onlyButtons) elif category.lower() == "miscs": await interaction.response.send_message(embed=embedMiscs, view=onlyButtons) elif category.lower() == "todo": await interaction.response.send_message(embed=embedTodo, view=onlyButtons) except: error_logger.error("Error occurred while running help command:- ", exc_info=True) async def setup(client): await client.add_cog(AuroraHelp(client))