mirror of
https://github.com/arthur-pbty/LazyBot.git
synced 2026-06-03 23:36:37 +02:00
fac4b0c9e5
- Added support for different message types (text, embed, both) in goodbye and welcome forms. - Implemented embed options including title, description, color, thumbnail, and footer for both forms. - Introduced image options with gradient selection, title, subtitle, and member count display for goodbye and welcome messages. - Updated API routes to handle new configuration parameters for saving and retrieving goodbye and welcome settings. - Created a new function to generate welcome images with customizable gradients and text.
523 lines
19 KiB
JavaScript
523 lines
19 KiB
JavaScript
const sqlite3 = require("sqlite3").verbose();
|
|
const path = require("path");
|
|
|
|
const db = new sqlite3.Database(
|
|
path.join(__dirname, process.env.DB_PATH || "database.sqlite"),
|
|
err => {
|
|
if (err) console.error("Erreur DB:", err);
|
|
else console.log("DB SQLite connectée");
|
|
}
|
|
);
|
|
|
|
db.getAsync = (sql, params = []) => {
|
|
return new Promise((resolve, reject) => {
|
|
db.get(sql, params, (err, row) => {
|
|
if (err) reject(err);
|
|
else resolve(row);
|
|
});
|
|
});
|
|
};
|
|
|
|
db.allAsync = (sql, params = []) => {
|
|
return new Promise((resolve, reject) => {
|
|
db.all(sql, params, (err, rows) => {
|
|
if (err) reject(err);
|
|
else resolve(rows);
|
|
});
|
|
});
|
|
};
|
|
|
|
// Création de la table si elle n'existe pas
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS welcome_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
channel_id TEXT,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
message TEXT,
|
|
message_type TEXT NOT NULL DEFAULT 'embed',
|
|
embed_title TEXT,
|
|
embed_description TEXT,
|
|
embed_color TEXT DEFAULT '#57F287',
|
|
embed_thumbnail INTEGER NOT NULL DEFAULT 1,
|
|
embed_footer TEXT,
|
|
image_enabled INTEGER NOT NULL DEFAULT 0,
|
|
image_gradient TEXT DEFAULT 'purple',
|
|
image_title TEXT,
|
|
image_subtitle TEXT,
|
|
image_show_member_count INTEGER NOT NULL DEFAULT 1
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS goodbye_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
channel_id TEXT,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
message TEXT,
|
|
message_type TEXT NOT NULL DEFAULT 'embed',
|
|
embed_title TEXT,
|
|
embed_description TEXT,
|
|
embed_color TEXT DEFAULT '#ED4245',
|
|
embed_thumbnail INTEGER NOT NULL DEFAULT 1,
|
|
embed_footer TEXT,
|
|
image_enabled INTEGER NOT NULL DEFAULT 0,
|
|
image_gradient TEXT DEFAULT 'red',
|
|
image_title TEXT,
|
|
image_subtitle TEXT,
|
|
image_show_member_count INTEGER NOT NULL DEFAULT 1
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS autorole_newuser_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
role_id TEXT,
|
|
enabled INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS autorole_vocal_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
role_id TEXT,
|
|
exclude_channel_ids TEXT,
|
|
enabled INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS levels_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
enabled INTEGER NOT NULL,
|
|
level_announcements_enabled INTEGER NOT NULL,
|
|
level_announcements_channel_id TEXT,
|
|
level_announcements_message TEXT NOT NULL,
|
|
xp_courbe_type TEXT NOT NULL,
|
|
multiplier_courbe_for_level INTEGER NOT NULL,
|
|
level_annoncement_every_level INTEGER NOT NULL,
|
|
level_max INTEGER NOT NULL,
|
|
role_with_without_type TEXT NOT NULL,
|
|
role_with_without_xp TEXT NOT NULL,
|
|
salon_with_without_type TEXT NOT NULL,
|
|
salon_with_without_xp TEXT NOT NULL,
|
|
gain_xp_on_message INTEGER NOT NULL,
|
|
gain_xp_message_lower_bound INTEGER NOT NULL,
|
|
gain_xp_message_upper_bound INTEGER NOT NULL,
|
|
cooldown_xp_message_seconds INTEGER NOT NULL,
|
|
gain_xp_on_voice INTEGER NOT NULL,
|
|
gain_voice_xp_lower_bound INTEGER NOT NULL,
|
|
gain_voice_xp_upper_bound INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_levels (
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
xp INTEGER NOT NULL,
|
|
level INTEGER NOT NULL,
|
|
last_xp_message_timestamp INTEGER,
|
|
PRIMARY KEY (guild_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS prefix (
|
|
guildId TEXT NOT NULL,
|
|
prefix TEXT NOT NULL DEFAULT '!',
|
|
PRIMARY KEY (guildId)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS economy_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
currency_name TEXT NOT NULL DEFAULT 'coins',
|
|
currency_symbol TEXT NOT NULL DEFAULT '💰',
|
|
daily_enabled INTEGER NOT NULL DEFAULT 1,
|
|
daily_amount INTEGER NOT NULL DEFAULT 100,
|
|
daily_cooldown_hours INTEGER NOT NULL DEFAULT 24,
|
|
work_enabled INTEGER NOT NULL DEFAULT 1,
|
|
work_min_amount INTEGER NOT NULL DEFAULT 50,
|
|
work_max_amount INTEGER NOT NULL DEFAULT 150,
|
|
work_cooldown_minutes INTEGER NOT NULL DEFAULT 60,
|
|
crime_enabled INTEGER NOT NULL DEFAULT 1,
|
|
crime_min_amount INTEGER NOT NULL DEFAULT 100,
|
|
crime_max_amount INTEGER NOT NULL DEFAULT 500,
|
|
crime_success_rate INTEGER NOT NULL DEFAULT 50,
|
|
crime_fine_percent INTEGER NOT NULL DEFAULT 30,
|
|
crime_cooldown_minutes INTEGER NOT NULL DEFAULT 120,
|
|
steal_enabled INTEGER NOT NULL DEFAULT 1,
|
|
steal_success_rate INTEGER NOT NULL DEFAULT 40,
|
|
steal_max_percent INTEGER NOT NULL DEFAULT 50,
|
|
steal_fine_percent INTEGER NOT NULL DEFAULT 25,
|
|
steal_cooldown_minutes INTEGER NOT NULL DEFAULT 180,
|
|
message_money_enabled INTEGER NOT NULL DEFAULT 0,
|
|
message_money_min INTEGER NOT NULL DEFAULT 1,
|
|
message_money_max INTEGER NOT NULL DEFAULT 5,
|
|
message_money_cooldown_seconds INTEGER NOT NULL DEFAULT 60,
|
|
voice_money_enabled INTEGER NOT NULL DEFAULT 0,
|
|
voice_money_min INTEGER NOT NULL DEFAULT 5,
|
|
voice_money_max INTEGER NOT NULL DEFAULT 15,
|
|
voice_money_interval_minutes INTEGER NOT NULL DEFAULT 5,
|
|
starting_balance INTEGER NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_economy (
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
balance INTEGER NOT NULL DEFAULT 0,
|
|
bank INTEGER NOT NULL DEFAULT 0,
|
|
last_daily_timestamp INTEGER,
|
|
last_work_timestamp INTEGER,
|
|
last_crime_timestamp INTEGER,
|
|
last_steal_timestamp INTEGER,
|
|
last_message_money_timestamp INTEGER,
|
|
PRIMARY KEY (guild_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS shop_items (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
price INTEGER NOT NULL,
|
|
role_id TEXT,
|
|
stock INTEGER DEFAULT -1,
|
|
created_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_inventory (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
item_id INTEGER NOT NULL,
|
|
quantity INTEGER NOT NULL DEFAULT 1,
|
|
purchased_at INTEGER NOT NULL,
|
|
FOREIGN KEY (item_id) REFERENCES shop_items(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS privateroom_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
creator_channel_id TEXT,
|
|
category_id TEXT,
|
|
channel_name_format TEXT NOT NULL DEFAULT '🔊 Salon de {user}'
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS temp_voice_channels (
|
|
channel_id TEXT PRIMARY KEY,
|
|
guild_id TEXT NOT NULL,
|
|
owner_id TEXT NOT NULL,
|
|
created_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS counting_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
channel_id TEXT,
|
|
current_count INTEGER NOT NULL DEFAULT 0,
|
|
last_user_id TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS stats_channels (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
channel_id TEXT NOT NULL,
|
|
stat_type TEXT NOT NULL,
|
|
role_id TEXT,
|
|
format TEXT NOT NULL DEFAULT '{stat}',
|
|
UNIQUE(guild_id, channel_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_activity_stats (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
stat_type TEXT NOT NULL,
|
|
value INTEGER NOT NULL DEFAULT 0,
|
|
date TEXT NOT NULL,
|
|
UNIQUE(guild_id, user_id, stat_type, date)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS voice_sessions (
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
join_timestamp INTEGER NOT NULL,
|
|
PRIMARY KEY(guild_id, user_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_activity_stats_date ON user_activity_stats(guild_id, user_id, date);
|
|
|
|
CREATE TABLE IF NOT EXISTS logs_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
category_id TEXT,
|
|
moderation_enabled INTEGER NOT NULL DEFAULT 0,
|
|
moderation_channel_id TEXT,
|
|
voice_enabled INTEGER NOT NULL DEFAULT 0,
|
|
voice_channel_id TEXT,
|
|
messages_enabled INTEGER NOT NULL DEFAULT 0,
|
|
messages_channel_id TEXT,
|
|
members_enabled INTEGER NOT NULL DEFAULT 0,
|
|
members_channel_id TEXT,
|
|
channels_enabled INTEGER NOT NULL DEFAULT 0,
|
|
channels_channel_id TEXT,
|
|
roles_enabled INTEGER NOT NULL DEFAULT 0,
|
|
roles_channel_id TEXT,
|
|
invites_enabled INTEGER NOT NULL DEFAULT 0,
|
|
invites_channel_id TEXT,
|
|
server_enabled INTEGER NOT NULL DEFAULT 0,
|
|
server_channel_id TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS username_history (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id TEXT NOT NULL,
|
|
username TEXT NOT NULL,
|
|
display_name TEXT,
|
|
changed_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_username_history_user ON username_history(user_id, changed_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS nickname_history (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
nickname TEXT,
|
|
changed_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_nickname_history_user ON nickname_history(guild_id, user_id, changed_at DESC);
|
|
|
|
CREATE TABLE IF NOT EXISTS antiraid_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
log_channel_id TEXT,
|
|
|
|
-- Anti-link
|
|
antilink_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antilink_action TEXT NOT NULL DEFAULT 'delete',
|
|
antilink_whitelist_domains TEXT DEFAULT '[]',
|
|
antilink_exclude_channels TEXT DEFAULT '[]',
|
|
antilink_exclude_roles TEXT DEFAULT '[]',
|
|
antilink_warn_message TEXT DEFAULT '⚠️ Les liens ne sont pas autorisés ici.',
|
|
|
|
-- Anti-invite (liens Discord)
|
|
antiinvite_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antiinvite_action TEXT NOT NULL DEFAULT 'delete',
|
|
antiinvite_allow_own_server INTEGER NOT NULL DEFAULT 1,
|
|
antiinvite_exclude_channels TEXT DEFAULT '[]',
|
|
antiinvite_exclude_roles TEXT DEFAULT '[]',
|
|
|
|
-- Anti-spam
|
|
antispam_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antispam_action TEXT NOT NULL DEFAULT 'mute',
|
|
antispam_max_messages INTEGER NOT NULL DEFAULT 5,
|
|
antispam_interval_seconds INTEGER NOT NULL DEFAULT 5,
|
|
antispam_mute_duration_minutes INTEGER NOT NULL DEFAULT 10,
|
|
antispam_exclude_channels TEXT DEFAULT '[]',
|
|
antispam_exclude_roles TEXT DEFAULT '[]',
|
|
|
|
-- Anti-duplicate (messages identiques)
|
|
antidupe_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antidupe_action TEXT NOT NULL DEFAULT 'delete',
|
|
antidupe_max_duplicates INTEGER NOT NULL DEFAULT 3,
|
|
antidupe_interval_seconds INTEGER NOT NULL DEFAULT 60,
|
|
antidupe_exclude_channels TEXT DEFAULT '[]',
|
|
antidupe_exclude_roles TEXT DEFAULT '[]',
|
|
|
|
-- Anti-mass mention
|
|
antimention_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antimention_action TEXT NOT NULL DEFAULT 'delete',
|
|
antimention_max_mentions INTEGER NOT NULL DEFAULT 5,
|
|
antimention_exclude_channels TEXT DEFAULT '[]',
|
|
antimention_exclude_roles TEXT DEFAULT '[]',
|
|
|
|
-- Anti-mass emoji
|
|
antiemoji_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antiemoji_action TEXT NOT NULL DEFAULT 'delete',
|
|
antiemoji_max_emojis INTEGER NOT NULL DEFAULT 10,
|
|
antiemoji_exclude_channels TEXT DEFAULT '[]',
|
|
antiemoji_exclude_roles TEXT DEFAULT '[]',
|
|
|
|
-- Anti-caps (majuscules)
|
|
anticaps_enabled INTEGER NOT NULL DEFAULT 0,
|
|
anticaps_action TEXT NOT NULL DEFAULT 'delete',
|
|
anticaps_max_percent INTEGER NOT NULL DEFAULT 70,
|
|
anticaps_min_length INTEGER NOT NULL DEFAULT 10,
|
|
anticaps_exclude_channels TEXT DEFAULT '[]',
|
|
anticaps_exclude_roles TEXT DEFAULT '[]',
|
|
|
|
-- Anti-bot join
|
|
antibot_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antibot_action TEXT NOT NULL DEFAULT 'kick',
|
|
antibot_min_account_age_days INTEGER NOT NULL DEFAULT 7,
|
|
antibot_no_avatar_action INTEGER NOT NULL DEFAULT 0,
|
|
antibot_suspicious_name_action INTEGER NOT NULL DEFAULT 0,
|
|
|
|
-- Anti-mass join (raid de comptes)
|
|
antimassj_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antimassj_action TEXT NOT NULL DEFAULT 'kick',
|
|
antimassj_max_joins INTEGER NOT NULL DEFAULT 10,
|
|
antimassj_interval_seconds INTEGER NOT NULL DEFAULT 10,
|
|
antimassj_lockdown_duration_minutes INTEGER NOT NULL DEFAULT 5,
|
|
|
|
-- Anti-newline spam
|
|
antinewline_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antinewline_action TEXT NOT NULL DEFAULT 'delete',
|
|
antinewline_max_lines INTEGER NOT NULL DEFAULT 15,
|
|
antinewline_exclude_channels TEXT DEFAULT '[]',
|
|
antinewline_exclude_roles TEXT DEFAULT '[]',
|
|
|
|
-- Anti-badwords (gros mots)
|
|
antibadwords_enabled INTEGER NOT NULL DEFAULT 0,
|
|
antibadwords_action TEXT NOT NULL DEFAULT 'delete',
|
|
antibadwords_words TEXT DEFAULT '[]',
|
|
antibadwords_exclude_channels TEXT DEFAULT '[]',
|
|
antibadwords_exclude_roles TEXT DEFAULT '[]',
|
|
antibadwords_warn_message TEXT DEFAULT '⚠️ Les insultes et gros mots ne sont pas autorisés.'
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS antiraid_warnings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
warning_type TEXT NOT NULL,
|
|
warned_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_antiraid_warnings ON antiraid_warnings(guild_id, user_id, warning_type, warned_at);
|
|
|
|
-- Table des warns utilisateurs
|
|
CREATE TABLE IF NOT EXISTS warnings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
moderator_id TEXT NOT NULL,
|
|
reason TEXT NOT NULL,
|
|
source TEXT DEFAULT 'manual',
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_warnings ON warnings(guild_id, user_id, created_at DESC);
|
|
|
|
-- Configuration des sanctions automatiques par warns
|
|
CREATE TABLE IF NOT EXISTS warnings_config (
|
|
guild_id TEXT PRIMARY KEY,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
warn1_action TEXT DEFAULT 'none',
|
|
warn1_duration INTEGER DEFAULT 10,
|
|
warn2_action TEXT DEFAULT 'none',
|
|
warn2_duration INTEGER DEFAULT 30,
|
|
warn3_action TEXT DEFAULT 'mute',
|
|
warn3_duration INTEGER DEFAULT 60,
|
|
warn4_action TEXT DEFAULT 'kick',
|
|
warn4_duration INTEGER DEFAULT 0,
|
|
warn5_action TEXT DEFAULT 'ban',
|
|
warn5_duration INTEGER DEFAULT 0,
|
|
decay_enabled INTEGER NOT NULL DEFAULT 0,
|
|
decay_days INTEGER DEFAULT 30,
|
|
notify_user INTEGER NOT NULL DEFAULT 1,
|
|
notify_channel_id TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS scheduled_messages (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
channel_id TEXT NOT NULL,
|
|
message_content TEXT NOT NULL,
|
|
embed_enabled INTEGER NOT NULL DEFAULT 0,
|
|
embed_title TEXT,
|
|
embed_description TEXT,
|
|
embed_color TEXT DEFAULT '#5865F2',
|
|
schedule_type TEXT NOT NULL DEFAULT 'weekly',
|
|
days_of_week TEXT DEFAULT '[]',
|
|
times_of_day TEXT DEFAULT '[]',
|
|
interval_value INTEGER DEFAULT 60,
|
|
interval_unit TEXT DEFAULT 'minutes',
|
|
force_send INTEGER NOT NULL DEFAULT 1,
|
|
delete_previous INTEGER NOT NULL DEFAULT 0,
|
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
last_sent_at INTEGER,
|
|
last_message_id TEXT,
|
|
last_channel_activity INTEGER,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
|
|
-- Système de rôles par boutons
|
|
CREATE TABLE IF NOT EXISTS role_panels (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
guild_id TEXT NOT NULL,
|
|
channel_id TEXT NOT NULL,
|
|
message_id TEXT,
|
|
name TEXT NOT NULL,
|
|
title TEXT,
|
|
description TEXT,
|
|
color TEXT DEFAULT '#5865F2',
|
|
image_url TEXT,
|
|
thumbnail_url TEXT,
|
|
mode TEXT NOT NULL DEFAULT 'toggle',
|
|
exclusive INTEGER NOT NULL DEFAULT 0,
|
|
required_role_id TEXT,
|
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS role_panel_buttons (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
panel_id INTEGER NOT NULL,
|
|
role_id TEXT NOT NULL,
|
|
label TEXT NOT NULL,
|
|
emoji TEXT,
|
|
style TEXT NOT NULL DEFAULT 'primary',
|
|
position INTEGER NOT NULL DEFAULT 0,
|
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
FOREIGN KEY (panel_id) REFERENCES role_panels(id) ON DELETE CASCADE
|
|
);
|
|
`);
|
|
|
|
// Migration: Ajouter les nouvelles colonnes pour welcome/goodbye si elles n'existent pas
|
|
const migrateWelcomeGoodbye = () => {
|
|
// Colonnes à ajouter pour welcome_config
|
|
const welcomeColumns = [
|
|
{ name: 'message_type', sql: "ALTER TABLE welcome_config ADD COLUMN message_type TEXT NOT NULL DEFAULT 'embed'" },
|
|
{ name: 'embed_title', sql: "ALTER TABLE welcome_config ADD COLUMN embed_title TEXT" },
|
|
{ name: 'embed_description', sql: "ALTER TABLE welcome_config ADD COLUMN embed_description TEXT" },
|
|
{ name: 'embed_color', sql: "ALTER TABLE welcome_config ADD COLUMN embed_color TEXT DEFAULT '#57F287'" },
|
|
{ name: 'embed_thumbnail', sql: "ALTER TABLE welcome_config ADD COLUMN embed_thumbnail INTEGER NOT NULL DEFAULT 1" },
|
|
{ name: 'embed_footer', sql: "ALTER TABLE welcome_config ADD COLUMN embed_footer TEXT" },
|
|
{ name: 'image_enabled', sql: "ALTER TABLE welcome_config ADD COLUMN image_enabled INTEGER NOT NULL DEFAULT 0" },
|
|
{ name: 'image_gradient', sql: "ALTER TABLE welcome_config ADD COLUMN image_gradient TEXT DEFAULT 'purple'" },
|
|
{ name: 'image_title', sql: "ALTER TABLE welcome_config ADD COLUMN image_title TEXT" },
|
|
{ name: 'image_subtitle', sql: "ALTER TABLE welcome_config ADD COLUMN image_subtitle TEXT" },
|
|
{ name: 'image_show_member_count', sql: "ALTER TABLE welcome_config ADD COLUMN image_show_member_count INTEGER NOT NULL DEFAULT 1" }
|
|
];
|
|
|
|
// Colonnes à ajouter pour goodbye_config
|
|
const goodbyeColumns = [
|
|
{ name: 'message_type', sql: "ALTER TABLE goodbye_config ADD COLUMN message_type TEXT NOT NULL DEFAULT 'embed'" },
|
|
{ name: 'embed_title', sql: "ALTER TABLE goodbye_config ADD COLUMN embed_title TEXT" },
|
|
{ name: 'embed_description', sql: "ALTER TABLE goodbye_config ADD COLUMN embed_description TEXT" },
|
|
{ name: 'embed_color', sql: "ALTER TABLE goodbye_config ADD COLUMN embed_color TEXT DEFAULT '#ED4245'" },
|
|
{ name: 'embed_thumbnail', sql: "ALTER TABLE goodbye_config ADD COLUMN embed_thumbnail INTEGER NOT NULL DEFAULT 1" },
|
|
{ name: 'embed_footer', sql: "ALTER TABLE goodbye_config ADD COLUMN embed_footer TEXT" },
|
|
{ name: 'image_enabled', sql: "ALTER TABLE goodbye_config ADD COLUMN image_enabled INTEGER NOT NULL DEFAULT 0" },
|
|
{ name: 'image_gradient', sql: "ALTER TABLE goodbye_config ADD COLUMN image_gradient TEXT DEFAULT 'red'" },
|
|
{ name: 'image_title', sql: "ALTER TABLE goodbye_config ADD COLUMN image_title TEXT" },
|
|
{ name: 'image_subtitle', sql: "ALTER TABLE goodbye_config ADD COLUMN image_subtitle TEXT" },
|
|
{ name: 'image_show_member_count', sql: "ALTER TABLE goodbye_config ADD COLUMN image_show_member_count INTEGER NOT NULL DEFAULT 1" }
|
|
];
|
|
|
|
// Exécuter les migrations pour welcome_config
|
|
welcomeColumns.forEach(col => {
|
|
db.run(col.sql, (err) => {
|
|
if (err && !err.message.includes('duplicate column')) {
|
|
// Ignorer les erreurs de colonnes dupliquées
|
|
}
|
|
});
|
|
});
|
|
|
|
// Exécuter les migrations pour goodbye_config
|
|
goodbyeColumns.forEach(col => {
|
|
db.run(col.sql, (err) => {
|
|
if (err && !err.message.includes('duplicate column')) {
|
|
// Ignorer les erreurs de colonnes dupliquées
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
// Exécuter la migration
|
|
migrateWelcomeGoodbye();
|
|
|
|
module.exports = db;
|