Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5d0d451753 | |||
| 6c0512972d | |||
| ee31269209 |
9 changed files with 616 additions and 0 deletions
9
.env.example
Normal file
9
.env.example
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Discord Configuration
|
||||||
|
DISCORD_TOKEN=votre_token_discord
|
||||||
|
APPLICATION_ID=votre_id_application
|
||||||
|
|
||||||
|
# API Configuration
|
||||||
|
API_HOST=127.0.0.1
|
||||||
|
API_PORT=5000
|
||||||
|
API_DEBUG=False
|
||||||
|
API_SECRET_KEY=votre-cle-secrete-api
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -24,3 +24,6 @@ env/
|
||||||
# Logs
|
# Logs
|
||||||
*.Logs
|
*.Logs
|
||||||
.data
|
.data
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
# BOT_DOCUMENTATION.md
|
||||||
|
|
|
||||||
412
BOT_DOCUMENTATION.md
Normal file
412
BOT_DOCUMENTATION.md
Normal file
|
|
@ -0,0 +1,412 @@
|
||||||
|
# Documentation du Bot Kuby
|
||||||
|
|
||||||
|
## Table des matières
|
||||||
|
1. [Présentation générale](#présentation-générale)
|
||||||
|
2. [Architecture du bot](#architecture-du-bot)
|
||||||
|
3. [Installation et configuration](#installation-et-configuration)
|
||||||
|
4. [Modules et fonctionnalités](#modules-et-fonctionnalités)
|
||||||
|
5. [Système de sécurité](#système-de-sécurité)
|
||||||
|
6. [Gestion des tickets](#gestion-des-tickets)
|
||||||
|
7. [Système de logs](#système-de-logs)
|
||||||
|
8. [API REST](#api-rest)
|
||||||
|
9. [Commandes disponibles](#commandes-disponibles)
|
||||||
|
10. [Base de données](#base-de-données)
|
||||||
|
11. [Dépannage](#dépannage)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Présentation générale
|
||||||
|
|
||||||
|
Kuby est un bot Discord multifonctionnel développé en Python utilisant la bibliothèque `discord.py`. Il est conçu pour offrir une gestion complète de serveur Discord avec des fonctionnalités de modération, sécurité, gestion de tickets, et bien plus encore.
|
||||||
|
|
||||||
|
### Caractéristiques principales
|
||||||
|
- **Système de whitelist** pour contrôler l'accès aux commandes
|
||||||
|
- **Gestion de tickets** avancée avec permissions configurables
|
||||||
|
- **Système de sécurité** anti-spam et anti-raid
|
||||||
|
- **Logs détaillés** des activités du serveur
|
||||||
|
- **Messages de bienvenue/départ** personnalisables
|
||||||
|
- **Modération** avec blacklist et scan de sécurité
|
||||||
|
- **Système de rôles automatique** pour les membres rejoignant
|
||||||
|
- **API REST** pour intégration externe et monitoring
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture du bot
|
||||||
|
|
||||||
|
### Fichiers principaux
|
||||||
|
|
||||||
|
#### `kuby.py` - Point d'entrée
|
||||||
|
- Charge les variables d'environnement
|
||||||
|
- Initialise et démarre le bot
|
||||||
|
- Gère les erreurs critiques de démarrage
|
||||||
|
|
||||||
|
#### `bot.py` - Classe principale du bot
|
||||||
|
- Définit la classe `MyBot` héritant de `commands.Bot`
|
||||||
|
- Configure les intents Discord
|
||||||
|
- Charge toutes les extensions/modules
|
||||||
|
- Implémente les événements Discord principaux
|
||||||
|
|
||||||
|
### Structure des dossiers
|
||||||
|
|
||||||
|
```
|
||||||
|
kuby/
|
||||||
|
├── bot.py # Classe principale du bot
|
||||||
|
├── kuby.py # Point d'entrée
|
||||||
|
├── commandes/ # Modules de commandes
|
||||||
|
│ ├── ticket/ # Système de tickets
|
||||||
|
│ ├── modules_security/ # Modules de sécurité
|
||||||
|
│ ├── whitelist.py # Gestion whitelist
|
||||||
|
│ ├── blacklist.py # Gestion blacklist
|
||||||
|
│ └── ...
|
||||||
|
├── src/ # Utilitaires et core
|
||||||
|
│ ├── api/ # API REST module
|
||||||
|
│ │ ├── app.py # Application Flask
|
||||||
|
│ │ ├── routes.py # Routes API
|
||||||
|
│ │ └── config.py # Configuration API
|
||||||
|
│ ├── logger.py # Système de logging
|
||||||
|
│ └── advanced_logger.py # Logs avancés
|
||||||
|
├── data/ # Données de configuration
|
||||||
|
├── utils/ # Fonctions utilitaires
|
||||||
|
└── requirements.txt # Dépendances Python
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation et configuration
|
||||||
|
|
||||||
|
### Prérequis
|
||||||
|
- Python 3.8+
|
||||||
|
- Un token de bot Discord
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
1. Cloner le repository
|
||||||
|
2. Installer les dépendances :
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
Créer un fichier `.env` avec les variables suivantes :
|
||||||
|
```env
|
||||||
|
# Discord Configuration
|
||||||
|
DISCORD_TOKEN=votre_token_discord
|
||||||
|
APPLICATION_ID=votre_id_application
|
||||||
|
|
||||||
|
# API Configuration
|
||||||
|
API_HOST=127.0.0.1
|
||||||
|
API_PORT=5000
|
||||||
|
API_DEBUG=False
|
||||||
|
API_SECRET_KEY=votre-cle-secrete-api
|
||||||
|
|
||||||
|
# Partner Server IDs (for API)
|
||||||
|
PARTNER_IDS=111111111111111111,222222222222222222,333333333333333333
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dépendances principales
|
||||||
|
- `discord.py>=2.3.0` - API Discord
|
||||||
|
- `python-dotenv>=1.0.0` - Gestion variables d'environnement
|
||||||
|
- `Pillow>=10.0.0` - Traitement d'images
|
||||||
|
- `aiohttp>=3.8.0` - Requêtes HTTP asynchrones
|
||||||
|
- `flask>=2.3.0` - Framework API REST
|
||||||
|
- `flask-cors>=4.0.0` - Support CORS pour l'API
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modules et fonctionnalités
|
||||||
|
|
||||||
|
### 1. Système de Whitelist (`whitelist.py`, `whitelist_monitor.py`)
|
||||||
|
- **Fonction** : Contrôle l'accès aux commandes du bot
|
||||||
|
- **Mécanisme** : Vérification globale avant l'exécution de toute commande
|
||||||
|
- **Exceptions** :
|
||||||
|
- Propriétaire du bot (bypass automatique)
|
||||||
|
- Utilisateurs avec permissions tickets pour commandes spécifiques
|
||||||
|
|
||||||
|
### 2. Messages de bienvenue/départ (`welcome.py`, `goodbye.py`)
|
||||||
|
- **Fonctionnalités** :
|
||||||
|
- Messages personnalisables avec images
|
||||||
|
- Templates de bannières
|
||||||
|
- Support de polices personnalisées
|
||||||
|
- Restauration automatique des rôles
|
||||||
|
|
||||||
|
### 3. Système de sécurité (`security.py`)
|
||||||
|
- **Scan de sécurité** : Analyse des comptes suspects
|
||||||
|
- **Gestion des menaces** : Actions automatiques configurables
|
||||||
|
- **Logs de sécurité** : Traçabilité des incidents
|
||||||
|
|
||||||
|
### 4. Modules de sécurité avancés (`modules_security/`)
|
||||||
|
- **Anti-spam** : Détection et blocage des spams
|
||||||
|
- **Anti-raid** : Protection contre les raids massifs
|
||||||
|
- **Logs manager** : Gestion centralisée des logs
|
||||||
|
- **Rules** : Gestion des règles du serveur
|
||||||
|
|
||||||
|
### 5. Gestion des tickets (`ticket/`)
|
||||||
|
- **Création de tickets** : Interface complète pour les utilisateurs
|
||||||
|
- **Permissions** : Système granulaire d'accès
|
||||||
|
- **Configuration** : Paramètres par serveur
|
||||||
|
- **Support** : Outils de modération intégrés
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Système de sécurité
|
||||||
|
|
||||||
|
### Niveaux de protection
|
||||||
|
1. **Whitelist globale** : Contrôle d'accès aux commandes
|
||||||
|
2. **Anti-spam** : Détection de messages répétitifs
|
||||||
|
3. **Anti-raid** : Protection contre les arrivées massives
|
||||||
|
4. **Scan de sécurité** : Analyse des comptes suspects
|
||||||
|
5. **Blacklist** : Bannissement automatique
|
||||||
|
|
||||||
|
### Configuration de sécurité
|
||||||
|
- Paramètres stockés par serveur
|
||||||
|
- Actions configurables (kick, ban, avertissement)
|
||||||
|
- Logs détaillés pour audit
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gestion des tickets
|
||||||
|
|
||||||
|
### Fonctionnalités
|
||||||
|
- **Création** : Interface utilisateur simple
|
||||||
|
- **Catégories** : Organisation par type de demande
|
||||||
|
- **Permissions** : Accès contrôlé par rôles
|
||||||
|
- **Transcription** : Sauvegarde des conversations
|
||||||
|
- **Statistiques** : Suivi des tickets
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
```python
|
||||||
|
# Exemple de configuration ticket
|
||||||
|
config = {
|
||||||
|
"category_id": 123456789,
|
||||||
|
"support_role_id": 987654321,
|
||||||
|
"log_channel_id": 555666777,
|
||||||
|
"transcript_channel_id": 888999000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## API REST
|
||||||
|
|
||||||
|
Le bot Kuby inclut une API REST basée sur Flask qui permet d'accéder à certaines fonctionnalités du bot via des requêtes HTTP.
|
||||||
|
|
||||||
|
### Configuration de l'API
|
||||||
|
|
||||||
|
L'API se configure via les variables d'environnement :
|
||||||
|
- `API_HOST` : Adresse d'écoute (défaut: 127.0.0.1)
|
||||||
|
- `API_PORT` : Port d'écoute (défaut: 5000)
|
||||||
|
- `API_DEBUG` : Mode debug (défaut: False)
|
||||||
|
- `API_SECRET_KEY` : Clé secrète pour la sécurité
|
||||||
|
|
||||||
|
### Endpoints disponibles
|
||||||
|
|
||||||
|
#### `GET /api/user/<user_id>`
|
||||||
|
Retourne les informations d'un utilisateur Discord.
|
||||||
|
|
||||||
|
**Réponse :**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"username": "Nom d'utilisateur",
|
||||||
|
"avatar_url": "https://cdn.discordapp.com/avatars/user_id/avatar.png"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `GET /api/partners`
|
||||||
|
Retourne la liste des serveurs partenaires configurés.
|
||||||
|
|
||||||
|
**Réponse :**
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "Nom du serveur",
|
||||||
|
"icon_url": "https://cdn.discordapp.com/icons/guild_id/icon.png",
|
||||||
|
"member_count": 150
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `GET /api/status`
|
||||||
|
Retourne le statut actuel du bot.
|
||||||
|
|
||||||
|
**Réponse :**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "online",
|
||||||
|
"username": "Kuby",
|
||||||
|
"guild_count": 5,
|
||||||
|
"total_members": 1250
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `GET /api/guilds`
|
||||||
|
Retourne la liste des serveurs où le bot est présent.
|
||||||
|
|
||||||
|
**Réponse :**
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 123456789,
|
||||||
|
"name": "Serveur Discord",
|
||||||
|
"icon_url": "https://cdn.discordapp.com/icons/guild_id/icon.png",
|
||||||
|
"member_count": 250,
|
||||||
|
"owner_id": 987654321
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Utilisation
|
||||||
|
|
||||||
|
L'API démarre automatiquement avec le bot et est accessible sur `http://127.0.0.1:5000` par défaut.
|
||||||
|
|
||||||
|
**Exemple d'utilisation :**
|
||||||
|
```bash
|
||||||
|
# Obtenir les infos d'un utilisateur
|
||||||
|
curl http://127.0.0.1:5000/api/user/123456789
|
||||||
|
|
||||||
|
# Obtenir le statut du bot
|
||||||
|
curl http://127.0.0.1:5000/api/status
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sécurité
|
||||||
|
|
||||||
|
- L'API utilise CORS pour permettre les requêtes cross-origin
|
||||||
|
- Les logs d'accès sont enregistrés via le système de logging du bot
|
||||||
|
- L'API s'exécute dans un thread séparé pour ne pas bloquer le bot Discord
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Système de logs
|
||||||
|
|
||||||
|
### Types de logs
|
||||||
|
1. **Logs standards** (`kuby_logs.log`) : Activités générales
|
||||||
|
2. **Audit logs** (`kuby_audit.log`) : Actions de modération
|
||||||
|
3. **Error logs** (`kuby_errors.log`) : Erreurs et exceptions
|
||||||
|
4. **Performance logs** : Métriques de performance
|
||||||
|
|
||||||
|
### Fonctionnalités avancées
|
||||||
|
- **Advanced Logger** : Suivi détaillé des événements
|
||||||
|
- **Restauration de rôles** : Mémorisation des rôles des membres
|
||||||
|
- **Notifications** : Messages de départ/arrivée
|
||||||
|
- **Voice tracking** : Suivi des salons vocaux
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Commandes disponibles
|
||||||
|
|
||||||
|
### Commandes de modération
|
||||||
|
- `!whitelist` : Gestion de la whitelist
|
||||||
|
- `!blacklist` : Gestion de la blacklist
|
||||||
|
- `!scan` : Analyse de sécurité
|
||||||
|
- `!security` : Configuration sécurité
|
||||||
|
|
||||||
|
### Commandes de tickets
|
||||||
|
- `!ticket` : Gestion des tickets
|
||||||
|
- `!ticketconfig` : Configuration du système
|
||||||
|
- `!ticketsetup` : Initialisation rapide
|
||||||
|
|
||||||
|
### Commandes utilitaires
|
||||||
|
- `!snipe` : Récupération de messages supprimés
|
||||||
|
- `!bug_report` : Rapport de bugs
|
||||||
|
- `!sendbotmessages` : Messages automatisés
|
||||||
|
|
||||||
|
### Commandes de configuration
|
||||||
|
- `!welcome` : Messages de bienvenue
|
||||||
|
- `!goodbye` : Messages de départ
|
||||||
|
- `!nolink` : Filtrage des liens
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Base de données
|
||||||
|
|
||||||
|
### Fichiers de données
|
||||||
|
- `config.db` : Configuration principale (SQLite)
|
||||||
|
- `whitelist.json` : Liste des utilisateurs autorisés
|
||||||
|
- Données par serveur dans le dossier `data/`
|
||||||
|
|
||||||
|
### Structure de la base de données
|
||||||
|
```sql
|
||||||
|
-- Tables principales
|
||||||
|
- guilds : Configuration par serveur
|
||||||
|
- users : Données utilisateurs
|
||||||
|
- tickets : Historique des tickets
|
||||||
|
- audit_logs : Logs de modération
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dépannage
|
||||||
|
|
||||||
|
### Problèmes courants
|
||||||
|
|
||||||
|
#### Token Discord invalide
|
||||||
|
```
|
||||||
|
❌ Erreur: Token Discord non trouvé
|
||||||
|
```
|
||||||
|
**Solution** : Vérifier le fichier `.env` et le token Discord
|
||||||
|
|
||||||
|
#### Extensions non chargées
|
||||||
|
```
|
||||||
|
❌ Erreur lors du chargement de l'extension
|
||||||
|
```
|
||||||
|
**Solution** : Vérifier les imports et la syntaxe dans les modules
|
||||||
|
|
||||||
|
#### Permissions manquantes
|
||||||
|
```
|
||||||
|
❌ Vous n'êtes pas autorisé à utiliser cette commande
|
||||||
|
```
|
||||||
|
**Solution** : Ajouter l'utilisateur à la whitelist ou vérifier les permissions
|
||||||
|
|
||||||
|
### Logs utiles pour le dépannage
|
||||||
|
- `kuby_errors.log` : Erreurs détaillées avec stack traces
|
||||||
|
- `debug.log` : Informations de débogage
|
||||||
|
- Console output : Logs en temps réel
|
||||||
|
|
||||||
|
### Commandes de maintenance
|
||||||
|
```python
|
||||||
|
# Redémarrage du bot
|
||||||
|
!restart
|
||||||
|
|
||||||
|
# Vérification du statut
|
||||||
|
!status
|
||||||
|
|
||||||
|
# Rechargement des modules
|
||||||
|
!reload <module_name>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bonnes pratiques
|
||||||
|
|
||||||
|
### Sécurité
|
||||||
|
- Garder le token Discord secret
|
||||||
|
- Utiliser la whitelist pour limiter l'accès
|
||||||
|
- Configurer correctement les permissions
|
||||||
|
- Surveiller régulièrement les logs
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
- Limiter le nombre de commandes simultanées
|
||||||
|
- Optimiser les requêtes base de données
|
||||||
|
- Utiliser le cache pour les données fréquemment accédées
|
||||||
|
- Surveiller l'utilisation mémoire
|
||||||
|
|
||||||
|
### Maintenance
|
||||||
|
- Sauvegarder régulièrement la base de données
|
||||||
|
- Mettre à jour les dépendances
|
||||||
|
- Nettoyer les anciens logs
|
||||||
|
- Documenter les modifications
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Support et développement
|
||||||
|
|
||||||
|
### Pour obtenir de l'aide
|
||||||
|
1. Consulter les logs d'erreurs
|
||||||
|
2. Vérifier la configuration
|
||||||
|
3. Tester avec des commandes simples
|
||||||
|
4. Contacter le développeur si nécessaire
|
||||||
|
|
||||||
|
### Contributeurs
|
||||||
|
Le bot Kuby est développé avec une architecture modulaire pour faciliter l'ajout de nouvelles fonctionnalités. Chaque module est indépendant et peut être maintenu séparément.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Document généré automatiquement - Dernière mise à jour : 2025*
|
||||||
13
bot.py
13
bot.py
|
|
@ -47,6 +47,19 @@ class MyBot(commands.Bot):
|
||||||
self.advanced_logger = AdvancedLogger(self)
|
self.advanced_logger = AdvancedLogger(self)
|
||||||
kuby_logger.info("✅ Advanced logger initialized")
|
kuby_logger.info("✅ Advanced logger initialized")
|
||||||
|
|
||||||
|
# Initialize API Manager
|
||||||
|
from src.api.app import APIManager
|
||||||
|
self.api_manager = APIManager(self)
|
||||||
|
kuby_logger.info("✅ API Manager initialized")
|
||||||
|
|
||||||
|
# Start API server
|
||||||
|
try:
|
||||||
|
self.api_manager.run_async()
|
||||||
|
kuby_logger.info(f"🌐 API server started on http://{self.api_manager.config.HOST}:{self.api_manager.config.PORT}")
|
||||||
|
except Exception as e:
|
||||||
|
kuby_logger.error(f"❌ Erreur lors du démarrage de l'API : {e}", exc_info=True)
|
||||||
|
|
||||||
|
|
||||||
# Charger les extensions
|
# Charger les extensions
|
||||||
extensions = [
|
extensions = [
|
||||||
"commandes.whitelist",
|
"commandes.whitelist",
|
||||||
|
|
|
||||||
|
|
@ -2,3 +2,5 @@ discord.py>=2.3.0
|
||||||
python-dotenv>=1.0.0
|
python-dotenv>=1.0.0
|
||||||
Pillow>=10.0.0
|
Pillow>=10.0.0
|
||||||
aiohttp>=3.8.0
|
aiohttp>=3.8.0
|
||||||
|
flask>=2.3.0
|
||||||
|
flask-cors>=4.0.0
|
||||||
|
|
|
||||||
9
src/api/__init__.py
Normal file
9
src/api/__init__.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
"""
|
||||||
|
API module for Kuby Discord bot
|
||||||
|
Provides REST API endpoints for bot functionality
|
||||||
|
"""
|
||||||
|
|
||||||
|
from .app import APIManager
|
||||||
|
from .config import APIConfig
|
||||||
|
|
||||||
|
__all__ = ['APIManager', 'APIConfig']
|
||||||
56
src/api/app.py
Normal file
56
src/api/app.py
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
"""
|
||||||
|
Flask application for Kuby Discord bot API
|
||||||
|
"""
|
||||||
|
|
||||||
|
from flask import Flask
|
||||||
|
from flask_cors import CORS
|
||||||
|
import threading
|
||||||
|
from .routes import setup_routes
|
||||||
|
from .config import APIConfig
|
||||||
|
from src.logger import kuby_logger
|
||||||
|
|
||||||
|
|
||||||
|
class APIManager:
|
||||||
|
"""Manages the Flask API server for the bot"""
|
||||||
|
|
||||||
|
def __init__(self, bot_instance):
|
||||||
|
"""Initialize the API manager
|
||||||
|
|
||||||
|
Args:
|
||||||
|
bot_instance: The Discord bot instance
|
||||||
|
"""
|
||||||
|
self.bot = bot_instance
|
||||||
|
self.app = Flask(__name__)
|
||||||
|
CORS(self.app)
|
||||||
|
self.config = APIConfig()
|
||||||
|
|
||||||
|
# Configuration Flask
|
||||||
|
self.app.config['SECRET_KEY'] = self.config.SECRET_KEY
|
||||||
|
self.app.config['JSON_SORT_KEYS'] = False
|
||||||
|
|
||||||
|
# Setup routes
|
||||||
|
setup_routes(self.app, self.bot)
|
||||||
|
|
||||||
|
kuby_logger.info("✅ API Manager initialized")
|
||||||
|
|
||||||
|
def run_async(self):
|
||||||
|
"""Start the API server in a separate thread"""
|
||||||
|
try:
|
||||||
|
kuby_logger.info(f"🌐 Starting API server on {self.config.HOST}:{self.config.PORT}")
|
||||||
|
threading.Thread(
|
||||||
|
target=lambda: self.app.run(
|
||||||
|
host=self.config.HOST,
|
||||||
|
port=self.config.PORT,
|
||||||
|
debug=self.config.DEBUG,
|
||||||
|
use_reloader=False # Important: disable reloader in thread
|
||||||
|
),
|
||||||
|
daemon=True
|
||||||
|
).start()
|
||||||
|
kuby_logger.info(f"✅ API server started successfully")
|
||||||
|
except Exception as e:
|
||||||
|
kuby_logger.error(f"❌ Failed to start API server: {e}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
def get_app(self):
|
||||||
|
"""Get the Flask app instance (for testing purposes)"""
|
||||||
|
return self.app
|
||||||
15
src/api/config.py
Normal file
15
src/api/config.py
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
"""
|
||||||
|
Configuration for the API module
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
class APIConfig:
|
||||||
|
"""API configuration class"""
|
||||||
|
HOST = os.getenv("API_HOST", "127.0.0.1")
|
||||||
|
PORT = int(os.getenv("API_PORT", 5000))
|
||||||
|
DEBUG = os.getenv("API_DEBUG", "False").lower() == "true"
|
||||||
|
SECRET_KEY = os.getenv("API_SECRET_KEY", "votre-cle-secrete-api")
|
||||||
97
src/api/routes.py
Normal file
97
src/api/routes.py
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
"""
|
||||||
|
API routes for Kuby Discord bot
|
||||||
|
"""
|
||||||
|
|
||||||
|
from flask import jsonify
|
||||||
|
|
||||||
|
|
||||||
|
def setup_routes(app, bot):
|
||||||
|
"""Setup all API routes"""
|
||||||
|
|
||||||
|
@app.route("/api/user/<int:user_id>")
|
||||||
|
def get_user(user_id):
|
||||||
|
"""Get user information by ID"""
|
||||||
|
user = bot.get_user(user_id)
|
||||||
|
if not user:
|
||||||
|
return jsonify({
|
||||||
|
"username": "Utilisateur inconnu",
|
||||||
|
"avatar_url": "https://cdn.discordapp.com/embed/avatars/0.png",
|
||||||
|
})
|
||||||
|
return jsonify({
|
||||||
|
"username": user.display_name,
|
||||||
|
"avatar_url": str(user.display_avatar.url) if user.display_avatar else "https://cdn.discordapp.com/embed/avatars/0.png",
|
||||||
|
})
|
||||||
|
|
||||||
|
@app.route("/api/guilds")
|
||||||
|
def get_guilds():
|
||||||
|
"""Get all guilds where the bot is present"""
|
||||||
|
guilds_info = []
|
||||||
|
for guild in bot.guilds:
|
||||||
|
guilds_info.append({
|
||||||
|
"id": guild.id,
|
||||||
|
"name": guild.name,
|
||||||
|
"icon_url": guild.icon.url if guild.icon else None,
|
||||||
|
"member_count": guild.member_count,
|
||||||
|
"owner_id": guild.owner_id,
|
||||||
|
"description": guild.description if guild.description else None,
|
||||||
|
"features": list(guild.features) if guild.features else [],
|
||||||
|
"created_at": guild.created_at.isoformat() if guild.created_at else None
|
||||||
|
})
|
||||||
|
return jsonify(guilds_info)
|
||||||
|
|
||||||
|
@app.route("/api/guild/<int:guild_id>")
|
||||||
|
def get_guild(guild_id):
|
||||||
|
"""Get specific guild information by ID"""
|
||||||
|
guild = bot.get_guild(guild_id)
|
||||||
|
if not guild:
|
||||||
|
return jsonify({"error": "Serveur non trouvé"}), 404
|
||||||
|
|
||||||
|
return jsonify({
|
||||||
|
"id": guild.id,
|
||||||
|
"name": guild.name,
|
||||||
|
"icon_url": guild.icon.url if guild.icon else None,
|
||||||
|
"member_count": guild.member_count,
|
||||||
|
"owner_id": guild.owner_id,
|
||||||
|
"description": guild.description if guild.description else None,
|
||||||
|
"features": list(guild.features) if guild.features else [],
|
||||||
|
"created_at": guild.created_at.isoformat() if guild.created_at else None,
|
||||||
|
# "channels": [
|
||||||
|
# {
|
||||||
|
# "id": channel.id,
|
||||||
|
# "name": channel.name,
|
||||||
|
# "type": str(channel.type),
|
||||||
|
# "category": channel.category.name if channel.category else None
|
||||||
|
# }
|
||||||
|
# for channel in guild.channels
|
||||||
|
# ],
|
||||||
|
# "roles": [
|
||||||
|
# {
|
||||||
|
# "id": role.id,
|
||||||
|
# "name": role.name,
|
||||||
|
# "color": role.color,
|
||||||
|
# "position": role.position,
|
||||||
|
# "member_count": len(role.members)
|
||||||
|
# }
|
||||||
|
# for role in guild.roles
|
||||||
|
# ]
|
||||||
|
})
|
||||||
|
|
||||||
|
@app.route("/api/status")
|
||||||
|
def get_status():
|
||||||
|
"""Get bot status and basic information"""
|
||||||
|
return jsonify({
|
||||||
|
"status": "online" if bot.is_ready() else "connecting",
|
||||||
|
"username": bot.user.name if bot.user else "Unknown",
|
||||||
|
"user_id": bot.user.id if bot.user else None,
|
||||||
|
"guild_count": len(bot.guilds),
|
||||||
|
"total_members": sum(guild.member_count for guild in bot.guilds) if bot.guilds else 0,
|
||||||
|
# "total_channels": sum(len(guild.channels) for guild in bot.guilds) if bot.guilds else 0,
|
||||||
|
"uptime": "N/A", # TODO: Implement uptime tracking
|
||||||
|
"version": "2.0.0",
|
||||||
|
"api_endpoints": [
|
||||||
|
"/api/user/<user_id>",
|
||||||
|
"/api/guilds",
|
||||||
|
"/api/guild/<guild_id>",
|
||||||
|
"/api/status"
|
||||||
|
]
|
||||||
|
})
|
||||||
Loading…
Add table
Add a link
Reference in a new issue