from discord import Embed from discord.ext import commands, menus from discord.ext.commands import command from settings import blank_space, enso_embedmod_colours, time, ensoMention, hammyMention # Function to allow the first page of the help commands (Fun Commands) def fun_function(self, guild_icon): # Setting up the Embed for the Fun Commands fun_commands = Embed(title="```(っ◔◡◔)っ Fun Commands (っ◔◡◔)っ```", colour=enso_embedmod_colours, timestamp=time) # Setting thumbnail and author fun_commands.set_thumbnail(url=guild_icon) # Setting up the fields in a separate array fun_fields = [ (blank_space, f"`{self.ctx.prefix}attack [person]`" + "\nThrow an insult to a person in the server" + "\n **(Perms: Co-Owner)**", True), (blank_space, f"`{self.ctx.prefix}comp [person]`" + "\nCompliment a person in the server", True), (blank_space, f"`{self.ctx.prefix}8ball [text]`" + "\nAsk a question and 8ball will give a custom response", True), (blank_space, f"`{self.ctx.prefix}flip`" + "\nDoes A coinflip with Big PP Or Smol PP", True), (blank_space, f"`{self.ctx.prefix}doggo`" + "\nLook at images of Doggos", True)] # Setting up the Embed for the Fun Commands fun_commands_2 = Embed(title="```(っ◔◡◔)っ Fun Commands 2 (っ◔◡◔)っ```", colour=enso_embedmod_colours, timestamp=time) # Setting thumbnail and author fun_commands_2.set_thumbnail(url=guild_icon) # Setting up the fields in a separate array fun_fields_2 = [ (blank_space, f"`{self.ctx.prefix}hug [person]`" + "\nHug A User Within The Server", True), (blank_space, f"`{self.ctx.prefix}cuddle [person]`" + "\nCuddle A User Within The Server", True), (blank_space, f"`{self.ctx.prefix}pat [person]`" + "\nPat A User Within The Server", True), (blank_space, f"`{self.ctx.prefix}kiss [person]`" + "\nKiss A User Within The Serverr", True), (blank_space, f"`{self.ctx.prefix}slap [person]`" + "\nSlap A User Within The Server", True), (blank_space, f"`{self.ctx.prefix}kill [person]`" + "\nKill A User Within The Server", True), (blank_space, f"`{self.ctx.prefix}choke [person]`" + "\nChoke A User Within The Server", True), (blank_space, f"`{self.ctx.prefix}lemon [person]`" + "\nGive lemon to A User Within The Server", True)] # Add the fun_commands fields to the embed for name, value, inline in fun_fields: fun_commands.add_field(name=name, value=value, inline=inline) # Add the fun_commands_2 fields to the embed for name, value, inline in fun_fields_2: fun_commands_2.add_field(name=name, value=value, inline=inline) return fun_commands, fun_commands_2 # Function to allow the second page of the help commands (Waifu/Husbandos) def waifu_husbando_function(self, guild_icon): # Setting up the Embed for the Waifu/Husbandos waifu_husbando_commands = Embed(title="```(っ◔◡◔)っ Waifus/Husbando Commands (っ◔◡◔)っ```", colour=enso_embedmod_colours, timestamp=time) # Setting thumbnail and author waifu_husbando_commands.set_thumbnail(url=guild_icon) # Setting up the fields in a separate array waifu_husbando_fields = [ (blank_space, f"`{self.ctx.prefix}w [waifu]`" + "\nShows Specified Image of Waifu" + f"\n (Using {self.ctx.prefix}w by itself shall randomly generated image of a Waifu to be shown)", True), (blank_space, f"`{self.ctx.prefix}h [husbando]`" + "\nShows Specified Image of Husbando" + f"\n (Using {self.ctx.prefix}h by itself shall randomly generated image of a Husbando to be shown)", True), (blank_space, f"`{self.ctx.prefix}w list`" + "\nReturns all Waifus", True), (blank_space, f"`{self.ctx.prefix}h list`" + "\nReturns all Husbandos", True), (blank_space, f"`{self.ctx.prefix}enso [person]`" + "\nShows Specified Image of User" + f"\n (Using {self.ctx.prefix}enso by itself shall generate a random image of a person within all the server)", True), (blank_space, f"`{self.ctx.prefix}enso list`" + "\nReturns all Users", True)] # Add the waifu_husbando_commands fields to the embed for name, value, inline in waifu_husbando_fields: waifu_husbando_commands.add_field(name=name, value=value, inline=inline) return waifu_husbando_commands # Function to allow the third page of the help commands (Miscellaneous) def misc_function(self, guild_icon): # Setting up the Embed for the Miscellaneous commands misc_commands = Embed(title="```(っ◔◡◔)っ Misc Commands (っ◔◡◔)っ```", colour=enso_embedmod_colours, timestamp=time) # Setting thumbnail and author misc_commands.set_thumbnail(url=guild_icon) # Setting up the fields in a separate array misc_fields = [ (blank_space, f"`{self.ctx.prefix}ping`" + "\nReturns latency in ms" + "\n**(Perms: Co-Owner)**", True), (blank_space, f"`{self.ctx.prefix}rolemenu`" + "\nShowing Users Self Roles" + "\n**(Perms: Co-Owner)**", True), (blank_space, f"`{self.ctx.prefix}dm [person]`" + f"\nFor {hammyMention} to DM Users" + "\n**(Perms: Co-Owner)**", True), (blank_space, f"`{self.ctx.prefix}remindme [time] [text]`" + "\nGet Enso~Chan to remind you in DMs", True)] # Add the misc_commands fields to the embed for name, value, inline in misc_fields: misc_commands.add_field(name=name, value=value, inline=inline) return misc_commands # Function to allow the fourth page of the help commands (Important) def important_function(self, guild_icon): # Setting up the Embed for the Important Commands important_commands = Embed(title="```(っ◔◡◔)っ Important Commands (っ◔◡◔)っ```", colour=enso_embedmod_colours, timestamp=time) # Setting thumbnail and author important_commands.set_thumbnail(url=guild_icon) # Setting up the fields in a separate array important_fields = [ (blank_space, f"`{self.ctx.prefix}userinfo`" + "\n Returns information about the user", True), (blank_space, f"`{self.ctx.prefix}serverinfo`" + "\n Returns information about the server", True), (blank_space, f"`{self.ctx.prefix}rules`" + "\nFull Ruleset for Enso", True), (blank_space, f"`{self.ctx.prefix}roles`" + "\nLeveling and xp system in Enso", True), (blank_space, f"`{self.ctx.prefix}help`" + "\nSee every command in the bot", True), (blank_space, f"`{self.ctx.prefix}mm/modmail`" + "\nSend mail to the staff team!" + f"\n(Done through the dms with {ensoMention})", True)] # Add the important_fields to the embed for name, value, inline in important_fields: important_commands.add_field(name=name, value=value, inline=inline) return important_commands def stop_embed(self): # Define enso bot icon and enso bot name enso_icon = self.bot.user.avatar_url enso_name = self.bot.user.display_name # Set up the Embed to display when the user reacts with the stop reaction stop = Embed(title="**Help Commands Embed Closed!**", colour=enso_embedmod_colours, timestamp=time) # Set the name and the icon for Enso~Chan stop.set_author(name=enso_name, icon_url=enso_icon) return stop def embeds(self): # Define guild icon, enso bot icon and enso bot name guild_icon = self.ctx.guild.icon_url enso_icon = self.bot.user.avatar_url enso_name = self.bot.user.display_name # Set the different pages of the embed page1, page2 = fun_function(self, guild_icon) page3 = waifu_husbando_function(self, guild_icon) page4 = misc_function(self, guild_icon) page5 = important_function(self, guild_icon) # Store all the categories of the menu to an array called pages pages = [page1, page2, page3, page4, page5] return pages class HelpMenu(menus.Menu): def __init__(self, i, bot): super().__init__() self.i = i self.bot = bot # Message to be sent on the initial command ~help async def send_initial_message(self, ctx, channel): # Set the first embed to the first element in the pages[] initial = embeds(self)[self.i] # Send embed return await channel.send(embed=initial) # Reaction to allow user to go to the previous page in the embed @menus.button('\N{LEFTWARDS BLACK ARROW}') async def on_left_arrow(self, payload): # Simple check to make sure that the reaction is performed by the user def check(m): return m.author == payload.member # Do nothing if the check does not return true if not check(self.ctx): return # Allow the page number to be decreased else: # Set self.i to (i - 1) remainder length of the array self.i = (self.i - 1) % len(embeds(self)) prev_page = embeds(self)[self.i] # Send the embed and remove the reaction of the user await self.message.edit(embed=prev_page) await self.message.remove_reaction("⬅", self.ctx.author) # Reaction to allow user to go to the next page in the embed @menus.button('\N{BLACK RIGHTWARDS ARROW}') async def on_right_arrow(self, payload): # Simple check to make sure that the reaction is performed by the user def check(m): return m.author == payload.member # Do nothing if the check does not return true if not check(self.ctx): return # Allow the page number to be increased else: # Set self.i to (i + 1) remainder length of the array self.i = (self.i + 1) % len(embeds(self)) next_page = embeds(self)[self.i] # Send the embed and remove the reaction of the user await self.message.edit(embed=next_page) await self.message.remove_reaction("➡", self.ctx.author) @menus.button('\N{BLACK SQUARE FOR STOP}\ufe0f') async def on_stop(self, payload): # Simple check to make sure that the reaction is performed by the user def check(m): return m.author == payload.member if not check(self.ctx): return else: # Send the stop embed which shows that the help commands embed is no longer accessible stop = stop_embed(self) await self.message.edit(embed=stop) # Clear the reactions in the message and stop the function await self.message.clear_reactions() self.stop() # Set up the cog class ReactionMenu(commands.Cog): def __init__(self, bot): self.bot = bot # Remove default help command self.bot.remove_command("help") # ~help command that returns a menu for help commands controlled by reactions @command(name="help", aliases=["Help"]) async def help(self, ctx): # Local Variable i to allow the index of the pages[] to be modified i = 0 # Send the menu to the display menu = HelpMenu(i, self) await menu.start(ctx) def setup(bot): bot.add_cog(ReactionMenu(bot))