diff --git a/.env.example b/.env.example deleted file mode 100644 index 7f886eb..0000000 --- a/.env.example +++ /dev/null @@ -1,5 +0,0 @@ -# Configuration Zabbix (optionnel) -ENABLE_ZABBIX=false -ZABBIX_SERVER=zabbix-server.example.com -ZABBIX_HOSTNAME=MamieHenriette -ZABBIX_PORT=10050 \ No newline at end of file diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 7fdbae7..814f1bc 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,57 +1,41 @@ -name: Build and Push Docker Image +name: Create and publish a Docker image on: push: - branches: [ main ] - tags: [ 'v*' ] - pull_request: - branches: [ main ] + branches: ['*'] env: REGISTRY: ghcr.io - IMAGE_NAME: skylanix/mamiehenriette + IMAGE_NAME: ${{ github.repository }} jobs: - build: + build-and-push-image: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - name: Extract metadata - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - type=raw,value=latest,enable={{is_default_branch}} - labels: | - org.opencontainers.image.title=${{ github.repository }} - org.opencontainers.image.description=Bot multi-plateformes Discord/Twitch/YouTube pour la communauté STEvE - org.opencontainers.image.source=https://github.com/${{ github.repository }} - org.opencontainers.image.url=https://github.com/${{ github.repository }} - org.opencontainers.image.licenses=GPL-3.0 - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/README.md b/README.md index 3abe6b6..bb56114 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 activez 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..5899594 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,30 +1,41 @@ 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 + restart: "no" # N'autorise pas le redémarrage automatique - # 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 - - # Redémarrage automatique sauf si arrêté manuellement - restart: unless-stopped +# 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) 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 + - 5000:5000 # Interface web sur http://localhost:5000 +# - "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: "no" # N'autorise pas le redémarrage automatique + environment: + TZ: Europe/Paris # Fuseau horaire + # 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), (décommentez si nécessaire) +# WATCHTOWER_NOTIFICATION_URL: "discord://token@id" + # Format personnalisé des messages de notification (décommentez si nécessaire) +# WATCHTOWER_NOTIFICATION_TEMPLATE: |- +# {{range .}}{{.Time.Format "01-02-2006 15:04:05"}} ({{.Level}})':' {{.Message}}{{println}}{{end}} +# WATCHTOWER_NOTIFICATIONS: shoutrrr # Service de notification utilisé pour Discord (décommentez si nécessaire) + volumes: + - /var/run/docker.sock:/var/run/docker.sock # Monte le socket Docker pour permettre à Watchtower de surveiller les conteneurs diff --git a/requirements.txt b/requirements.txt index 1a1c173..3271e08 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,21 +1,22 @@ +# Gestion des variables d'environnement python-dotenv==1.0.0 -# necessaire pour l'api discord +# Nécessaire pour l'API Discord discord.py==2.3.2 aiohttp>=3.7.4,<4 audioop-lts; python_version>='3.13' -# api twitch +# API Twitch twitchAPI>=4.5.0 -# necessaire pour l'hebergement du site web +# Nécessaire pour l'hébergement du site web flask>=2.3.2 flask-sqlalchemy>=3.0.3 waitress>=3.0.2 -# necessaire pour l'appel à l'api humble bundle +# Nécessaire pour l'appel à l'API Humble Bundle requests>=2.32.4 -# necessaire pour l'appel à protopn db +# Nécessaire pour l'appel à ProtonDB algoliasearch>=4,<5