diff --git a/didier/cogs/discord.py b/didier/cogs/discord.py index d90752a..a6467bc 100644 --- a/didier/cogs/discord.py +++ b/didier/cogs/discord.py @@ -43,23 +43,22 @@ class Discord(commands.Cog): self.client.tree.remove_command(self._bookmark_ctx_menu.name, type=self._bookmark_ctx_menu.type) self.client.tree.remove_command(self._pin_ctx_menu.name, type=self._pin_ctx_menu.type) - @commands.group(name="Birthday", aliases=["Bd", "Birthdays"], case_insensitive=True, invoke_without_command=True) + @commands.group(name="birthday", aliases=["bd", "birthdays"], case_insensitive=True, invoke_without_command=True) async def birthday(self, ctx: commands.Context, user: discord.User = None): """Command to check the birthday of a user""" user_id = (user and user.id) or ctx.author.id async with self.client.postgres_session as session: birthday = await birthdays.get_birthday_for_user(session, user_id) - name = "Your" if user is None else f"{user.display_name}'s" + name: Optional[str] = user and f"{user.display_name}'s" if birthday is None: - return await ctx.reply(f"I don't know {name} birthday.", mention_author=False) + return await ctx.reply(f"I don't know {name or 'your'} birthday.", mention_author=False) day, month = leading("0", str(birthday.birthday.day)), leading("0", str(birthday.birthday.month)) + return await ctx.reply(f"{name or 'Your'} birthday is set to **{day}/{month}**.", mention_author=False) - return await ctx.reply(f"{name} birthday is set to **{day}/{month}**.", mention_author=False) - - @birthday.command(name="Set", aliases=["Config"]) + @birthday.command(name="set", aliases=["config"]) async def birthday_set(self, ctx: commands.Context, date_str: str): """Command to set your birthday""" try: @@ -77,7 +76,7 @@ class Discord(commands.Cog): await birthdays.add_birthday(session, ctx.author.id, date) await self.client.confirm_message(ctx.message) - @commands.group(name="Bookmark", aliases=["Bm", "Bookmarks"], case_insensitive=True, invoke_without_command=True) + @commands.group(name="bookmark", aliases=["bm", "bookmarks"], case_insensitive=True, invoke_without_command=True) async def bookmark(self, ctx: commands.Context, *, label: Optional[str] = None): """Post a bookmarked message""" # No label: shortcut to display bookmarks @@ -92,7 +91,7 @@ class Discord(commands.Cog): ) await ctx.reply(result.jump_url, mention_author=False) - @bookmark.command(name="Create", aliases=["New"]) + @bookmark.command(name="create", aliases=["new"]) async def bookmark_create(self, ctx: commands.Context, label: str, message: Optional[discord.Message]): """Create a new bookmark""" # If no message was passed, allow replying to the message that should be bookmarked @@ -116,7 +115,7 @@ class Discord(commands.Cog): # Label isn't allowed return await ctx.reply(f"Bookmarks cannot be named `{label}`.", mention_author=False) - @bookmark.command(name="Delete", aliases=["Rm"]) + @bookmark.command(name="delete", aliases=["rm"]) async def bookmark_delete(self, ctx: commands.Context, bookmark_id: str): """Delete a bookmark by its id""" # The bookmarks are displayed with a hashtag in front of the id @@ -138,7 +137,7 @@ class Discord(commands.Cog): return await ctx.reply(f"Successfully deleted bookmark `#{bookmark_id_int}`.", mention_author=False) - @bookmark.command(name="Search", aliases=["List", "Ls"]) + @bookmark.command(name="search", aliases=["list", "ls"]) async def bookmark_search(self, ctx: commands.Context, *, query: Optional[str] = None): """Search through the list of bookmarks""" async with self.client.postgres_session as session: @@ -160,13 +159,13 @@ class Discord(commands.Cog): modal = CreateBookmark(self.client, message.jump_url) await interaction.response.send_modal(modal) - @commands.command(name="Join", usage="[Thread]") + @commands.command(name="join", usage="[Thread]") async def join(self, ctx: commands.Context, thread: discord.Thread): """Make Didier join a thread""" if thread.me is not None: return await ctx.reply() - @commands.command(name="Pin", usage="[Message]") + @commands.command(name="pin", usage="[Message]") async def pin(self, ctx: commands.Context, message: Optional[discord.Message] = None): """Pin a message in the current channel""" # If no message was passed, allow replying to the message that should be pinned diff --git a/didier/cogs/fun.py b/didier/cogs/fun.py index d604b36..9caefa5 100644 --- a/didier/cogs/fun.py +++ b/didier/cogs/fun.py @@ -31,7 +31,7 @@ class Fun(commands.Cog): @commands.hybrid_command( name="dadjoke", - aliases=["Dad", "Dj"], + aliases=["dad", "dj"], description="Why does Yoda's code always crash? Because there is no try.", ) async def dad_joke(self, ctx: commands.Context): @@ -40,14 +40,14 @@ class Fun(commands.Cog): joke = await get_random_dad_joke(session) return await ctx.reply(joke.joke, mention_author=False) - @commands.group(name="Memegen", aliases=["Meme", "Memes"], invoke_without_command=True, case_insensitive=True) + @commands.group(name="memegen", aliases=["meme", "memes"], invoke_without_command=True, case_insensitive=True) async def memegen_msg(self, ctx: commands.Context, meme_name: str, *, fields: str): """Command group for meme-related commands""" async with ctx.typing(): meme = await self._do_generate_meme(meme_name, shlex.split(fields)) return await ctx.reply(meme, mention_author=False) - @memegen_msg.command(name="Preview", aliases=["P"]) + @memegen_msg.command(name="preview", aliases=["p"]) async def memegen_preview_msg(self, ctx: commands.Context, meme_name: str): """Generate a preview for a meme, to see how the fields are structured""" async with ctx.typing(): diff --git a/didier/cogs/help.py b/didier/cogs/help.py index dc2ba84..8bb46d1 100644 --- a/didier/cogs/help.py +++ b/didier/cogs/help.py @@ -9,9 +9,10 @@ from didier.utils.discord.colours import error_red class CustomHelpCommand(commands.MinimalHelpCommand): - """Customised Help command to override the default implementation + """Customised Help command that overrides the default implementation - The default is ugly as hell, so we do some fiddling with it + The default is ugly as hell, so we do some fiddling with it and put everything + in fancy embeds """ @overrides @@ -154,6 +155,14 @@ class CustomHelpCommand(commands.MinimalHelpCommand): async def setup(client: Didier): """Load the cog""" - attributes = {"aliases": ["h", "man"]} + help_str = ( + "Shows the help page for a category or command. " + "`/commands` are not included, as they already have built-in descriptions in the UI." + "\n\nThe command signatures follow the POSIX-standard format for help messages:" + "\n- `required_positional_argument`" + "\n- `[optional_positional_argument]`" + ) + + attributes = {"aliases": ["h", "man"], "usage": "[category or command]", "help": help_str} client.help_command = CustomHelpCommand(command_attrs=attributes) diff --git a/didier/cogs/meta.py b/didier/cogs/meta.py index 69a3805..133ffd8 100644 --- a/didier/cogs/meta.py +++ b/didier/cogs/meta.py @@ -8,21 +8,24 @@ from didier import Didier class Meta(commands.Cog): - """Cog for Didier-related commands""" + """Commands related to Didier himself.""" client: Didier def __init__(self, client: Didier): self.client = client - @commands.command(name="Marco") + @commands.command(name="marco") async def marco(self, ctx: commands.Context): - """Ping command to get the delay of the bot""" + """Ping command to get Didier's latency.""" return await ctx.reply(f"Polo! {round(self.client.latency * 1000)}ms", mention_author=False) - @commands.command(name="Source", aliases=["Src"]) + @commands.command(name="source", aliases=["src"]) async def source(self, ctx: commands.Context, *, command_name: Optional[str] = None): - """Command to get links to the source code of Didier""" + """Get a link to the source code of Didier. + + If a value for `command_name` is passed, the source for `command_name` is shown instead. + """ repo_home = "https://github.com/stijndcl/didier" if command_name is None: @@ -38,12 +41,12 @@ class Meta(commands.Cog): filename = src.co_filename if command is None: - return await ctx.reply(f"Geen commando gevonden voor ``{command_name}``.", mention_author=False) + return await ctx.reply(f"Found no command named `{command_name}`.", mention_author=False) lines, first_line = inspect.getsourcelines(src) if filename is None: - return await ctx.reply(f"Geen code gevonden voor ``{command_name}``.", mention_author=False) + return await ctx.reply(f"Found no source file for `{command_name}`.", mention_author=False) file_location = os.path.relpath(filename).replace("\\", "/")