diff --git a/miniscord/__init__.py b/miniscord/__init__.py index e34e5d9..5e64d6a 100644 --- a/miniscord/__init__.py +++ b/miniscord/__init__.py @@ -1 +1,2 @@ from .bot import Bot +from .discord_utils import delete_message, message_id diff --git a/miniscord/bot.py b/miniscord/bot.py index 6b72386..7a22a6b 100644 --- a/miniscord/bot.py +++ b/miniscord/bot.py @@ -1,4 +1,4 @@ -from typing import List, Callable, Coroutine, Tuple, Any +from typing import Callable, Coroutine, Tuple, Any import time import logging import traceback @@ -10,6 +10,7 @@ import os from datetime import datetime from dotenv import load_dotenv +from .utils import sanitize_input, parse_arguments CommandFunction = Callable[[discord.Client, discord.Message, Tuple[str]], Coroutine[Any, Any, None]] @@ -18,42 +19,6 @@ def debug(message: discord.Message, txt: str): logging.info(f"{message.guild} > #{message.channel}: {txt}") -async def delete_message(message: discord.Message) -> bool: - try: - await message.delete() - return True - except discord.Forbidden: - pass - except discord.NotFound: - pass - return False - - -def message_id(message: discord.Message) -> str: - is_direct = message.channel.type == discord.ChannelType.private - if not is_direct: - return f'{message.guild.id}/{message.channel.id}/{message.author.id}' - else: - return message.author.id - - -def sanitize_input(src: str) -> str: - return re.sub(r'[^A-Za-z0-9 _]', "", src.lower().strip()) - - -args_regex = re.compile('"([^"]*)"|\'([^\']*)\'|([^ ]+)') - - -def parse_arguments(src: str) -> List[str]: - def get_found_match(m: list) -> str: - f = [g for g in m if len(g) > 0] - if len(f) > 0: - return f[0] - return "" - - return [get_found_match(m) for m in args_regex.findall(src)] - - class Command(object): def __init__(self, regex: str, compute: CommandFunction, help_short: str, help_long: str): self.regex = regex diff --git a/miniscord/discord_utils.py b/miniscord/discord_utils.py new file mode 100644 index 0000000..b92dc77 --- /dev/null +++ b/miniscord/discord_utils.py @@ -0,0 +1,20 @@ +import discord + + +async def delete_message(message: discord.Message) -> bool: + try: + await message.delete() + return True + except discord.Forbidden: + pass + except discord.NotFound: + pass + return False + + +def message_id(message: discord.Message) -> str: + is_direct = message.channel.type == discord.ChannelType.private + if not is_direct: + return f'{message.guild.id}/{message.channel.id}/{message.author.id}' + else: + return message.author.id diff --git a/miniscord/utils.py b/miniscord/utils.py new file mode 100644 index 0000000..e660a70 --- /dev/null +++ b/miniscord/utils.py @@ -0,0 +1,18 @@ +from typing import List +import re + +args_regex = re.compile('"([^"]*)"|\'([^\']*)\'|([^ ]+)') + + +def sanitize_input(src: str) -> str: + return re.sub(r'[^A-Za-z0-9 _]', "", src.lower().strip()) + + +def parse_arguments(src: str) -> List[str]: + def get_found_match(m: list) -> str: + f = [g for g in m if len(g) > 0] + if len(f) > 0: + return f[0] + return "" + + return [get_found_match(m) for m in args_regex.findall(src)]