Back

Automated curator bot (Steam) Bot de curateur automatisé (Steam)

A fully automated Steam curator bot leveraging local LLMs to categorize games, scrape metadata, and publish reviews autonomously. Un bot de curateur Steam entièrement automatisé exploitant des LLM locaux pour classer les jeux, récupérer des métadonnées et publier des critiques de manière autonome.

Node.js Python Docker LLMs Automation Google Sheets API

Contexte

Gérer manuellement une page de curateur Steam spécialisée prend énormément de temps. Je voulais automatiser entièrement le processus de découverte, de filtrage et d’évaluation de jeux d’horreur japonais sur la boutique Steam.

Pour y parvenir, j’ai construit un bot privé et auto-hébergé qui tourne en boucle continue, gérant tout, de la récupération (scraping) des données à la publication automatisée de critiques, le tout supervisé via Discord.

Page de Curateur Steam

Ce que j’ai construit

L’architecture est divisée en deux services principaux fonctionnant au sein d’un seul conteneur Docker, orchestrés par supervisord.

1. La boucle de pipeline (Python & Bash)

Le moteur principal qui s’exécute sur une planification horaire :

  • RĂ©cupĂ©ration (Scraping) & DĂ©couverte : Analyse tous les jeux d’horreur de la boutique Steam qui prennent en charge la langue japonaise.
  • Classification par l’IA : Utilise un processus de vĂ©rification en plusieurs Ă©tapes. Premièrement, il applique des heuristiques pour dĂ©terminer si le jeu est qualifiĂ© d’horreur japonaise. Si le rĂ©sultat heuristique est incertain, il s’appuie sur des LLM locaux via le “zero-shot prompting” - en lui fournissant toutes les mĂ©tadonnĂ©es disponibles pour prendre la dĂ©cision finale.
  • Enrichissement des DonnĂ©es : S’intègre aux API Steam pour rĂ©cupĂ©rer des mĂ©tadonnĂ©es riches (critiques, dates de sortie, informations sur les dĂ©veloppeurs).
  • Synchronisation des DonnĂ©es : Construit automatiquement des feuilles de calcul .xlsx et synchronise l’ensemble du jeu de donnĂ©es enrichi vers Google Sheets pour un affichage Ă  distance.
  • Publication AutomatisĂ©e : Publie et met Ă  jour les critiques de curateur sur Steam, en prenant en charge Ă  la fois les textes gĂ©nĂ©rĂ©s par l’IA et les remplacements manuels Ă©pinglĂ©s.

2. API d’administration Discord (Node.js)

Pour éviter un accès manuel au serveur par SSH, j’ai construit une interface complète de commande et de contrôle via un bot Discord :

  • Gestion de Session : S’authentifie avec Steam (gĂ©rant la connexion par QR code) et fournit des cookies de session valides au pipeline Python.
  • Système d’Alerte : Envoie des alertes en temps rĂ©el sur les Ă©checs du pipeline ou des rĂ©sumĂ©s sur les exĂ©cutions rĂ©ussies.
  • Points de Terminaison (Endpoints) d’Administration : Fournit une API REST pour ajouter manuellement des jeux Ă  une liste noire, forcer l’ajout d’identifiants, ou outrepasser des genres directement depuis les commandes Discord.

Défi technique

L’un des principaux défis était de construire un pipeline de données résilient qui pouvait gérer les limites de taux de requêtes de l’API Steam, les expirations de session, et les changements inattendus du HTML pendant le scraping.

En séparant la gestion de l’état (Bot Discord) de la boucle d’exécution (Pipeline Python), je me suis assuré que même si un scrape échoue, la session reste active et le système peut s’auto-récupérer et m’alerter via Discord.

Résultat

Un système d’automatisation complètement autonome. Le bot surveille en permanence la boutique Steam, évalue les nouveaux jeux en utilisant l’IA, et publie des critiques formatées de curateur sans aucune intervention humaine, économisant ainsi des heures de curation manuelle chaque semaine.

Lien

Context

Manually managing a niche Steam curator page is incredibly time-consuming. I wanted to fully automate the process of discovering, filtering, and reviewing Japanese horror games on the Steam store.

To achieve this, I built a private, self-hosted bot that runs in a continuous loop, handling everything from data scraping to automated review publishing, all supervised via Discord.

Steam Curator Page

What I built

The architecture is split into two main services running within a single Docker container, orchestrated by supervisord.

1. The pipeline loop (Python & Bash)

The main engine that runs on an hourly schedule:

  • Scraping & Discovery: Scans all horror games on the Steam store that support the Japanese language.
  • AI Classification: Uses a multi-step verification process. First, it applies heuristics to determine if the game qualifies as Japanese horror. If the heuristic result is uncertain, it relies on local LLMs via zero-shot prompting - feeding it all available metadata to make the final decision.
  • Data Enrichment: Integrates with Steam APIs to fetch rich metadata (reviews, release dates, developer info).
  • Data Synchronization: Automatically builds .xlsx spreadsheets and syncs the entire enriched dataset to Google Sheets for remote viewing.
  • Automated Publishing: Publishes and updates curator reviews on Steam, supporting both AI-generated text and pinned manual overrides.

2. Discord admin API (Node.js)

To avoid manual SSH access to the server, I built a complete command and control interface via a Discord bot:

  • Session Management: Authenticates with Steam (handling QR code login) and provides valid session cookies to the Python pipeline.
  • Alert System: Sends real-time alerts on pipeline failures or summaries of successful runs.
  • Admin Endpoints: Provides a REST API to manually add games to a blacklist, force-add IDs, or override genres directly from Discord commands.

Technical challenge

One of the main challenges was building a resilient data pipeline that could handle Steam API rate limits, session expirations, and unexpected HTML changes during scraping.

By separating state management (Discord Bot) from the execution loop (Python Pipeline), I ensured that even if a scrape fails, the session remains active and the system can self-recover and alert me via Discord.

Result

A completely autonomous automation system. The bot continuously monitors the Steam store, evaluates new games using AI, and publishes formatted curator reviews without any human intervention, saving hours of manual curation each week.