fetching from db & dataclass

pull/58/head
Stijn De Clercq 2021-05-17 18:14:33 +02:00
parent f6d06eb489
commit 3cfc87b7e1
4 changed files with 95 additions and 1 deletions

View File

@ -3,7 +3,7 @@ import datetime
import discord import discord
from discord.ext import commands from discord.ext import commands
from functions import checks, easterEggResponses from functions import checks, easterEggResponses
from functions.database import stats, muttn from functions.database import stats, muttn, custom_commands
import pytz import pytz
import time import time
import traceback import traceback
@ -75,6 +75,11 @@ class Events(commands.Cog):
if eER: if eER:
await message.channel.send(eER) await message.channel.send(eER)
# Check for custom commands
custom = custom_commands.is_custom_command(message.content)
if custom:
await message.channel.send(custom.response)
# Earn XP & Message count # Earn XP & Message count
stats.sentMessage(message) stats.sentMessage(message)

View File

View File

@ -0,0 +1,15 @@
from attr import dataclass
@dataclass
class CustomCommand:
"""
Class to store custom commands being triggered
"""
id: int = None
name: str = None
response: str = None
alias_used: str = None
def __nonzero__(self):
return self.id is not None

View File

@ -0,0 +1,74 @@
from data.database_classes.custom_commands import CustomCommand
from functions.database import utils
def is_custom_command(message: str) -> CustomCommand:
"""
Check if a message triggers a custom command
These use "?" as a prefix
"""
# Message didn't call a custom command
if not message.startswith("?"):
return CustomCommand()
# Ignore capitals & spaces, strip off prefix
message = message.lower().replace(" ", "")[1:]
by_name = _find_by_name(message)
# Command was found by its name
if by_name:
return CustomCommand(*by_name)
# Check if a command exists with this alias instead
return CustomCommand(*_find_by_alias(message), alias_used=message)
def _find_by_name(message):
"""
Find a command by its name
"""
connection = utils.connect()
cursor = connection.cursor()
cursor.execute("SELECT response FROM custom_commands WHERE name = %s", message)
return cursor.fetchone()
def _find_by_alias(message):
"""
Find a command by one of its aliases
"""
connection = utils.connect()
cursor = connection.cursor()
cursor.execute("SELECT command FROM custom_command_aliases WHERE alias = %s", message)
res = cursor.fetchone()
# No command matched this alias
if not res:
return ()
cursor.execute("SELECT response FROM custom_commands WHERE id = %s", res)
return cursor.fetchone()
def is_name_free(name) -> bool:
"""
Check if a name is already in use by a command
Includes aliases
"""
connection = utils.connect()
cursor = connection.cursor()
cursor.execute("SELECT id from custom_commands WHERE name = %s", name)
if cursor.fetchone():
return False
cursor.execute("SELECT command FROM custom_command_aliases WHERE alias = %s", name)
return len(cursor.fetchone()) != 0