tuxbot-bot/tuxbot/cogs/Mod/functions/converters.py

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