From 5675dfd20b24f1e0eef06b11d9ec41a894d3a5bf Mon Sep 17 00:00:00 2001 From: salmonik Date: Tue, 28 Apr 2026 20:05:36 +0200 Subject: multitude of changes. but primarly, use db for all data. Signed-off-by: salmonik --- cogs/trigger.py | 84 +++------------------------------------------------------ 1 file changed, 4 insertions(+), 80 deletions(-) (limited to 'cogs/trigger.py') diff --git a/cogs/trigger.py b/cogs/trigger.py index 02e5573..ce80d43 100644 --- a/cogs/trigger.py +++ b/cogs/trigger.py @@ -7,13 +7,13 @@ import os import discord from discord.ext import commands import random -import sqlite3 import logging -logger = logging.getLogger(__name__) +from cogs.utils.database import get_connection, init_database +logger = logging.getLogger(__name__) -DB_PATH = 'data/triggers.db' +init_database() _SELECT_KEYWORD_SQL = "SELECT keyword FROM trigger_keywords WHERE trigger_id=?" _SELECT_RESPONSE_SQL = "SELECT response_text FROM trigger_responses WHERE trigger_id=?" @@ -22,88 +22,12 @@ _TRIGGER_NOT_FOUND_MSG = "Trigger not found." _TRIGGER_NAME_OPTION = "the name of the trigger" -def get_connection(): - return sqlite3.connect(DB_PATH) - - class Trigger(commands.Cog): def __init__(self, bot): self.bot = bot - self.db_check() trigger_group = discord.SlashCommandGroup("trigger", "trigger commands") - @staticmethod - def db_check(): - if not os.path.exists('data'): - os.makedirs('data') - - db_exists = os.path.exists(DB_PATH) - if not db_exists: - logger.warning("Triggers database not found. Creating new database.") - - try: - conn = sqlite3.connect(DB_PATH) - c = conn.cursor() - - # Enable foreign key constraints - c.execute('PRAGMA foreign_keys = ON') - - # Create triggers table - c.execute(''' - CREATE TABLE IF NOT EXISTS triggers ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL UNIQUE, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP - )''') - - # Create trigger_keywords table with foreign key constraint - c.execute(''' - CREATE TABLE IF NOT EXISTS trigger_keywords ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - trigger_id INTEGER NOT NULL, - keyword TEXT NOT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (trigger_id) REFERENCES triggers(id) ON DELETE CASCADE, - UNIQUE(trigger_id, keyword) - )''') - - # Create trigger_responses table with foreign key constraint - c.execute(''' - CREATE TABLE IF NOT EXISTS trigger_responses ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - trigger_id INTEGER NOT NULL, - response_text TEXT NOT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (trigger_id) REFERENCES triggers(id) ON DELETE CASCADE - )''') - - # Create indexes for better query performance - c.execute('CREATE INDEX IF NOT EXISTS idx_trigger_keywords_trigger_id ON trigger_keywords(trigger_id)') - c.execute('CREATE INDEX IF NOT EXISTS idx_trigger_keywords_keyword ON trigger_keywords(keyword)') - c.execute('CREATE INDEX IF NOT EXISTS idx_trigger_responses_trigger_id ON trigger_responses(trigger_id)') - - # Run integrity check - integrity_check = c.execute('PRAGMA integrity_check').fetchone() - if integrity_check and integrity_check[0] == 'ok': - logger.info("Triggers database integrity check passed") - else: - logger.warning(f"Triggers database integrity check: {integrity_check}") - - conn.commit() - - except sqlite3.Error as e: - logger.error(f"Triggers database error: {e}") - raise - - finally: - if 'conn' in locals(): - conn.close() - - if not db_exists: - logger.info("Triggers database initialized successfully") - @commands.Cog.listener() async def on_message(self, message): if message.author == self.bot.user: @@ -130,7 +54,7 @@ class Trigger(commands.Cog): @staticmethod def get_type(name): - with sqlite3.connect(DB_PATH) as conn: + with get_connection() as conn: c = conn.cursor() c.execute("SELECT name FROM triggers") return [row[0] for row in c.fetchall()] -- cgit v1.2.3