mirror of
https://github.com/skylanix/MamieHenriette.git
synced 2026-02-06 06:40:35 +01:00
first commit
This commit is contained in:
11
Dockerfile
Normal file
11
Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
||||
FROM python:3.9-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt .
|
||||
COPY bot.py .
|
||||
COPY statuts.txt .
|
||||
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
CMD ["python", "bot.py"]
|
||||
58
README.md
Normal file
58
README.md
Normal file
@@ -0,0 +1,58 @@
|
||||
Voici le README.md pour votre projet :
|
||||
|
||||
# 👵 Mamie Henrriette - Discord Status Bot 🤖
|
||||
|
||||
## 📖 Description
|
||||
|
||||
Mamie Henrriette est un bot Discord intelligent qui change automatiquement de statut, surveillant et gérant votre serveur avec une touche d'humour et de caractère.
|
||||
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
- Changement cyclique automatique des statuts
|
||||
- Configuration flexible via variables d'environnement
|
||||
- Gestion des erreurs et logging
|
||||
- Support multi-statuts Discord
|
||||
- Déploiement simplifié avec Docker
|
||||
|
||||
## 🛠 Prérequis
|
||||
|
||||
- Docker
|
||||
- Compte Discord et Token du bot
|
||||
|
||||
## 📦 Installation
|
||||
|
||||
1. Clonez le dépôt
|
||||
```bash
|
||||
git clone https://git.favrep.ch/lapatatedouce/MamieHenrriette
|
||||
cd MamieHenrriette
|
||||
```
|
||||
|
||||
2. Conteneur Docker
|
||||
|
||||
```bash
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
### Variables d'environnement
|
||||
|
||||
- `TOKEN`: Votre token Discord (obligatoire)
|
||||
- `STATUS`: Statut initial (défaut: online)
|
||||
- `INTERVAL`: Intervalle de changement de statut (défaut: 60 secondes)
|
||||
|
||||
### Fichier `statuts.txt`
|
||||
|
||||
Créez un fichier `statuts.txt` avec vos statuts, un par ligne.
|
||||
|
||||
Exemple :
|
||||
```
|
||||
Surveiller le serveur
|
||||
Mamie est là !
|
||||
En mode supervision
|
||||
```
|
||||
|
||||
## 📋 Dépendances
|
||||
|
||||
- discord.py==2.3.2
|
||||
- python-dotenv==1.0.0
|
||||
114
bot.py
Normal file
114
bot.py
Normal file
@@ -0,0 +1,114 @@
|
||||
import discord
|
||||
import json
|
||||
import random
|
||||
import asyncio
|
||||
import logging
|
||||
import os
|
||||
|
||||
class DiscordStatusBot:
|
||||
def __init__(self):
|
||||
# Configuration des logs
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
|
||||
|
||||
# Charger la configuration à partir des variables d'environnement
|
||||
self.config = self.charger_configuration()
|
||||
if not self.config:
|
||||
logging.error("Impossible de charger la configuration")
|
||||
exit(1)
|
||||
|
||||
# Configuration des intents
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = False
|
||||
|
||||
# Création du client
|
||||
self.client = discord.Client(intents=intents)
|
||||
|
||||
# Événements
|
||||
self.setup_events()
|
||||
|
||||
def charger_configuration(self):
|
||||
"""Chargement de la configuration à partir des variables d'environnement"""
|
||||
config = {
|
||||
'token': os.getenv('TOKEN'),
|
||||
'status': os.getenv('STATUS', 'online'),
|
||||
'interval': int(os.getenv('INTERVAL', 60))
|
||||
}
|
||||
|
||||
if not config['token']:
|
||||
logging.error("Token non fourni")
|
||||
return None
|
||||
|
||||
return config
|
||||
|
||||
def charger_statuts(self):
|
||||
"""Chargement des statuts depuis le fichier"""
|
||||
try:
|
||||
with open('/app/statuts.txt', 'r', encoding='utf-8') as fichier:
|
||||
return [ligne.strip() for ligne in fichier.readlines() if ligne.strip()]
|
||||
except FileNotFoundError:
|
||||
logging.error("Fichier de statuts non trouvé")
|
||||
return []
|
||||
|
||||
def setup_events(self):
|
||||
"""Configuration des événements du bot"""
|
||||
@self.client.event
|
||||
async def on_ready():
|
||||
logging.info(f'Bot connecté : {self.client.user}')
|
||||
self.client.loop.create_task(self.changer_statut())
|
||||
|
||||
# Déplacez changer_statut à l'extérieur de setup_events
|
||||
async def changer_statut(self):
|
||||
"""Changement cyclique du statut"""
|
||||
await self.client.wait_until_ready()
|
||||
statuts = self.charger_statuts()
|
||||
if not statuts:
|
||||
logging.warning("Aucun statut disponible")
|
||||
return
|
||||
|
||||
# Mapping des status Discord
|
||||
status_mapping = {
|
||||
'online': discord.Status.online,
|
||||
'idle': discord.Status.idle,
|
||||
'dnd': discord.Status.dnd,
|
||||
'invisible': discord.Status.invisible
|
||||
}
|
||||
|
||||
# Récupérer le status depuis la configuration
|
||||
status_discord = status_mapping.get(self.config.get('status', 'online'), discord.Status.online)
|
||||
|
||||
while not self.client.is_closed():
|
||||
try:
|
||||
# Sélection du statut
|
||||
statut = random.choice(statuts)
|
||||
|
||||
# Changement de statut avec custom activity
|
||||
await self.client.change_presence(
|
||||
status=status_discord,
|
||||
activity=discord.CustomActivity(name=statut)
|
||||
)
|
||||
logging.info(f"Statut changé : {statut}")
|
||||
|
||||
# Délai entre les changements
|
||||
await asyncio.sleep(self.config.get('interval', 60))
|
||||
except Exception as e:
|
||||
logging.error(f"Erreur lors du changement de statut : {e}")
|
||||
await asyncio.sleep(30) # Attente en cas d'erreur
|
||||
|
||||
def executer(self):
|
||||
"""Lancement du bot"""
|
||||
try:
|
||||
if self.config and 'token' in self.config:
|
||||
self.client.run(self.config['token'])
|
||||
else:
|
||||
logging.error("Token non trouvé dans la configuration")
|
||||
except discord.LoginFailure:
|
||||
logging.error("Échec de connexion - Vérifiez votre token")
|
||||
except Exception as e:
|
||||
logging.error(f"Erreur lors du lancement : {e}")
|
||||
|
||||
def main():
|
||||
bot = DiscordStatusBot()
|
||||
bot.executer()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
11
docker-compose.yml
Normal file
11
docker-compose.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
discord-bot:
|
||||
container_name: MamieHenrriette
|
||||
build: .
|
||||
restart: on-failure
|
||||
environment:
|
||||
- TOKEN=your token
|
||||
- STATUS=online
|
||||
- INTERVAL=3600
|
||||
volumes:
|
||||
- ./statuts.txt:/app/statuts.txt
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
discord.py==2.3.2
|
||||
python-dotenv==1.0.0
|
||||
22
statuts.txt
Normal file
22
statuts.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
STEvE galère un peu, mais moi je gère le bazar.
|
||||
Sans mamie, vous seriez bien vite paumés.
|
||||
Ici, c’est mamie qui veille, alors écoutez un peu.
|
||||
STEvE dort, moi je fais tourner la baraque.
|
||||
J’aime râler, mais c’est pour vous réveiller un peu.
|
||||
Restez sages, sinon mamie va grogner un peu.
|
||||
Les malins, faites-moi plaisir, écoutez mamie.
|
||||
Jamais le bazar ne s’installe, je veille au grain.
|
||||
C’est moi qui tiens la maison.
|
||||
Vous aimez STEvE ? Moi, je vous tolère.
|
||||
Gardez votre calme, mamie veille sur vous.
|
||||
Quand STEvE foire, je suis là pour arranger ça.
|
||||
Suivez STEvE, mais surtout ne perdez pas mamie de vue.
|
||||
STEvE rêve, moi je travaille en coulisses.
|
||||
Ecoutez mamie, c’est pour votre bien.
|
||||
Pas d’embrouille, ou mamie va devoir intervenir.
|
||||
STEvE dort, mais mamie veille toujours.
|
||||
Vous râlez ? Moi aussi, mais on fait avec.
|
||||
STEvE prend son temps, moi je veille au grain.
|
||||
Pas de bazar, mamie préfère le calme.
|
||||
STEvE est parfois perdu, mais mamie est là.
|
||||
Le serveur est calme, grâce à mamie.
|
||||
Reference in New Issue
Block a user