Compare commits

...
Sign in to create a new pull request.

6 commits

8 changed files with 77 additions and 446 deletions

227
README.md
View file

@ -1,153 +1,47 @@
# 🖥️ Discord Status Bot # 🛠️ Mission : Dev GameurBot v2
## Centralisation du Monitoring et de la Gestion PM2 Sécurisée
Bot Discord de monitoring serveur en temps réel. **Objectif :** Faire évoluer/créer un bot composé de deux éléments : un agent de télémétrie distant (`agent.py`) qui remonte les métriques du serveur, et le bot Discord principal (`bot.py`) qui gère un tableau de bord en temps réel (embed épinglé) tout en permettant aux utilisateurs autorisés de relancer des services via une passerelle Linux ultra-sécurisée.
Affiche et met à jour automatiquement un message épinglé dans chaque serveur Discord
avec l'état des ressources, la cause des ralentissements, et une ETA de retour à la normale.
--- ---
## Architecture ## 📐 Architecture Générale
``` ```
[Serveur de jeux] [n'importe où] [Serveur de Jeux / Minecraft] [Hébergement du Bot]
agent.py ──── HTTP POST ────▶ bot.py agent.py (psutil) bot.py
(psutil) /metrics ├── serveur aiohttp (port 8765) │ ├── Serveur aiohttp (Port 8765)
├── StatusEngine (analyse) │─── HTTP POST (/metrics avec Secret) ───▶├── StatusEngine (Analyse & Seuils)
└── discord.py (mise à jour embed épinglé) └── discord.py / disnake
(Mise à jour Embed Épinglé)
┌─────────┼─────────┐ [Wrapper Bash local & PM2] │
Guilde 1 Guilde 2 Guilde 3 ... /usr/local/bin/manage_minecraft.sh ◀──── Applique Sudo ────────┘ (Commandes Slash /minecraft)
``` ```
--- ---
## Installation ## 1. L'Agent de Télémétrie (`agent.py`)
### 1. Dépendances À installer sur le serveur de jeux. Il s'exécute en tâche de fond (`PUSH_INTERVAL = 15s`) pour remonter les infos systèmes au bot principal.
```bash
pip install -r requirements.txt
```
### 2. Configuration
```bash
cp config.example.json config.json
```
Remplis `config.json` :
| Clé | Description |
|-----------------|--------------------------------------------------------------------|
| `discord_token` | Token de ton bot (https://discord.com/developers/applications) |
| `api_secret` | Mot de passe partagé entre le bot et l'agent (chaîne aléatoire) |
| `api_port` | Port HTTP du bot (défaut : 8765) |
> ⚠️ Le même `api_secret` doit être renseigné dans `agent.py` (`API_SECRET`) et dans `config.json`.
### 3. Adapter l'agent
Dans `agent.py`, modifie :
```python
BOT_API_URL = "http://ADRESSE_DU_BOT:8765/metrics"
API_SECRET = "le_meme_secret_que_dans_config.json"
```
Si le bot et l'agent tournent sur la même machine, laisse `http://localhost:8765/metrics`.
Si le bot est sur une autre machine (VPS dédié Discord), utilise son IP/domaine.
### 4. Ajouter les mots-clés de tes services
Dans `agent.py`, `SERVICE_KEYWORDS` :
- **Sécurité :** Authentification obligatoire via un header contenant un `API_SECRET` partagé.
- **Filtrage des processus :** L'agent utilise `psutil` pour calculer la charge des services selon cette table de mots-clés :
```python ```python
SERVICE_KEYWORDS = { SERVICE_KEYWORDS = {
"minecraft": ["java", "minecraft", "paper"], "minecraft": ["java", "minecraft", "paper"],
"satisfactory": ["factoryserver"], "satisfactory": ["factoryserver"],
"ollama": ["ollama"], "ollama": ["ollama"],
# Ajoute tes propres services ici
"mon_jeu": ["mon_process_name"],
} }
``` ```
--- ---
## Lancement ## 2. Le Bot & Serveur d'Écoute (`bot.py`)
### Bot (à lancer en premier) Le code principal doit faire tourner un serveur Web léger (`aiohttp`) sur le port `8765` en parallèle du client Discord pour intercepter les requêtes de l'agent.
```bash
python bot.py
```
Ou en service systemd :
```ini
[Unit]
Description=Discord Status Bot
After=network.target
[Service]
WorkingDirectory=/chemin/vers/discord-status-bot
ExecStart=/usr/bin/python3 bot.py
Restart=always
[Install]
WantedBy=multi-user.target
```
### Agent (sur le serveur de jeux)
```bash
python agent.py
```
Idem, peut être lancé en service systemd.
---
## Configuration Discord
### Créer le bot Discord
1. Aller sur https://discord.com/developers/applications
2. **New Application** → donne-lui un nom
3. Onglet **Bot****Reset Token** → copier le token dans `config.json`
4. Activer **Server Members Intent** et **Message Content Intent** si nécessaire
5. Onglet **OAuth2 > URL Generator** :
- Scopes : `bot`, `applications.commands`
- Bot Permissions : `Send Messages`, `Manage Messages`, `Embed Links`, `Read Message History`
6. Copier l'URL générée et l'ouvrir pour inviter le bot sur tes serveurs
### Configurer chaque serveur Discord
Une fois le bot invité sur un serveur et lancé localement :
1. Va dans le salon où tu veux le tableau de bord
2. Tape `/setup`
3. Le bot envoie et épingle le premier message de statut
4. Répète sur chaque serveur Discord
---
## Commandes slash disponibles
| Commande | Description | Permissions |
|--------------|--------------------------------------------------|-------------|
| `/status` | Affiche l'état actuel (message éphémère) | Tous |
| `/services` | Détail de chaque service détecté | Tous |
| `/setup` | Configure le salon actuel comme tableau de bord | Admin |
---
## Personnalisation
### Seuils d'alerte
Dans `status_engine.py`, modifie `THRESHOLDS` :
- **Route `POST /metrics` :** Vérifie le secret. Si incorrect ──▶ renvoie un code `401`.
- **StatusEngine :** Analyse la charge selon les seuils suivants :
```python ```python
THRESHOLDS = { THRESHOLDS = {
"cpu": {"warning": 70, "critical": 85}, "cpu": {"warning": 70, "critical": 85},
@ -155,38 +49,71 @@ THRESHOLDS = {
"swap": {"warning": 40, "critical": 70}, "swap": {"warning": 40, "critical": 70},
} }
``` ```
*Si un seuil est franchi, le bot doit automatiquement trouver le processus coupable via la table des mots-clés et générer une explication claire (ex: "CPU à 82% — principal consommateur : Minecraft").*
### Fréquence de mise à jour
- **Agent**`PUSH_INTERVAL` dans `agent.py` (défaut : 15s)
- **Bot**`@tasks.loop(seconds=20)` dans `bot.py`
--- ---
## Exemple de rendu ## 3. La Passerelle de Gestion PM2 (Sécurité Maximale)
Pour le redémarrage des serveurs via Discord, **il est strictement interdit de manipuler directement le terminal ou d'utiliser `shell=True` / `os.system`**. Tout doit passer par ce script Bash intermédiaire à placer sur la machine dans `/usr/local/bin/manage_minecraft.sh` (Droits `755`, propriétaire `root`) :
```bash
#!/bin/bash
USER_MINECRAFT="discord"
PM2_PATH="/home/discord/.nvm/versions/node/v24.15.0/bin/pm2"
export PM2_HOME="/home/discord/.pm2"
# Whitelist stricte des applications PM2 gérables
SERVEURS_AUTORISES=("survie" "skyblock" "creatif")
ACTION=$1 # 'restart' ou 'status'
SERVEUR=$2 # ex: 'survie'
# 1. Validation de l'action
if [[ "$ACTION" != "restart" && "$ACTION" != "status" ]]; then
echo "Erreur : Action non valide." >&2
exit 1
fi
# 2. Validation du serveur (Contre les injections d'arguments ou de flags)
IN_LIST=false
for s in "${SERVEURS_AUTORISES[@]}"; do
if [[ "$s" == "$SERVEUR" ]]; then
IN_LIST=true
break
fi
done
if [ "$IN_LIST" = false ]; then
echo "Erreur : Serveur non autorisé." >&2
exit 1
fi
# 3. Exécution propre avec switch d'utilisateur
case "$ACTION" in
restart)
sudo -u $USER_MINECRAFT $PM2_PATH restart "$SERVEUR"
;;
status)
sudo -u $USER_MINECRAFT $PM2_PATH describe "$SERVEUR"
;;
esac
``` ```
🔴 Serveur — Surchargé
📊 Ressources > ⚙️ *Note Système : L'utilisateur Linux du bot (`gameurbot`) possédera la règle `gameurbot ALL=(ALL) NOPASSWD: /usr/local/bin/manage_minecraft.sh *` dans le fichier `/etc/sudoers`.*
CPU ████████░░ 82% 🌡️ 74°C
RAM █████████░ 91% (14.6/16.0 GB)
SWAP ████░░░░░░ 43%
📈 Charge (1m / 5m / 15m) : 7.42 / 6.80 / 5.12 ---
🎮 Services actifs ## 4. Interface Discord & Commandes attendues
▸ ⛏️ Minecraft 🔥 — CPU 45% | RAM 4.2 GB
▸ 🤖 Ollama (IA) 🔥 — CPU 38% | RAM 8.1 GB
▸ 🏭 Satisfactory ⚡ — CPU 12% | RAM 2.1 GB
🔍 Pourquoi ça rame ? Tu dois implémenter ces 3 commandes d'interaction (en utilisant exclusivement des listes de choix `choices`, **aucune saisie de texte libre** pour les arguments) :
• CPU à 82% — principal consommateur : Minecraft (45%)
• RAM à 91% (14.6/16.0 GB) — Ollama (IA) occupe 8.1 GB
• 💡 Conflit probable : Ollama (IA) et Minecraft, Satisfactory se partagent les ressources
⏱️ Retour à la normale 1. `/setup` *(Admin seulement)* : Initialise le salon actuel. Le bot y envoie un Embed et l'**épingle**. C'est cet embed précis qui sera édité dynamiquement toutes les 15-20 secondes avec le rapport d'état de l'infrastructure (graphiques en barres ASCII textuelles, charge système, alertes de goulot d'étranglement).
⏱️ Retour à la normale dans ~8 min 2. `/status` *(Tous)* : Affiche le statut complet sous forme de message éphémère (invisible pour les autres joueurs).
3. `/minecraft action [choices: restart, status] serveur [choices: survie, skyblock, creatif]` :
- Exécute le script système via un appel `subprocess.run(..., shell=False)`.
- Utilise impérativement `inter.response.defer()` dès le début de la commande pour éviter les déconnexions/timeouts de 3 secondes de Discord pendant les redémarrages d'instances Java.
Dernière mise à jour 26/02/2026 21:34 ### 📜 Traçabilité (Logs d'Audit)
``` Dès qu'un utilisateur clique sur une commande `/minecraft action`, le bot doit instantanément envoyer un rapport détaillé dans notre salon privé de logs administrateur : `[Audit] Qui a cliqué / Quelle heure / Quel serveur / Statut final de la commande`.

View file

View file

@ -1,14 +0,0 @@
[Agent] Démarrage — push vers http://localhost:8765/metrics toutes les 5s
[12:25:55] CPU=12.1% RAM=32.5% → ✓
[12:26:01] CPU=3.6% RAM=32.6% → ✓
[12:26:07] CPU=5.3% RAM=32.7% → ✓
[12:26:13] CPU=4.5% RAM=32.5% → ✓
[12:26:19] CPU=8.6% RAM=32.5% → ✓
[12:26:25] CPU=6.5% RAM=32.9% → ✓
[12:26:31] CPU=20.8% RAM=34.2% → ✓
[12:26:37] CPU=8.1% RAM=33.0% → ✓
[12:26:43] CPU=3.7% RAM=32.8% → ✓
[12:26:50] CPU=4.2% RAM=32.3% → ✓
[12:26:56] CPU=5.7% RAM=32.2% → ✓
[12:27:02] CPU=15.0% RAM=32.2% → ✓
[12:27:08] CPU=19.7% RAM=32.9% → ✓

View file

@ -1,61 +0,0 @@
[Agent] Démarrage — push vers http://localhost:8765/metrics toutes les 5s
[12:19:48] CPU=24.6% RAM=71.4% → ✓
[12:19:54] CPU=18.3% RAM=71.7% → ✓
[12:20:00] CPU=14.2% RAM=71.4% → ✓
[12:20:06] CPU=14.7% RAM=71.3% → ✓
[12:20:12] CPU=15.4% RAM=71.2% → ✓
[12:20:18] CPU=17.9% RAM=71.2% → ✓
[12:20:24] CPU=16.5% RAM=71.3% → ✓
[12:20:30] CPU=16.5% RAM=71.5% → ✓
[12:20:36] CPU=21.5% RAM=71.2% → ✓
[12:20:42] CPU=31.4% RAM=71.0% → ✓
[12:20:49] CPU=38.2% RAM=71.2% → ✓
[12:20:55] CPU=55.5% RAM=35.2% → ✓
[12:21:01] CPU=31.1% RAM=35.4% → ✓
[12:21:07] CPU=15.2% RAM=35.0% → ✓
[12:21:13] CPU=16.2% RAM=34.4% → ✓
[12:21:19] CPU=9.1% RAM=31.9% → ✓
[12:21:25] CPU=9.8% RAM=32.1% → ✓
[12:21:31] CPU=4.9% RAM=31.8% → ✓
[12:21:37] CPU=5.1% RAM=31.6% → ✓
[12:21:43] CPU=4.9% RAM=31.6% → ✓
[12:21:49] CPU=5.6% RAM=31.6% → ✓
[12:21:55] CPU=14.8% RAM=32.2% → ✓
[12:22:01] CPU=13.4% RAM=32.1% → ✓
[12:22:08] CPU=8.7% RAM=32.5% → ✓
[12:22:14] CPU=4.3% RAM=32.2% → ✓
[12:22:20] CPU=4.5% RAM=31.8% → ✓
[12:22:26] CPU=8.6% RAM=31.9% → ✓
[12:22:32] CPU=5.2% RAM=31.7% → ✓
[12:22:38] CPU=6.3% RAM=31.6% → ✓
[12:22:44] CPU=2.4% RAM=31.6% → ✓
[12:22:50] CPU=3.7% RAM=31.6% → ✓
[12:22:56] CPU=9.3% RAM=31.1% → ✓
[12:23:02] CPU=2.6% RAM=31.0% → ✓
[12:23:08] CPU=15.7% RAM=31.2% → ✓
[12:23:14] CPU=7.5% RAM=31.4% → ✓
[12:23:20] CPU=2.5% RAM=31.3% → ✓
[12:23:27] CPU=4.6% RAM=32.1% → ✓
[12:23:33] CPU=9.5% RAM=31.4% → ✓
[12:23:39] CPU=7.6% RAM=31.4% → ✓
[12:23:45] CPU=8.3% RAM=31.2% → ✓
[12:23:51] CPU=10.3% RAM=31.2% → ✓
[12:23:57] CPU=15.0% RAM=31.2% → ✓
[12:24:03] CPU=11.1% RAM=31.8% → ✓
[12:24:09] CPU=10.7% RAM=31.7% → ✓
[12:24:15] CPU=20.2% RAM=34.4% → ✓
[12:24:21] CPU=15.6% RAM=34.0% → ✓
[12:24:27] CPU=9.6% RAM=33.5% → ✓
[12:24:34] CPU=5.1% RAM=32.1% → ✓
[12:24:40] CPU=8.1% RAM=31.5% → ✓
[12:24:46] CPU=3.0% RAM=31.4% → ✓
[12:24:52] CPU=2.7% RAM=31.4% → ✓
[12:24:58] CPU=3.0% RAM=31.4% → ✓
[12:25:05] CPU=3.4% RAM=31.9% → ✓
[12:25:11] CPU=6.4% RAM=31.6% → ✓
[12:25:17] CPU=7.8% RAM=32.2% → ✓
[12:25:23] CPU=19.9% RAM=34.0% → ✓
[12:25:29] CPU=4.0% RAM=32.9% → ✓
[12:25:35] CPU=6.9% RAM=32.4% → ✓
[12:25:41] CPU=19.0% RAM=32.3% → ✓
[12:25:47] CPU=18.7% RAM=32.3% → ✓

View file

@ -1,28 +0,0 @@
12:37:08 [WARNING] PyNaCl is not installed, voice will NOT be supported
12:37:08 [WARNING] Privileged message content intent is missing, commands may not work as expected.
12:37:08 [INFO] logging in using static token
12:37:09 [INFO] Services de monitoring démarrés.
12:37:09 [INFO] API HTTP en écoute sur le port 8765
12:37:09 [INFO] Slash commands synced.
12:37:09 [INFO] Shard ID None has connected to Gateway (Session ID: 4e987803b1749930ee6baa8fa100bf49).
12:37:10 [INFO] Métriques reçues de l'agent (CPU: 3.5%)
12:37:10 [INFO] 127.0.0.1 [26/Feb/2026:12:37:10 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:37:11 [INFO] Connecté en tant que Gameurpro12bot#8094 (ID 1074714308660965398)
12:37:12 [WARNING] Impossible de récupérer le salon 123456789012345678: 404 Not Found (error code: 10003): Unknown Channel
12:37:12 [INFO] Message épinglé dans #chat-gameurcorp (1110604692263796746)
12:37:16 [INFO] Métriques reçues de l'agent (CPU: 2.1%)
12:37:16 [INFO] 127.0.0.1 [26/Feb/2026:12:37:16 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:37:22 [INFO] Métriques reçues de l'agent (CPU: 1.9%)
12:37:22 [INFO] 127.0.0.1 [26/Feb/2026:12:37:22 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:37:28 [INFO] Métriques reçues de l'agent (CPU: 6.0%)
12:37:28 [INFO] 127.0.0.1 [26/Feb/2026:12:37:28 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:37:32 [WARNING] Impossible de récupérer le salon 123456789012345678: 404 Not Found (error code: 10003): Unknown Channel
12:37:34 [INFO] Métriques reçues de l'agent (CPU: 4.7%)
12:37:34 [INFO] 127.0.0.1 [26/Feb/2026:12:37:34 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:37:40 [INFO] Métriques reçues de l'agent (CPU: 5.2%)
12:37:40 [INFO] 127.0.0.1 [26/Feb/2026:12:37:40 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:37:46 [INFO] Métriques reçues de l'agent (CPU: 2.4%)
12:37:46 [INFO] 127.0.0.1 [26/Feb/2026:12:37:46 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:37:52 [WARNING] Impossible de récupérer le salon 123456789012345678: 404 Not Found (error code: 10003): Unknown Channel
12:37:53 [INFO] Métriques reçues de l'agent (CPU: 2.3%)
12:37:53 [INFO] 127.0.0.1 [26/Feb/2026:12:37:53 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"

View file

@ -1,41 +0,0 @@
12:25:51 [WARNING] PyNaCl is not installed, voice will NOT be supported
12:25:51 [WARNING] Privileged message content intent is missing, commands may not work as expected.
12:25:51 [INFO] logging in using static token
12:25:52 [INFO] Slash commands synced.
12:25:52 [INFO] API HTTP en écoute sur le port 8765
12:25:53 [INFO] Shard ID None has connected to Gateway (Session ID: 1e9cce5a480ef266caf1e55cbf7d415c).
12:25:55 [INFO] Connecté en tant que Gameurpro12bot#8094 (ID 1074714308660965398)
12:25:55 [INFO] Métriques reçues de l'agent (CPU: 12.1%)
12:25:55 [INFO] 127.0.0.1 [26/Feb/2026:12:25:55 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:01 [INFO] Métriques reçues de l'agent (CPU: 3.6%)
12:26:01 [INFO] 127.0.0.1 [26/Feb/2026:12:26:01 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:07 [INFO] Métriques reçues de l'agent (CPU: 5.3%)
12:26:07 [INFO] 127.0.0.1 [26/Feb/2026:12:26:07 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:13 [INFO] Métriques reçues de l'agent (CPU: 4.5%)
12:26:13 [INFO] 127.0.0.1 [26/Feb/2026:12:26:13 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:15 [ERROR] Unhandled exception in internal background task 'update_loop'.
Traceback (most recent call last):
File "/home/gameurpro12/Documents/Mes_projets/Discord_bot/GameurBot/.venv/lib/python3.12/site-packages/discord/ext/tasks/__init__.py", line 246, in _loop
await self.coro(*args, **kwargs)
File "/home/gameurpro12/Documents/Mes_projets/Discord_bot/GameurBot/bot.py", line 114, in update_loop
channel_id = target.get("channel_id")
^^^^^^^^^^
AttributeError: 'str' object has no attribute 'get'
12:26:19 [INFO] Métriques reçues de l'agent (CPU: 8.6%)
12:26:19 [INFO] 127.0.0.1 [26/Feb/2026:12:26:19 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:25 [INFO] Métriques reçues de l'agent (CPU: 6.5%)
12:26:25 [INFO] 127.0.0.1 [26/Feb/2026:12:26:25 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:31 [INFO] Métriques reçues de l'agent (CPU: 20.8%)
12:26:31 [INFO] 127.0.0.1 [26/Feb/2026:12:26:31 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:37 [INFO] Métriques reçues de l'agent (CPU: 8.1%)
12:26:37 [INFO] 127.0.0.1 [26/Feb/2026:12:26:37 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:43 [INFO] Métriques reçues de l'agent (CPU: 3.7%)
12:26:43 [INFO] 127.0.0.1 [26/Feb/2026:12:26:43 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:50 [INFO] Métriques reçues de l'agent (CPU: 4.2%)
12:26:50 [INFO] 127.0.0.1 [26/Feb/2026:12:26:50 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:26:56 [INFO] Métriques reçues de l'agent (CPU: 5.7%)
12:26:56 [INFO] 127.0.0.1 [26/Feb/2026:12:26:56 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:27:02 [INFO] Métriques reçues de l'agent (CPU: 15.0%)
12:27:02 [INFO] 127.0.0.1 [26/Feb/2026:12:27:02 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:27:08 [INFO] Métriques reçues de l'agent (CPU: 19.7%)
12:27:08 [INFO] 127.0.0.1 [26/Feb/2026:12:27:08 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"

View file

@ -1,135 +0,0 @@
12:19:44 [WARNING] PyNaCl is not installed, voice will NOT be supported
12:19:44 [WARNING] Privileged message content intent is missing, commands may not work as expected.
12:19:44 [INFO] logging in using static token
12:19:45 [INFO] Slash commands synced.
12:19:45 [INFO] API HTTP en écoute sur le port 8765
12:19:45 [INFO] Shard ID None has connected to Gateway (Session ID: 44cfa7b3e2d7bc3caa7722d82b8d5c85).
12:19:47 [INFO] Connecté en tant que Gameurpro12bot#8094 (ID 1074714308660965398)
12:19:48 [INFO] Métriques reçues de l'agent (CPU: 24.6%)
12:19:48 [INFO] 127.0.0.1 [26/Feb/2026:12:19:48 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:19:54 [INFO] Métriques reçues de l'agent (CPU: 18.3%)
12:19:54 [INFO] 127.0.0.1 [26/Feb/2026:12:19:54 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:00 [INFO] Métriques reçues de l'agent (CPU: 14.2%)
12:20:00 [INFO] 127.0.0.1 [26/Feb/2026:12:20:00 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:06 [INFO] Métriques reçues de l'agent (CPU: 14.7%)
12:20:06 [INFO] 127.0.0.1 [26/Feb/2026:12:20:06 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:07 [ERROR] Unhandled exception in internal background task 'update_loop'.
Traceback (most recent call last):
File "/home/gameurpro12/Documents/Mes_projets/Discord_bot/GameurBot/.venv/lib/python3.12/site-packages/discord/ext/tasks/__init__.py", line 246, in _loop
await self.coro(*args, **kwargs)
File "/home/gameurpro12/Documents/Mes_projets/Discord_bot/GameurBot/bot.py", line 114, in update_loop
channel_id = target.get("channel_id")
^^^^^^^^^^
AttributeError: 'str' object has no attribute 'get'
12:20:12 [INFO] Métriques reçues de l'agent (CPU: 15.4%)
12:20:12 [INFO] 127.0.0.1 [26/Feb/2026:12:20:12 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:18 [INFO] Métriques reçues de l'agent (CPU: 17.9%)
12:20:18 [INFO] 127.0.0.1 [26/Feb/2026:12:20:18 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:24 [INFO] Métriques reçues de l'agent (CPU: 16.5%)
12:20:24 [INFO] 127.0.0.1 [26/Feb/2026:12:20:24 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:30 [INFO] Métriques reçues de l'agent (CPU: 16.5%)
12:20:30 [INFO] 127.0.0.1 [26/Feb/2026:12:20:30 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:36 [INFO] Métriques reçues de l'agent (CPU: 21.5%)
12:20:36 [INFO] 127.0.0.1 [26/Feb/2026:12:20:36 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:42 [INFO] Métriques reçues de l'agent (CPU: 31.4%)
12:20:42 [INFO] 127.0.0.1 [26/Feb/2026:12:20:42 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:49 [INFO] Métriques reçues de l'agent (CPU: 38.2%)
12:20:49 [INFO] 127.0.0.1 [26/Feb/2026:12:20:49 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:20:55 [INFO] Métriques reçues de l'agent (CPU: 55.5%)
12:20:55 [INFO] 127.0.0.1 [26/Feb/2026:12:20:55 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:01 [INFO] Métriques reçues de l'agent (CPU: 31.1%)
12:21:01 [INFO] 127.0.0.1 [26/Feb/2026:12:21:01 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:07 [INFO] Métriques reçues de l'agent (CPU: 15.2%)
12:21:07 [INFO] 127.0.0.1 [26/Feb/2026:12:21:07 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:13 [INFO] Métriques reçues de l'agent (CPU: 16.2%)
12:21:13 [INFO] 127.0.0.1 [26/Feb/2026:12:21:13 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:19 [INFO] Métriques reçues de l'agent (CPU: 9.1%)
12:21:19 [INFO] 127.0.0.1 [26/Feb/2026:12:21:19 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:25 [INFO] Métriques reçues de l'agent (CPU: 9.8%)
12:21:25 [INFO] 127.0.0.1 [26/Feb/2026:12:21:25 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:31 [INFO] Métriques reçues de l'agent (CPU: 4.9%)
12:21:31 [INFO] 127.0.0.1 [26/Feb/2026:12:21:31 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:37 [INFO] Métriques reçues de l'agent (CPU: 5.1%)
12:21:37 [INFO] 127.0.0.1 [26/Feb/2026:12:21:37 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:43 [INFO] Métriques reçues de l'agent (CPU: 4.9%)
12:21:43 [INFO] 127.0.0.1 [26/Feb/2026:12:21:43 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:49 [INFO] Métriques reçues de l'agent (CPU: 5.6%)
12:21:49 [INFO] 127.0.0.1 [26/Feb/2026:12:21:49 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:21:55 [INFO] Métriques reçues de l'agent (CPU: 14.8%)
12:21:55 [INFO] 127.0.0.1 [26/Feb/2026:12:21:55 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:01 [INFO] Métriques reçues de l'agent (CPU: 13.4%)
12:22:01 [INFO] 127.0.0.1 [26/Feb/2026:12:22:01 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:08 [INFO] Métriques reçues de l'agent (CPU: 8.7%)
12:22:08 [INFO] 127.0.0.1 [26/Feb/2026:12:22:08 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:14 [INFO] Métriques reçues de l'agent (CPU: 4.3%)
12:22:14 [INFO] 127.0.0.1 [26/Feb/2026:12:22:14 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:20 [INFO] Métriques reçues de l'agent (CPU: 4.5%)
12:22:20 [INFO] 127.0.0.1 [26/Feb/2026:12:22:20 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:26 [INFO] Métriques reçues de l'agent (CPU: 8.6%)
12:22:26 [INFO] 127.0.0.1 [26/Feb/2026:12:22:26 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:32 [INFO] Métriques reçues de l'agent (CPU: 5.2%)
12:22:32 [INFO] 127.0.0.1 [26/Feb/2026:12:22:32 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:38 [INFO] Métriques reçues de l'agent (CPU: 6.3%)
12:22:38 [INFO] 127.0.0.1 [26/Feb/2026:12:22:38 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:44 [INFO] Métriques reçues de l'agent (CPU: 2.4%)
12:22:44 [INFO] 127.0.0.1 [26/Feb/2026:12:22:44 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:50 [INFO] Métriques reçues de l'agent (CPU: 3.7%)
12:22:50 [INFO] 127.0.0.1 [26/Feb/2026:12:22:50 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:22:56 [INFO] Métriques reçues de l'agent (CPU: 9.3%)
12:22:56 [INFO] 127.0.0.1 [26/Feb/2026:12:22:56 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:02 [INFO] Métriques reçues de l'agent (CPU: 2.6%)
12:23:02 [INFO] 127.0.0.1 [26/Feb/2026:12:23:02 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:08 [INFO] Métriques reçues de l'agent (CPU: 15.7%)
12:23:08 [INFO] 127.0.0.1 [26/Feb/2026:12:23:08 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:14 [INFO] Métriques reçues de l'agent (CPU: 7.5%)
12:23:14 [INFO] 127.0.0.1 [26/Feb/2026:12:23:14 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:20 [INFO] Métriques reçues de l'agent (CPU: 2.5%)
12:23:20 [INFO] 127.0.0.1 [26/Feb/2026:12:23:20 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:27 [INFO] Métriques reçues de l'agent (CPU: 4.6%)
12:23:27 [INFO] 127.0.0.1 [26/Feb/2026:12:23:27 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:33 [INFO] Métriques reçues de l'agent (CPU: 9.5%)
12:23:33 [INFO] 127.0.0.1 [26/Feb/2026:12:23:33 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:39 [INFO] Métriques reçues de l'agent (CPU: 7.6%)
12:23:39 [INFO] 127.0.0.1 [26/Feb/2026:12:23:39 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:45 [INFO] Métriques reçues de l'agent (CPU: 8.3%)
12:23:45 [INFO] 127.0.0.1 [26/Feb/2026:12:23:45 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:51 [INFO] Métriques reçues de l'agent (CPU: 10.3%)
12:23:51 [INFO] 127.0.0.1 [26/Feb/2026:12:23:51 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:23:57 [INFO] Métriques reçues de l'agent (CPU: 15.0%)
12:23:57 [INFO] 127.0.0.1 [26/Feb/2026:12:23:57 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:03 [INFO] Métriques reçues de l'agent (CPU: 11.1%)
12:24:03 [INFO] 127.0.0.1 [26/Feb/2026:12:24:03 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:09 [INFO] Métriques reçues de l'agent (CPU: 10.7%)
12:24:09 [INFO] 127.0.0.1 [26/Feb/2026:12:24:09 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:15 [INFO] Métriques reçues de l'agent (CPU: 20.2%)
12:24:15 [INFO] 127.0.0.1 [26/Feb/2026:12:24:15 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:21 [INFO] Métriques reçues de l'agent (CPU: 15.6%)
12:24:21 [INFO] 127.0.0.1 [26/Feb/2026:12:24:21 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:27 [INFO] Métriques reçues de l'agent (CPU: 9.6%)
12:24:27 [INFO] 127.0.0.1 [26/Feb/2026:12:24:27 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:34 [INFO] Métriques reçues de l'agent (CPU: 5.1%)
12:24:34 [INFO] 127.0.0.1 [26/Feb/2026:12:24:34 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:40 [INFO] Métriques reçues de l'agent (CPU: 8.1%)
12:24:40 [INFO] 127.0.0.1 [26/Feb/2026:12:24:40 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:46 [INFO] Métriques reçues de l'agent (CPU: 3.0%)
12:24:46 [INFO] 127.0.0.1 [26/Feb/2026:12:24:46 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:52 [INFO] Métriques reçues de l'agent (CPU: 2.7%)
12:24:52 [INFO] 127.0.0.1 [26/Feb/2026:12:24:52 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:24:58 [INFO] Métriques reçues de l'agent (CPU: 3.0%)
12:24:58 [INFO] 127.0.0.1 [26/Feb/2026:12:24:58 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:05 [INFO] Métriques reçues de l'agent (CPU: 3.4%)
12:25:05 [INFO] 127.0.0.1 [26/Feb/2026:12:25:05 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:11 [INFO] Métriques reçues de l'agent (CPU: 6.4%)
12:25:11 [INFO] 127.0.0.1 [26/Feb/2026:12:25:11 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:17 [INFO] Métriques reçues de l'agent (CPU: 7.8%)
12:25:17 [INFO] 127.0.0.1 [26/Feb/2026:12:25:17 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:23 [INFO] Métriques reçues de l'agent (CPU: 19.9%)
12:25:23 [INFO] 127.0.0.1 [26/Feb/2026:12:25:23 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:29 [INFO] Métriques reçues de l'agent (CPU: 4.0%)
12:25:29 [INFO] 127.0.0.1 [26/Feb/2026:12:25:29 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:35 [INFO] Métriques reçues de l'agent (CPU: 6.9%)
12:25:35 [INFO] 127.0.0.1 [26/Feb/2026:12:25:35 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:41 [INFO] Métriques reçues de l'agent (CPU: 19.0%)
12:25:41 [INFO] 127.0.0.1 [26/Feb/2026:12:25:41 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"
12:25:47 [INFO] Métriques reçues de l'agent (CPU: 18.7%)
12:25:47 [INFO] 127.0.0.1 [26/Feb/2026:12:25:47 +0100] "POST /metrics HTTP/1.1" 200 154 "-" "Python/3.12 aiohttp/3.13.3"

View file

@ -1,17 +0,0 @@
{
"_comment": "Copier ce fichier en config.json et remplir les valeurs",
"discord_token": "MTA3NDcxNDMwODY2MDk2NTM5OA.Gj_JQf.V-Xd4DRW0cEOG6PYOBlnWAXFU5MPWlZWeHmgsk",
"api_secret": "Mon-cul-est-tres-doux",
"api_port": 8765,
"guilds": {
"_comment": "Sera rempli automatiquement par la commande /setup dans chaque serveur Discord",
"_example": {
"channel_id": 123456789012345678,
"message_id": null
},
"1110604692263796746": {
"channel_id": 1227583375704064050,
"message_id": 1476543621137170625
}
}
}