218 lines
7.8 KiB
SQL
Executable File
218 lines
7.8 KiB
SQL
Executable File
-- Sistema de Mensajería Discord & Telegram
|
|
-- Base de datos: lastwar2
|
|
|
|
CREATE DATABASE IF NOT EXISTS lastwar2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
USE lastwar2;
|
|
|
|
-- 1. Usuarios del sistema
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
username VARCHAR(50) NOT NULL UNIQUE,
|
|
password VARCHAR(255) NOT NULL,
|
|
role ENUM('user', 'admin') DEFAULT 'user',
|
|
telegram_chat_id VARCHAR(50) NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_username (username)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 2. Destinatarios
|
|
CREATE TABLE IF NOT EXISTS recipients (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
platform_id BIGINT NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
type ENUM('channel', 'user') NOT NULL,
|
|
platform ENUM('discord', 'telegram') NOT NULL,
|
|
language_code VARCHAR(10) DEFAULT 'es',
|
|
chat_mode VARCHAR(20) DEFAULT 'agent',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE KEY unique_platform_recipient (platform, platform_id),
|
|
INDEX idx_platform (platform),
|
|
INDEX idx_type (type)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 3. Contenido de mensajes
|
|
CREATE TABLE IF NOT EXISTS messages (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_user (user_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 4. Programaciones de envío
|
|
CREATE TABLE IF NOT EXISTS schedules (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
message_id INT NOT NULL,
|
|
recipient_id INT NOT NULL,
|
|
send_time DATETIME NOT NULL,
|
|
status ENUM('draft', 'pending', 'processing', 'sent', 'failed', 'cancelled', 'disabled') DEFAULT 'pending',
|
|
is_recurring BOOLEAN DEFAULT FALSE,
|
|
recurring_days VARCHAR(50) NULL,
|
|
recurring_time TIME NULL,
|
|
sent_at DATETIME NULL,
|
|
error_message TEXT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_status (status),
|
|
INDEX idx_send_time (send_time),
|
|
INDEX idx_message (message_id),
|
|
INDEX idx_recipient (recipient_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 5. Plantillas de mensajes recurrentes
|
|
CREATE TABLE IF NOT EXISTS recurrent_messages (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
message_content TEXT NOT NULL,
|
|
telegram_command VARCHAR(50) NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_command (telegram_command)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 6. Mensajes enviados (historial)
|
|
CREATE TABLE IF NOT EXISTS sent_messages (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
schedule_id INT NOT NULL,
|
|
recipient_id INT NOT NULL,
|
|
platform_message_id VARCHAR(100) NULL,
|
|
message_count INT DEFAULT 1,
|
|
sent_at DATETIME NOT NULL,
|
|
user_id INT NULL,
|
|
INDEX idx_sent_at (sent_at)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 7. Idiomas soportados para traducción
|
|
CREATE TABLE IF NOT EXISTS supported_languages (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
language_code VARCHAR(10) NOT NULL,
|
|
language_name VARCHAR(50) NOT NULL,
|
|
flag_emoji VARCHAR(10) DEFAULT '',
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY unique_lang_code (language_code)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 8. Configuración de mensaje de bienvenida Telegram
|
|
CREATE TABLE IF NOT EXISTS telegram_bot_messages (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
message_text TEXT,
|
|
button_text VARCHAR(100) NULL,
|
|
group_invite_link VARCHAR(500) NULL,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
register_users BOOLEAN DEFAULT TRUE,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 9. Registro de interacciones de usuarios Telegram
|
|
CREATE TABLE IF NOT EXISTS telegram_bot_interactions (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
username VARCHAR(100) NULL,
|
|
first_name VARCHAR(100) NULL,
|
|
last_name VARCHAR(100) NULL,
|
|
interaction_type VARCHAR(50) NOT NULL,
|
|
interaction_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_user (user_id),
|
|
INDEX idx_date (interaction_date)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 10. Mensajes de bienvenida por grupo Telegram
|
|
CREATE TABLE IF NOT EXISTS telegram_welcome_messages (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
chat_id BIGINT NOT NULL,
|
|
welcome_message TEXT,
|
|
button_text VARCHAR(100) NULL,
|
|
group_invite_link VARCHAR(500) NULL,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
language_code VARCHAR(10) DEFAULT 'es',
|
|
language_name VARCHAR(50) DEFAULT 'Español',
|
|
flag_emoji VARCHAR(10) DEFAULT '🇪🇸',
|
|
UNIQUE KEY unique_chat_id (chat_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 11. Cola de traducciones
|
|
CREATE TABLE IF NOT EXISTS translation_queue (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
platform VARCHAR(20) NOT NULL,
|
|
message_id BIGINT NULL,
|
|
chat_id BIGINT NOT NULL,
|
|
user_id BIGINT NULL,
|
|
text_to_translate TEXT NOT NULL,
|
|
source_lang VARCHAR(10) NOT NULL,
|
|
target_lang VARCHAR(10) NULL,
|
|
status ENUM('pending', 'processing', 'completed', 'failed') DEFAULT 'pending',
|
|
attempts INT DEFAULT 0,
|
|
error_message TEXT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
processed_at DATETIME NULL,
|
|
INDEX idx_status (status),
|
|
INDEX idx_created (created_at)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 12. Log de actividades
|
|
CREATE TABLE IF NOT EXISTS activity_log (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
username VARCHAR(50) NOT NULL,
|
|
action VARCHAR(50) NOT NULL,
|
|
details TEXT,
|
|
timestamp DATETIME NOT NULL,
|
|
INDEX idx_user (user_id),
|
|
INDEX idx_timestamp (timestamp)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 13. Bloqueos de comandos
|
|
CREATE TABLE IF NOT EXISTS command_locks (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
chat_id BIGINT NOT NULL,
|
|
command VARCHAR(100) NOT NULL,
|
|
type ENUM('command', 'translation') DEFAULT 'command',
|
|
data JSON NULL,
|
|
message_id BIGINT NULL,
|
|
status ENUM('processing', 'completed', 'failed') DEFAULT 'processing',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
expires_at DATETIME NULL,
|
|
INDEX idx_chat_command (chat_id, command),
|
|
INDEX idx_status (status)
|
|
) ENGINE=InnoDB;
|
|
|
|
-- 14. Configuración general
|
|
CREATE TABLE IF NOT EXISTS settings (
|
|
setting_key VARCHAR(100) PRIMARY KEY,
|
|
setting_value TEXT
|
|
) ENGINE=InnoDB;
|
|
|
|
-- Insertar idiomas por defecto
|
|
INSERT INTO supported_languages (language_code, language_name, flag_emoji, is_active) VALUES
|
|
('es', 'Español', '🇪🇸', TRUE),
|
|
('en', 'English', '🇬🇧', TRUE),
|
|
('pt', 'Português', '🇧🇷', TRUE),
|
|
('fr', 'Français', '🇫🇷', TRUE),
|
|
('de', 'Deutsch', '🇩🇪', FALSE),
|
|
('it', 'Italiano', '🇮🇹', FALSE),
|
|
('ru', 'Русский', '🇷🇺', FALSE),
|
|
('zh', '中文', '🇨🇳', FALSE),
|
|
('ja', '日本語', '🇯🇵', FALSE),
|
|
('ko', '한국어', '🇰🇷', FALSE)
|
|
ON DUPLICATE KEY UPDATE language_name = VALUES(language_name);
|
|
|
|
-- Insertar configuración por defecto de Telegram
|
|
INSERT INTO telegram_bot_messages (id, message_text, button_text, is_active, register_users) VALUES
|
|
(1, '¡Hola {user_name}! 👋\n\nUsa /comandos para ver los comandos disponibles.\n\nTambién puedes usar /agente para interactuar con la IA.', 'Unirse al grupo', TRUE, TRUE)
|
|
ON DUPLICATE KEY UPDATE message_text = VALUES(message_text);
|
|
|
|
-- Insertar usuario admin (password: admin123)
|
|
INSERT INTO users (username, password, role) VALUES
|
|
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin')
|
|
ON DUPLICATE KEY UPDATE username = VALUES(username);
|
|
|
|
-- Insertar configuración inicial
|
|
INSERT INTO settings (setting_key, setting_value) VALUES
|
|
('app_name', 'Sistema de Mensajería'),
|
|
('default_language', 'es'),
|
|
('timezone', 'America/Mexico_City')
|
|
ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value);
|