From d9afa3282814c2e6e17b85ba2cec7fc1dc7cc791 Mon Sep 17 00:00:00 2001 From: Mathis Date: Mon, 25 May 2026 19:08:45 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20syst=C3=A8me=20arriver=20d=C3=A9part=20V1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EXPLICATION_NON_DEV.md | 319 ++++++++++++++ Explication.md | 490 +++++++++++++++++++++ banners/banner_1369669999345537145.png | Bin 17515 -> 199666 bytes commandes/absence_staff.py | 10 +- commandes/bug_report.py | 41 +- commandes/convocation.py | 11 +- commandes/goodbye.py | 229 ++++++---- commandes/invites.py | 240 ++++++---- commandes/modules_security/antiraid.py | 10 +- commandes/modules_security/antispam.py | 11 +- commandes/modules_security/logs_manager.py | 8 +- commandes/modules_security/rules.py | 8 +- commandes/no_link.py | 11 +- commandes/security.py | 13 +- commandes/ticket_whitelist.py | 8 +- commandes/welcome.py | 239 +++++++--- commandes/whitelist.py | 8 +- serveur_flask.py | 2 +- 18 files changed, 1367 insertions(+), 291 deletions(-) create mode 100644 EXPLICATION_NON_DEV.md create mode 100644 Explication.md diff --git a/EXPLICATION_NON_DEV.md b/EXPLICATION_NON_DEV.md new file mode 100644 index 0000000..ebaf8c1 --- /dev/null +++ b/EXPLICATION_NON_DEV.md @@ -0,0 +1,319 @@ +# 📜 **Guide SimplifiĂ© : Le SystĂšme de Secours de Kuby** +*(InspirĂ© de la sĂ©rie **Person of Interest** – La Machine)* + +--- + +## 🎯 **Pourquoi ce systĂšme existe ?** + +Imagine que **Kuby est comme *La Machine*** dans *Person of Interest* : +- **La Machine** surveille tout le monde et **protĂšge les gens en danger** (comme Kuby qui protĂšge tes serveurs Discord). +- Si un **serveur de la Machine est attaquĂ© ou tombe en panne**, un autre **prend immĂ©diatement le relais** pour que **personne ne soit en danger**. +- Dans notre cas, **Kuby est la Machine**, et **tes serveurs Discord sont les personnes protĂ©gĂ©es**. + +**Le problĂšme** : Si le serveur principal de Kuby tombe en panne, tous les serveurs affiliĂ©s Ă  Omega Kube **ne sont plus protĂ©gĂ©s**. +**La solution** : On crĂ©e un **rĂ©seau de "nƓuds de secours"** (comme les serveurs cachĂ©s de la Machine) qui **prennent le relais automatiquement** si le principal est hors ligne. + +--- +--- + +## 🧠 **Comment ça marche ? (Version ultra-simple)** + +### 1ïžâƒŁ **Le CƓur de Kuby** *(comme le cƓur de la Machine)* +- C’est un **fichier partagĂ©** (comme un tableau de bord) qui contient **l’état de santĂ© de Kuby** : + - Est-ce qu’il est vivant ? + - Quel nƓud est actif ? + - Y a-t-il une maintenance en cours ? +- **OĂč est-il ?** Sur **GitHub** (un service gratuit et sĂ©curisĂ©, comme un cloud). + +--- + +### 2ïžâƒŁ **Les NƓuds** *(comme les serveurs de la Machine)* +- **NƓud Principal** = Le serveur actuel de Kuby (ton VPS). C’est **Harold Finch** (le cerveau principal). +- **NƓuds de Secours** = Les **PC de 2-3 membres de confiance** (comme **John Reese, Root, ou Bear** dans POI). + - Ces PC **surveillent Kuby** en arriĂšre-plan. + - Si le nƓud principal tombe, **un nƓud de secours prend le relais automatiquement**. + +--- + +### 3ïžâƒŁ **Le Signal de Vie (Heartbeat)** *(comme les signaux de la Machine)* +- Toutes les **5 minutes**, le nƓud actif (celui qui fait tourner Kuby) envoie un **signal** : + → *« Je suis toujours vivant et en bonne santĂ© ! »* +- Si **aucun signal n’est reçu pendant 10 minutes**, c’est qu’il y a un **problĂšme** (comme quand la Machine est attaquĂ©e dans POI). + +--- + +### 4ïžâƒŁ **La Bascule Automatique (Failover)** *(comme quand la Machine bascule sur un autre serveur)* +- Quand un nƓud de secours **ne reçoit plus de signal**, il se dit : + → *« La Machine principale est en danger, **je prends le relais !** »* +- Il **active sa copie de Kuby** et **prĂ©vient tout le monde** (comme quand Reese active un serveur de secours dans POI). + +--- + +### 5ïžâƒŁ **Le Retour Ă  la Normale** *(comme quand la Machine se rĂ©pare)* +- Quand le **nƓud principal revient en ligne**, il **reprend son rĂŽle** (comme quand Finch rĂ©pare la Machine). +- Le nƓud de secours **s’éteint automatiquement** (plus besoin de lui). + +--- +--- + +## 🎭 **Exemple Concret avec *Person of Interest*** + +| **Dans *Person of Interest*** | **Dans notre systĂšme** | **Ce qui se passe** | +|--------------------------------|-----------------------|---------------------| +| **La Machine** | **Kuby** | Le bot qui protĂšge tes serveurs Discord. | +| **Serveurs de la Machine** | **NƓuds (ton VPS + PCs des membres)** | Plusieurs endroits oĂč Kuby peut tourner. | +| **Harold Finch** | **Toi (Omega Kube)** | Tu gĂšres le systĂšme et choisis les nƓuds de confiance. | +| **John Reese** | **Un membre de confiance (ex: Alice)** | Elle hĂ©berge un nƓud de secours sur son PC. | +| **Signal de la Machine** | **Heartbeat (toutes les 5 min)** | Preuve que Kuby est toujours vivant. | +| **Attaque sur un serveur** | **Crash du VPS** | Le nƓud d’Alice prend le relais automatiquement. | +| **La Machine se rĂ©pare** | **Ton VPS redĂ©marre** | Le nƓud principal reprend le contrĂŽle. | +| **Les "NumĂ©ros" (personnes protĂ©gĂ©es)** | **PropriĂ©taires de serveurs affiliĂ©s** | Ils reçoivent un message clair en cas de problĂšme. | + +--- +--- + +## đŸ‘„ **RĂŽle de Chaque Personne** + +### 👑 **Toi (Omega Kube) = Harold Finch** +*(Le gĂ©nie qui a créé la Machine et la gĂšre.)* +- **Tu choisis les membres de confiance** (comme Finch choisit ses alliĂ©s). +- **Tu créés le fichier partagĂ©** (le cƓur de Kuby). +- **Tu tests le systĂšme** avant de le lancer. +- **Tu es le seul Ă  avoir accĂšs Ă  tout** (comme Finch avec la Machine). + +--- + +### đŸ’» **Membres HĂ©bergeurs = John Reese, Root, ou Bear** +*(Les alliĂ©s de Finch qui aident Ă  maintenir la Machine.)* +- **Ils installent un petit programme** sur leur PC (comme Reese qui installe des terminaux pour la Machine). +- **Leur PC surveille Kuby** en arriĂšre-plan (comme un antivirus). +- **Si Kuby tombe**, leur PC **lance automatiquement une copie de secours** (sans rien faire manuellement). +- **Quand le serveur principal revient**, leur PC **arrĂȘte la copie de secours** (tout seul). + +✅ **Ce qu’ils doivent faire** : +1. **Installer Python** (1 seule fois, comme installer un logiciel). +2. **Lancer un programme** (`monitor.py`) en arriĂšre-plan. +3. **Ne pas Ă©teindre leur PC trop souvent** (ou prĂ©venir si besoin). +4. **Garder une connexion Internet stable** (comme pour regarder un film en streaming). + +❌ **Ce qu’ils ne doivent PAS faire** : +- **Modifier le code** (risque de casser le systĂšme). +- **Éteindre leur PC sans prĂ©venir** (si c’est un nƓud critique). +- **Partager leur token Discord** (c’est comme partager un mot de passe). + +--- + +### 📱 **PropriĂ©taires de Serveurs AffiliĂ©s = Les "NumĂ©ros"** +*(Les personnes protĂ©gĂ©es par la Machine.)* +- **Ils reçoivent un message clair** en cas de problĂšme (comme quand la Machine prĂ©vient Reese d’un numĂ©ro en danger). +- **Exemple de message qu’ils reçoivent** : + ``` + ⚠ **Kuby a rencontrĂ© un problĂšme, mais ne t’inquiĂšte pas !** + Un nƓud de secours a pris le relais. + ✅ Le service continue de fonctionner normalement. + 💬 Besoin d’aide ? Contacte @OmegaKube. + ``` + +--- +--- + +## 📋 **Ce que les HĂ©bergeurs Doivent Faire (Étape par Étape)** + +### **1ïžâƒŁ Installation (1 seule fois)** +1. **TĂ©lĂ©charger Python** (comme un logiciel classique) : + - Aller sur [python.org/downloads](https://www.python.org/downloads/). + - **Cocher "Add Python to PATH"** pendant l’installation (trĂšs important !). + - Cliquer sur **Install Now**. + +2. **TĂ©lĂ©charger les fichiers** que je t’enverrai (un dossier zip). + +3. **Ouvrir l’invite de commandes** (ou terminal) : + - **Windows** : `Win + R` → taper `cmd` → EntrĂ©e. + - **Mac/Linux** : Ouvrir **Terminal**. + +4. **Installer les outils nĂ©cessaires** (1 seule fois) : + ```bash + pip install -r requirements.txt + ``` + *(C’est comme installer les piĂšces manquantes pour faire fonctionner Kuby.)* + +--- + +### **2ïžâƒŁ Configuration (1 seule fois)** +1. **Ouvrir le fichier `.env`** (avec le Bloc-notes ou VS Code). +2. **Remplir avec tes informations** (je te l’enverrai dĂ©jĂ  rempli, mais vĂ©rifie) : + ``` + NODE_ID=node_secours_alice + NODE_NAME=Kuby (PC de Alice) + ``` +3. **Enregistrer le fichier**. + +--- + +### **3ïžâƒŁ Lancement (À faire 1 fois, puis ça tourne tout seul)** +1. **Ouvrir l’invite de commandes** dans le dossier oĂč sont les fichiers. +2. **Lancer le programme de surveillance** : + ```bash + python monitor.py + ``` + *(C’est comme lancer un antivirus : **ça tourne en arriĂšre-plan sans que tu aies Ă  y penser**.)* + +3. **Laisser le programme ouvert** (ou le lancer en arriĂšre-plan). + +--- + +### **4ïžâƒŁ Utilisation au Quotidien** +- **Rien Ă  faire !** Le programme **travaille tout seul**. +- **Ne pas fermer la fenĂȘtre** du terminal (ou utiliser un outil pour le lancer en arriĂšre-plan). +- **Si tu Ă©teins ton PC** : + - **PrĂ©viens-moi** avant (pour que je puisse trouver un remplaçant si besoin). + - **Plus il y a de nƓuds**, moins c’est grave si un PC est Ă©teint. + +--- +--- + +## ⚠ **Que se passe-t-il en cas de panne ?** + +### **🔮 ScĂ©nario 1 : Ton VPS (nƓud principal) crash** +*(Comme quand un serveur de la Machine est attaquĂ© dans POI.)* +1. **DĂ©tection** : AprĂšs **10 minutes sans signal**, un nƓud de secours (ex: PC d’Alice) **dĂ©tecte le problĂšme**. +2. **Action** : Le PC d’Alice **lance automatiquement Kuby** (comme Reese active un serveur de secours). +3. **Notification** : + - Un message est envoyĂ© dans **le serveur Discord de Omega Kube** (canal `#🚹-urgent-kuby`). + - Un **message privĂ©** est envoyĂ© Ă  tous les propriĂ©taires de serveurs affiliĂ©s. +4. **RĂ©sultat** : **Personne ne remarque la panne** (tout continue de fonctionner). + +--- + +### **🟱 ScĂ©nario 2 : Ton VPS revient en ligne** +*(Comme quand Finch rĂ©pare la Machine.)* +1. **DĂ©tection** : Le nƓud principal **voit qu’un nƓud de secours a pris le relais**. +2. **Attente** : Il **attend 5 minutes** (pour Ă©viter les allers-retours). +3. **Reprise** : Il **reprend le contrĂŽle** et **arrĂȘte le nƓud de secours**. +4. **Notification** : + ``` + ✅ **Kuby est de retour sur le serveur principal !** + 🎉 Merci au nƓud de secours (PC d’Alice) pour son aide. + ``` + +--- + +### **🟡 ScĂ©nario 3 : Plusieurs PC de secours sont Ă©teints** +*(Comme quand plusieurs serveurs de la Machine sont hors ligne.)* +- **Solution** : Avoir **au moins 2-3 nƓuds de secours** (comme la Machine a plusieurs serveurs). +- Si **tous les nƓuds de secours sont Ă©teints**, je recevrai une alerte et **je devrai redĂ©marrer manuellement le VPS**. +- **C’est pour ça qu’il en faut plusieurs** : plus il y a de nƓuds, plus le systĂšme est **rĂ©sistant**. + +--- +--- + +## 💡 **Questions FrĂ©quentes (FAQ)** + +### **❓ Est-ce que ça va ralentir mon PC ?** +âžĄïž **Non !** +- Kuby est un **bot Discord lĂ©ger**. +- Il utilise **moins de ressources qu’un onglet Chrome ouvert** ou qu’un jeu mobile. +- Tu peux **continuer Ă  utiliser ton PC normalement** (regarder des vidĂ©os, jouer, etc.). + +--- + +### **❓ Est-ce que je dois laisser mon PC allumĂ© 24/7 ?** +âžĄïž **IdĂ©alement oui**, mais : +- Si tu dois **Ă©teindre ton PC** (pour la nuit, par exemple) : + - **PrĂ©viens-moi** avant (pour que je puisse m’organiser). + - **Plus il y a de nƓuds**, moins c’est grave si un PC est Ă©teint. +- Si tu es **souvent absent**, je peux te retirer de la liste et trouver quelqu’un d’autre. + +--- + +### **❓ Que faire si mon Internet tombe en panne ?** +âžĄïž **Rien**. Quand ton Internet reviendra, le programme **reprendra automatiquement** son travail. + +--- + +### **❓ Est-ce que c’est sĂ©curisĂ© ?** +âžĄïž **Oui, Ă  100% !** +- Chaque nƓud a **son propre token Discord** (comme une clĂ© unique). +- Les donnĂ©es sont **stockĂ©es sur GitHub** (un service **sĂ©curisĂ© et chiffrĂ©**). +- **Personne ne peut prendre le contrĂŽle de ton PC** via ce programme. +- **Aucun accĂšs** Ă  tes fichiers personnels. + +--- + +### **❓ Je veux arrĂȘter d’ĂȘtre un nƓud de secours, comment faire ?** +âžĄïž **Contacte-moi (@OmegaKube)** et je te retirerai de la liste. +- **Aucun risque** : tu peux arrĂȘter Ă  tout moment. +- **Aucune obligation** : c’est du bĂ©nĂ©volat, merci pour ton aide ! + +--- + +### **❓ Que faire si je vois une erreur dans le terminal ?** +âžĄïž **Fais un capture d’écran** et envoie-la Ă  @OmegaKube. +- Exemple d’erreur normale (pas grave) : + ``` + [ERREUR] Impossible de se connecter Ă  GitHub (timeout). RĂ©essai dans 5 min... + ``` + → **Solution** : Attendre que ton Internet revienne. + +--- + +### **❓ Est-ce que je peux hĂ©berger Kuby sur mon Raspberry Pi ?** +âžĄïž **Oui !** (Mais ce n’est pas obligatoire.) +- Un **PC classique** suffit largement. +- Si tu as un **Raspberry Pi**, c’est encore mieux (il consomme moins d’électricitĂ©). + +--- +--- + +## 🎯 **Pourquoi c’est important ?** + +### **Pour toi (hĂ©bergeur)** : +✅ **Tu aides la communautĂ© Omega Kube** sans effort. +✅ **Tu apprends** comment fonctionnent les systĂšmes dĂ©centralisĂ©s (comme dans POI !). +✅ **Tu deviens un maillon essentiel** du projet. +✅ **Aucun coĂ»t** pour toi (juste un peu d’électricitĂ©). + +### **Pour les propriĂ©taires de serveurs** : +✅ **ZĂ©ro interruption** de service, mĂȘme en cas de panne. +✅ **Transparence totale** : ils sont toujours prĂ©venus. +✅ **FiabilitĂ© accrue** : le systĂšme est **plus rĂ©sistant qu’un seul serveur**. + +--- +--- + +## 📞 **Qui contacter en cas de problĂšme ?** + +| **ProblĂšme** | **Contact** | **Temps de rĂ©ponse** | +|--------------|-------------|----------------------| +| Question technique | @OmegaKube (DM Discord) | < 24h | +| ProblĂšme avec ton nƓud | @OmegaKube (DM Discord) | < 1h | +| **Urgent** (tous les nƓuds down) | @OmegaKube (DM + email) | **ImmĂ©diat** | + +--- +--- + +## 🎬 **RĂ©sumĂ© en 30 Secondes (Version *Person of Interest*)** + +> *« Imagine que Kuby, c’est la Machine. Ton VPS, c’est son serveur principal. Mais comme dans *Person of Interest*, la Machine a des serveurs de secours cachĂ©s un peu partout.* +> *Toi, tu es comme Reese ou Finch : tu hĂ©berges un de ces serveurs sur ton PC.* +> *Si jamais la Machine principale tombe (ton VPS crash), ton PC devient le nouveau cerveau, et tout continue de fonctionner comme avant.* +> *Quand le serveur principal revient, il reprend sa place, et toi, tu n’as rien eu Ă  faire.* +> **C’est aussi simple que ça.** » + +--- + +## đŸ”„ **MĂ©taphore Finale** + +| **Dans *Person of Interest*** | **Dans notre systĂšme** | +|--------------------------------|-----------------------| +| La Machine **ne dort jamais** | Kuby **ne s’arrĂȘte jamais** (grĂące aux nƓuds de secours). | +| Finch **a toujours un plan B** | Toi, tu as **toujours un nƓud de secours**. | +| Reese **protĂšge les numĂ©ros** | Les nƓuds **protĂšgent les serveurs affiliĂ©s**. | +| La Machine **se rĂ©pare toute seule** | Le systĂšme **bascule automatiquement**. | + +--- + +**Merci d’aider Ă  maintenir Kuby en vie !** 🚀 + +*Guide simplifiĂ© - Version 1.0 - InspirĂ©e de *Person of Interest** +*Pour toute question, contacte @OmegaKube.* diff --git a/Explication.md b/Explication.md new file mode 100644 index 0000000..df937de --- /dev/null +++ b/Explication.md @@ -0,0 +1,490 @@ +# 🔧 SystĂšme DĂ©centralisĂ© de Secours pour Kuby - Documentation Technique + +--- + +## 📌 Contexte +Kuby est un bot Discord critique pour les serveurs affiliĂ©s Ă  Omega Kube. Pour Ă©viter toute interruption de service en cas de crash du serveur principal, nous mettons en place un **systĂšme dĂ©centralisĂ© de secours** oĂč plusieurs **nƓuds de confiance** (ordinateurs personnels de membres sĂ©lectionnĂ©s) peuvent hĂ©berger et lancer Kuby automatiquement. + +**Objectif** : **ZĂ©ro temps d'arrĂȘt**, mĂȘme si le serveur principal est hors ligne. + +--- + +## đŸ—ïž Architecture du SystĂšme + +### **1. Composants ClĂ©s** +| Composant | RĂŽle | Emplacement | +|-----------|------|--------------| +| **Fichier de Statut PartagĂ©** (`kuby_status.json`) | Stocke l'Ă©tat du systĂšme (dernier heartbeat, nƓud actif, etc.) | **GitHub Gist** (gratuit, accessible en lecture/Ă©criture) | +| **NƓud Principal** | Instance principale de Kuby (sur ton serveur) | Ton VPS/serveur actuel | +| **NƓuds de Secours** | Instances de Kuby sur les PCs des membres de confiance | Ordinateurs personnels | +| **Script de Surveillance** (`monitor.py`) | VĂ©rifie le heartbeat et dĂ©clenche la bascule | ExĂ©cutĂ© par chaque nƓud | +| **Script de Lancement** (`launch_kuby.py`) | Lance Kuby en mode actif/secours | ExĂ©cutĂ© par chaque nƓud | + +--- + +### **2. Flux de DonnĂ©es** +``` +┌─────────────────────────────────────────────────────────────────────────┐ +│ GitHub Gist (kuby_status.json) │ +│ { │ +│ "last_heartbeat": "2024-10-15T14:00:00Z", │ +│ "active_node": "node_principal", │ +│ "active_node_ip": "123.45.67.89", │ +│ "version": "1.2.0", │ +│ "mode": "normal" // ou "secours" │ +│ } │ +└─────────────────────────────────────────────────────────────────────────┘ + â–Č + │ + ┌───────────────┮───────────────┐ + │ │ + â–Œ â–Œ +┌─────────────────────┐ ┌─────────────────────┐ +│ NƓud Principal │ │ NƓud de Secours │ +│ (Ton serveur) │ │ (PC d'un membre) │ +│ │ │ │ +│ 1. ExĂ©cute Kuby │ │ 1. ExĂ©cute monitor │ +│ 2. Met Ă  jour │ │ 2. VĂ©rifie │ +│ heartbeat/5min │ │ kuby_status.json│ +│ 3. Si crash → │ │ 3. Si last_heartbeat│ +│ ne fait rien │ │ > 10 min ET │ +│ │ │ active_node != │ +│ │ │ "moi" → │ +│ │ │ Prend le relais │ +└─────────────────────┘ └─────────────────────┘ +``` + +--- + +### **3. RĂŽles des Fichiers** + +#### **📄 `kuby_status.json` (Sur GitHub Gist)** +Stocke l'Ă©tat global du systĂšme. **Tous les nƓuds lisent et Ă©crivent dans ce fichier.** + +**Structure** : +```json +{ + "last_heartbeat": "2024-10-15T14:00:00Z", // DerniĂšre mise Ă  jour par le nƓud actif + "active_node": "node_principal", // ID du nƓud actuellement actif + "active_node_name": "Kuby (Serveur Principal)", // Nom du nƓud (pour les logs) + "active_node_discord_id": "123456789", // ID Discord du bot (pour Ă©viter les conflits) + "version": "1.2.0", // Version de Kuby en cours + "mode": "normal", // "normal" ou "secours" + "emergency_message": null // Message d'urgence si panne totale +} +``` + +#### **🐍 `monitor.py` (À exĂ©cuter par chaque nƓud)** +**RĂŽle** : +- VĂ©rifie toutes les **5 minutes** si le nƓud actif (`active_node`) a mis Ă  jour `last_heartbeat`. +- Si **aucune mise Ă  jour depuis 10+ minutes**, le nƓud **prend le relais**. + +**Logique** : +```python +while True: + status = fetch_status_from_gist() + last_heartbeat = datetime.fromisoformat(status["last_heartbeat"]) + + if (now - last_heartbeat).total_seconds() > 600: # 10 minutes + if status["active_node"] != MY_NODE_ID: + take_over(status) # Prend le relais + + if status["active_node"] == MY_NODE_ID: + update_heartbeat() # Met Ă  jour last_heartbeat + + sleep(300) # Attend 5 minutes +``` + +#### **🚀 `launch_kuby.py` (Lance Kuby en mode actif/secours)** +**RĂŽle** : +- Lance le bot Kuby avec les **bonnes permissions** (mode normal ou secours). +- **Met Ă  jour `active_node`** dans `kuby_status.json` pour indiquer qu'il est actif. + +**Cas d'usage** : +- **NƓud principal** : Lance Kuby normalement. +- **NƓud de secours** : Lance Kuby **seulement si `active_node == MY_NODE_ID`**. + +--- + +## 🔄 MĂ©canisme de Bascule (Failover) + +### **1. DĂ©tection d'un Crash** +- Un **nƓud de secours** dĂ©tecte que `last_heartbeat` a **plus de 10 minutes**. +- Il vĂ©rifie que **`active_node` != son ID** (pour Ă©viter les conflits). +- Il **met Ă  jour `kuby_status.json`** : + ```json + { + "last_heartbeat": "2024-10-15T14:10:00Z", + "active_node": "node_secours_1", + "active_node_name": "Kuby (PC de [Membre])", + "active_node_discord_id": "987654321", + "mode": "secours", + "emergency_message": "Le serveur principal est down. Ce nƓud a pris le relais." + } + ``` +- Il **lance Kuby** en mode actif. + +### **2. Notification aux PropriĂ©taires** +Le nƓud de secours envoie : +1. Un **message dans le serveur hub** (canal `#🚹-urgent-kuby`) : + ``` + 🚹 **BASCULE AUTOMATIQUE ACTIVÉE** 🚹 + ⚠ Le serveur principal de Kuby est hors ligne. + đŸ›Ąïž **Nouveau nƓud actif** : Kuby (PC de [Membre]) + ⏰ **Heure de bascule** : [HH:MM] + 📌 **Action** : Aucun redĂ©marrage manuel nĂ©cessaire. + ``` +2. Un **DM Ă  tous les propriĂ©taires** : + ``` + ⚠ **Kuby a basculĂ© sur un nƓud de secours** + Le serveur principal est temporairement indisponible. + 🔄 **Nouveau nƓud actif** : PC de [Membre] + 💬 **Pas d'action requise** : Le service reste opĂ©rationnel. + ``` + +### **3. Retour Ă  la Normale** +- Le **nƓud principal** revient en ligne. +- Il dĂ©tecte que `active_node != "node_principal"`. +- Il **attend 5 minutes** (pour Ă©viter les oscillations). +- Il **reprend le contrĂŽle** en : + 1. Mettant Ă  jour `kuby_status.json` : + ```json + { + "active_node": "node_principal", + "mode": "normal", + "emergency_message": null + } + ``` + 2. **ArrĂȘtant le nƓud de secours** (via un message Discord ou un appel API). + 3. Envoyant un **message de rĂ©tablissement** : + ``` + ✅ **Kuby est de retour sur le serveur principal** + 🎉 Merci au nƓud de secours pour son aide ! + ``` + +--- + +## đŸ› ïž ImplĂ©mentation Technique (Disnake) + +### **1. PrĂ©requis** +- **Python 3.8+** +- **Disnake** (dĂ©jĂ  utilisĂ© dans le projet) +- **BibliothĂšques supplĂ©mentaires** : + ```bash + pip install aiohttp python-dotenv + ``` + +### **2. Fichier `.env` (Pour chaque nƓud)** +```env +# Identifiant unique du nƓud (ex: node_principal, node_secours_1, node_secours_2) +NODE_ID=node_secours_1 +NODE_NAME=Kuby (PC de [PrĂ©nom]) +NODE_DISCORD_BOT_TOKEN=ton_token_bot_discord + +# GitHub Gist +GIST_ID=ton_id_gist +GITHUB_TOKEN=ton_token_github # Optionnel (pour Ă©viter les rate limits) + +# Discord +SERVEUR_HUB_ID=123456789 +CANAL_URGENT_ID=987654321 + +# DĂ©lais (en secondes) +HEARTBEAT_INTERVAL=300 # 5 minutes +CRASH_THRESHOLD=600 # 10 minutes +``` + +### **3. Structure des Fichiers** +``` +/kuby_decentralise +├── monitor.py # Surveillance du heartbeat +├── launch_kuby.py # Lancement de Kuby +├── status_manager.py # Gestion de kuby_status.json +├── config.py # Configuration commune +├── .env # Variables d'environnement +└── README.md # Instructions +``` + +--- + +### **4. Exemple de Code (Pseudocode)** + +#### **📄 `status_manager.py`** +```python +import aiohttp +import os +from dotenv import load_dotenv + +load_dotenv() + +GIST_URL = f"https://gist.githubusercontent.com/{os.getenv('GITHUB_USER')}/{os.getenv('GIST_ID')}/raw/kuby_status.json" +GIST_API_URL = f"https://api.github.com/gists/{os.getenv('GIST_ID')}" + +async def fetch_status(): + async with aiohttp.ClientSession() as session: + async with session.get(GIST_URL) as response: + if response.status == 200: + return await response.json() + else: + raise Exception(f"Erreur {response.status} : Impossible de rĂ©cupĂ©rer kuby_status.json") + +async def update_status(new_status: dict): + headers = {"Authorization": f"token {os.getenv('GITHUB_TOKEN')}"} if os.getenv('GITHUB_TOKEN') else {} + data = { + "files": { + "kuby_status.json": { + "content": json.dumps(new_status, indent=2) + } + } + } + async with aiohttp.ClientSession() as session: + async with session.patch(GIST_API_URL, json=data, headers=headers) as response: + if response.status != 200: + raise Exception(f"Erreur {response.status} : Impossible de mettre Ă  jour kuby_status.json") + return await response.json() +``` + +#### **📄 `monitor.py`** +```python +import asyncio +from datetime import datetime, timedelta +from status_manager import fetch_status, update_status +from launch_kuby import launch_kuby +import os + +NODE_ID = os.getenv("NODE_ID") +NODE_NAME = os.getenv("NODE_NAME") +NODE_DISCORD_ID = os.getenv("NODE_DISCORD_BOT_TOKEN") # À adapter + +async def take_over(): + """Prend le relais si le nƓud actif est down.""" + status = await fetch_status() + now = datetime.utcnow().isoformat() + "Z" + + # VĂ©rifier si on peut prendre le relais + last_heartbeat = datetime.fromisoformat(status["last_heartbeat"]) + if (datetime.utcnow() - last_heartbeat) < timedelta(minutes=10): + return False # Pas besoin de prendre le relais + + if status["active_node"] == NODE_ID: + return False # DĂ©jĂ  actif + + # Mettre Ă  jour le statut + status["last_heartbeat"] = now + status["active_node"] = NODE_ID + status["active_node_name"] = NODE_NAME + status["active_node_discord_id"] = NODE_DISCORD_ID + status["mode"] = "secours" + status["emergency_message"] = f"Bascule automatique : {NODE_NAME} a pris le relais." + + await update_status(status) + return True + +async def monitor(): + while True: + try: + status = await fetch_status() + last_heartbeat = datetime.fromisoformat(status["last_heartbeat"]) + now = datetime.utcnow() + + # Si le nƓud actif est down depuis 10+ min, prendre le relais + if (now - last_heartbeat) > timedelta(minutes=10) and status["active_node"] != NODE_ID: + if await take_over(): + print(f"[{NODE_NAME}] Prend le relais !") + await launch_kuby() # Lance Kuby + + # Si ce nƓud est actif, mettre Ă  jour le heartbeat + if status["active_node"] == NODE_ID: + status["last_heartbeat"] = now.isoformat() + "Z" + await update_status(status) + + except Exception as e: + print(f"[ERREUR] {e}") + + await asyncio.sleep(300) # Attend 5 minutes + +if __name__ == "__main__": + asyncio.run(monitor()) +``` + +--- + +## 🔐 SĂ©curitĂ© et Bonnes Pratiques + +### **1. Gestion des Conflits** +- **ProblĂšme** : Deux nƓuds de secours pourraient essayer de prendre le relais en mĂȘme temps. +- **Solution** : Utiliser un **verrou optimiste** dans `kuby_status.json` : + ```json + { + "lock": null, // ou l'ID du nƓud qui tente de prendre le relais + "lock_timestamp": null + } + ``` + - Un nƓud ne peut prendre le relais que si `lock` est `null` ou a **plus de 5 minutes**. + +### **2. Authentification** +- **ProblĂšme** : Un malware pourrait modifier `kuby_status.json`. +- **Solution** : + - Utiliser un **token GitHub** pour les mises Ă  jour. + - **Signer les requĂȘtes** avec une clĂ© secrĂšte (optionnel). + +### **3. Liste des NƓuds de Confiance** +Maintenir une **liste blanchie** dans `kuby_status.json` : +```json +{ + "trusted_nodes": [ + {"id": "node_principal", "name": "Kuby (Serveur)", "discord_id": "123456789"}, + {"id": "node_secours_1", "name": "Kuby (PC de Alice)", "discord_id": "987654321"}, + {"id": "node_secours_2", "name": "Kuby (PC de Bob)", "discord_id": "567891234"} + ] +} +``` +- Un nƓud ne peut prendre le relais que s'il est dans cette liste. + +--- + +## 📊 Exemple de Workflow Complet + +### **ScĂ©nario 1 : Maintenance PlanifiĂ©e** +1. **Toi** exĂ©cutes `!maintenance start 72h "Mise Ă  jour majeure"` sur le **nƓud principal**.✅ +2. Le nƓud principal met Ă  jour `kuby_status.json` : + ```json + { + "maintenance": { + "date": "2024-10-18T14:00:00Z", + "raison": "Mise Ă  jour majeure" + } + } + ``` +3. Les nƓuds de secours **dĂ©tectent la maintenance** et n'interviennent pas. + +### **ScĂ©nario 2 : Crash du Serveur Principal** +1. Le **nƓud principal** crash → `last_heartbeat` n'est plus mis Ă  jour. +2. AprĂšs **10 minutes**, un **nƓud de secours** (ex: PC d'Alice) dĂ©tecte le problĂšme. +3. Alice's node **met Ă  jour `kuby_status.json`** et lance Kuby. +4. Un **message est envoyĂ©** dans `#🚹-urgent-kuby` et aux propriĂ©taires. +5. Quand le nƓud principal revient, il **reprend le contrĂŽle** automatiquement. + +### **ScĂ©nario 3 : Panne Totale (Tous les nƓuds down)** +1. **Aucun nƓud** ne met Ă  jour `last_heartbeat`. +2. **UptimeRobot** (optionnel) dĂ©tecte que le bot Discord ne rĂ©pond plus. +3. UptimeRobot envoie un **webhook dans `#🚹-urgent-kuby`** : + ``` + 🚹 **PANNE TOTALE DE KUBY** 🚹 + Tous les nƓuds sont hors ligne ! + @OmegaKube **Action manuelle requise**. + ``` + +--- + +## 🛑 Limitations et Solutions + +| Limitation | Cause | Solution | +|------------|-------|----------| +| **DĂ©lai de bascule** (~10 min) | Temps de dĂ©tection du crash | RĂ©duire `CRASH_THRESHOLD` Ă  5 min (mais risque de fausses alertes). | +| **PC Ă©teint** | Un nƓud de secours est hors ligne | Avoir **au moins 3 nƓuds de confiance**. | +| **GitHub down** | Impossible d'accĂ©der Ă  `kuby_status.json` | Utiliser un **mirror sur Google Drive** ou **IPFS**. | +| **Conflits de nƓuds** | Deux nƓuds prennent le relais en mĂȘme temps | ImplĂ©menter un **verrou optimiste** (voir section SĂ©curitĂ©). | +| **DonnĂ©es non synchronisĂ©es** | Un nƓud a des donnĂ©es diffĂ©rentes | Utiliser une **base de donnĂ©es partagĂ©e** (Firebase gratuit). | + +--- + +## 📝 Étapes de DĂ©ploiement + +### **1. PrĂ©paration** +- [ ] CrĂ©er un **GitHub Gist** avec le `kuby_status.json` initial. +- [ ] SĂ©lectionner **2-3 membres de confiance** pour hĂ©berger des nƓuds de secours. +- [ ] Leur fournir : + - Le code (`monitor.py`, `launch_kuby.py`, etc.). + - Un **token Discord** pour leur instance de Kuby (chaque nƓud a son propre bot). + - Un **fichier `.env`** prĂ©-rempli avec leurs identifiants. + +### **2. Configuration des NƓuds** +Pour chaque membre : +1. Cloner le dĂ©pĂŽt du projet Kuby. +2. Installer les dĂ©pendances (`pip install -r requirements.txt`). +3. Remplir leur `.env` avec leurs informations. +4. **Tester le nƓud** : + ```bash + python monitor.py + ``` + +### **3. Test du SystĂšme** +1. **Simuler un crash** : + - ArrĂȘter le nƓud principal. + - VĂ©rifier qu'un nƓud de secours prend le relais aprĂšs 10 min. +2. **Simuler un retour** : + - RedĂ©marrer le nƓud principal. + - VĂ©rifier qu'il reprend le contrĂŽle. + +--- + +## 💬 Communication avec les NƓuds de Secours + +### **Message Ă  Envoyer aux Membre HĂ©bergeurs** +``` +Bonjour [PrĂ©nom], + +Tu as Ă©tĂ© sĂ©lectionnĂ©(e) pour faire partie des **nƓuds de secours de Kuby** ! +Cela signifie que ton PC peut hĂ©berger une copie de Kuby en cas de panne du serveur principal. + +📌 **Ce que tu dois faire** : +1. Installer Python 3.8+ sur ton PC. +2. ExĂ©cuter le script **monitor.py** en permanence (en arriĂšre-plan). +3. **Ne pas Ă©teindre ton PC** trop souvent (ou prĂ©venir si tu dois le faire). + +💡 **Ce qui se passe en cas de panne** : +- Si le serveur principal de Kuby crash, ton PC **dĂ©marrera automatiquement** une copie de secours. +- Tu n’as **rien Ă  faire** : tout est automatique ! +- Quand le serveur principal revient, la copie de secours **s’éteint toute seule**. + +⚠ **Important** : +- Ton PC doit ĂȘtre **connectĂ© Ă  Internet** pour que ça fonctionne. +- Tu auras un **token Discord** dĂ©diĂ© pour ton nƓud (ne le partage pas). +- En cas de problĂšme, contacte @OmegaKube. + +Merci pour ton aide ! 🚀 +``` + +--- + +## 📞 Support et DĂ©pannage + +### **ProblĂšmes Courants** +| ProblĂšme | Cause | Solution | +|----------|-------|----------| +| `monitor.py` ne se connecte pas Ă  GitHub | Mauvais token GitHub | VĂ©rifier `.env` et rĂ©gĂ©nĂ©rer le token. | +| Kuby ne se lance pas sur le nƓud de secours | Permissions Discord manquantes | VĂ©rifier que le bot a les permissions `Send Messages`, `Embed Links`. | +| Conflit entre deux nƓuds | ProblĂšme de verrouillage | RedĂ©marrer les deux nƓuds et vĂ©rifier `kuby_status.json`. | +| `last_heartbeat` n'est pas mis Ă  jour | Erreur de rĂ©seau | VĂ©rifier la connexion Internet et les logs. | + +### **Commandes Utiles** +```bash +# VĂ©rifier les logs de monitor.py +python monitor.py + +# Forcer la prise de relais (pour tester) +python monitor.py --force-takeover + +# Mettre Ă  jour manuellement le heartbeat +python monitor.py --update-heartbeat +``` + +--- + +## 🔼 AmĂ©liorations Futures +- [ ] **Base de donnĂ©es partagĂ©e** (Firebase) pour stocker les donnĂ©es des serveurs. +- [ ] **SystĂšme de vote** : Si plusieurs nƓuds dĂ©tectent un crash, ils votent pour Ă©lire le nouveau nƓud actif. +- [ ] **Notifications push** (via Telegram ou email) pour les admins en cas de bascule. +- [ ] **Tableau de bord** pour surveiller l'Ă©tat de tous les nƓuds. + +--- + +## 📚 Ressources +- [Documentation Disnake](https://docs.disnake.dev/) +- [GitHub Gist API](https://docs.github.com/en/rest/gists/gists?apiVersion=2022-11-28) +- [Python asyncio](https://docs.python.org/3/library/asyncio.html) + +--- + +*Documentation technique - Version 1.0 - DerniĂšre mise Ă  jour : 15/10/2024* diff --git a/banners/banner_1369669999345537145.png b/banners/banner_1369669999345537145.png index cddf163bb4792bb96fbd0df34f0fc1babc1e47cf..a007141dd24c120a2024af4632a216ed14e888de 100644 GIT binary patch literal 199666 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
!yU{)qw}@{ip!=te-U&ZRLqdDUFF2 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

<&`+`1{m}(VV!jt-zk9ulzV5ed|KRWM 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%0D^8D(AR?RZ~axVJ$_H% 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 LhJ1~zW!V1%Qkt58 literal 17515 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 dict: diff --git a/commandes/bug_report.py b/commandes/bug_report.py index 3eefee4..1c37d2a 100644 --- a/commandes/bug_report.py +++ b/commandes/bug_report.py @@ -167,40 +167,17 @@ class BugReport(commands.Cog): self.bot = bot async def cog_load(self): - # Disnake appelle automatiquement cette mĂ©thode dĂšs que la boucle d'Ă©vĂ©nements est active. - self.bot.loop.create_task(self._start_webhook_server()) + # ❌ DÉSACTIVÉ : Le webhook est gĂ©rĂ© par serveur_flask.py (port 5000) + # Le serveur Flask proxyfie dĂ©jĂ  les webhooks GitLab vers ce cog via /bot_event + kuby_logger.info("BugReport cog chargĂ© (webhook gĂ©rĂ© par serveur_flask.py)") + # CrĂ©er le dossier pour REPORTS_FILE s'il n'existe pas + REPORTS_DIR = os.path.dirname(REPORTS_FILE) + os.makedirs(REPORTS_DIR, exist_ok=True) async def _start_webhook_server(self): - await self.bot.wait_until_ready() - - self.web_app = web.Application() - self.web_app.router.add_post('/bot_event', self.handle_bot_event) - self.runner = web.AppRunner(self.web_app) - await self.runner.setup() - - max_retries = 10 - retry_delay = 5 - - for attempt in range(1, max_retries + 1): - try: - self.site = web.TCPSite(self.runner, '127.0.0.1', 5001) - await self.site.start() - kuby_logger.info( - f"Internal Bot Webhook Server started on 127.0.0.1:5001 (Attempt {attempt})" - ) - return - except OSError as e: - if getattr(e, 'errno', None) == 98: # Address already in use - if attempt < max_retries: - kuby_logger.warning( - f"Port 5001 already in use, retrying in {retry_delay}s... ({attempt}/{max_retries})" - ) - await asyncio.sleep(retry_delay) - else: - kuby_logger.error(f"Failed to bind to port 5001 after {max_retries} attempts.") - raise e - else: - raise e + # ❌ FONCTION DÉSACTIVÉE (voir cog_load) + kuby_logger.warning("Tentative d'appel Ă  _start_webhook_server() - cette fonction est dĂ©sactivĂ©e") + return def cog_unload(self): if hasattr(self, 'runner'): diff --git a/commandes/convocation.py b/commandes/convocation.py index d8bc255..e88ae1a 100755 --- a/commandes/convocation.py +++ b/commandes/convocation.py @@ -9,9 +9,14 @@ import logging kuby_logger = logging.getLogger("KubyBot") -# --- CONFIGURATION --- -CONV_SETTINGS_FILE = "data/convocation_settings.json" -CONV_BACKUPS_FILE = "data/convocation_backups.json" +# Chemins ABSOLUS +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "data") +CONV_SETTINGS_FILE = os.path.join(DATA_DIR, "convocation_settings.json") +CONV_BACKUPS_FILE = os.path.join(DATA_DIR, "convocation_backups.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) def load_json(filepath: str) -> Dict: if not os.path.exists(filepath): diff --git a/commandes/goodbye.py b/commandes/goodbye.py index f906036..dceffca 100644 --- a/commandes/goodbye.py +++ b/commandes/goodbye.py @@ -4,13 +4,18 @@ import sqlite3 import aiohttp import io import os +import logging from PIL import Image, ImageDraw, ImageFont from datetime import datetime, timezone +kuby_logger = logging.getLogger("KubyBot") + class Goodbye(commands.Cog): def __init__(self, bot): self.bot = bot - self.db_path = os.path.join(os.path.dirname(__file__), "..", "config.db") + # Chemin absolu vers la base de donnĂ©es + self.base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + self.db_path = os.path.join(self.base_dir, "config.db") self._init_db() def _init_db(self): @@ -77,86 +82,139 @@ class Goodbye(commands.Cog): return f"il y a {seconds} {'seconde' if seconds <= 1 else 'secondes'}" async def create_goodbye_image(self, username, avatar_url, server_name=None, banner_background=None): - current_dir = os.path.dirname(__file__) - base_dir = os.path.abspath(os.path.join(current_dir, "..")) - - async with aiohttp.ClientSession() as session: - async with session.get(avatar_url) as resp: - avatar_bytes = await resp.read() + # Utiliser base_dir dĂ©jĂ  calculĂ© dans __init__ + try: + # TĂ©lĂ©charger l'avatar + async with aiohttp.ClientSession() as session: + async with session.get(avatar_url) as resp: + if resp.status != 200: + kuby_logger.error(f"[Goodbye] Impossible de tĂ©lĂ©charger l'avatar: {resp.status}") + raise ValueError(f"Impossible de tĂ©lĂ©charger l'avatar (code: {resp.status})") + avatar_bytes = await resp.read() - # Utiliser le fond personnalisĂ© ou celui par dĂ©faut - bg_path = None - if banner_background: - # On cherche dans le dossier banners/ - potential_path = os.path.join(base_dir, "banners", banner_background) - if os.path.exists(potential_path): - bg_path = potential_path - - if bg_path: + # VĂ©rifier et utiliser le fond personnalisĂ© ou celui par dĂ©faut + bg_path = None + if banner_background: + potential_path = os.path.join(self.base_dir, "banners", banner_background) + if os.path.exists(potential_path): + bg_path = potential_path + kuby_logger.debug(f"[Goodbye] Fond personnalisĂ© trouvĂ©: {bg_path}") + + if not bg_path: + default_bg = os.path.join(self.base_dir, 'background_template_goodbye.png') + if not os.path.exists(default_bg): + kuby_logger.error(f"[Goodbye] Fond par dĂ©faut introuvable: {default_bg}") + raise FileNotFoundError(f"Fond par dĂ©faut introuvable: {default_bg}") + bg_path = default_bg + kuby_logger.debug(f"[Goodbye] Utilisation du fond par dĂ©faut: {bg_path}") + + # Charger le fond background = Image.open(bg_path) - else: - background = Image.open(os.path.join(base_dir, 'background_template_goodbye.png')) - draw = ImageDraw.Draw(background) - - font_large = ImageFont.truetype(os.path.join(base_dir, 'custom_font_large.otf'), 70) - font_small = ImageFont.truetype(os.path.join(base_dir, 'custom_font_small.otf'), 50) - font_large_omega = ImageFont.truetype(os.path.join(base_dir, 'custom_font_large.otf'), 55) + draw = ImageDraw.Draw(background) + + # VĂ©rifier et charger les polices + font_large_path = os.path.join(self.base_dir, 'custom_font_large.otf') + font_small_path = os.path.join(self.base_dir, 'custom_font_small.otf') + + for font_path in [font_large_path, font_small_path]: + if not os.path.exists(font_path): + kuby_logger.error(f"[Goodbye] Police introuvable: {font_path}") + raise FileNotFoundError(f"Police introuvable: {font_path}") + + font_large = ImageFont.truetype(font_large_path, 70) + font_small = ImageFont.truetype(font_small_path, 50) + + # Dessiner uniquement le nom du serveur (comme pour welcome) + display_name = server_name if server_name else "OMEGA KUBE" + draw.text((325, 135), display_name, font=font_large, fill=(255,255,255)) - draw.text((325, 70), "A Bientot", font=font_large, fill=(255,255,255)) - draw.text((325, 135), f"{username} chez", font=font_small, fill=(255,255,255)) - - # Afficher le nom du serveur personnalisĂ© s'il existe, sinon OMEGA KUBE - display_name = server_name if server_name else "OMEGA KUBE" - draw.text((325, 195), display_name, font=font_large_omega, fill=(255,255,255)) + # Ajouter l'avatar + avatar = Image.open(io.BytesIO(avatar_bytes)).convert("RGBA").resize((224, 224), Image.LANCZOS) + mask = Image.new('L', avatar.size, 0) + mask_draw = ImageDraw.Draw(mask) + mask_draw.ellipse((12, 12, 212, 212), fill=255) + background.paste(avatar, (40, 40), mask) - avatar = Image.open(io.BytesIO(avatar_bytes)).convert("RGBA").resize((224, 224), Image.LANCZOS) - mask = Image.new('L', avatar.size, 0) - mask_draw = ImageDraw.Draw(mask) - mask_draw.ellipse((12, 12, 212, 212), fill=255) - background.paste(avatar, (40, 40), mask) - - img_byte_arr = io.BytesIO() - background.save(img_byte_arr, format='PNG') - img_byte_arr.seek(0) - return img_byte_arr + # Retourner l'image + img_byte_arr = io.BytesIO() + background.save(img_byte_arr, format='PNG') + img_byte_arr.seek(0) + return img_byte_arr + + except Exception as e: + kuby_logger.error(f"[Goodbye] Erreur lors de la crĂ©ation de l'image: {e}", exc_info=True) + return None @commands.Cog.listener() async def on_member_remove(self, member): - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute('SELECT goodbye_channel, goodbye_server_name, goodbye_message, goodbye_banner_background FROM server_configs WHERE server_id = ?', (member.guild.id,)) - result = cursor.fetchone() - conn.close() + kuby_logger.info(f"[Goodbye] DĂ©part dĂ©tectĂ©: {member.name} (ID: {member.id}) du serveur {member.guild.name}") + + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('SELECT goodbye_channel, goodbye_server_name, goodbye_message, goodbye_banner_background FROM server_configs WHERE server_id = ?', (member.guild.id,)) + result = cursor.fetchone() + conn.close() + + if not result or not result[0]: + kuby_logger.debug(f"[Goodbye] Aucune configuration de dĂ©part pour le serveur {member.guild.id}") + return - if result and result[0]: goodbye_channel = result[0] server_name = result[1] custom_message = result[2] banner_background = result[3] channel = member.guild.get_channel(goodbye_channel) - if channel: + if not channel: + kuby_logger.warning(f"[Goodbye] Salon de dĂ©part introuvable (ID: {goodbye_channel}) pour {member.guild.name}") + return + + joined_message = self.humanize_time_delta(member.joined_at) + + try: img = await self.create_goodbye_image( member.name, member.avatar.url if member.avatar else member.default_avatar.url, server_name=server_name, banner_background=banner_background ) - joined_message = self.humanize_time_delta(member.joined_at) - # Utiliser le message personnalisĂ© ou un par dĂ©faut - description = custom_message if custom_message else "Nous espĂ©rons vous revoir bientĂŽt " + # Envoyer avec image si disponible + display_name = server_name if server_name else member.guild.name + default_message = "Nous espĂ©rons vous revoir bientĂŽt " + message_text = custom_message if custom_message else default_message - components = [ - disnake.ui.Container( - disnake.ui.TextDisplay(f"{member} viens de nous quitter."), - disnake.ui.Separator(divider=True), - disnake.ui.TextDisplay(description), - disnake.ui.TextDisplay(f"⌛ **Avait rejoint :** {joined_message}"), - disnake.ui.MediaGallery(disnake.MediaGalleryItem(url="attachment://goodbye.png")) + if img: + embed = disnake.Embed( + description=f"{member.mention} vient de nous quitter.\n\n{message_text}\n\n⌛ **Avait rejoint :** {joined_message}", + color=0x7289DA ) - ] - await channel.send(components=components, file=disnake.File(img, filename="goodbye.png")) + embed.set_image(url="attachment://goodbye.png") + await channel.send(embed=embed, file=disnake.File(img, filename="goodbye.png")) + kuby_logger.info(f"[Goodbye] Message de dĂ©part avec image envoyĂ© pour {member.name}") + else: + # Fallback : image non gĂ©nĂ©rĂ©e + kuby_logger.warning(f"[Goodbye] Image non gĂ©nĂ©rĂ©e pour {member.name}, envoi d'un message texte") + embed = disnake.Embed( + description=f"{member.mention} vient de nous quitter.\n\n{message_text}\n\n⌛ **Avait rejoint :** {joined_message}", + color=0x7289DA + ) + await channel.send(embed=embed) + + except Exception as e: + kuby_logger.error(f"[Goodbye] Erreur lors de la crĂ©ation ou de l'envoi du message: {e}", exc_info=True) + # Fallback avec un message minimal + try: + message_text_fb = custom_message if custom_message else "Nous espĂ©rons vous revoir bientĂŽt" + await channel.send(f"{member.mention} vient de nous quitter. {message_text_fb}") + kuby_logger.info(f"[Goodbye] Message de fallback envoyĂ© pour {member.name}") + except Exception as e2: + kuby_logger.error(f"[Goodbye] Échec du message de fallback: {e2}", exc_info=True) + except sqlite3.Error as e: + kuby_logger.error(f"[Goodbye] Erreur SQLite: {e}", exc_info=True) + except Exception as e: + kuby_logger.error(f"[Goodbye] Erreur inattendue dans on_member_remove: {e}", exc_info=True) async def save_banner_attachment(self, attachment: disnake.Attachment, guild_id: int) -> str: """Sauvegarde l'attachment et retourne le chemin du fichier""" @@ -190,42 +248,47 @@ class Goodbye(commands.Cog): return os.path.basename(banner_path) - @commands.slash_command(name="setgoodbye", description="DĂ©finit le salon d'aurevoir et les paramĂštres personnalisĂ©s") + @commands.slash_command(name="setgoodbye", description="DĂ©finit le salon d'au revoir et les paramĂštres personnalisĂ©s") @commands.has_permissions(administrator=True) async def set_goodbye(self, interaction: disnake.ApplicationCommandInteraction, channel: disnake.TextChannel, server_name: str = None, message: str = None, banner_file: disnake.Attachment = None): + # ✅ DÉFÉRER LA RÉPONSE (le traitement peut prendre > 3s avec les images) + await interaction.response.defer(ephemeral=True) + banner_path = None + error_message = None # Si un fichier est uploadĂ©, le sauvegarder if banner_file: try: banner_path = await self.save_banner_attachment(banner_file, interaction.guild_id) except Exception as e: - await interaction.response.send_message(f"❌ Erreur avec le fichier: {e}", ephemeral=True) - return - - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute('''INSERT INTO server_configs (server_id, goodbye_channel, goodbye_server_name, goodbye_message, goodbye_banner_background) - VALUES (?, ?, ?, ?, ?) ON CONFLICT(server_id) - DO UPDATE SET goodbye_channel=excluded.goodbye_channel, - goodbye_server_name=COALESCE(excluded.goodbye_server_name, goodbye_server_name), - goodbye_message=COALESCE(excluded.goodbye_message, goodbye_message), - goodbye_banner_background=COALESCE(excluded.goodbye_banner_background, goodbye_banner_background)''', - (interaction.guild_id, channel.id, server_name, message, banner_path)) - conn.commit() - conn.close() + error_message = f"❌ Erreur avec le fichier: {e}" - msg = f"✅ Salon d'aurevoir dĂ©fini sur {channel.mention}" - if server_name: msg += f"\nNom du serveur: {server_name}" - if message: msg += f"\nMessage: {message}" - if banner_path: msg += f"\nBanniĂšre personnalisĂ©e activĂ©e." + # Si pas d'erreur, sauvegarder en base de donnĂ©es + if not error_message: + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('''INSERT INTO server_configs (server_id, goodbye_channel, goodbye_server_name, goodbye_message, goodbye_banner_background) + VALUES (?, ?, ?, ?, ?) ON CONFLICT(server_id) + DO UPDATE SET goodbye_channel=excluded.goodbye_channel, + goodbye_server_name=COALESCE(excluded.goodbye_server_name, goodbye_server_name), + goodbye_message=COALESCE(excluded.goodbye_message, goodbye_message), + goodbye_banner_background=COALESCE(excluded.goodbye_banner_background, goodbye_banner_background)''', + (interaction.guild_id, channel.id, server_name, message, banner_path)) + conn.commit() + conn.close() + + msg = f"✅ Salon d'au revoir dĂ©fini sur {channel.mention}" + if server_name: msg += f"\nNom du serveur: {server_name}" + if message: msg += f"\nMessage: {message}" + if banner_path: msg += f"\nBanniĂšre personnalisĂ©e activĂ©e." + error_message = msg + except Exception as e: + error_message = f"❌ Erreur lors de la sauvegarde en base de donnĂ©es: {e}" - components = [ - disnake.ui.Container( - disnake.ui.TextDisplay(msg) - ) - ] - await interaction.response.send_message(components=components, ephemeral=True) + # Envoyer la rĂ©ponse finale (dĂ©ferrĂ©e) + await interaction.followup.send(error_message, ephemeral=True) def setup(bot): bot.add_cog(Goodbye(bot)) \ No newline at end of file diff --git a/commandes/invites.py b/commandes/invites.py index cfe320b..1d45448 100644 --- a/commandes/invites.py +++ b/commandes/invites.py @@ -4,6 +4,7 @@ import sqlite3 import os import logging from typing import Dict, Optional +import asyncio kuby_logger = logging.getLogger("KubyBot") @@ -12,6 +13,7 @@ class Invites(commands.Cog): self.bot = bot self.db_path = os.path.join(os.path.dirname(__file__), "..", "config.db") self.invite_cache = {} # {guild_id: {code: uses}} + self.cache_lock = asyncio.Lock() # Verrou pour Ă©viter les problĂšmes de concurrence self._init_db() def _init_db(self): @@ -38,9 +40,12 @@ class Invites(commands.Cog): async def update_invite_cache(self, guild): try: invites = await guild.invites() - self.invite_cache[guild.id] = {invite.code: invite.uses for invite in invites} + async with self.cache_lock: + self.invite_cache[guild.id] = {invite.code: invite.uses for invite in invites} except disnake.Forbidden: - pass + kuby_logger.warning(f"[Invites] Impossible de mettre Ă  jour le cache des invitations pour {guild.name} (permissions manquantes)") + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de la mise Ă  jour du cache des invitations pour {guild.name}: {e}") @commands.Cog.listener() async def on_ready(self): @@ -54,24 +59,30 @@ class Invites(commands.Cog): @commands.Cog.listener() async def on_invite_create(self, invite): - if invite.guild.id not in self.invite_cache: - self.invite_cache[invite.guild.id] = {} - self.invite_cache[invite.guild.id][invite.code] = invite.uses + async with self.cache_lock: + if invite.guild.id not in self.invite_cache: + self.invite_cache[invite.guild.id] = {} + self.invite_cache[invite.guild.id][invite.code] = invite.uses @commands.Cog.listener() async def on_invite_delete(self, invite): - if invite.guild.id in self.invite_cache: - self.invite_cache[invite.guild.id].pop(invite.code, None) + async with self.cache_lock: + if invite.guild.id in self.invite_cache: + self.invite_cache[invite.guild.id].pop(invite.code, None) @commands.Cog.listener() async def on_member_join(self, member): if member.bot: return guild = member.guild - old_invites = self.invite_cache.get(guild.id, {}) try: + old_invites = self.invite_cache.get(guild.id, {}) new_invites = await guild.invites() except disnake.Forbidden: + kuby_logger.warning(f"[Invites] Impossible de rĂ©cupĂ©rer les invitations pour {guild.name} (permissions manquantes)") + return + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de la rĂ©cupĂ©ration des invitations pour {guild.name}: {e}") return used_invite = None @@ -86,104 +97,159 @@ class Invites(commands.Cog): break # Mise Ă  jour du cache - self.invite_cache[guild.id] = {invite.code: invite.uses for invite in new_invites} + async with self.cache_lock: + self.invite_cache[guild.id] = {invite.code: invite.uses for invite in new_invites} if used_invite: inviter = used_invite.inviter if inviter: - self.record_invite(guild.id, member.id, inviter.id, used_invite.code) - kuby_logger.info(f"đŸ“„ [Invites] {member} invitĂ© par {inviter} ({used_invite.code})") + try: + self.record_invite(guild.id, member.id, inviter.id, used_invite.code) + kuby_logger.info(f"đŸ“„ [Invites] {member} invitĂ© par {inviter} ({used_invite.code})") + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de l'enregistrement de l'invitation pour {member}: {e}") # Modular join message - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute('SELECT log_channel_id FROM invite_configs WHERE guild_id = ?', (guild.id,)) - result = cursor.fetchone() - conn.close() - - if result: - log_channel = guild.get_channel(result[0]) - if log_channel: - # Determine method - method = "invitation standard" - if guild.vanity_url_code and used_invite.code == guild.vanity_url_code: - method = "lien personnalisĂ©" - elif used_invite.max_age == 0: - method = "invitation permanente" - elif used_invite.temporary: - method = "invitation temporaire" - elif used_invite.max_uses == 1: - method = "invitation Ă  usage unique" - - components = [ - disnake.ui.Container( - disnake.ui.Section( - f"Nouveau membre via invitation", - accessory=disnake.ui.Thumbnail(member.display_avatar.url) - ), - disnake.ui.Separator(divider=True), - disnake.ui.TextDisplay(f"đŸ‘€ {member.mention} vient de nous rejoindre !"), - disnake.ui.TextDisplay(f"đŸ€ GrĂące Ă  {inviter.mention}"), - disnake.ui.TextDisplay(f"🔗 Via **{method}**") - ) - ] - await log_channel.send(components=components) + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('SELECT log_channel_id FROM invite_configs WHERE guild_id = ?', (guild.id,)) + result = cursor.fetchone() + conn.close() + + if result: + log_channel = guild.get_channel(result[0]) + if log_channel: + # Determine method + method = "invitation standard" + if guild.vanity_url_code and used_invite.code == guild.vanity_url_code: + method = "lien personnalisĂ©" + elif used_invite.max_age == 0: + method = "invitation permanente" + elif used_invite.temporary: + method = "invitation temporaire" + elif used_invite.max_uses == 1: + method = "invitation Ă  usage unique" + + # RĂ©cupĂ©rer les statistiques de l'inviteur + total_invites, current_invites = self.get_invite_stats(guild.id, inviter.id) + + components = [ + disnake.ui.Container( + disnake.ui.Section( + f"Nouveau membre via invitation", + accessory=disnake.ui.Thumbnail(member.display_avatar.url) + ), + disnake.ui.Separator(divider=True), + disnake.ui.TextDisplay(f"đŸ‘€ {member.mention} vient de nous rejoindre !"), + disnake.ui.TextDisplay(f"đŸ€ GrĂące Ă  {inviter.mention}"), + disnake.ui.TextDisplay(f"📊 Invitations : {current_invites} membres prĂ©sents / {total_invites} total"), + disnake.ui.TextDisplay(f"🔗 Via **{method}**") + ) + ] + await log_channel.send(components=components) + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de l'envoi du message de log pour {member}: {e}") def record_invite(self, guild_id, member_id, inviter_id, code): - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute(''' - INSERT INTO member_invites (guild_id, member_id, inviter_id, invite_code) - VALUES (?, ?, ?, ?) - ON CONFLICT(guild_id, member_id) DO UPDATE SET inviter_id=excluded.inviter_id, invite_code=excluded.invite_code - ''', (guild_id, member_id, inviter_id, code)) - conn.commit() - conn.close() + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute(''' + INSERT INTO member_invites (guild_id, member_id, inviter_id, invite_code) + VALUES (?, ?, ?, ?) + ON CONFLICT(guild_id, member_id) DO UPDATE SET inviter_id=excluded.inviter_id, invite_code=excluded.invite_code + ''', (guild_id, member_id, inviter_id, code)) + conn.commit() + conn.close() + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de l'enregistrement de l'invitation dans la base de donnĂ©es: {e}") def get_inviter_info(self, guild_id, member_id): - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute('SELECT inviter_id FROM member_invites WHERE guild_id = ? AND member_id = ?', (guild_id, member_id)) - result = cursor.fetchone() - conn.close() - return result[0] if result else None + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('SELECT inviter_id FROM member_invites WHERE guild_id = ? AND member_id = ?', (guild_id, member_id)) + result = cursor.fetchone() + conn.close() + return result[0] if result else None + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de la rĂ©cupĂ©ration de l'inviteur pour le membre {member_id}: {e}") + return None def get_invite_stats(self, guild_id, user_id): - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute('SELECT member_id FROM member_invites WHERE guild_id = ? AND inviter_id = ?', (guild_id, user_id)) - invited_ids = [row[0] for row in cursor.fetchall()] - conn.close() + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('SELECT member_id FROM member_invites WHERE guild_id = ? AND inviter_id = ?', (guild_id, user_id)) + invited_ids = [row[0] for row in cursor.fetchall()] + conn.close() - guild = self.bot.get_guild(guild_id) - if not guild: return 0, 0 + guild = self.bot.get_guild(guild_id) + if not guild: return 0, 0 - current_present = 0 - for mid in invited_ids: - if guild.get_member(mid): - current_present += 1 + current_present = 0 + for mid in invited_ids: + if guild.get_member(mid): + current_present += 1 + else: + kuby_logger.debug(f"[Invites] Membre invitĂ© {mid} non trouvĂ© dans le serveur {guild_id}") + + return len(invited_ids), current_present + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de la rĂ©cupĂ©ration des statistiques d'invitations pour {user_id}: {e}") + return 0, 0 + + @commands.Cog.listener() + async def on_member_remove(self, member): + if member.bot: return - return len(invited_ids), current_present + guild = member.guild + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('DELETE FROM member_invites WHERE guild_id = ? AND member_id = ?', (guild.id, member.id)) + conn.commit() + conn.close() + kuby_logger.info(f"đŸ—‘ïž [Invites] Enregistrement de l'invitation supprimĂ© pour {member.name} (ID: {member.id}) car il a quittĂ© le serveur.") + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de la suppression de l'enregistrement de l'invitation pour {member.name}: {e}") + + @commands.Cog.listener() + async def on_member_ban(self, guild, user): + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('DELETE FROM member_invites WHERE guild_id = ? AND member_id = ?', (guild.id, user.id)) + conn.commit() + conn.close() + kuby_logger.info(f"đŸ—‘ïž [Invites] Enregistrement de l'invitation supprimĂ© pour {user.name} (ID: {user.id}) car il a Ă©tĂ© banni.") + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de la suppression de l'enregistrement de l'invitation pour {user.name}: {e}") @commands.slash_command(name="setinvitechannel", description="DĂ©finit le salon des logs d'invitations") @commands.has_permissions(administrator=True) async def set_invite_channel(self, interaction: disnake.ApplicationCommandInteraction, channel: disnake.TextChannel): - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute(''' - INSERT INTO invite_configs (guild_id, log_channel_id) - VALUES (?, ?) - ON CONFLICT(guild_id) DO UPDATE SET log_channel_id=excluded.log_channel_id - ''', (interaction.guild_id, channel.id)) - conn.commit() - conn.close() - - components = [ - disnake.ui.Container( - disnake.ui.TextDisplay(f"✅ Salon des logs d'invitations dĂ©fini sur {channel.mention}") - ) - ] - await interaction.response.send_message(components=components, ephemeral=True) + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute(''' + INSERT INTO invite_configs (guild_id, log_channel_id) + VALUES (?, ?) + ON CONFLICT(guild_id) DO UPDATE SET log_channel_id=excluded.log_channel_id + ''', (interaction.guild_id, channel.id)) + conn.commit() + conn.close() + + components = [ + disnake.ui.Container( + disnake.ui.TextDisplay(f"✅ Salon des logs d'invitations dĂ©fini sur {channel.mention}") + ) + ] + await interaction.response.send_message(components=components, ephemeral=True) + except Exception as e: + kuby_logger.error(f"[Invites] Erreur lors de la configuration du salon des logs d'invitations: {e}") + await interaction.response.send_message("❌ Une erreur est survenue lors de la configuration du salon des logs d'invitations.", ephemeral=True) @commands.command(name="invitations_debug") async def invites_prefix(self, ctx, user: disnake.Member = None): diff --git a/commandes/modules_security/antiraid.py b/commandes/modules_security/antiraid.py index 0244034..a04d9f4 100644 --- a/commandes/modules_security/antiraid.py +++ b/commandes/modules_security/antiraid.py @@ -4,8 +4,14 @@ import json import os from datetime import datetime -SETTINGS_FILE = "data/security_settings.json" -WHITELIST_FILE = "data/whitelist.json" +# Chemins ABSOLUS +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "..", "data") +SETTINGS_FILE = os.path.join(DATA_DIR, "security_settings.json") +WHITELIST_FILE = os.path.join(DATA_DIR, "whitelist.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) def is_whitelisted(guild_id, user_id): if not os.path.exists(WHITELIST_FILE): return False diff --git a/commandes/modules_security/antispam.py b/commandes/modules_security/antispam.py index 19c8969..c26f9a9 100644 --- a/commandes/modules_security/antispam.py +++ b/commandes/modules_security/antispam.py @@ -5,9 +5,14 @@ import os from collections import deque from datetime import datetime, timedelta -# Chemins des fichiers -SETTINGS_FILE = "data/security_settings.json" -WHITELIST_FILE = "data/whitelist.json" +# Chemins ABSOLUS +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "..", "data") +SETTINGS_FILE = os.path.join(DATA_DIR, "security_settings.json") +WHITELIST_FILE = os.path.join(DATA_DIR, "whitelist.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) # Cache TTL en secondes (5 secondes pour avoir une rĂ©activitĂ© acceptable) CACHE_TTL = 5 diff --git a/commandes/modules_security/logs_manager.py b/commandes/modules_security/logs_manager.py index ce97861..fda1eef 100644 --- a/commandes/modules_security/logs_manager.py +++ b/commandes/modules_security/logs_manager.py @@ -4,7 +4,13 @@ import json import os from datetime import datetime -SETTINGS_FILE = "data/security_settings.json" +# Chemins ABSOLUS +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "..", "data") +SETTINGS_FILE = os.path.join(DATA_DIR, "security_settings.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) def get_log_channel(guild, settings): channel_id = settings.get("log_channel_id") diff --git a/commandes/modules_security/rules.py b/commandes/modules_security/rules.py index 2373eb8..3da5a3e 100644 --- a/commandes/modules_security/rules.py +++ b/commandes/modules_security/rules.py @@ -4,9 +4,13 @@ import json import os from typing import Optional -# Chemins des fichiers -SETTINGS_FILE = "data/security_settings.json" +# Chemins ABSOLUS +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "..", "data") +SETTINGS_FILE = os.path.join(DATA_DIR, "security_settings.json") +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) def load_settings(guild_id: int) -> dict: """Charge les paramĂštres de sĂ©curitĂ© pour un serveur""" diff --git a/commandes/no_link.py b/commandes/no_link.py index 3ce67b6..9e9e8de 100755 --- a/commandes/no_link.py +++ b/commandes/no_link.py @@ -1,12 +1,17 @@ -# utils/no_link.py +# commandes/no_link.py import re import disnake from disnake.ext import commands import json import os -# Fichier JSON de configuration security -SECURITY_FILE = "security.json" +# Chemins ABSOLUS +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "data") +SECURITY_FILE = os.path.join(DATA_DIR, "security.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) def load_guild_security(guild_id: int) -> dict: """Retourne la configuration d'un serveur.""" diff --git a/commandes/security.py b/commandes/security.py index 4e3909c..3a2416a 100755 --- a/commandes/security.py +++ b/commandes/security.py @@ -4,9 +4,14 @@ import json import os from typing import Optional -# Chemins des fichiers -SETTINGS_FILE = "data/security_settings.json" -WHITELIST_FILE = "data/whitelist.json" +# Chemins ABSOLUS des fichiers (basĂ©s sur le fichier courant) +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "data") +SETTINGS_FILE = os.path.join(DATA_DIR, "security_settings.json") +WHITELIST_FILE = os.path.join(DATA_DIR, "whitelist.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) # --- UTILITAIRES --- def load_settings(guild_id: int) -> dict: @@ -31,7 +36,7 @@ def save_settings(guild_id: int, settings: dict) -> None: data[str(guild_id)] = settings - os.makedirs(os.path.dirname(SETTINGS_FILE), exist_ok=True) + os.makedirs(DATA_DIR, exist_ok=True) with open(SETTINGS_FILE, "w", encoding='utf-8') as f: json.dump(data, f, indent=4, ensure_ascii=False) diff --git a/commandes/ticket_whitelist.py b/commandes/ticket_whitelist.py index ac106e1..e065ee9 100644 --- a/commandes/ticket_whitelist.py +++ b/commandes/ticket_whitelist.py @@ -36,7 +36,13 @@ def log_channel_rename(channel_id: int): timestamps.append(now) channel_rename_timestamps[channel_id] = timestamps -TICKET_WHITELIST_SETTINGS_FILE = "data/ticket_whitelist_settings.json" +# Chemins ABSOLUS +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "data") +TICKET_WHITELIST_SETTINGS_FILE = os.path.join(DATA_DIR, "ticket_whitelist_settings.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) def load_settings(guild_id: int) -> dict: """Charge les paramĂštres de ticket pour un serveur""" diff --git a/commandes/welcome.py b/commandes/welcome.py index 476bfcc..0f33fe6 100644 --- a/commandes/welcome.py +++ b/commandes/welcome.py @@ -13,8 +13,9 @@ kuby_logger = logging.getLogger("KubyBot") class Welcome(commands.Cog): def __init__(self, bot): self.bot = bot - # Base de donnĂ©es Ă  la racine - self.db_path = os.path.join(os.path.dirname(__file__), "..", "config.db") + # Base de donnĂ©es Ă  la racine - Chemin absolu + self.base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + self.db_path = os.path.join(self.base_dir, "config.db") self._init_db() def _init_db(self): @@ -56,16 +57,18 @@ class Welcome(commands.Cog): conn.commit() conn.close() - async def create_welcome_image(self, username, avatar_url, server_name=None, banner_background=None): - current_dir = os.path.dirname(__file__) - base_dir = os.path.abspath(os.path.join(current_dir, "..")) - + async def create_welcome_image(self, username, avatar_url, server_name=None, banner_background=None, custom_message=None): + # Utiliser base_dir dĂ©jĂ  calculĂ© dans __init__ try: + # TĂ©lĂ©charger l'avatar async with aiohttp.ClientSession() as session: async with session.get(avatar_url) as resp: + if resp.status != 200: + kuby_logger.error(f"[Welcome] Impossible de tĂ©lĂ©charger l'avatar: {resp.status}") + raise ValueError(f"Impossible de tĂ©lĂ©charger l'avatar (code: {resp.status})") avatar_bytes = await resp.read() - # Utiliser le fond personnalisĂ© ou celui par dĂ©faut + # VĂ©rifier et utiliser le fond personnalisĂ© ou celui par dĂ©faut bg_path = None if banner_background: # Si c'est un chemin absolu (pour compatibilitĂ© temporaire) @@ -73,40 +76,97 @@ class Welcome(commands.Cog): bg_path = banner_background else: # Sinon on cherche dans le dossier banners/ - potential_path = os.path.join(base_dir, "banners", banner_background) + potential_path = os.path.join(self.base_dir, "banners", banner_background) if os.path.exists(potential_path): bg_path = potential_path + kuby_logger.debug(f"[Welcome] Fond personnalisĂ© trouvĂ©: {bg_path}") - if bg_path: - background = Image.open(bg_path) - else: - background = Image.open(os.path.join(base_dir, 'background_template.png')) + if not bg_path: + default_bg = os.path.join(self.base_dir, 'background_template.png') + if not os.path.exists(default_bg): + kuby_logger.error(f"[Welcome] Fond par dĂ©faut introuvable: {default_bg}") + raise FileNotFoundError(f"Fond par dĂ©faut introuvable: {default_bg}") + bg_path = default_bg + kuby_logger.debug(f"[Welcome] Utilisation du fond par dĂ©faut: {bg_path}") + # Charger le fond + background = Image.open(bg_path) draw = ImageDraw.Draw(background) - font_large = ImageFont.truetype(os.path.join(base_dir, 'custom_font_large.otf'), 70) - font_small = ImageFont.truetype(os.path.join(base_dir, 'custom_font_small.otf'), 50) + # Charger la police avec support des accents + font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf" + if not os.path.exists(font_path): + kuby_logger.warning(f"[Welcome] Police DejaVu introuvable, fallback sur police custom") + font_path = os.path.join(self.base_dir, 'custom_font_large.otf') + + font = ImageFont.truetype(font_path, 55) + + # Construire le message Ă  afficher sur la banniĂšre + display_message = custom_message if custom_message else "Bienvenue {membre} chez {server}" + + # Remplacer les placeholders + try: + display_message = display_message.format( + membre=username, + member=username, + server=server_name or "", + serveur=server_name or "", + username=username, + servername=server_name or "", + ) + except Exception: + pass # Si placeholders inconnus, garder tel quel + + # Zone de texte disponible (Ă  droite de l'avatar) + text_area_left = 280 + text_area_right = background.width - 20 + text_area_width = text_area_right - text_area_left + + # DĂ©couper le texte en lignes qui tiennent dans la zone + words = display_message.split() + lines = [] + current_line = "" + for word in words: + test_line = f"{current_line} {word}".strip() + bbox = draw.textbbox((0, 0), test_line, font=font) + if bbox[2] - bbox[0] <= text_area_width: + current_line = test_line + else: + if current_line: + lines.append(current_line) + current_line = word + if current_line: + lines.append(current_line) + + wrapped_text = "\n".join(lines) + + # Mesurer le bloc de texte complet + bbox = draw.textbbox((0, 0), wrapped_text, font=font) + text_width = bbox[2] - bbox[0] + text_height = bbox[3] - bbox[1] + + # Centrer le bloc dans la zone disponible + text_x = text_area_left + (text_area_width - text_width) // 2 + text_y = (background.height - text_height) // 2 + + draw.text((text_x, text_y), wrapped_text, font=font, fill=(255, 255, 255), align="center") - draw.text((325, 70), "Bienvenue", font=font_large, fill=(255,255,255)) - draw.text((325, 135), f"{username}", font=font_small, fill=(255,255,255)) - - # Afficher le nom du serveur uniquement si configurĂ© - if server_name: - font_server = ImageFont.truetype(os.path.join(base_dir, 'custom_font_large.otf'), 55) - draw.text((325, 195), server_name, font=font_server, fill=(255,255,255)) + # Ajouter l'avatar avatar = Image.open(io.BytesIO(avatar_bytes)).convert("RGBA").resize((224, 224), Image.LANCZOS) mask = Image.new('L', avatar.size, 0) mask_draw = ImageDraw.Draw(mask) mask_draw.ellipse((12, 12, 212, 212), fill=255) background.paste(avatar, (40, 40), mask) + # Retourner l'image img_byte_arr = io.BytesIO() background.save(img_byte_arr, format='PNG') img_byte_arr.seek(0) return img_byte_arr + except Exception as e: - logging.error(f"Erreur image: {e}") + kuby_logger.error(f"[Welcome] Erreur lors de la crĂ©ation de l'image: {e}", exc_info=True) return None @commands.Cog.listener() @@ -121,7 +181,7 @@ class Welcome(commands.Cog): conn.close() if not result: - kuby_logger.warning(f"⚠ [Welcome] Aucune configuration trouvĂ©e dans la base de donnĂ©es pour le serveur {member.guild.id}") + kuby_logger.debug(f"⚠ [Welcome] Aucune configuration trouvĂ©e dans la base de donnĂ©es pour le serveur {member.guild.id}") return welcome_channel = result[0] @@ -170,40 +230,76 @@ class Welcome(commands.Cog): if welcome_channel: channel = member.guild.get_channel(welcome_channel) if channel: - img = await self.create_welcome_image( - member.name, - member.avatar.url if member.avatar else member.default_avatar.url, - server_name=server_name, - banner_background=banner_background - ) - if img: + try: + # CrĂ©er l'image de bienvenue + server_display_name = server_name if server_name else member.guild.name + img = await self.create_welcome_image( + member.name, + member.avatar.url if member.avatar else member.default_avatar.url, + server_name=server_display_name, + banner_background=banner_background, + custom_message=welcome_channel_message + ) + # Attendre un peu que le Cog d'invitations traite le join await asyncio.sleep(1) + + # RĂ©cupĂ©rer l'inviteur invites_cog = self.bot.get_cog("Invites") inviter_text = "" if invites_cog: - inviter_id = invites_cog.get_inviter_info(member.guild.id, member.id) - if inviter_id: - inviter = member.guild.get_member(inviter_id) or await self.bot.fetch_user(inviter_id) - total, current = invites_cog.get_invite_stats(member.guild.id, inviter_id) - inviter_text = f"\n\n**InvitĂ© par :** {inviter.mention} ({current} invitations)" + try: + inviter_id = invites_cog.get_inviter_info(member.guild.id, member.id) + if inviter_id: + inviter = member.guild.get_member(inviter_id) + if not inviter: + try: + inviter = await self.bot.fetch_user(inviter_id) + except (disnake.NotFound, disnake.HTTPException) as e: + kuby_logger.warning(f"[Welcome] Impossible de rĂ©cupĂ©rer l'inviteur {inviter_id}: {e}") + inviter = None + + if inviter: + total, current = invites_cog.get_invite_stats(member.guild.id, inviter_id) + inviter_text = f"\n\n**InvitĂ© par :** {inviter.mention} ({current} invitations)" + else: + inviter_text = "\n\n**InvitĂ© par :** [Utilisateur introuvable]" + except Exception as e: + kuby_logger.error(f"[Welcome] Erreur lors de la rĂ©cupĂ©ration de l'inviteur: {e}", exc_info=True) + inviter_text = "" - # Utiliser le message personnalisĂ© ou un message par dĂ©faut - channel_description = (welcome_channel_message.format( - username=member.name, - servername=member.guild.name, - member_count=member.guild.member_count - ) if welcome_channel_message else "Bienvenue dans le serveur !\nSi vous cherchez des RolePlay de qualitĂ©,\nVous ĂȘtes au bon endroit. ") + inviter_text - - components = [ - disnake.ui.Container( - disnake.ui.TextDisplay(f"Merci d'accueillir {member} đŸ€"), - disnake.ui.Separator(divider=True), - disnake.ui.TextDisplay(channel_description), - disnake.ui.MediaGallery(disnake.MediaGalleryItem(url="attachment://welcome.png")) + # Envoyer le message avec le format exact requis + if img: + server_display_name = server_name if server_name else member.guild.name + # IMPORTANT: transmettre aussi le nom rĂ©el du serveur Ă  Pillow pour les placeholders {server} + # (utile quand welcome_server_name n'est pas configurĂ©) + # (server_name est utilisĂ© par create_welcome_image) + embed = disnake.Embed( + description=f"Bienvenue sur {server_display_name} {member.name} ! GrĂące Ă  toi, nous avons atteint les {member.guild.member_count} membres !{inviter_text}", + color=0x9B59B6 ) - ] - await channel.send(content=member.mention, components=components, file=disnake.File(img, filename="welcome.png")) + + embed.set_image(url="attachment://welcome.png") + await channel.send(embed=embed, file=disnake.File(img, filename="welcome.png")) + kuby_logger.info(f"[Welcome] Message de bienvenue avec image envoyĂ© pour {member.name}") + else: + # Fallback : image non gĂ©nĂ©rĂ©e, envoyer un message texte + kuby_logger.warning(f"[Welcome] Image non gĂ©nĂ©rĂ©e pour {member.name}, envoi d'un message texte") + server_display_name = server_name if server_name else member.guild.name + await channel.send(f"Bienvenue sur {server_display_name} {member.mention} ! GrĂące Ă  toi, nous avons atteint les {member.guild.member_count} membres !{inviter_text}") + + except Exception as e: + kuby_logger.error(f"[Welcome] Erreur lors de l'envoi du message dans le salon: {e}", exc_info=True) + # Fallback avec un message minimal + try: + await channel.send(f"{member.mention} Bienvenue dans le serveur !") + kuby_logger.info(f"[Welcome] Message de fallback envoyĂ© pour {member.name}") + except Exception as e2: + kuby_logger.error(f"[Welcome] Échec du message de fallback: {e2}", exc_info=True) + else: + kuby_logger.warning(f"[Welcome] Salon de bienvenue introuvable (ID: {welcome_channel}) pour {member.guild.name}") + else: + kuby_logger.debug(f"[Welcome] Aucun salon de bienvenue configurĂ© pour {member.guild.name}") async def save_banner_attachment(self, attachment: disnake.Attachment, guild_id: int) -> str: """Sauvegarde l'attachment et retourne le chemin du fichier""" @@ -240,31 +336,42 @@ class Welcome(commands.Cog): @commands.slash_command(name="setwelcome", description="DĂ©finit le salon, les messages de bienvenue et le fond de la banniĂšre") @commands.has_permissions(administrator=True) async def set_welcome(self, interaction: disnake.ApplicationCommandInteraction, channel: disnake.TextChannel, message_dm: str, message_salon: str, server_name: str, banner_file: disnake.Attachment = None): + # ✅ DÉFÉRER LA RÉPONSE (le traitement peut prendre > 3s avec les images) + await interaction.response.defer(ephemeral=True) + banner_path = None + error_message = None # Si un fichier est uploadĂ©, le sauvegarder if banner_file: try: banner_path = await self.save_banner_attachment(banner_file, interaction.guild_id) except Exception as e: - await interaction.response.send_message(f"❌ Erreur avec le fichier: {e}", ephemeral=True) - return + error_message = f"❌ Erreur avec le fichier: {e}" - conn = sqlite3.connect(self.db_path) - cursor = conn.cursor() - cursor.execute('''INSERT INTO server_configs (server_id, welcome_channel, welcome_dm_message, welcome_server_name, welcome_banner_background, welcome_channel_message) - VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT(server_id) - DO UPDATE SET welcome_channel=excluded.welcome_channel, - welcome_dm_message=excluded.welcome_dm_message, - welcome_server_name=excluded.welcome_server_name, - welcome_banner_background=COALESCE(excluded.welcome_banner_background, welcome_banner_background), - welcome_channel_message=excluded.welcome_channel_message''', - (interaction.guild_id, channel.id, message_dm, server_name, banner_path, message_salon)) - conn.commit() - conn.close() + # Si pas d'erreur, sauvegarder en base de donnĂ©es + if not error_message: + try: + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + cursor.execute('''INSERT INTO server_configs (server_id, welcome_channel, welcome_dm_message, welcome_server_name, welcome_banner_background, welcome_channel_message) + VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT(server_id) + DO UPDATE SET welcome_channel=excluded.welcome_channel, + welcome_dm_message=excluded.welcome_dm_message, + welcome_server_name=excluded.welcome_server_name, + welcome_banner_background=COALESCE(excluded.welcome_banner_background, welcome_banner_background), + welcome_channel_message=excluded.welcome_channel_message''', + (interaction.guild_id, channel.id, message_dm, server_name, banner_path, message_salon)) + conn.commit() + conn.close() + + bg_used = "background_template.png" if not banner_path else (banner_path.split('/')[-1]) + error_message = f"✅ Configuration de bienvenue enregistrĂ©e !\nFond utilisĂ©: {bg_used}" + except Exception as e: + error_message = f"❌ Erreur lors de la sauvegarde en base de donnĂ©es: {e}" - bg_used = "background_template.png" if not banner_path else (banner_path.split('/')[-1]) - await interaction.response.send_message(f"✅ Configuration de bienvenida enregistrĂ©e !\nFond utilisĂ©: {bg_used}", ephemeral=True) + # Envoyer la rĂ©ponse finale (dĂ©ferrĂ©e) + await interaction.followup.send(error_message, ephemeral=True) @commands.slash_command(name="invitations", description="Affiche vos statistiques d'invitations") async def invitations_stats(self, interaction: disnake.ApplicationCommandInteraction, user: disnake.Member = None): diff --git a/commandes/whitelist.py b/commandes/whitelist.py index 5479a76..d21048e 100755 --- a/commandes/whitelist.py +++ b/commandes/whitelist.py @@ -4,7 +4,13 @@ import json import os from typing import List -WHITELIST_FILE = "data/whitelist.json" +# Chemins ABSOLUS des fichiers +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +DATA_DIR = os.path.join(BASE_DIR, "..", "data") +WHITELIST_FILE = os.path.join(DATA_DIR, "whitelist.json") + +# CrĂ©er le dossier data/ s'il n'existe pas +os.makedirs(DATA_DIR, exist_ok=True) class Whitelist(commands.Cog): def __init__(self, bot): diff --git a/serveur_flask.py b/serveur_flask.py index 564ba76..470dc14 100644 --- a/serveur_flask.py +++ b/serveur_flask.py @@ -29,7 +29,7 @@ def send_discord_log(status, message, color, author=None, commit_msg=None): payload = {"embeds": [embed]} try: - requests.post(DISCORD_LOG_URL, json=payload, timeout=5) + requests.post(DISCORD_LOG_URL, json=payload, timeout=10) # ✅ AugmentĂ© de 5s Ă  10s except Exception as e: print(f"[!] Erreur envoi Discord : {e}")