help.py

← Back to explorer
Cogs/help.py
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="<a:Hello:917378477638946877> 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))