# MamieHenriette đŸ‘” **Bot multi-plateformes pour Discord, Twitch et YouTube Live** ## Table des matiĂšres - [Vue d'ensemble](#vue-densemble) - [FonctionnalitĂ©s](#fonctionnalitĂ©s) - [Discord](#discord) - [Twitch](#twitch) - [YouTube Live](#youtube-live-en-dĂ©veloppement) - [Interface d'administration](#interface-dadministration) - [Installation](#installation) - [PrĂ©requis](#prĂ©requis) - [CrĂ©ation du bot Discord](#crĂ©ation-du-bot-discord) - [DĂ©marrage rapide](#dĂ©marrage-rapide) - [Build local (dĂ©veloppement)](#build-local-dĂ©veloppement) - [DĂ©ploiement avec Portainer](#dĂ©ploiement-avec-portainer) - [Volumes persistants](#volumes-persistants) - [Commandes Docker utiles](#commandes-docker-utiles) - [Mise Ă  jour](#mise-Ă -jour) - [Architecture du projet](#architecture-du-projet) - [Interface d'administration](#interface-dadministration-1) - [Structure des modules](#structure-des-modules) - [Composants principaux](#composants-principaux) - [SpĂ©cifications techniques](#spĂ©cifications-techniques) - [Base de donnĂ©es (SQLite)](#base-de-donnĂ©es-sqlite) - [Architecture multi-thread](#architecture-multi-thread) - [Monitoring et logging](#monitoring-et-logging) - [DĂ©pendances principales](#dĂ©pendances-principales) - [DĂ©veloppement](#dĂ©veloppement) - [Installation locale](#installation-locale) - [Contribution](#contribution) - [Licence](#licence) ## Vue d'ensemble Mamie Henriette est un bot intelligent open-source dĂ©veloppĂ© spĂ©cifiquement pour la communautĂ© de [STEvE](https://www.facebook.com/ChaineSTEvE) sur [YouTube](https://www.youtube.com/@513v3), [Twitch](https://www.twitch.tv/chainesteve) et [Discord](https://discord.com/invite/UwAPqMJnx3). > ⚠ **Statut** : En cours de dĂ©veloppement ### CaractĂ©ristiques principales - Interface web d'administration complĂšte - 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 ## FonctionnalitĂ©s ### Discord - **Statuts dynamiques** : Rotation automatique des humeurs (10 min) - **Notifications Humble Bundle** : Surveillance et alertes automatiques (30 min) - **Commandes personnalisĂ©es** : Gestion via interface web - **Recherche ProtonDB** : - Commande `!protondb nom_du_jeu` ou `!pdb nom_du_jeu` pour vĂ©rifier la compatibilitĂ© Linux/Steam Deck - Recherche intelligente avec support des alias de jeux - Affichage du score de compatibilitĂ©, nombre de rapports et lien direct - **IntĂ©gration anti-cheat** : Affiche automatiquement les systĂšmes anti-cheat et leur statut (supportĂ©, cassĂ©, refusĂ©) - Cache mis Ă  jour automatiquement depuis AreWeAntiCheatYet - **ModĂ©ration** : SystĂšme complet de modĂ©ration avec historique - **Avertissements** : `!averto`, `!warn`, `!av`, `!avertissement` - Envoi automatique de DM Ă  l'utilisateur averti - Support des timeouts combinĂ©s : `!warn @user raison --to durĂ©e` - **Timeout** : `!timeout`, `!to` - Exclusion temporaire d'un utilisateur - Syntaxe : `!to @user durĂ©e raison` (ex: `!to @User 10m Spam`) - DurĂ©es supportĂ©es : secondes (s), minutes (m), heures (h), jours (j/days) - **Gestion des avertissements** : `!delaverto`, `!removewarn`, `!delwarn` - **Liste des Ă©vĂ©nements** : `!warnings`, `!listevent`, `!listwarn` - **Inspection utilisateur** : `!inspect @user` - Historique complet des sanctions - Date d'arrivĂ©e et durĂ©e sur le serveur - DĂ©tection des comptes suspects (< 7 jours) - Affichage du code d'invitation utilisĂ© et de l'inviteur - **Bannissement** : `!ban @user raison`, `!banlist` - `!unban @user raison` ou `!unban #ID raison` (dĂ©bannir par ID de sanction) - Invitation automatique par DM lors du dĂ©bannissement - **Expulsion** : `!kick @user raison` - **Annonces** : `!say #canal message` - Envoi de messages en tant que bot (staff uniquement) - **Aide** : `!aide`, `!help` - Liste complĂšte des commandes disponibles - **Configuration avancĂ©e** : - Support de multiples rĂŽles staff - Canal de logs dĂ©diĂ© pour toutes les actions - Suppression automatique des messages de modĂ©ration (dĂ©lai configurable) - Activation/dĂ©sactivation individuelle des fonctionnalitĂ©s - Panneau d'administration web pour consulter, Ă©diter et supprimer l'historique - **Messages de bienvenue et dĂ©part** : - Messages personnalisables avec variables : `{member.mention}`, `{member.name}`, `{server.name}`, `{server.member_count}` - **SystĂšme de tracking d'invitations** : Affiche qui a invitĂ© le nouveau membre - **Messages de dĂ©part intelligents** : DĂ©tection automatique de la raison (volontaire, kick, ban) - Affichage de la durĂ©e passĂ©e sur le serveur - Embeds enrichis avec avatar et informations dĂ©taillĂ©es ### Twitch - **Chat bot** : Commandes et interactions automatiques - **Alertes Live** : - Surveillance automatique des streamers - Support jusqu'Ă  100 chaĂźnes simultanĂ©ment - Notifications Discord avec aperçu du stream - Gestion via interface d'administration - DĂ©tection automatique des dĂ©buts/fins de stream ### YouTube Live *(en dĂ©veloppement)* - **Chat bot** : ModĂ©ration et commandes - **ÉvĂ©nements** : Notifications de diffusion ### Interface d'administration - **Dashboard** : Vue d'ensemble et statistiques - **Configuration** : - Tokens Discord/Twitch et paramĂštres des plateformes - Configuration ProtonDB (API Algolia) - Gestion des rĂŽles staff (support de multiples rĂŽles) - Activation/dĂ©sactivation individuelle des fonctionnalitĂ©s (modĂ©ration, ban, kick, welcome, leave) - Configuration du dĂ©lai de suppression automatique des messages de modĂ©ration - **Gestion des humeurs** : CrĂ©ation et modification des statuts Discord rotatifs - **Commandes** : Édition des commandes personnalisĂ©es multi-plateformes - **ModĂ©ration** : - Consultation de l'historique complet des sanctions - Édition des raisons des Ă©vĂ©nements de modĂ©ration - Suppression d'Ă©vĂ©nements de modĂ©ration - Filtrage et recherche dans l'historique - **Messages de bienvenue/dĂ©part** : - Personnalisation des messages avec variables dynamiques - Configuration des canaux de bienvenue et dĂ©part - Activation/dĂ©sactivation indĂ©pendante ## Installation ### 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 Avant d'installer MamieHenriette, vous devez crĂ©er un bot Discord et obtenir son token : 1. **AccĂ©der au portail dĂ©veloppeur** : Rendez-vous sur [Discord Developer Portal](https://discord.com/developers/applications) 2. **CrĂ©er une nouvelle application** : - Cliquez sur "New Application" - Donnez un nom Ă  votre bot (ex: "MmeMichue") - Acceptez les conditions et cliquez sur "Create" 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 intents** : - ☑ Presence Intent - ☑ Server Members Intent - ☑ Message Content Intent - Cliquez sur "Save Changes" 4. **RĂ©cupĂ©rer le token** : - Dans la section "Token", cliquez sur "Reset Token" - Copiez le token gĂ©nĂ©rĂ© (gardez-le secret !) 5. **Inviter le bot sur votre serveur** : - Allez dans "OAuth2" > "URL Generator" - SĂ©lectionnez les scopes : `bot` et `applications.commands` - SĂ©lectionnez les permissions nĂ©cessaires (Administrator recommandĂ© pour simplifier) - Utilisez l'URL gĂ©nĂ©rĂ©e pour inviter le bot sur votre serveur ### DĂ©marrage rapide ```bash # 1. Cloner le projet git clone https://github.com/skylanix/MamieHenriette.git cd MamieHenriette ``` ```bash # 2. RĂ©cupĂ©rer l'image depuis GitHub Container Registry et lancer docker compose pull docker compose up -d ``` > 📝 L'interface web sera accessible sur http://localhost:5000 > > ⚠ **Important** : AprĂšs configuration via l'interface web, **redĂ©marrez le conteneur** pour que les changements soient pris en compte : > ```bash > docker compose restart MamieHenriette > ``` ### Build local (dĂ©veloppement) Si vous souhaitez modifier le code et builder l'image localement : ```bash # 1. Cloner et accĂ©der au projet git clone https://github.com/skylanix/MamieHenriette.git cd MamieHenriette ``` ```bash # 2. Modifier le docker-compose.yml # Commentez la ligne 'image:' et dĂ©commentez la section 'build:' : ``` ```yaml services: mamiehenriette: container_name: MamieHenriette restart: unless-stopped build: . # ← DĂ©commentez cette ligne image: mamiehenriette # ← DĂ©commentez cette ligne # image: ghcr.io/skylanix/mamiehenriette:latest # ← Commentez cette ligne # ... reste de la configuration ``` ```bash # 3. Builder et lancer docker compose up --build -d ``` ### DĂ©ploiement avec Portainer Si vous utilisez Portainer pour gĂ©rer vos conteneurs Docker, voici la configuration Docker Compose Ă  utiliser : ```yaml services: mamiehenriette: container_name: MamieHenriette image: ghcr.io/skylanix/mamiehenriette:latest restart: unless-stopped environment: TZ: Europe/Paris volumes: # Adaptez ces chemins selon votre configuration - ./instance:/app/instance - ./logs:/app/logs ports: - 5000:5000 watchtower: # Mise Ă  jour automatique de l'image image: containrrr/watchtower:latest container_name: watchtower restart: unless-stopped environment: TZ: Europe/Paris WATCHTOWER_INCLUDE: "MamieHenriette" WATCHTOWER_SCHEDULE: "0 */30 * * * *" # VĂ©rification toutes les 30 min WATCHTOWER_MONITOR_ONLY: "false" WATCHTOWER_CLEANUP: "true" WATCHTOWER_INCLUDE_RESTARTING: "true" # DĂ©commentez pour activer les notifications Discord : # WATCHTOWER_NOTIFICATION_URL: "discord://token@id" # WATCHTOWER_NOTIFICATIONS: shoutrrr volumes: - /var/run/docker.sock:/var/run/docker.sock # DĂ©commentez pour accĂ©der Ă  la base de donnĂ©es via interface web (localhost:5001) # sqlite-web: # image: ghcr.io/coleifer/sqlite-web:latest # container_name: sqlite_web # ports: # - "5001:8080" # volumes: # - ./instance/database.db:/data/database.db # environment: # - SQLITE_DATABASE=/data/database.db ``` **Étapes dans Portainer :** 1. **AccĂ©der Ă  Portainer** : Ouvrez votre interface Portainer (gĂ©nĂ©ralement http://votre-serveur:9000) 2. **CrĂ©er une Stack** : - Allez dans "Stacks" → "Add stack" - Donnez un nom : `MamieHenriette` - Collez la configuration ci-dessus dans l'Ă©diteur 3. **Adapter les chemins des volumes** : - Modifiez `./instance` et `./logs` selon votre configuration - Exemple : `/opt/containers/MamieHenriette/instance` et `/opt/containers/MamieHenriette/logs` 4. **DĂ©ployer** : - Cliquez sur "Deploy the stack" - Attendez que le conteneur dĂ©marre 5. **AccĂ©der Ă  l'interface** : - Ouvrez http://votre-serveur:5000 - Configurez le bot via l'interface web - RedĂ©marrez le conteneur depuis Portainer aprĂšs configuration ### Volumes persistants - `./instance/` : Base de donnĂ©es SQLite et configuration - `./logs/` : Logs applicatifs rotatifs (50MB max par fichier) ### Commandes Docker utiles ```bash # Logs d'un conteneur en cours d'exĂ©cution docker logs -f MamieHenriette ``` ```bash # RedĂ©marrer docker compose restart MamieHenriette ``` ```bash # ArrĂȘter docker compose down ``` ### Mise Ă  jour #### Avec Docker (recommandĂ©) ```bash # 1. ArrĂȘter les conteneurs docker compose down # 2. RĂ©cupĂ©rer les derniĂšres modifications git pull origin main # 3. Mettre Ă  jour l'image Docker docker compose pull # 4. Relancer docker compose up -d ``` > 💡 **Note** : Si vous utilisez Watchtower, les mises Ă  jour de l'image sont automatiques (vĂ©rification toutes les 30 minutes). #### Sans Docker (installation locale) ```bash # 1. ArrĂȘter l'application # (Ctrl+C si elle tourne en premier plan) # 2. RĂ©cupĂ©rer les modifications git pull origin main # 3. Mettre Ă  jour les dĂ©pendances pip install -r requirements.txt # 4. Relancer python run-web.py ``` ## Architecture du projet ### Interface d'administration | Section | Fonction | |---------|----------| | **Configurations** | Tokens Discord/Twitch, paramĂštres gĂ©nĂ©raux et configuration ProtonDB | | **Humeurs** | Gestion des statuts Discord rotatifs | | **Commandes** | Commandes personnalisĂ©es multi-plateformes (Discord/Twitch) | | **Alertes Live** | Configuration surveillance streamers Twitch avec notifications Discord | | **Messages** | Messages automatiques et notifications pĂ©riodiques | | **ModĂ©ration** | Outils de gestion communautaire | ### Structure des modules ``` ├── database/ # Couche donnĂ©es │ ├── models.py # ModĂšles ORM │ ├── helpers.py # Utilitaires BDD │ └── schema.sql # Structure initiale │ ├── discordbot/ # Module Discord │ ├── __init__.py # Bot et handlers principaux │ └── humblebundle.py # Surveillance Humble Bundle │ ├── twitchbot/ # Module Twitch │ ├── __init__.py # Bot Twitch et handlers │ └── live_alert.py # Surveillance des streams live │ ├── protondb/ # Module ProtonDB │ └── __init__.py # API Algolia et recherche compatibilitĂ© │ └── webapp/ # Interface d'administration ├── static/ # Assets statiques (CSS, JS, images) ├── templates/ # Vues HTML Jinja2 ├── live_alert.py # Gestion des alertes Twitch ├── twitch_auth.py # Authentification Twitch OAuth └── *.py # Autres contrĂŽleurs par section ``` ### Composants principaux | Fichier | RĂŽle | |---------|------| | `run-web.py` | Point d'entrĂ©e principal | | `start.sh` | Script de dĂ©marrage Docker | | `docker-compose.yml` | Configuration des services | | `requirements.txt` | DĂ©pendances Python | ## SpĂ©cifications techniques ### Base de donnĂ©es (SQLite) - **Configuration** : ParamĂštres et tokens des plateformes, configuration des fonctionnalitĂ©s - **Humeur** : Statuts Discord rotatifs avec gestion automatique - **Commande** : Commandes personnalisĂ©es multi-plateformes (Discord/Twitch) - **LiveAlert** : Configuration surveillance streamers Twitch (nom, canal Discord, statut) - **GameAlias** : Alias pour amĂ©liorer les recherches ProtonDB - **GameBundle** : Historique et notifications Humble Bundle - **AntiCheatCache** : Cache des informations anti-cheat pour ProtonDB (mise Ă  jour automatique hebdomadaire) - **Message** : Messages automatiques pĂ©riodiques - **Moderation** : Historique complet des actions de modĂ©ration (avertissements, timeouts, bans, kicks, unbans) avec raison, staff, timestamp et durĂ©e - **MemberInvites** : Tracking des invitations (code d'invitation, inviteur, date de join) ### Architecture multi-thread - **Thread 1** : Interface web Flask (port 5000) avec logging rotatif - **Thread 2** : Bot Discord et tĂąches automatisĂ©es (humeurs, Humble Bundle) - **Thread 3** : Bot Twitch et surveillance live streams (vĂ©rification 5min) ### Monitoring et logging - **Healthcheck Docker** : Surveillance processus Python + dĂ©tection erreurs logs - **Logs rotatifs** : Fichiers limitĂ©s Ă  50MB avec rotation automatique - **Persistance** : Logs sauvegardĂ©s sur l'hĂŽte dans `./logs/` ### DĂ©pendances principales ``` discord.py==2.3.2 # API Discord avec support async flask>=2.3.2 # Interface web et API REST flask-sqlalchemy>=3.0.3 # ORM SQLAlchemy pour base de donnĂ©es flask[async] # Extensions async pour Flask requests>=2.32.4 # Client HTTP pour APIs externes waitress>=3.0.2 # Serveur WSGI de production algoliasearch>=4,<5 # API ProtonDB via Algolia twitchAPI>=4.5.0 # API Twitch pour streams et chat python-dotenv==1.0.0 # Gestion variables d'environnement aiohttp>=3.7.4,<4 # Client HTTP async (requis par discord.py) audioop-lts # CompatibilitĂ© audio Python 3.13+ ``` ## DĂ©veloppement ### Installation locale ```bash python3 -m venv venv ``` ```bash source venv/bin/activate ``` ```bash pip install -r requirements.txt ``` ```bash python run-web.py ``` ### Contribution 1. Fork du projet 2. Branche feature 3. Pull Request ## Licence MamieHenriette - Bot multi-plateformes pour Discord, Twitch et YouTube Live Copyright (C) 2025 Philippe Favre Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique GĂ©nĂ©rale GNU Affero telle que publiĂ©e par la Free Software Foundation, soit la version 3 de la Licence, ou (Ă  votre choix) toute version ultĂ©rieure. Ce programme est distribuĂ© dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans mĂȘme la garantie implicite de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la Licence Publique GĂ©nĂ©rale GNU Affero pour plus de dĂ©tails. Vous devriez avoir reçu une copie de la Licence Publique GĂ©nĂ©rale GNU Affero avec ce programme. Si ce n'est pas le cas, voir . --- *Mamie Henriette vous surveille ! đŸ‘”đŸ‘€*