diff --git a/README.md b/README.md index 3abe6b6..4b2c66b 100755 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - [Vue d'ensemble](#vue-densemble) - [Fonctionnalités](#fonctionnalités) - [Discord](#discord) - - [Twitch](#twitch-en-développement) + - [Twitch](#twitch) - [YouTube Live](#youtube-live-en-développement) - [Interface d'administration](#interface-dadministration) - [Surveillance](#surveillance) @@ -15,7 +15,6 @@ - [Prérequis](#prérequis) - [Création du bot Discord](#création-du-bot-discord) - [Démarrage rapide](#démarrage-rapide) - - [Configuration](#configuration) - [Commandes Docker utiles](#commandes-docker-utiles) - [Mise à jour](#mise-à-jour) - [Configuration avancée](#configuration-avancée) @@ -41,7 +40,7 @@ Mamie Henriette est un bot intelligent open-source développé spécifiquement p ### Caractéristiques principales - Interface web d'administration complète -- Gestion multi-plateformes (Discord, Twitch, YouTube Live) +- Gestion multi-plateformes (Discord opérationnel, Twitch intégré, YouTube Live en développement) - Système de notifications automatiques - Base de données intégrée pour la persistance - Surveillance optionnelle avec Zabbix *(non testée)* @@ -55,9 +54,8 @@ Mamie Henriette est un bot intelligent open-source développé spécifiquement p - **Recherche ProtonDB** : Commande `!protondb ` pour vérifier la compatibilité Linux/Steam Deck - **Modération** : Outils intégrés -### Twitch *(en développement)* -- **Chat bot** : Commandes et interactions -- **Événements live** : Notifications de stream +### Twitch +- **Chat bot** : Commandes et interactions automatiques ### YouTube Live *(en développement)* - **Chat bot** : Modération et commandes @@ -79,6 +77,7 @@ Mamie Henriette est un bot intelligent open-source développé spécifiquement p ### Prérequis - [Docker Engine](https://docs.docker.com/engine/install/) ou [Docker Desktop](https://docs.docker.com/desktop/) - Token Discord pour le bot +- Token Twitch (optionnel) pour les fonctionnalités Twitch ### Création du bot Discord @@ -94,7 +93,7 @@ Avant d'installer MamieHenriette, vous devez créer un bot Discord et obtenir so 3. **Configurer le bot** : - Dans le menu latéral, cliquez sur "Bot" - Ajoutez une photo de profil et un pseudo à votre bot - - **Important** : Activez les "Privileged Gateway Intents" : + - **Important activezez les intents** : - ☑️ Presence Intent - ☑️ Server Members Intent - ☑️ Message Content Intent @@ -126,15 +125,7 @@ cd MamieHenriette docker compose up --build -d ``` -### Configuration - -1. **Interface web** : Accédez à http://localhost -2. **Token Discord** : Section "Configurations" -3. **ProtonDB** : Configurer l'API Algolia dans "Configurations" pour activer `!protondb` -4. **Humeurs** : Définir les statuts du bot -5. **Canaux** : Configurer les notifications - -> ⚠️ **Important** : Après avoir configuré le token Discord, les humeurs et autres fonctionnalités via l'interface web, **redémarrez le conteneur** pour que les changements soient pris en compte : +> ⚠️ **Important** : Après configuration via l'interface web http://localhost:5000, **redémarrez le conteneur** pour que les changements soient pris en compte : > ```bash > docker compose restart MamieHenriette > ``` @@ -208,10 +199,11 @@ environment: | Section | Fonction | |---------|----------| -| **Configurations** | Tokens, paramètres généraux et configuration ProtonDB | +| **Configurations** | Tokens Discord/Twitch, paramètres généraux et configuration ProtonDB | | **Humeurs** | Gestion des statuts Discord | -| **Commandes** | Commandes personnalisées | -| **Modération** | Outils de gestion | +| **Commandes** | Commandes personnalisées multi-plateformes | +| **Messages** | Messages automatiques et notifications | +| **Modération** | Outils de gestion communautaire | ## Architecture du projet @@ -226,6 +218,9 @@ environment: ├── discordbot/ # Module Discord │ └── __init__.py # Bot et handlers │ +├── twitchbot/ # Module Twitch +│ └── __init__.py # Bot Twitch et handlers +│ ├── protondb/ # Module ProtonDB │ └── __init__.py # API Algolia et recherche compatibilité │ @@ -255,14 +250,18 @@ environment: ### Architecture multi-thread - **Thread 1** : Interface web Flask (port 5000) - **Thread 2** : Bot Discord et tâches automatisées +- **Thread 3** : Bot Twitch et gestion du chat ### Dépendances principales ``` -discord.py # API Discord -flask # Interface web -requests # Client HTTP -waitress # Serveur WSGI -algoliasearch # API ProtonDB/SteamDB +discord.py>=2.3.2 # API Discord +flask>=2.3.2 # Interface web +flask-sqlalchemy>=3.0.3 # ORM SQLAlchemy +requests>=2.32.4 # Client HTTP +waitress>=3.0.2 # Serveur WSGI +algoliasearch>=4 # API ProtonDB/SteamDB +twitchAPI>=4.5.0 # API Twitch +python-dotenv==1.0.0 # Variables d'environnement ``` ## Développement @@ -270,8 +269,14 @@ algoliasearch # API ProtonDB/SteamDB ### Installation locale ```bash python3 -m venv venv +``` +```bash source venv/bin/activate +``` +```bash pip install -r requirements.txt +``` +```bash python run-web.py ``` diff --git a/docker-compose.yml b/docker-compose.yml index 38bbf03..b7687f3 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,30 +1,46 @@ services: - mamiehenriette: - # Nom du conteneur - container_name: MamieHenriette + mamiehenriette: + container_name: MamieHenriette # Nom du conteneur + image: ghcr.io/skylanix/mamiehenriette:latest # Image hébergée sur GitHub Container Registry - # Image hébergée sur GitHub Container Registry - image: ghcr.io/skylanix/mamiehenriette:latest - # Build du conteneur à partir d'un Dockerfile local - # build: . - # image: mamiehenriette +# build: . # Build du conteneur à partir d'un Dockerfile local (décommentez si nécessaire) +# image: mamiehenriette # Build du conteneur à partir d'un Dockerfile local (décommentez si nécessaire) - # Redémarrage automatique sauf si arrêté manuellement - restart: unless-stopped + restart: unless-stopped # Redémarre automatiquement sauf si arrêté manuellement environment: - - TZ=Europe/Paris # Fuseau horaire - - ENABLE_ZABBIX=false # Surveillance désactivée - - ZABBIX_SERVER=zabbix-server.example.com - - ZABBIX_HOSTNAME=mamie-henriette-bot - + TZ: Europe/Paris # Fuseau horaire + ENABLE_ZABBIX: false # Surveillance désactivée + ZABBIX_SERVER: zabbix-server.example.com + ZABBIX_HOSTNAME: mamiehenriette volumes: - # Base de données et configuration persistante - - ./instance:/app/instance + - ./instance:/app/instance # Base de données et configuration persistante ports: # Interface web sur http://localhost:8000 - 5000:5000 - # Port Zabbix (décommentez si nécessaire) - # - "10050:10050" \ No newline at end of file +# - "10050:10050" # Port Zabbix (décommentez si nécessaire) + + + + watchtower: # Permet de mettre à jours automatiquement + image: containrrr/watchtower:latest + container_name: watchtower # Nom du conteneur + restart: unless-stopped # Redémarre automatiquement sauf si arrêté manuellement + environment: + TZ: Europe/Paris + # Liste des conteneurs à surveiller (séparés par des espaces) + WATCHTOWER_INCLUDE: "MamieHenriette" + WATCHTOWER_SCHEDULE: "0 */30 * * * *" # Vérification toutes les 30 minutes + WATCHTOWER_MONITOR_ONLY: "false" # Mode surveillance uniquement : détecte les mises à jour mais ne les applique pas + WATCHTOWER_CLEANUP: "true" # Supprime automatiquement les anciennes images après mise à jour + WATCHTOWER_INCLUDE_RESTARTING: "true" # Inclut les conteneurs en cours de redémarrage dans la surveillance + # URL de notification Discord (webhook) pour recevoir les alertes + WATCHTOWER_NOTIFICATION_URL: "discord://token@id" + # Format personnalisé des messages de notification (date, niveau, message) + WATCHTOWER_NOTIFICATION_TEMPLATE: |- + {{range .}}{{.Time.Format "01-02-2006 15:04:05"}} ({{.Level}})':' {{.Message}}{{println}}{{end}} + WATCHTOWER_NOTIFICATIONS: shoutrrr # Service de notification utilisé (Shoutrrr pour Discord) + volumes: + - /var/run/docker.sock:/var/run/docker.sock # Monte le socket Docker pour permettre à Watchtower de surveiller les conteneurs diff --git a/run-web.py b/run-web.py index b865860..bcb00fc 100644 --- a/run-web.py +++ b/run-web.py @@ -23,7 +23,7 @@ def start_twitch_bot(): twitchBot.begin() if __name__ == '__main__': - locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8') + locale.setlocale(locale.LC_TIME, 'fr_CH.UTF-8') jobs = [] jobs.append(threading.Thread(target=start_discord_bot))