mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
from typing import NamedTuple, Union, Optional, cast, Type
|
|
|
|
from redbot.core import commands
|
|
from redbot.core.i18n import Translator
|
|
|
|
_ = Translator("PermissionsConverters", __file__)
|
|
|
|
|
|
class CogOrCommand(NamedTuple):
|
|
type: str
|
|
name: str
|
|
obj: Union[commands.Command, commands.Cog]
|
|
|
|
# noinspection PyArgumentList
|
|
@classmethod
|
|
async def convert(cls, ctx: commands.Context, arg: str) -> "CogOrCommand":
|
|
cog = ctx.bot.get_cog(arg)
|
|
if cog:
|
|
return cls(type="COG", name=cog.__class__.__name__, obj=cog)
|
|
cmd = ctx.bot.get_command(arg)
|
|
if cmd:
|
|
return cls(type="COMMAND", name=cmd.qualified_name, obj=cmd)
|
|
|
|
raise commands.BadArgument(
|
|
_(
|
|
'Cog or command "{name}" not found. Please note that this is case sensitive.'
|
|
).format(name=arg)
|
|
)
|
|
|
|
|
|
def RuleType(arg: str) -> bool:
|
|
if arg.lower() in ("allow", "whitelist", "allowed"):
|
|
return True
|
|
if arg.lower() in ("deny", "blacklist", "denied"):
|
|
return False
|
|
|
|
raise commands.BadArgument(
|
|
_('"{arg}" is not a valid rule. Valid rules are "allow" or "deny"').format(arg=arg)
|
|
)
|
|
|
|
|
|
def ClearableRuleType(arg: str) -> Optional[bool]:
|
|
if arg.lower() in ("allow", "whitelist", "allowed"):
|
|
return True
|
|
if arg.lower() in ("deny", "blacklist", "denied"):
|
|
return False
|
|
if arg.lower() in ("clear", "reset"):
|
|
return None
|
|
|
|
raise commands.BadArgument(
|
|
_(
|
|
'"{arg}" is not a valid rule. Valid rules are "allow" or "deny", or "clear" to '
|
|
"remove the rule"
|
|
).format(arg=arg)
|
|
)
|