Ce dossier contient la couche d'accès aux données du bot, utilisant Supabase (PostgreSQL).
database/
├── supabase.ts # Client Supabase et fonctions de base
└── db.ts # Fonctions d'accès aux données métier
Initialisation du client Supabase et fonctions de base pour les rappels.
import { supabase } from './supabase.ts';Fonctions exportées :
initDatabase()- Initialise la connexioncreateReminder()- Créer un rappelgetReminder()- Récupérer un rappelgetUserReminders()- Rappels d'un utilisateurdeleteReminder()- Supprimer un rappelgetExpiredReminders()- Rappels expirésupdateLogChannel()- Configurer le canal de logsgetLogChannel()- Récupérer le canal de logs
Fonctions métier pour toutes les tables du bot.
Modules couverts :
| Module | Fonctions |
|---|---|
| Rappels | createReminder, getReminder, deleteReminder |
| Anniversaires | setBirthday, getBirthday, deleteBirthday, getAllBirthdays |
| Modération | addModerationHistory, getModerationHistory, createWarning, getUserWarnings |
| Bans/Mutes temp | createTempBan, createTempMute, getExpiredTempBans, getExpiredTempMutes |
| Configuration | updateModerationChannel, getModerationChannel, getMuteRole |
| Table | Description |
|---|---|
reminders |
Rappels utilisateurs |
birthdays |
Dates d'anniversaire |
server_configs |
Configuration par serveur |
warnings |
Avertissements |
moderation_history |
Historique des sanctions |
temp_bans |
Bans temporaires |
temp_mutes |
Mutes temporaires |
giveaways |
Giveaways actifs |
giveaway_participants |
Participants aux giveaways |
count_config |
Configuration du jeu de comptage |
command_stats |
Statistiques de commandes |
message_stats |
Statistiques de messages |
daily_stats |
Stats journalières par serveur |
global_daily_stats |
Stats journalières globales |
Variables d'environnement requises :
SUPABASE_URL=https://xxx.supabase.co
SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Toutes les tables ont Row Level Security activé avec des policies permettant l'accès via la clé service_role.
import { setBirthday, getBirthday } from './database/db.ts';
// Définir un anniversaire
await setBirthday(guildId, userId, 25, 12, 1990);
// Récupérer un anniversaire
const birthday = await getBirthday(guildId, userId);Les fonctions critiques utilisent withNetworkRetry pour gérer les erreurs réseau :
import { withNetworkRetry } from '../utils/retryHelper.ts';
const data = await withNetworkRetry(async () => {
return await supabase.from('table').select('*');
}, 'description de l\'opération');