Improve help messages

pull/132/head
stijndcl 2022-09-19 01:50:18 +02:00
parent c5317b5d27
commit 9c36f59e04
4 changed files with 36 additions and 25 deletions

View File

@ -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

View File

@ -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():

View File

@ -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)

View File

@ -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("\\", "/")