diff options
| -rw-r--r-- | bot/cogs/bot.py | 2 | ||||
| -rw-r--r-- | bot/cogs/clean.py | 2 | ||||
| -rw-r--r-- | bot/cogs/defcon.py | 2 | ||||
| -rw-r--r-- | bot/cogs/error_handler.py | 33 | ||||
| -rw-r--r-- | bot/cogs/eval.py | 2 | ||||
| -rw-r--r-- | bot/cogs/extensions.py | 8 | ||||
| -rw-r--r-- | bot/cogs/moderation/management.py | 2 | ||||
| -rw-r--r-- | bot/cogs/off_topic_names.py | 2 | ||||
| -rw-r--r-- | bot/cogs/reddit.py | 2 | ||||
| -rw-r--r-- | bot/cogs/reminders.py | 2 | ||||
| -rw-r--r-- | bot/cogs/site.py | 2 | ||||
| -rw-r--r-- | bot/cogs/snekbox.py | 2 | ||||
| -rw-r--r-- | bot/cogs/utils.py | 2 | ||||
| -rw-r--r-- | bot/cogs/watchchannels/bigbrother.py | 2 | ||||
| -rw-r--r-- | bot/cogs/watchchannels/talentpool.py | 4 | ||||
| -rw-r--r-- | tests/bot/cogs/test_snekbox.py | 3 | 
16 files changed, 32 insertions, 40 deletions
| diff --git a/bot/cogs/bot.py b/bot/cogs/bot.py index a6929b431..ae829d5c3 100644 --- a/bot/cogs/bot.py +++ b/bot/cogs/bot.py @@ -41,7 +41,7 @@ class BotCog(Cog, name="Bot"):      @with_role(Roles.verified)      async def botinfo_group(self, ctx: Context) -> None:          """Bot informational commands.""" -        await ctx.invoke(self.bot.get_command("help"), "bot") +        await ctx.send_help("bot")      @botinfo_group.command(name='about', aliases=('info',), hidden=True)      @with_role(Roles.verified) diff --git a/bot/cogs/clean.py b/bot/cogs/clean.py index 5cdf0b048..e9bdbf510 100644 --- a/bot/cogs/clean.py +++ b/bot/cogs/clean.py @@ -180,7 +180,7 @@ class Clean(Cog):      @with_role(*MODERATION_ROLES)      async def clean_group(self, ctx: Context) -> None:          """Commands for cleaning messages in channels.""" -        await ctx.invoke(self.bot.get_command("help"), "clean") +        await ctx.send_help("clean")      @clean_group.command(name="user", aliases=["users"])      @with_role(*MODERATION_ROLES) diff --git a/bot/cogs/defcon.py b/bot/cogs/defcon.py index 56fca002a..71847a441 100644 --- a/bot/cogs/defcon.py +++ b/bot/cogs/defcon.py @@ -122,7 +122,7 @@ class Defcon(Cog):      @with_role(Roles.admins, Roles.owners)      async def defcon_group(self, ctx: Context) -> None:          """Check the DEFCON status or run a subcommand.""" -        await ctx.invoke(self.bot.get_command("help"), "defcon") +        await ctx.send_help("defcon")      async def _defcon_action(self, ctx: Context, days: int, action: Action) -> None:          """Providing a structured way to do an defcon action.""" diff --git a/bot/cogs/error_handler.py b/bot/cogs/error_handler.py index b2f4c59f6..2d6cd85e6 100644 --- a/bot/cogs/error_handler.py +++ b/bot/cogs/error_handler.py @@ -2,7 +2,7 @@ import contextlib  import logging  import typing as t -from discord.ext.commands import Cog, Command, Context, errors +from discord.ext.commands import Cog, Context, errors  from sentry_sdk import push_scope  from bot.api import ResponseCodeError @@ -79,19 +79,13 @@ class ErrorHandler(Cog):              f"{e.__class__.__name__}: {e}"          ) -    async def get_help_command(self, command: t.Optional[Command]) -> t.Tuple: -        """Return the help command invocation args to display help for `command`.""" -        parent = None -        if command is not None: -            parent = command.parent - -        # Retrieve the help command for the invoked command. -        if parent and command: -            return self.bot.get_command("help"), parent.name, command.name -        elif command: -            return self.bot.get_command("help"), command.name -        else: -            return self.bot.get_command("help") +    @staticmethod +    def get_help_command(ctx: Context) -> t.Coroutine: +        """Return a prepared `help` command invocation coroutine.""" +        if ctx.command: +            return ctx.send_help(ctx.command.qualified_name) + +        return ctx.send_help()      async def try_silence(self, ctx: Context) -> bool:          """ @@ -165,20 +159,19 @@ class ErrorHandler(Cog):          * ArgumentParsingError: send an error message          * Other: send an error message and the help command          """ -        # TODO: use ctx.send_help() once PR #519 is merged. -        help_command = await self.get_help_command(ctx.command) +        prepared_help_command = self.get_help_command(ctx)          if isinstance(e, errors.MissingRequiredArgument):              await ctx.send(f"Missing required argument `{e.param.name}`.") -            await ctx.invoke(*help_command) +            await prepared_help_command              self.bot.stats.incr("errors.missing_required_argument")          elif isinstance(e, errors.TooManyArguments):              await ctx.send(f"Too many arguments provided.") -            await ctx.invoke(*help_command) +            await prepared_help_command              self.bot.stats.incr("errors.too_many_arguments")          elif isinstance(e, errors.BadArgument):              await ctx.send(f"Bad argument: {e}\n") -            await ctx.invoke(*help_command) +            await prepared_help_command              self.bot.stats.incr("errors.bad_argument")          elif isinstance(e, errors.BadUnionArgument):              await ctx.send(f"Bad argument: {e}\n```{e.errors[-1]}```") @@ -188,7 +181,7 @@ class ErrorHandler(Cog):              self.bot.stats.incr("errors.argument_parsing_error")          else:              await ctx.send("Something about your input seems off. Check the arguments:") -            await ctx.invoke(*help_command) +            await prepared_help_command              self.bot.stats.incr("errors.other_user_input_error")      @staticmethod diff --git a/bot/cogs/eval.py b/bot/cogs/eval.py index 52136fc8d..2d52197e8 100644 --- a/bot/cogs/eval.py +++ b/bot/cogs/eval.py @@ -178,7 +178,7 @@ async def func():  # (None,) -> Any      async def internal_group(self, ctx: Context) -> None:          """Internal commands. Top secret!"""          if not ctx.invoked_subcommand: -            await ctx.invoke(self.bot.get_command("help"), "internal") +            await ctx.send_help("internal")      @internal_group.command(name='eval', aliases=('e',))      @with_role(Roles.admins, Roles.owners) diff --git a/bot/cogs/extensions.py b/bot/cogs/extensions.py index fb6cd9aa3..4493046e1 100644 --- a/bot/cogs/extensions.py +++ b/bot/cogs/extensions.py @@ -65,7 +65,7 @@ class Extensions(commands.Cog):      @group(name="extensions", aliases=("ext", "exts", "c", "cogs"), invoke_without_command=True)      async def extensions_group(self, ctx: Context) -> None:          """Load, unload, reload, and list loaded extensions.""" -        await ctx.invoke(self.bot.get_command("help"), "extensions") +        await ctx.send_help("extensions")      @extensions_group.command(name="load", aliases=("l",))      async def load_command(self, ctx: Context, *extensions: Extension) -> None: @@ -75,7 +75,7 @@ class Extensions(commands.Cog):          If '\*' or '\*\*' is given as the name, all unloaded extensions will be loaded.          """  # noqa: W605          if not extensions: -            await ctx.invoke(self.bot.get_command("help"), "extensions load") +            await ctx.send_help("extensions load")              return          if "*" in extensions or "**" in extensions: @@ -92,7 +92,7 @@ class Extensions(commands.Cog):          If '\*' or '\*\*' is given as the name, all loaded extensions will be unloaded.          """  # noqa: W605          if not extensions: -            await ctx.invoke(self.bot.get_command("help"), "extensions unload") +            await ctx.send_help("extensions unload")              return          blacklisted = "\n".join(UNLOAD_BLACKLIST & set(extensions)) @@ -118,7 +118,7 @@ class Extensions(commands.Cog):          If '\*\*' is given as the name, all extensions, including unloaded ones, will be reloaded.          """  # noqa: W605          if not extensions: -            await ctx.invoke(self.bot.get_command("help"), "extensions reload") +            await ctx.send_help("extensions reload")              return          if "**" in extensions: diff --git a/bot/cogs/moderation/management.py b/bot/cogs/moderation/management.py index 250a24247..5cd59cc07 100644 --- a/bot/cogs/moderation/management.py +++ b/bot/cogs/moderation/management.py @@ -43,7 +43,7 @@ class ModManagement(commands.Cog):      @commands.group(name='infraction', aliases=('infr', 'infractions', 'inf'), invoke_without_command=True)      async def infraction_group(self, ctx: Context) -> None:          """Infraction manipulation commands.""" -        await ctx.invoke(self.bot.get_command("help"), "infraction") +        await ctx.send_help("infraction")      @infraction_group.command(name='edit')      async def infraction_edit( diff --git a/bot/cogs/off_topic_names.py b/bot/cogs/off_topic_names.py index 81511f99d..829772f65 100644 --- a/bot/cogs/off_topic_names.py +++ b/bot/cogs/off_topic_names.py @@ -97,7 +97,7 @@ class OffTopicNames(Cog):      @with_role(*MODERATION_ROLES)      async def otname_group(self, ctx: Context) -> None:          """Add or list items from the off-topic channel name rotation.""" -        await ctx.invoke(self.bot.get_command("help"), "otname") +        await ctx.send_help("otname")      @otname_group.command(name='add', aliases=('a',))      @with_role(*MODERATION_ROLES) diff --git a/bot/cogs/reddit.py b/bot/cogs/reddit.py index 5a7fa100f..07a2497be 100644 --- a/bot/cogs/reddit.py +++ b/bot/cogs/reddit.py @@ -245,7 +245,7 @@ class Reddit(Cog):      @group(name="reddit", invoke_without_command=True)      async def reddit_group(self, ctx: Context) -> None:          """View the top posts from various subreddits.""" -        await ctx.invoke(self.bot.get_command("help"), "reddit") +        await ctx.send_help("reddit")      @reddit_group.command(name="top")      async def top_command(self, ctx: Context, subreddit: Subreddit = "r/Python") -> None: diff --git a/bot/cogs/reminders.py b/bot/cogs/reminders.py index 8b6457cbb..e2289c75d 100644 --- a/bot/cogs/reminders.py +++ b/bot/cogs/reminders.py @@ -281,7 +281,7 @@ class Reminders(Scheduler, Cog):      @remind_group.group(name="edit", aliases=("change", "modify"), invoke_without_command=True)      async def edit_reminder_group(self, ctx: Context) -> None:          """Commands for modifying your current reminders.""" -        await ctx.invoke(self.bot.get_command("help"), "reminders", "edit") +        await ctx.send_help("reminders edit")      @edit_reminder_group.command(name="duration", aliases=("time",))      async def edit_reminder_duration(self, ctx: Context, id_: int, expiration: Duration) -> None: diff --git a/bot/cogs/site.py b/bot/cogs/site.py index 853e29568..c17761a2b 100644 --- a/bot/cogs/site.py +++ b/bot/cogs/site.py @@ -21,7 +21,7 @@ class Site(Cog):      @group(name="site", aliases=("s",), invoke_without_command=True)      async def site_group(self, ctx: Context) -> None:          """Commands for getting info about our website.""" -        await ctx.invoke(self.bot.get_command("help"), "site") +        await ctx.send_help("site")      @site_group.command(name="home", aliases=("about",))      async def site_main(self, ctx: Context) -> None: diff --git a/bot/cogs/snekbox.py b/bot/cogs/snekbox.py index 8d4688114..5de978758 100644 --- a/bot/cogs/snekbox.py +++ b/bot/cogs/snekbox.py @@ -289,7 +289,7 @@ class Snekbox(Cog):              return          if not code:  # None or empty string -            await ctx.invoke(self.bot.get_command("help"), "eval") +            await ctx.send_help("eval")              return          log.info(f"Received code from {ctx.author} for evaluation:\n{code}") diff --git a/bot/cogs/utils.py b/bot/cogs/utils.py index 89d556f58..7350dc2ba 100644 --- a/bot/cogs/utils.py +++ b/bot/cogs/utils.py @@ -55,7 +55,7 @@ class Utils(Cog):          if pep_number.isdigit():              pep_number = int(pep_number)          else: -            await ctx.invoke(self.bot.get_command("help"), "pep") +            await ctx.send_help("pep")              return          # Handle PEP 0 directly because it's not in .rst or .txt so it can't be accessed like other PEPs. diff --git a/bot/cogs/watchchannels/bigbrother.py b/bot/cogs/watchchannels/bigbrother.py index 903c87f85..37f2d2b9d 100644 --- a/bot/cogs/watchchannels/bigbrother.py +++ b/bot/cogs/watchchannels/bigbrother.py @@ -30,7 +30,7 @@ class BigBrother(WatchChannel, Cog, name="Big Brother"):      @with_role(*MODERATION_ROLES)      async def bigbrother_group(self, ctx: Context) -> None:          """Monitors users by relaying their messages to the Big Brother watch channel.""" -        await ctx.invoke(self.bot.get_command("help"), "bigbrother") +        await ctx.send_help("bigbrother")      @bigbrother_group.command(name='watched', aliases=('all', 'list'))      @with_role(*MODERATION_ROLES) diff --git a/bot/cogs/watchchannels/talentpool.py b/bot/cogs/watchchannels/talentpool.py index ad0c51fa6..b8473963d 100644 --- a/bot/cogs/watchchannels/talentpool.py +++ b/bot/cogs/watchchannels/talentpool.py @@ -34,7 +34,7 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"):      @with_role(*MODERATION_ROLES)      async def nomination_group(self, ctx: Context) -> None:          """Highlights the activity of helper nominees by relaying their messages to the talent pool channel.""" -        await ctx.invoke(self.bot.get_command("help"), "talentpool") +        await ctx.send_help("talentpool")      @nomination_group.command(name='watched', aliases=('all', 'list'))      @with_role(*MODERATION_ROLES) @@ -173,7 +173,7 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"):      @with_role(*MODERATION_ROLES)      async def nomination_edit_group(self, ctx: Context) -> None:          """Commands to edit nominations.""" -        await ctx.invoke(self.bot.get_command("help"), "talentpool", "edit") +        await ctx.send_help("talentpool edit")      @nomination_edit_group.command(name='reason')      @with_role(*MODERATION_ROLES) diff --git a/tests/bot/cogs/test_snekbox.py b/tests/bot/cogs/test_snekbox.py index 1dec0ccaf..190d41d66 100644 --- a/tests/bot/cogs/test_snekbox.py +++ b/tests/bot/cogs/test_snekbox.py @@ -209,9 +209,8 @@ class SnekboxTests(unittest.IsolatedAsyncioTestCase):      async def test_eval_command_call_help(self):          """Test if the eval command call the help command if no code is provided."""          ctx = MockContext() -        ctx.invoke = AsyncMock()          await self.cog.eval_command.callback(self.cog, ctx=ctx, code='') -        ctx.invoke.assert_called_once_with(self.bot.get_command("help"), "eval") +        ctx.send_help.assert_called_once_with("eval")      async def test_send_eval(self):          """Test the send_eval function.""" | 
