From ae80e62a1359b4f9f4ef1fd4290bd8a383f4b74c Mon Sep 17 00:00:00 2001 From: Kreusada Tanfala <67752638+Kreusada@users.noreply.github.com> Date: Wed, 29 Jun 2022 00:19:20 +0100 Subject: [PATCH] Prevent `/` being used in bot or server prefixes (#5693) * Update `[p]set prefix`/`[p]set serverprefix` * Update cli * style * update __main__ * style * improve checks * Raise in Red.set_prefixes, update responses * uniform responses * Fixes * Keep generator variable names consistent across files --- redbot/__main__.py | 5 +++++ redbot/core/cli.py | 5 +++++ redbot/core/core_commands.py | 10 ++++++++++ redbot/core/settings_caches.py | 4 ++++ 4 files changed, 24 insertions(+) diff --git a/redbot/__main__.py b/redbot/__main__.py index 427ec46f9..745b85fa7 100644 --- a/redbot/__main__.py +++ b/redbot/__main__.py @@ -138,6 +138,11 @@ async def _edit_prefix(red, prefix, no_prompt): if not prefixes: print("You need to pass at least one prefix!") continue + if any(prefix.startswith("/") for prefix in prefixes): + print( + "Prefixes cannot start with '/', as it conflicts with Discord's slash commands." + ) + continue prefixes = sorted(prefixes, reverse=True) await red._config.prefix.set(prefixes) print("Prefixes updated.\n") diff --git a/redbot/core/cli.py b/redbot/core/cli.py index adbf311f9..dda223b3d 100644 --- a/redbot/core/cli.py +++ b/redbot/core/cli.py @@ -70,6 +70,11 @@ async def interactive_config(red, token_set, prefix_set, *, print_header=True): if len(prefix) > 10: if not confirm("Your prefix seems overly long. Are you sure that it's correct?"): prefix = "" + if prefix.startswith("/"): + print( + "Prefixes cannot start with '/', as it conflicts with Discord's slash commands." + ) + prefix = "" if prefix: await red._config.prefix.set([prefix]) diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py index d5abc975f..23c0733cf 100644 --- a/redbot/core/core_commands.py +++ b/redbot/core/core_commands.py @@ -3536,6 +3536,11 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic): **Arguments:** - `` - The prefixes the bot will respond to globally. """ + if any(prefix.startswith("/") for prefix in prefixes): + await ctx.send( + _("Prefixes cannot start with '/', as it conflicts with Discord's slash commands.") + ) + return if any(len(x) > MAX_PREFIX_LENGTH for x in prefixes): await ctx.send( _( @@ -3584,6 +3589,11 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic): await ctx.bot.set_prefixes(guild=ctx.guild, prefixes=[]) await ctx.send(_("Server prefixes have been reset.")) return + if any(prefix.startswith("/") for prefix in prefixes): + await ctx.send( + _("Prefixes cannot start with '/', as it conflicts with Discord's slash commands.") + ) + return if any(len(x) > MAX_PREFIX_LENGTH for x in prefixes): await ctx.send(_("You cannot have a prefix longer than 25 characters.")) return diff --git a/redbot/core/settings_caches.py b/redbot/core/settings_caches.py index ce819d379..7f593c0e0 100644 --- a/redbot/core/settings_caches.py +++ b/redbot/core/settings_caches.py @@ -45,6 +45,10 @@ class PrefixManager: prefixes = prefixes or [] if not isinstance(prefixes, list) and not all(isinstance(pfx, str) for pfx in prefixes): raise TypeError("Prefixes must be a list of strings") + if any(prefix.startswith("/") for prefix in prefixes): + raise ValueError( + "Prefixes cannot start with '/', as it conflicts with Discord's slash commands." + ) prefixes = sorted(prefixes, reverse=True) if gid is None: if not prefixes: