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
This commit is contained in:
Kreusada Tanfala 2022-06-29 00:19:20 +01:00 committed by GitHub
parent febc503df1
commit ae80e62a13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 0 deletions

View File

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

View File

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

View File

@ -3536,6 +3536,11 @@ class Core(commands.commands._RuleDropper, commands.Cog, CoreLogic):
**Arguments:**
- `<prefixes...>` - 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

View File

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