Bot Telegram



QuebecRoundBot - Résumé du Projet

Aperçu Général

QuebecRoundBot est un bot Telegram automatisé conçu pour surveiller et notifier les rondes d’invitation du Programme d’immigration du Québec, ainsi que fournir des nouvelles pertinentes sur la province via des flux RSS.

Problème Résolu

Le projet répond aux besoins suivants :

  1. Surveillance Manuelle Fastidieuse : Élimine le besoin de vérifier constamment le site web officiel du gouvernement du Québec pour connaître les nouvelles rondes d’invitation du programme d’immigration.

  2. Information Centralisée : Consolide l’information de multiples sources RSS sur le Québec dans un seul canal Telegram, facilitant l’accès aux nouvelles pertinentes.

  3. Notifications en Temps Réel : Fournit des alertes automatiques lorsque de nouvelles invitations ou nouvelles sont publiées, permettant aux utilisateurs de rester informés sans effort actif.

  4. Accessibilité : Offre l’information de manière structurée et formatée sur Telegram, une plateforme familière et accessible pour la plupart des utilisateurs.

Fonctionnalités Principales

1. Bot Telegram Interactif

  • Commande principale : "quebec round" - récupère et affiche les dernières rondes d’invitation

2. Web Scraping des Invitations

  • Utilise Puppeteer pour télécharger les pages web du gouvernement du Québec
  • Extrait l’information détaillée des rondes d’invitation :
    • Date de l’invitation
    • Volet (catégorie du programme)
    • Nombre d’invitations émises
    • Points minimums requis
    • Critères spécifiques d’admissibilité
  • Parse les dates en format français et les convertit au format ISO

3. Système de Notifications Automatiques

  • Détecte les nouvelles invitations en comparant avec la base de données MongoDB
  • Envoie des messages formatés au canal Telegram seulement pour les nouvelles invitations
  • Prévient les doublons par vérification d’existence dans la base de données

4. Agrégateur de Nouvelles RSS

  • Récupère les nouvelles de multiples sources RSS configurables :
    • Quebec News RSS
    • Estrie News RSS
  • Vérifie si les nouvelles ont déjà été envoyées avant de les publier
  • Implémente un timeout de 30 secondes entre les messages pour éviter la détection de spam de Telegram

5. Persistance des Données

  • Stocke les invitations dans MongoDB avec un schéma structuré :
    • Volet, date, points, nombre d’invitations, critères
  • Stocke les nouvelles RSS pour éviter les doublons :
    • GUID, titre, lien, date de publication

6. Automatisation via Cron

  • Script update.sh exécutable via des cron jobs
  • Met à jour automatiquement :
    • Rondes d’invitation (npm run updateRounds)
    • Nouvelles RSS (npm run updateRSSNews)
  • Enregistre toutes les opérations dans logs/cron.log avec timestamps
  • Emplacement : update.sh:1-18

Technologies Utilisées

Backend et Runtime

  • Node.js (v22.18.0) : Environnement d’exécution JavaScript
  • TypeScript : Surensemble de JavaScript avec typage statique pour une plus grande robustesse

Bibliothèques Principales

  • node-telegram-bot-api (v0.63.0) : API pour interagir avec Telegram
  • Puppeteer (v21.3.8) : Automatisation de navigateur pour le web scraping
  • Cheerio (v1.0.0-rc.12) : Analyseur HTML de type jQuery pour Node.js
  • rss-parser (v3.13.0) : Analyseur de flux RSS/Atom
  • Mongoose (v8.18.0) : ODM (Object Data Modeling) pour MongoDB

Utilitaires

  • dotenv (v17.2.2) : Gestion des variables d’environnement
  • ts-node (v10.9.2) : Exécution directe de TypeScript sans compilation préalable

Base de Données

  • MongoDB : Base de données NoSQL pour stocker les invitations et nouvelles

DevOps

  • Cron : Planificateur Linux pour l’exécution automatique périodique
  • Bash : Scripts d’automatisation

Architecture du Projet

QuebecRoundBot/
├── src/
│   ├── index.ts                  # Bot Telegram principal
│   ├── updateRounds.ts           # Script pour mettre à jour les invitations
│   ├── postMessageTelegram.ts    # Module d'envoi de messages
│   ├── sendAllInvitations.ts     # Envoi massif d'invitations
│   ├── models/
│   │   ├── Invitations.ts        # Schéma des invitations
│   │   └── rssNews.ts            # Schéma des nouvelles RSS
│   ├── rssNewsQuebec/
│   │   └── rssQuebec.ts          # Processeur de flux RSS
│   ├── scrapper/
│   │   ├── scrapper.ts           # Logique principale de scraping
│   │   ├── getHtml.ts            # Téléchargement HTML avec Puppeteer
│   │   ├── formatter.ts          # Formatage de messages
│   │   └── helper.ts             # Fonctions auxiliaires
│   └── lib/
│       └── mongo.ts              # Connexion à MongoDB
├── logs/
│   └── cron.log                  # Log des exécutions automatiques
├── update.sh                     # Script de mise à jour cron
├── expanded_page.html            # HTML téléchargé pour le parsing
└── package.json                  # Configuration du projet

Flux de Travail

Mise à Jour des Invitations

  1. Puppeteer télécharge la page web officielle (getHtml.ts)
  2. Sauvegarde le HTML dans expanded_page.html
  3. Cheerio parse le HTML et extrait les données structurées (scrapper.ts)
  4. Compare avec la base de données MongoDB pour détecter les nouvelles invitations
  5. Insère seulement les nouvelles invitations dans MongoDB
  6. Envoie une notification formatée au canal Telegram

Mise à Jour des Nouvelles RSS

  1. Parse plusieurs flux RSS configurés
  2. Itère sur chaque item du flux
  3. Vérifie si le GUID existe déjà dans MongoDB
  4. Si nouvelle, l’insère dans MongoDB
  5. Envoie la nouvelle formatée au canal Telegram
  6. Attend 30 secondes avant le prochain message

Dernière mise à jour : 14 octobre 2025 Version : 1.0.0 Mainteneur : @datanarch