Files
MamieHenriette/README.md
2025-11-06 02:00:39 +00:00

15 KiB
Executable File

MamieHenriette 👵

Bot multi-plateformes pour Discord, Twitch et YouTube Live

Table des matières

Vue d'ensemble

Mamie Henriette est un bot intelligent open-source développé spécifiquement pour la communauté de STEvE sur YouTube, Twitch et Discord.

⚠️ 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
  • Modération : Système complet de modération avec historique
    • Avertissements : !averto, !warn, !av, !avertissement
    • Gestion des avertissements : !delaverto, !removewarn, !delwarn
    • Liste des événements : !warnings, !listevent, !listwarn
    • Inspection utilisateur : !inspect (historique complet, date d'arrivée, compte)
    • Bannissement : !ban, !unban (avec invitation automatique), !banlist
    • Expulsion : !kick
    • Aide : !aide, !help
    • Messages de bienvenue et départ personnalisables
    • Panneau d'administration web pour consulter l'historique

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, paramètres des plateformes, configuration ProtonDB
  • Gestion des humeurs : Création et modification des statuts
  • Commandes : Édition des commandes personnalisées
  • Modération : Outils de gestion communautaire

Installation

Prérequis

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

  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

# 1. Cloner le projet
git clone https://github.com/skylanix/MamieHenriette.git
cd MamieHenriette
# 2. Récupérer l'image depuis Docker Hub 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 :

docker compose restart MamieHenriette

Build local (développement)

Si vous souhaitez modifier le code et builder l'image localement :

# 1. Cloner et accéder au projet
git clone https://github.com/skylanix/MamieHenriette.git
cd MamieHenriette
# 2. Modifier le docker-compose.yml
# Commentez la ligne 'image:' et décommentez la section 'build:' :
services:
  MamieHenriette:
    container_name: MamieHenriette
    restart: unless-stopped
    build: .                                 # ← Décommentez cette lignes
    image: mamiehenriette                    # ← Décommentez cette lignes
    # image: skylanix/mamiehenriette:latest  # ← Commentez cette ligne
    # ... reste de la configuration
# 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 :

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 :

    • Remplacez /chemin/vers/instance par le chemin absolu sur votre serveur (ex: /opt/containers/MamieHenriette/instance)
    • Remplacez /chemin/vers/logs par le chemin absolu sur votre serveur (ex: /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

# Logs d'un conteneur en cours d'exécution
docker logs -f MamieHenriette
# Redémarrer
docker compose restart MamieHenriette
# Arrêter
docker compose down

Mise à jour

Avec Docker (recommandé)

# 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. Reconstruire et relancer
docker compose up --build -d

Sans Docker (installation locale)

# 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
  • 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
  • Message : Messages automatiques périodiques (implémenté)
  • Moderation : Historique complet des actions de modération (avertissements, bans, kicks, unbans) avec raison, staff et timestamp

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

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
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 <https://www.gnu.org/licenses/>.

Mamie Henriette vous surveille ! 👵👀