feat: Añadir sistema de mensajes de bienvenida con traducción para Discord
- Nueva tabla 'welcome_messages' en la base de datos - Panel web con página de configuración de bienvenida (/welcome) - Listar, crear, editar y eliminar mensajes por servidor - Vista previa del mensaje - Plantillas predefinidas - Bot Discord: - Nuevo intent 'members' para detectar nuevos usuarios - Evento on_member_join que envía mensaje de bienvenida - Botones de traducción en mensajes de bienvenida - Actualizada configuración de MySQL en docker-compose.yml - Añadido logging de debug para traducciones
This commit is contained in:
@@ -165,6 +165,14 @@ def init_db():
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4''')
|
||||
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS welcome_messages
|
||||
(guild_id BIGINT PRIMARY KEY,
|
||||
channel_id BIGINT NOT NULL,
|
||||
message_content TEXT NOT NULL,
|
||||
enabled BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4''')
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
else:
|
||||
@@ -212,6 +220,12 @@ def init_db():
|
||||
username TEXT NOT NULL UNIQUE,
|
||||
password_hash TEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)''')
|
||||
|
||||
c.execute('''CREATE TABLE IF NOT EXISTS welcome_messages
|
||||
(guild_id INTEGER PRIMARY KEY,
|
||||
channel_id INTEGER NOT NULL,
|
||||
message_content TEXT NOT NULL,
|
||||
enabled INTEGER DEFAULT 1)''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
@@ -593,3 +607,95 @@ def update_admin_password(admin_id: int, password_hash: str):
|
||||
c.execute("UPDATE admins SET password_hash = ? WHERE id = ?", (password_hash, admin_id))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def save_welcome_message(guild_id: int, channel_id: int, message_content: str, enabled: bool = True):
|
||||
db_type = get_db_type()
|
||||
|
||||
if db_type == "mysql":
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor()
|
||||
query = """INSERT INTO welcome_messages (guild_id, channel_id, message_content, enabled)
|
||||
VALUES (%s, %s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE channel_id = %s, message_content = %s, enabled = %s"""
|
||||
cursor.execute(query, (guild_id, channel_id, message_content, enabled, channel_id, message_content, enabled))
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
else:
|
||||
conn = get_connection()
|
||||
c = conn.cursor()
|
||||
c.execute("""INSERT OR REPLACE INTO welcome_messages (guild_id, channel_id, message_content, enabled)
|
||||
VALUES (?, ?, ?, ?)""", (guild_id, channel_id, message_content, 1 if enabled else 0))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def get_welcome_message(guild_id: int):
|
||||
db_type = get_db_type()
|
||||
|
||||
if db_type == "mysql":
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
cursor.execute("SELECT channel_id, message_content, enabled FROM welcome_messages WHERE guild_id = %s", (guild_id,))
|
||||
row = cursor.fetchone()
|
||||
cursor.close()
|
||||
if row:
|
||||
return {
|
||||
'channel_id': int(row['channel_id']) if row['channel_id'] else 0,
|
||||
'message_content': row['message_content'] or '',
|
||||
'enabled': bool(row['enabled'])
|
||||
}
|
||||
return None
|
||||
else:
|
||||
conn = get_connection()
|
||||
c = conn.cursor()
|
||||
c.execute("SELECT channel_id, message_content, enabled FROM welcome_messages WHERE guild_id = ?", (guild_id,))
|
||||
row = c.fetchone()
|
||||
conn.close()
|
||||
if row:
|
||||
return {
|
||||
"channel_id": int(row[0]) if row[0] else 0,
|
||||
"message_content": row[1] or '',
|
||||
"enabled": bool(row[2])
|
||||
}
|
||||
return None
|
||||
|
||||
def get_all_welcome_configs():
|
||||
db_type = get_db_type()
|
||||
|
||||
if db_type == "mysql":
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
cursor.execute("SELECT guild_id, channel_id, message_content, enabled FROM welcome_messages")
|
||||
rows = cursor.fetchall()
|
||||
cursor.close()
|
||||
result = []
|
||||
for row in rows:
|
||||
result.append({
|
||||
'guild_id': int(row['guild_id']) if row['guild_id'] else 0,
|
||||
'channel_id': int(row['channel_id']) if row['channel_id'] else 0,
|
||||
'message_content': row['message_content'] or '',
|
||||
'enabled': bool(row['enabled'])
|
||||
})
|
||||
return result
|
||||
else:
|
||||
conn = get_connection()
|
||||
c = conn.cursor()
|
||||
c.execute("SELECT guild_id, channel_id, message_content, enabled FROM welcome_messages")
|
||||
rows = [{"guild_id": r[0], "channel_id": r[1], "message_content": r[2], "enabled": bool(r[3])} for r in c.fetchall()]
|
||||
conn.close()
|
||||
return rows
|
||||
|
||||
def delete_welcome_message(guild_id: int):
|
||||
db_type = get_db_type()
|
||||
|
||||
if db_type == "mysql":
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("DELETE FROM welcome_messages WHERE guild_id = %s", (guild_id,))
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
else:
|
||||
conn = get_connection()
|
||||
c = conn.cursor()
|
||||
c.execute("DELETE FROM welcome_messages WHERE guild_id = ?", (guild_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
Reference in New Issue
Block a user