aboutsummaryrefslogtreecommitdiffstats
path: root/bot/converters.py
diff options
context:
space:
mode:
Diffstat (limited to 'bot/converters.py')
-rw-r--r--bot/converters.py66
1 files changed, 61 insertions, 5 deletions
diff --git a/bot/converters.py b/bot/converters.py
index 3def4b07a..069e841f9 100644
--- a/bot/converters.py
+++ b/bot/converters.py
@@ -1,16 +1,20 @@
+import logging
import random
import socket
from ssl import CertificateError
import discord
from aiohttp import AsyncResolver, ClientConnectorError, ClientSession, TCPConnector
-from discord.ext.commands import BadArgument, Converter, UserConverter
+from discord.ext.commands import BadArgument, Context, Converter
from fuzzywuzzy import fuzz
from bot.constants import DEBUG_MODE, Keys, URLs
from bot.utils import disambiguate
+log = logging.getLogger(__name__)
+
+
class Snake(Converter):
snakes = None
special_cases = None
@@ -167,11 +171,10 @@ class InfractionSearchQuery(Converter):
@staticmethod
async def convert(ctx, arg):
try:
- user_converter = UserConverter()
- user = await user_converter.convert(ctx, arg)
- except Exception:
+ maybe_snowflake = arg.strip("<@!>")
+ return await ctx.bot.get_user_info(maybe_snowflake)
+ except (discord.NotFound, discord.HTTPException):
return arg
- return user or arg
class Subreddit(Converter):
@@ -198,3 +201,56 @@ class Subreddit(Converter):
)
return sub
+
+
+class TagNameConverter(Converter):
+ @staticmethod
+ async def convert(ctx: Context, tag_name: str):
+ def is_number(value):
+ try:
+ float(value)
+ except ValueError:
+ return False
+ return True
+
+ tag_name = tag_name.lower().strip()
+
+ # The tag name has at least one invalid character.
+ if ascii(tag_name)[1:-1] != tag_name:
+ log.warning(f"{ctx.author} tried to put an invalid character in a tag name. "
+ "Rejecting the request.")
+ raise BadArgument("Don't be ridiculous, you can't use that character!")
+
+ # The tag name is either empty, or consists of nothing but whitespace.
+ elif not tag_name:
+ log.warning(f"{ctx.author} tried to create a tag with a name consisting only of whitespace. "
+ "Rejecting the request.")
+ raise BadArgument("Tag names should not be empty, or filled with whitespace.")
+
+ # The tag name is a number of some kind, we don't allow that.
+ elif is_number(tag_name):
+ log.warning(f"{ctx.author} tried to create a tag with a digit as its name. "
+ "Rejecting the request.")
+ raise BadArgument("Tag names can't be numbers.")
+
+ # The tag name is longer than 127 characters.
+ elif len(tag_name) > 127:
+ log.warning(f"{ctx.author} tried to request a tag name with over 127 characters. "
+ "Rejecting the request.")
+ raise BadArgument("Are you insane? That's way too long!")
+
+ return tag_name
+
+
+class TagContentConverter(Converter):
+ @staticmethod
+ async def convert(ctx: Context, tag_content: str):
+ tag_content = tag_content.strip()
+
+ # The tag contents should not be empty, or filled with whitespace.
+ if not tag_content:
+ log.warning(f"{ctx.author} tried to create a tag containing only whitespace. "
+ "Rejecting the request.")
+ raise BadArgument("Tag contents should not be empty, or filled with whitespace.")
+
+ return tag_content