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