diff --git a/bootstrap_database.py b/bootstrap_database.py new file mode 100644 index 0000000..3b7f9fb --- /dev/null +++ b/bootstrap_database.py @@ -0,0 +1,6 @@ +from utils.sql_commands import initialize_database + + +if __name__ == "__main__": + initialize_database() + print("Database initialization complete.") diff --git a/bot.py b/bot.py index 2f6d4b0..a9c7813 100755 --- a/bot.py +++ b/bot.py @@ -4,6 +4,7 @@ from discord.ext import commands import os from dotenv import load_dotenv from web.app import app +from utils.sql_commands import initialize_database import threading import itertools @@ -50,9 +51,9 @@ class Client(commands.Bot): def main(): load_dotenv() + initialize_database() client = Client() token = os.getenv("TOKEN") - print(token) if token is not None: threading.Thread(target=run_web, daemon=True).start() client.run(token) diff --git a/bot_development.py b/bot_development.py index fe65a94..f6b6905 100755 --- a/bot_development.py +++ b/bot_development.py @@ -4,6 +4,7 @@ from discord.ext import commands import os from dotenv import load_dotenv from web.app import app +from utils.sql_commands import initialize_database import threading @@ -58,6 +59,7 @@ class Client(commands.Bot): def main(): load_dotenv() + initialize_database() client = Client() token = os.getenv("TOKEN") if token is not None: diff --git a/cogs/customCommands.py b/cogs/customCommands.py index 88113c3..3f7b089 100755 --- a/cogs/customCommands.py +++ b/cogs/customCommands.py @@ -63,7 +63,7 @@ class CustomCommandsCog(commands.Cog): ) self.invalidate_cache(guild_id) # Invalidate cache after change - if deleted_rows is not None and len(deleted_rows) > 0: + if deleted_rows and deleted_rows > 0: await ctx.send(f"Custom command `{command_name}` has been deleted!") else: await ctx.send(f"Custom command `{command_name}` not found.") diff --git a/database.log b/database.log index 8cfc419..04656ca 100644 --- a/database.log +++ b/database.log @@ -15688,3 +15688,1977 @@ Loop thread traceback (most recent call last): 2025-10-02 10:14:38,171 - INFO - XP: 475, Level: 4 2025-10-02 10:14:38,411 - INFO - Executed query: INSERT INTO users (ID, XP, LEVEL) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE XP = %s, LEVEL = %s with params: (601579326714019840, 486, 4, 486, 4) 2025-10-02 10:59:20,063 - INFO - Shard ID None has successfully RESUMED session 68d9048b6dab9a1f2b4cb71a61433b0d. +2026-04-01 12:51:55,771 - INFO - Loaded environment variables from .env +2026-04-01 12:51:55,840 - INFO - Database connection pool created. +2026-04-01 12:51:55,873 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:55,875 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:55,885 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:55,887 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:55,905 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:55,907 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:55,932 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:55,934 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:55,957 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:55,962 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:56,000 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:56,005 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:56,042 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:56,045 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:56,079 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:56,082 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:56,101 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:56,106 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:56,125 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:56,130 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:56,144 - WARNING - PyNaCl is not installed, voice will NOT be supported +2026-04-01 12:51:56,146 - INFO - logging in using static token +2026-04-01 12:51:56,152 - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:8080 + * Running on http://172.17.0.4:8080 +2026-04-01 12:51:56,152 - INFO - Press CTRL+C to quit +2026-04-01 12:51:56,790 - INFO - Loaded environment variables from .env +2026-04-01 12:51:56,862 - INFO - Database connection pool created. +2026-04-01 12:51:56,873 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:56,875 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:56,886 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:56,889 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:56,898 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:56,901 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:56,910 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:56,913 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:56,922 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:56,924 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:56,937 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:56,941 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:56,950 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:56,953 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:56,965 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:56,967 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:56,977 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:56,980 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:56,989 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:56,991 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:57,006 - INFO - Loaded environment variables from .env +2026-04-01 12:51:57,064 - INFO - Database connection pool created. +2026-04-01 12:51:57,074 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:57,077 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:57,086 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:57,088 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:57,098 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:57,100 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:57,110 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:57,112 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:57,124 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:57,126 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:57,135 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:57,138 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:57,147 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:57,150 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:57,159 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:57,161 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:57,171 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:57,173 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:57,182 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:57,185 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:57,189 - INFO - Loaded environment variables from .env +2026-04-01 12:51:57,247 - INFO - Database connection pool created. +2026-04-01 12:51:57,257 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:57,259 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:57,271 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:57,274 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:57,285 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:57,288 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:57,297 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:57,299 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:57,308 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:57,311 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:57,321 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:57,323 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:57,332 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:57,335 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:57,344 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:57,347 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:57,357 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:57,359 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:57,368 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:57,371 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:57,389 - INFO - Loaded environment variables from .env +2026-04-01 12:51:57,448 - INFO - Database connection pool created. +2026-04-01 12:51:57,458 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:57,460 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:57,470 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:57,473 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:57,500 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:57,506 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:57,521 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:57,526 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:57,544 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:57,547 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:57,557 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:57,559 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:57,569 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:57,571 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:57,581 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:57,584 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:57,595 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:57,597 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:57,607 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:57,609 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:57,619 - INFO - Executed query: SELECT * FROM gamble_rooms with params: None +2026-04-01 12:51:57,647 - INFO - Loaded environment variables from .env +2026-04-01 12:51:57,707 - INFO - Database connection pool created. +2026-04-01 12:51:57,716 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:57,719 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:57,728 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:57,731 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:57,740 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:57,743 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:57,752 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:57,755 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:57,765 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:57,767 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:57,776 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:57,779 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:57,789 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:57,791 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:57,801 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:57,803 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:57,813 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:57,815 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:57,825 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:57,827 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:57,833 - INFO - Loaded environment variables from .env +2026-04-01 12:51:57,892 - INFO - Database connection pool created. +2026-04-01 12:51:58,292 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:58,294 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:58,305 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:58,308 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:58,319 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:58,322 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:58,332 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:58,336 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:58,346 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:58,348 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:58,358 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:58,361 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:58,372 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:58,375 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:58,386 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:58,389 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:58,400 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:58,403 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:58,413 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:58,417 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:58,429 - INFO - Loaded environment variables from .env +2026-04-01 12:51:58,501 - INFO - Database connection pool created. +2026-04-01 12:51:58,511 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:58,514 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:58,523 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:58,526 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:58,537 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:58,539 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:58,549 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:58,551 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:58,567 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:58,571 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:58,581 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:58,583 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:58,593 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:58,596 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:58,614 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:58,618 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:58,638 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:58,643 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:58,652 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:58,655 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:58,681 - INFO - Loaded environment variables from .env +2026-04-01 12:51:58,746 - INFO - Database connection pool created. +2026-04-01 12:51:58,755 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:51:58,757 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:51:58,766 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:51:58,769 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:51:58,778 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:51:58,780 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:51:58,790 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:51:58,792 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:51:58,802 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:51:58,804 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:51:58,813 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:51:58,815 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:51:58,825 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:51:58,827 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:51:58,837 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:51:58,839 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:51:58,849 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:51:58,851 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:51:58,860 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:51:58,863 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:51:59,895 - INFO - Shard ID None has connected to Gateway (Session ID: 91c39aca0f08c10d093323da1b9223fc). +2026-04-01 12:56:08,917 - INFO - Executed query: REPLACE INTO gamble_rooms (channel_id, host_id, invited, inactivity) VALUES (%s, %s, %s, %s) with params: (1381059068805910728, 601579326714019840, '601579326714019840', 10) +2026-04-01 12:56:08,930 - INFO - Executed query: REPLACE INTO gamble_rooms (channel_id, host_id, invited, inactivity) VALUES (%s, %s, %s, %s) with params: (1381286558401040384, 1380335174901960725, '1380335174901960725', 10) +2026-04-01 12:56:08,941 - INFO - Executed query: REPLACE INTO gamble_rooms (channel_id, host_id, invited, inactivity) VALUES (%s, %s, %s, %s) with params: (1488879425222348953, 601579326714019840, '601579326714019840', 10) +2026-04-01 12:56:08,953 - INFO - Executed query: REPLACE INTO gamble_rooms (channel_id, host_id, invited, inactivity) VALUES (%s, %s, %s, %s) with params: (1488880216276467823, 601579326714019840, '601579326714019840', 10) +2026-04-01 12:56:11,124 - INFO - Loaded environment variables from .env +2026-04-01 12:56:11,469 - INFO - Database connection pool created. +2026-04-01 12:56:11,479 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:56:11,488 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:56:11,499 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:56:11,502 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:56:11,514 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:56:11,517 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:56:11,527 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:56:11,530 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:56:11,540 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:56:11,543 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:56:11,553 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:56:11,555 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:56:11,565 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:56:11,567 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:56:11,578 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:56:11,580 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:56:11,590 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:56:11,593 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:56:11,603 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:56:11,605 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:56:11,613 - WARNING - PyNaCl is not installed, voice will NOT be supported +2026-04-01 12:56:11,618 - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:8080 + * Running on http://172.17.0.4:8080 +2026-04-01 12:56:11,618 - INFO - Press CTRL+C to quit +2026-04-01 12:57:16,835 - INFO - logging in using static token +2026-04-01 12:57:17,591 - INFO - Loaded environment variables from .env +2026-04-01 12:57:17,671 - INFO - Database connection pool created. +2026-04-01 12:57:17,683 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:57:17,686 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:57:17,700 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:57:17,704 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:57:17,718 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:57:17,724 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:57:17,737 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:57:17,739 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:57:17,750 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:57:17,752 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:57:17,762 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:57:17,765 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:57:17,774 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:57:17,777 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:57:17,787 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:57:17,789 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:57:17,799 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:57:17,801 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:57:17,811 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:57:17,814 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:57:17,817 - INFO - Loaded environment variables from .env +2026-04-01 12:57:17,882 - INFO - Database connection pool created. +2026-04-01 12:57:17,892 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:57:17,895 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:57:17,907 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:57:17,909 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:57:17,920 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:57:17,923 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:57:17,934 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:57:17,937 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:57:17,948 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:57:17,950 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:57:17,962 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:57:17,965 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:57:17,975 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:57:17,978 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:57:17,989 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:57:17,992 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:57:18,002 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:57:18,004 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:57:18,014 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:57:18,017 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:57:18,021 - INFO - Loaded environment variables from .env +2026-04-01 12:57:18,088 - INFO - Database connection pool created. +2026-04-01 12:57:18,099 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:57:18,101 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:57:18,112 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:57:18,115 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:57:18,125 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:57:18,128 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:57:18,140 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:57:18,143 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:57:18,154 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:57:18,157 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:57:18,167 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:57:18,170 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:57:18,181 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:57:18,184 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:57:18,195 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:57:18,197 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:57:18,208 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:57:18,211 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:57:18,223 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:57:18,226 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:57:18,232 - INFO - Loaded environment variables from .env +2026-04-01 12:57:18,302 - INFO - Database connection pool created. +2026-04-01 12:57:18,313 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:57:18,317 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:57:18,331 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:57:18,335 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:57:18,352 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:57:18,357 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:57:18,376 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:57:18,380 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:57:18,398 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:57:18,401 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:57:18,410 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:57:18,413 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:57:18,423 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:57:18,425 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:57:18,435 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:57:18,437 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:57:18,447 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:57:18,450 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:57:18,460 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:57:18,463 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:57:18,473 - INFO - Executed query: SELECT * FROM gamble_rooms with params: None +2026-04-01 12:57:18,487 - INFO - Loaded environment variables from .env +2026-04-01 12:57:18,551 - INFO - Database connection pool created. +2026-04-01 12:57:18,561 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:57:18,563 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:57:18,574 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:57:18,577 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:57:18,588 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:57:18,591 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:57:18,602 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:57:18,605 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:57:18,619 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:57:18,623 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:57:18,642 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:57:18,646 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:57:18,665 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:57:18,670 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:57:18,686 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:57:18,692 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:57:18,704 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:57:18,707 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:57:18,724 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:57:18,728 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:57:18,731 - INFO - Loaded environment variables from .env +2026-04-01 12:57:19,134 - INFO - Executed query: REPLACE INTO gamble_rooms (channel_id, host_id, invited, inactivity) VALUES (%s, %s, %s, %s) with params: (1381059068805910728, 601579326714019840, '601579326714019840', 10) +2026-04-01 12:57:19,168 - ERROR - Unclosed connector +connections: ['[(, 1203049.726301456)]'] +connector: +2026-04-01 12:57:23,248 - INFO - Loaded environment variables from .env +2026-04-01 12:57:23,732 - INFO - Database connection pool created. +2026-04-01 12:57:23,745 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:57:23,748 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:57:23,759 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:57:23,762 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:57:23,778 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:57:23,782 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:57:23,795 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:57:23,799 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:57:23,809 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:57:23,812 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:57:23,824 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:57:23,827 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:57:23,841 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:57:23,845 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:57:23,858 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:57:23,861 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:57:23,871 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:57:23,874 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:57:23,884 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:57:23,887 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:57:23,902 - WARNING - PyNaCl is not installed, voice will NOT be supported +2026-04-01 12:57:23,941 - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on all addresses (0.0.0.0) + * Running on http://127.0.0.1:8080 + * Running on http://172.17.0.4:8080 +2026-04-01 12:57:23,942 - INFO - Press CTRL+C to quit +2026-04-01 12:57:23,944 - INFO - * Restarting with stat +2026-04-01 12:57:24,837 - INFO - Loaded environment variables from .env +2026-04-01 12:57:25,319 - INFO - Database connection pool created. +2026-04-01 12:57:25,331 - INFO - Executed query: CREATE TABLE IF NOT EXISTS feedback ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + ) with params: None +2026-04-01 12:57:25,335 - INFO - Ensured table feedback exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USER VARCHAR(100), + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + CONTENT TEXT + +2026-04-01 12:57:25,346 - INFO - Executed query: CREATE TABLE IF NOT EXISTS afk_status ( + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + ) with params: None +2026-04-01 12:57:25,348 - INFO - Ensured table afk_status exists with schema: + USERID BIGINT, + GUILDID BIGINT, + TIMESTAMP VARCHAR(32), + REASON TEXT, + PRIMARY KEY (USERID, GUILDID) + +2026-04-01 12:57:25,361 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_tickets ( + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + ) with params: None +2026-04-01 12:57:25,364 - INFO - Ensured table lottery_tickets exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TIMESTAMP DATETIME NOT NULL, + TICKET_TYPE VARCHAR(32) NOT NULL, + group_id VARCHAR(32) DEFAULT NULL + +2026-04-01 12:57:25,373 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_results ( + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + ) with params: None +2026-04-01 12:57:25,376 - INFO - Ensured table lottery_results exists with schema: + ID INT AUTO_INCREMENT PRIMARY KEY, + WINNER_ID BIGINT NOT NULL, + AMOUNT INT NOT NULL, + DRAW_TIME DATETIME NOT NULL, + CLAIMED BOOLEAN DEFAULT 0, + WIN_TYPE VARCHAR(16) DEFAULT 'user' + +2026-04-01 12:57:25,386 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_state ( + id INT PRIMARY KEY, + jackpot INT NOT NULL + ) with params: None +2026-04-01 12:57:25,388 - INFO - Ensured table lottery_state exists with schema: + id INT PRIMARY KEY, + jackpot INT NOT NULL + +2026-04-01 12:57:25,398 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_draw_time ( + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + ) with params: None +2026-04-01 12:57:25,400 - INFO - Ensured table lottery_draw_time exists with schema: + id INT PRIMARY KEY, + last_draw DATETIME NOT NULL + +2026-04-01 12:57:25,410 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_luck ( + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + ) with params: None +2026-04-01 12:57:25,413 - INFO - Ensured table lottery_luck exists with schema: + USERID BIGINT PRIMARY KEY, + LUCK INT NOT NULL DEFAULT 0 + +2026-04-01 12:57:25,423 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_groups ( + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + ) with params: None +2026-04-01 12:57:25,426 - INFO - Ensured table lottery_groups exists with schema: + group_id VARCHAR(32) PRIMARY KEY, + creator_id BIGINT NOT NULL + +2026-04-01 12:57:25,436 - INFO - Executed query: CREATE TABLE IF NOT EXISTS lottery_group_members ( + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + ) with params: None +2026-04-01 12:57:25,439 - INFO - Ensured table lottery_group_members exists with schema: + group_id VARCHAR(32), + user_id BIGINT, + PRIMARY KEY (group_id, user_id) + +2026-04-01 12:57:25,450 - INFO - Executed query: CREATE TABLE IF NOT EXISTS gamble_rooms ( + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + ) with params: None +2026-04-01 12:57:25,453 - INFO - Ensured table gamble_rooms exists with schema: + channel_id BIGINT PRIMARY KEY, + host_id BIGINT NOT NULL, + invited TEXT NOT NULL, + inactivity INT NOT NULL + +2026-04-01 12:57:25,461 - WARNING - PyNaCl is not installed, voice will NOT be supported +2026-04-01 12:57:25,473 - WARNING - * Debugger is active! +2026-04-01 12:57:25,498 - INFO - * Debugger PIN: 235-261-607 diff --git a/npc_memory.db b/npc_memory.db deleted file mode 100644 index 0188f81..0000000 Binary files a/npc_memory.db and /dev/null differ diff --git a/time.txt b/time.txt index dac28c7..af56c70 100755 --- a/time.txt +++ b/time.txt @@ -1 +1 @@ -1759391917.148779 \ No newline at end of file +1775047922.8093011 \ No newline at end of file diff --git a/utils/bank_functions.py b/utils/bank_functions.py index 2d83001..f7a10a5 100755 --- a/utils/bank_functions.py +++ b/utils/bank_functions.py @@ -40,7 +40,10 @@ async def record_transaction( transaction_type: The type of transaction performed. amount: The amount of the transaction. """ - db.insert("transactions", (user_id, transaction_type, amount)) + db.execute_query( + "INSERT INTO transactions (USERID, TYPE, AMOUNT) VALUES (%s, %s, %s)", + (user_id, transaction_type, amount), + ) async def update_money( diff --git a/utils/sql_commands.py b/utils/sql_commands.py index 0ab7056..6aa6d82 100755 --- a/utils/sql_commands.py +++ b/utils/sql_commands.py @@ -3,11 +3,11 @@ from mysql.connector import pooling from dotenv import load_dotenv import os import random +import re import time from datetime import datetime, timedelta import logging import pandas as pd -from copy import copy # Configure logging @@ -20,16 +20,33 @@ logger = logging.getLogger(__name__) class DatabaseManager: + _instances = {} + + def __new__(cls, env="development"): + instance_key = env or "default" + if instance_key in cls._instances: + return cls._instances[instance_key] + instance = super().__new__(cls) + cls._instances[instance_key] = instance + return instance + def __init__(self, env="development"): - # Load environment variables based on environment - self.load_env(env) + if getattr(self, "_initialized", False): + return + self._initialized = True + + env_file = f".env.{env}" if env else ".env" + if not os.path.exists(env_file): + env_file = ".env" + self.load_env(env_file) self.config = { "host": os.getenv("SQLHOST", "localhost"), "user": os.getenv("SQLUSER", "root"), "password": os.getenv("SQLPASS", ""), "database": os.getenv("SQLDB", "testdb"), - "pool_reset_session": bool(os.getenv("POOL_RESET_SESSION", False)), + "pool_reset_session": os.getenv("POOL_RESET_SESSION", "false").lower() + in ("true", "1", "yes"), } self.pool = pooling.MySQLConnectionPool( @@ -124,26 +141,122 @@ class DatabaseManager: inactivity INT NOT NULL """, ) + self.create_table_if_not_exists( + "economy", + """ + ID BIGINT PRIMARY KEY, + WALLET BIGINT NOT NULL DEFAULT 0, + BANK BIGINT NOT NULL DEFAULT 0, + DAILY DOUBLE DEFAULT 0 + """, + ) + self.create_table_if_not_exists( + "transactions", + """ + ID INT AUTO_INCREMENT PRIMARY KEY, + USERID BIGINT NOT NULL, + TYPE VARCHAR(50), + AMOUNT DECIMAL(18,2), + TIME DATETIME DEFAULT CURRENT_TIMESTAMP + """, + ) + self.create_table_if_not_exists( + "custom_commands", + """ + ID INT AUTO_INCREMENT PRIMARY KEY, + GUILDID VARCHAR(32) NOT NULL, + COMMANDNAME VARCHAR(100) NOT NULL, + RESPONSE TEXT NOT NULL, + MATCHTYPE VARCHAR(20) NOT NULL DEFAULT 'exact' + """, + ) + self.create_table_if_not_exists( + "guilds", + """ + GUILD BIGINT PRIMARY KEY, + WELCOME BIGINT DEFAULT NULL, + RULES BIGINT DEFAULT NULL, + GUIDE BIGINT DEFAULT NULL, + INTRODUCTIONS BIGINT DEFAULT NULL, + EVENTS BIGINT DEFAULT NULL, + MEMBERCOUNT BIGINT DEFAULT NULL, + LOGGING BIGINT DEFAULT NULL, + TICKETING BIGINT DEFAULT NULL + """, + ) + self.create_table_if_not_exists( + "rewards", + """ + ID INT AUTO_INCREMENT PRIMARY KEY, + type VARCHAR(50) NOT NULL, + amount INT NOT NULL DEFAULT 0, + description TEXT DEFAULT NULL + """, + ) + self.create_table_if_not_exists( + "logs", + """ + ID INT AUTO_INCREMENT PRIMARY KEY, + guild_id BIGINT NOT NULL, + user_id BIGINT NOT NULL, + type VARCHAR(50) NOT NULL, + message TEXT NOT NULL, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP + """, + ) + self.create_table_if_not_exists( + "gamble_limits", + """ + USERID BIGINT PRIMARY KEY, + DAILY_LIMIT BIGINT DEFAULT NULL, + EXCLUDED_UNTIL DATETIME DEFAULT NULL + """, + ) + self.create_table_if_not_exists( + "users", + """ + ID BIGINT PRIMARY KEY, + XP INT DEFAULT 0, + LEVEL INT DEFAULT 0, + birthday VARCHAR(10) DEFAULT NULL + """, + ) - def load_env(self, env): - env_file = f".env" + def load_env(self, env_file): load_dotenv(env_file) logger.info(f"Loaded environment variables from {env_file}") def get_connection(self): return self.pool.get_connection() + def _sanitize_identifier(self, identifier: str) -> str: + if not re.match(r"^[A-Za-z0-9_]+$", identifier): + raise ValueError(f"Invalid SQL identifier: {identifier}") + return identifier + + def _parse_insert_columns(self, query: str) -> list[str]: + match = re.search( + r"INSERT\s+INTO\s+\S+\s*\(([^)]+)\)\s*VALUES", + query, + re.IGNORECASE, + ) + if not match: + raise ValueError( + "Insert query must contain a column list for overwrite upsert support." + ) + return [col.strip() for col in match.group(1).split(",") if col.strip()] + def execute_query(self, query, params=None, retries=3, delay=1): - cursor = None connection = None + cursor = None for attempt in range(retries): try: connection = self.get_connection() cursor = connection.cursor(dictionary=True, buffered=True) cursor.execute(query, params or ()) - logger.info(f"Executed query: {query} with params: {params}") connection.commit() - return copy(cursor) + logger.info(f"Executed query: {query} with params: {params}") + return cursor.rowcount except mysql.connector.Error as err: logger.warning(f"Attempt {attempt + 1} failed: {err}") time.sleep(delay * (2**attempt)) @@ -163,7 +276,7 @@ class DatabaseManager: Args: query (str): The SQL query to execute. params (tuple): The parameters to pass into the query. - overwrite (bool, optional): Whether to perform an upsert operation. Defaults to False. + overwrite (bool, optional): Whether to perform an upsert operation. Defaults to True. Raises: ValueError: If no parameters are provided. @@ -171,37 +284,29 @@ class DatabaseManager: if not params: raise ValueError("Params must be provided for the insert operation.") - try: - if overwrite: - columns = [ - col.split("=")[0].strip() - for col in query.split("VALUES")[0] - .split("(")[1] - .split(")")[0] - .split(",") - ] - update_set = ", ".join(f"{col} = VALUES({col})" for col in columns) - query = f"{query} ON DUPLICATE KEY UPDATE {update_set}" + if overwrite: + columns = self._parse_insert_columns(query) + update_set = ", ".join(f"{col} = VALUES({col})" for col in columns) + query = f"{query} ON DUPLICATE KEY UPDATE {update_set}" - cursor = self.execute_query(query, params) - if cursor: - logger.info(f"Insert completed with query: {query}.") - except mysql.connector.Error as err: - logger.error(f"Insert failed with query: {query}. Error: {err}") + rowcount = self.execute_query(query, params) + if rowcount is None: + logger.error(f"Insert failed with query: {query}.") + else: + logger.info(f"Insert completed with query: {query}.") def bulk_insert(self, query, params=None): if not params: logger.warning("No data provided for bulk insert.") return - # Assuming params is a list of dictionaries if not isinstance(params, list) or not all(isinstance(d, dict) for d in params): raise ValueError("Params must be a list of dictionaries for bulk insert.") - keys = params[0].keys() + keys = list(params[0].keys()) placeholders = ", ".join(["%s"] * len(keys)) query = f"{query} ({', '.join(keys)}) VALUES ({placeholders})" - values = [tuple(data.values()) for data in params] + values = [tuple(data[key] for key in keys) for data in params] connection = None cursor = None @@ -216,7 +321,7 @@ class DatabaseManager: except mysql.connector.Error as err: logger.error(f"Bulk insert failed: {err}") if connection: - connection.rollback() # Roll back on error + connection.rollback() finally: if cursor: cursor.close() @@ -225,34 +330,60 @@ class DatabaseManager: def delete(self, table_name: str, condition: dict) -> None: """Deletes a record from the specified table based on the condition provided.""" + table_name = self._sanitize_identifier(table_name) condition_column, condition_value = next(iter(condition.items())) + condition_column = self._sanitize_identifier(condition_column) query = f"DELETE FROM {table_name} WHERE {condition_column} = %s" self.execute_query(query, (condition_value,)) def fetch_one(self, query, params=None): - cursor = self.execute_query(query, params) - return cursor.fetchone() if cursor else {} + connection = None + cursor = None + try: + connection = self.get_connection() + cursor = connection.cursor(dictionary=True, buffered=True) + cursor.execute(query, params or ()) + return cursor.fetchone() + finally: + if cursor: + cursor.close() + if connection: + connection.close() def fetch_all(self, query, params=None): - cursor = self.execute_query(query, params) - return cursor.fetchall() if cursor else [] + connection = None + cursor = None + try: + connection = self.get_connection() + cursor = connection.cursor(dictionary=True, buffered=True) + cursor.execute(query, params or ()) + return cursor.fetchall() + finally: + if cursor: + cursor.close() + if connection: + connection.close() def fetch_as_dataframe(self, query, params=None): - cursor = self.execute_query(query, params) - if cursor: - try: - # Ensure cursor has a result to fetch - if cursor.with_rows: - results = cursor.fetchall() - return pd.DataFrame(results) if results else pd.DataFrame() - else: - logger.warning("No result set to fetch from.") - return pd.DataFrame() - finally: + connection = None + cursor = None + try: + connection = self.get_connection() + cursor = connection.cursor(dictionary=True, buffered=True) + cursor.execute(query, params or ()) + if cursor.with_rows: + results = cursor.fetchall() + return pd.DataFrame(results) if results else pd.DataFrame() + logger.warning("No result set to fetch from.") + return pd.DataFrame() + finally: + if cursor: cursor.close() - return pd.DataFrame() + if connection: + connection.close() def create_table_if_not_exists(self, table_name, schema): + table_name = self._sanitize_identifier(table_name) query = f"CREATE TABLE IF NOT EXISTS {table_name} ({schema})" self.execute_query(query) logger.info(f"Ensured table {table_name} exists with schema: {schema}") @@ -275,6 +406,11 @@ class DatabaseManager: return f"{base_query} WHERE {conditions}", list(filters.values()) +def initialize_database(env="development"): + """Initialize the database schema and return a shared DatabaseManager.""" + return DatabaseManager(env) + + # SQL scripts to create tables create_feedback_table = """ CREATE TABLE IF NOT EXISTS feedback ( diff --git a/web/__pycache__/app.cpython-312.pyc b/web/__pycache__/app.cpython-312.pyc index ac5b267..4c2f066 100644 Binary files a/web/__pycache__/app.cpython-312.pyc and b/web/__pycache__/app.cpython-312.pyc differ diff --git a/web/app.py b/web/app.py index 6d6f738..cb7a29a 100755 --- a/web/app.py +++ b/web/app.py @@ -4,10 +4,10 @@ import os if __package__ is None or __package__ == "": # Running as __main__ (e.g. python web/app.py) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) - from utils.sql_commands import DatabaseManager + from utils.sql_commands import DatabaseManager, initialize_database else: # Imported as a module (e.g. from bot.py) - from utils.sql_commands import DatabaseManager + from utils.sql_commands import DatabaseManager, initialize_database import os import requests @@ -21,7 +21,7 @@ load_dotenv() app = Flask(__name__) app.secret_key = os.getenv("SECRET_KEY") -db = DatabaseManager() +db = initialize_database() # Ensure required environment variables are loaded DISCORD_CLIENT_ID = os.getenv("DISCORD_CLIENT_ID")