mirror of https://github.com/stijndcl/didier
fetching from db & dataclass
parent
f6d06eb489
commit
3cfc87b7e1
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue