No description
- Python 100%
L'éphéméride part toujours à l'heure. Si l'œuvre du jour n'a pas pu être récupérée, le bot réessaie en arrière-plan (après 2, 5, 10, 20 puis 30 minutes) et modifie les messages déjà publiés dès que wikiart répond. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| cambot | ||
| scripts | ||
| tests | ||
| .gitignore | ||
| .python-version | ||
| config.example.toml | ||
| pyproject.toml | ||
| README.md | ||
| run.py | ||
| todo.txt | ||
| uv.lock | ||
CamBot
Bot Discord du Caillou :
- Éphéméride : chaque matin, la date, le saint du jour, la météo (OpenWeatherMap), l'œuvre du jour (WikiArt) et, en option, un poème.
- Wordle collectif, relancé à heures fixes ;
resetpour voter un nouveau mot. - Spoutnik : retrouver le centre d'une image satellite, relancé à heures fixes ;
reset <preset>pour voter un nouveau lieu. - Codenames (
!rouge,!bleu,!jouer,!deviner mot...), indices des choisisseurs en MP. - Sondages (
Question ? a) Oui b) Non), dés (!3d6,!2dés20), jugements (!juger truc), épinglage par réaction 📌.
!aide affiche la liste des commandes.
Installation
uv sync
cp config.example.toml config.toml # puis renseigner token, clés, salons...
uv run python run.py # ou : uv run python -m cambot [config.toml]
Les listes de mots (wordlists/) et les zones Spoutnik (geojson/) ne sont pas versionnées.
scripts/ contient les outils qui ont servi à générer les listes de mots.
Le bot tourne via l'unité systemd cambot.service (ExecStart=uv run python run.py, dans le dossier du projet) :
sudo systemctl restart cambot
journalctl -u cambot -f
Configuration
Tout est dans config.toml (voir config.example.toml, commenté). Points notables :
- les salons peuvent être désignés par un nom déclaré dans
[channels]; - une fonctionnalité sans salon est désactivée ;
- les heures planifiées sont en heure locale (
timezone) ; tokenetopenweathermap_keypeuvent aussi venir des variables d'environnementCAMBOT_TOKENetCAMBOT_OWM_KEY;- l'état des parties de Wordle et Spoutnik est sauvegardé dans
data_diret survit aux redémarrages.
Administration
Le propriétaire de l'application Discord (et les identifiants listés dans admins) peut envoyer au bot, en MP :
| Commande | Effet |
|---|---|
admin |
liste des commandes |
status |
prochaines tâches planifiées et parties en cours |
ephemeris |
publier l'éphéméride maintenant |
wordle targets / wordle reset <salon> |
voir les mots / relancer une partie |
spoutnik targets / spoutnik reset <salon> <preset> |
voir les lieux / relancer une partie |
say <salon> <texte> |
faire parler le bot |
dump <serveur> / load <serveur> <base64> / prefix <serveur> <préfixe> |
sauvegarder, restaurer ou préfixer les noms des salons |
Architecture
run.py point d'entrée (systemd)
cambot/
__main__.py chargement de la config, logs, lancement
bot.py CamBot : chargement des fonctionnalités, planificateur, session HTTP partagée
config.py lecture et validation de config.toml
scheduler.py tâches quotidiennes à heure fixe, isolées les unes des autres
storage.py persistance JSON de l'état des parties
features/ une fonctionnalité par module (un Cog nextcord chacun)
admin.py codenames.py ephemeris.py misc.py polls.py spoutnik.py wordle.py
tests/ uv run pytest
La logique de chaque jeu est indépendante de Discord (elle reçoit des messages et des salons), ce qui permet de la tester avec de faux objets.