mirror of
https://github.com/stijndcl/didier.git
synced 2026-04-07 15:48:29 +02:00
Adding commands, calling works
This commit is contained in:
parent
3cfc87b7e1
commit
4bcd00826e
5 changed files with 96 additions and 17 deletions
|
|
@ -1,27 +1,33 @@
|
|||
from data.database_classes.custom_commands import CustomCommand
|
||||
import discord
|
||||
from functions.database import utils
|
||||
|
||||
|
||||
def is_custom_command(message: str) -> CustomCommand:
|
||||
def is_custom_command(message: discord.Message) -> CustomCommand:
|
||||
"""
|
||||
Check if a message triggers a custom command
|
||||
These use "?" as a prefix
|
||||
"""
|
||||
content = message.content
|
||||
# Message didn't call a custom command
|
||||
if not message.startswith("?"):
|
||||
if not content.startswith("?"):
|
||||
return CustomCommand()
|
||||
|
||||
# Can't be invoked by bots to prevent spam (@RPS)
|
||||
if message.author.bot:
|
||||
return CustomCommand()
|
||||
|
||||
# Ignore capitals & spaces, strip off prefix
|
||||
message = message.lower().replace(" ", "")[1:]
|
||||
content = content.lower().replace(" ", "")[1:]
|
||||
|
||||
by_name = _find_by_name(message)
|
||||
by_name = _find_by_name(content)
|
||||
|
||||
# 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)
|
||||
return CustomCommand(*_find_by_alias(content), alias_used=content)
|
||||
|
||||
|
||||
def _find_by_name(message):
|
||||
|
|
@ -31,7 +37,7 @@ def _find_by_name(message):
|
|||
connection = utils.connect()
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("SELECT response FROM custom_commands WHERE name = %s", message)
|
||||
cursor.execute("SELECT * FROM custom_commands WHERE name = %s", (message,))
|
||||
|
||||
return cursor.fetchone()
|
||||
|
||||
|
|
@ -43,7 +49,7 @@ def _find_by_alias(message):
|
|||
connection = utils.connect()
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("SELECT command FROM custom_command_aliases WHERE alias = %s", message)
|
||||
cursor.execute("SELECT command FROM custom_command_aliases WHERE alias = %s", (message,))
|
||||
|
||||
res = cursor.fetchone()
|
||||
|
||||
|
|
@ -51,7 +57,7 @@ def _find_by_alias(message):
|
|||
if not res:
|
||||
return ()
|
||||
|
||||
cursor.execute("SELECT response FROM custom_commands WHERE id = %s", res)
|
||||
cursor.execute("SELECT * FROM custom_commands WHERE id = %s", (res,))
|
||||
|
||||
return cursor.fetchone()
|
||||
|
||||
|
|
@ -64,11 +70,60 @@ def is_name_free(name) -> bool:
|
|||
connection = utils.connect()
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("SELECT id from custom_commands WHERE name = %s", name)
|
||||
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)
|
||||
cursor.execute("SELECT id FROM custom_command_aliases WHERE alias = %s", (name,))
|
||||
|
||||
return len(cursor.fetchone()) != 0
|
||||
return cursor.fetchone() is None
|
||||
|
||||
|
||||
def _clean(inp: str):
|
||||
"""
|
||||
Strip markdown and other stuff out of a command name
|
||||
"""
|
||||
return "".join(filter(lambda x: x.isalnum(), inp))
|
||||
|
||||
|
||||
def add_command(name: str, response: str):
|
||||
"""
|
||||
Add a new custom command
|
||||
"""
|
||||
name = _clean(name.lower())
|
||||
|
||||
if not is_name_free(name):
|
||||
return "Er is al een commando met deze naam."
|
||||
|
||||
connection = utils.connect()
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("INSERT INTO custom_commands(name, response) VALUES (%s, E%s)", (name, response,))
|
||||
connection.commit()
|
||||
|
||||
|
||||
def add_alias(command: str, alias: str):
|
||||
"""
|
||||
Add an alias for a command
|
||||
Assumes the command exists
|
||||
"""
|
||||
command = _clean(command.lower())
|
||||
alias = _clean(alias.lower())
|
||||
|
||||
# Base command doesn't exist
|
||||
if is_name_free(command):
|
||||
return "Er is geen commando met deze naam."
|
||||
|
||||
# Alias already exists
|
||||
if not is_name_free(alias):
|
||||
return "Er is al een commando met deze naam."
|
||||
|
||||
# Find the id of the base command
|
||||
command_id = CustomCommand(*_find_by_name(command)).id
|
||||
|
||||
connection = utils.connect()
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("INSERT INTO custom_command_aliases(command, alias) VALUES(%s, %s)", (command_id, alias,))
|
||||
connection.commit()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue