Core - Add invoke error message customisation (#5894)

Co-authored-by: Jakub Kuczys <me@jacken.men>
This commit is contained in:
Predä 2022-12-30 04:43:37 +01:00 committed by GitHub
parent 88a348210c
commit 60a9d47003
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 76 additions and 13 deletions

View File

@ -3080,6 +3080,35 @@ This is only applied to the current server and not globally.
**Arguments:** **Arguments:**
- ``[time]`` - The seconds to wait before deleting the command message. Use -1 to disable. - ``[time]`` - The seconds to wait before deleting the command message. Use -1 to disable.
.. _core-command-set-errormsg:
""""""""""""
set errormsg
""""""""""""
.. note:: |owner-lock|
**Syntax**
.. code-block:: none
[p]set errormsg [msg]
**Description**
Set the message that will be sent on uncaught bot errors.
To include the command name in the message, use the ``{command}`` placeholder.
If you omit the ``msg`` argument, the message will be reset to the default one.
**Examples:**
- ``[p]set errormsg`` - Resets the error message back to the default: "Error in command '{command}'.". If the command invoker is one of the bot owners, the message will also include "Check your console or logs for details.".
- ``[p]set errormsg Oops, the command {command} has failed! Please try again later.`` - Sets the error message to a custom one.
**Arguments:**
- ``[msg]`` - The custom error message. Must be less than 1000 characters. Omit to reset to the default one.
.. _core-command-set-fuzzy: .. _core-command-set-fuzzy:
""""""""" """""""""

View File

@ -118,13 +118,12 @@ class TriviaSession:
self.stop() self.stop()
except Exception as exc: except Exception as exc:
LOG.error("A trivia session has encountered an error.\n", exc_info=exc) LOG.error("A trivia session has encountered an error.\n", exc_info=exc)
asyncio.create_task( msg = _("An unexpected error occurred in the trivia session.")
self.ctx.send( if self.ctx.author.id in self.ctx.bot.owner_ids:
_( msg = _(
"An unexpected error occurred in the trivia session.\nCheck your console or logs for details." "An unexpected error occurred in the trivia session.\nCheck your console or logs for details."
) )
) asyncio.create_task(self.ctx.send(msg))
)
self.stop() self.stop()
async def run(self): async def run(self):

View File

@ -134,6 +134,7 @@ class Red(
invite_commands_scope=False, invite_commands_scope=False,
disabled_commands=[], disabled_commands=[],
disabled_command_msg="That command is disabled.", disabled_command_msg="That command is disabled.",
invoke_error_msg=None,
extra_owner_destinations=[], extra_owner_destinations=[],
owner_opt_out_list=[], owner_opt_out_list=[],
last_system_info__python_version=[3, 7], last_system_info__python_version=[3, 7],

View File

@ -3646,7 +3646,7 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
@_set.command(name="usebuttons") @_set.command(name="usebuttons")
@checks.is_owner() @checks.is_owner()
async def use_buttons(self, ctx: commands.Context, use_buttons: bool = None): async def _set_usebuttons(self, ctx: commands.Context, use_buttons: bool = None):
""" """
Set a global bot variable for using buttons in menus. Set a global bot variable for using buttons in menus.
@ -3670,6 +3670,35 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
else: else:
await ctx.send(_("I will not use buttons on basic menus.")) await ctx.send(_("I will not use buttons on basic menus."))
@_set.command(name="errormsg")
@commands.is_owner()
async def _set_errormsg(self, ctx: commands.Context, *, msg: str = None):
"""
Set the message that will be sent on uncaught bot errors.
To include the command name in the message, use the `{command}` placeholder.
If you omit the `msg` argument, the message will be reset to the default one.
**Examples:**
- `[p]set errormsg` - Resets the error message back to the default: "Error in command '{command}'.". If the command invoker is one of the bot owners, the message will also include "Check your console or logs for details.".
- `[p]set errormsg Oops, the command {command} has failed! Please try again later.` - Sets the error message to a custom one.
**Arguments:**
- `[msg]` - The custom error message. Must be less than 1000 characters. Omit to reset to the default one.
"""
if msg is not None and len(msg) >= 1000:
return await ctx.send(_("The message must be less than 1000 characters."))
if msg is not None:
await self.bot._config.invoke_error_msg.set(msg)
content = _("Succesfully updated the error message.")
else:
await self.bot._config.invoke_error_msg.clear()
content = _("Successfully reset the error message back to the default one.")
await ctx.send(content)
@commands.group() @commands.group()
@checks.is_owner() @checks.is_owner()
async def helpset(self, ctx: commands.Context): async def helpset(self, ctx: commands.Context):

View File

@ -266,16 +266,21 @@ def init_events(bot, cli_flags):
"Exception in command '{}'".format(ctx.command.qualified_name), "Exception in command '{}'".format(ctx.command.qualified_name),
exc_info=error.original, exc_info=error.original,
) )
message = _(
"Error in command '{command}'. Check your console or logs for details."
).format(command=ctx.command.qualified_name)
exception_log = "Exception in command '{}'\n" "".format(ctx.command.qualified_name) exception_log = "Exception in command '{}'\n" "".format(ctx.command.qualified_name)
exception_log += "".join( exception_log += "".join(
traceback.format_exception(type(error), error, error.__traceback__) traceback.format_exception(type(error), error, error.__traceback__)
) )
bot._last_exception = exception_log bot._last_exception = exception_log
await ctx.send(inline(message))
message = await bot._config.invoke_error_msg()
if not message:
if ctx.author.id in bot.owner_ids:
message = inline(
_("Error in command '{command}'. Check your console or logs for details.")
)
else:
message = inline(_("Error in command '{command}'."))
await ctx.send(message.replace("{command}", ctx.command.qualified_name))
elif isinstance(error, commands.CommandNotFound): elif isinstance(error, commands.CommandNotFound):
help_settings = await HelpSettings.from_context(ctx) help_settings = await HelpSettings.from_context(ctx)
fuzzy_commands = await fuzzy_command_search( fuzzy_commands = await fuzzy_command_search(