class Dropdown(discord.ui.Select): def __init__(self, bot): self.bot = bot super().__init__( placeholder="Pick command category", min_values=0, max_values=1, options = [ discord.SelectOption(label="Moderation", description="Moderation Commands", emoji="<:moderation:1040617929718378496>"), discord.SelectOption(label="Utility", description="Utility Commands", emoji="<:link:1033650348700733450> "), discord.SelectOption(label="Economy", description="Economy Commands", emoji="<:silvercoin:1025748669166784542>"), discord.SelectOption(label="Setup", description="Setup Commands", emoji="<:correct:1033650358158897183>") ] ) async def interaction_check(self, interaction: discord.Interaction): if interaction.user != self.ctx.author: await interaction.response.send_message("Only the author can use this dropdown!", ephemeral=True) return False else: return True @staticmethod def chunks(lst: list, n): for i in range(0, len(lst), n): yield lst[i:i + n] async def callback(self, interaction: discord.Interaction): cogs = self.bot.cogs cogs = list(cogs.values()) await interaction.response.defer() def find(cog): for x in cogs: if x.__class__.__name__ == cog: return x value = self.values[0] if value == "Moderation": j = find(cog="Mod") if j: no = 0 _pages = [] buttons = [ PaginatorButton("first", label="<<-", style=discord.ButtonStyle.blurple), PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), PaginatorButton("next", label="->", style=discord.ButtonStyle.green), PaginatorButton("last", label="->>", style=discord.ButtonStyle.blurple), ] for p in self.chunks(list(j.walk_commands()), 5): embed = discord.Embed(title="Commands", colour=discord.Color.random()) for k in p: no += 1 embed.add_field(name=f"{no}.", value=f"Command : {k.qualified_name}", inline=False ) _pages.append(embed) if len(_pages) > 1: paginator = Paginator(_pages, author_check=True, disable_on_timeout=True, use_default_buttons=False, custom_buttons=buttons) await paginator.respond(interaction, ephemeral=True) else: await interaction.followup.send(embed=_pages[0], ephemeral=True)