68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
from discord.ext import commands
|
|
from discord.ext.commands import Context
|
|
|
|
from tuxbot.cogs.Mod.functions.exceptions import (
|
|
RuleTooLongException,
|
|
UnknownRuleException,
|
|
NonMessageException,
|
|
NonBotMessageException,
|
|
ReasonTooLongException,
|
|
)
|
|
from tuxbot.cogs.Mod.models import Rule
|
|
|
|
|
|
def _(x):
|
|
return x
|
|
|
|
|
|
class RuleIDConverter(commands.Converter):
|
|
async def convert(self, ctx: Context, argument: str): # skipcq: PYL-W0613
|
|
if not argument.isdigit():
|
|
raise UnknownRuleException(_("Unknown rule"))
|
|
|
|
arg = int(argument)
|
|
|
|
rule_row = await Rule.get_or_none(server_id=ctx.guild.id, rule_id=arg)
|
|
|
|
if not rule_row:
|
|
raise UnknownRuleException(_("Unknown rule"))
|
|
|
|
return arg
|
|
|
|
|
|
class RuleConverter(commands.Converter):
|
|
async def convert(self, ctx: Context, argument: str): # skipcq: PYL-W0613
|
|
if len(argument) > 300:
|
|
raise RuleTooLongException(
|
|
_("Rule length must be 300 characters or lower.")
|
|
)
|
|
|
|
return argument
|
|
|
|
|
|
class BotMessageConverter(commands.Converter):
|
|
async def convert(self, ctx: Context, argument: str): # skipcq: PYL-W0613
|
|
try:
|
|
m = await commands.MessageConverter().convert(ctx, argument)
|
|
|
|
if m.author == ctx.me:
|
|
return m
|
|
|
|
raise NonBotMessageException(_("Please provide one of my message"))
|
|
except commands.BadArgument:
|
|
raise NonMessageException(
|
|
_("Please provide a message in this guild")
|
|
)
|
|
|
|
|
|
class ReasonConverter(commands.Converter):
|
|
async def convert(self, ctx: Context, argument: str): # skipcq: PYL-W0613
|
|
if argument is None:
|
|
return f"{ctx.author.display_name} (ID: {ctx.author.id})"
|
|
|
|
if len(argument) > 300:
|
|
raise ReasonTooLongException(
|
|
_("Reason length must be 300 characters or lower.")
|
|
)
|
|
|
|
return argument
|