Optimiser les rappels via Telegram | Original, traduit par l'IA
Dans ce projet, j’ai mis en place un système de rappels automatisé utilisant GitHub Actions et un bot Telegram pour suivre mes tâches quotidiennes et mensuelles. En exploitant des plannings cron, j’ai configuré des rappels pour des tâches professionnelles comme pointer sur WeCom, soumettre des feuilles de temps et vérifier les salaires, ainsi que des tâches personnelles comme rendre visite à ma famille, faire des achats sur JD.com, et même regarder la télé avec ma partenaire. Le système utilise un script Python pour envoyer des messages via l’API Bot de Telegram, avec des variables d’environnement stockées de manière sécurisée dans GitHub Secrets. Cette configuration garantit que je ne manque jamais des échéances critiques ou des engagements personnels, combinant technologie et vie quotidienne pour une efficacité maximale.
name: Rappels
on:
schedule:
# Exécuté toutes les 2 heures de midi à 20h (heure de Pékin, UTC+8) du mercredi au vendredi.
- cron: '0 4,6,8,10,12 * * 3-5'
# Exécuté le 27 de chaque mois à midi (heure de Pékin, UTC+8).
- cron: '0 4 27 * *'
# Exécuté le 30 de chaque mois à 14h (heure de Pékin, UTC+8).
- cron: '0 6 30 * *'
# Exécuté chaque jour à 1h du matin heure de Pékin (17h UTC la veille).
- cron: '0 17 * * *'
# Exécuté chaque jour à 11h heure de Pékin (3h UTC).
- cron: '0 3 * * *'
# Rappel pour aller chez les parents le lendemain : 21h heure de Pékin (13h UTC) mar, mer, jeu.
- cron: '0 13 * * 2-4'
# Rappel pour aller chez soi le lendemain : 21h heure de Pékin (13h UTC) dim, lun, ven, sam.
- cron: '0 13 * * 0,1,5,6'
# Rappel pour acheter des produits frais directement sur JD.com : 21h heure de Pékin (13h UTC) mercredi.
- cron: '0 13 * * 3'
# Rappel pour acheter des plats livrés rapidement sur JD.com : 21h heure de Pékin (13h UTC) vendredi.
- cron: '0 13 * * 5'
# Rappel pour l'examen de licence associée en mars, avril, septembre et octobre chaque lundi à 13h heure de Pékin (5h UTC).
- cron: '0 5 * 3,4,9,10 1'
# Rappel pour soumettre la feuille de temps Clarity chaque vendredi à 17h heure de Taipei (9h UTC).
- cron: '0 9 * * 5'
# Rappel pour soumettre la feuille de temps fournisseur le 25 de chaque mois à minuit heure de Taipei (16h UTC la veille).
- cron: '0 16 25 * *'
# Rappel pour demander à la famille de soutenir le paiement du prêt le 16 de chaque mois à 21h heure de Taipei (13h UTC).
- cron: '0 13 16 * *'
# Rappel pour regarder la télé avec ma partenaire chaque vendredi, samedi et dimanche à 22h heure de Taipei (14h UTC).
- cron: '0 14 * * 5,6,0'
# Rappel pour enlever l'autocollant de stationnement à 2h heure de Pékin (18h UTC) mer, jeu, ven.
- cron: '0 18 * * 3,4,5'
workflow_dispatch: # Permet un déclenchement manuel
concurrency:
group: 'rappels'
cancel-in-progress: false
jobs:
envoyer-rappels:
runs-on: ubuntu-latest
environment: github-pages
env:
TELEGRAM_BOT2_API_KEY: $
steps:
- name: Vérifier le dépôt
uses: actions/checkout@v4
with:
fetch-depth: 5
- name: Configurer Python 3.10.x
uses: actions/setup-python@v4
with:
python-version: "3.10.x"
- name: Installer les dépendances
run: |
python -m pip install --upgrade pip
pip install -r requirements.simple.txt
- name: Exécuter le script Telegram pour les rappels de pointage quotidien
run: python scripts/release/reminders_bot.py --job send_message --message "Pointer sur WeCom"
if: github.event.schedule == '0 4,6,8,10,12 * * 3-5'
- name: Exécuter le script Telegram pour le rappel mensuel de prêt immobilier
run: python scripts/release/reminders_bot.py --job send_message --message "Préparer le prélèvement du prêt immobilier"
if: github.event.schedule == '0 4 27 * *'
- name: Exécuter le script Telegram pour le rappel mensuel de vérification de salaire
run: python scripts/release/reminders_bot.py --job send_message --message "Vérifier le salaire"
if: github.event.schedule == '0 6 30 * *'
- name: Exécuter le script Telegram pour le rappel de sommeil
run: python scripts/release/reminders_bot.py --job send_message --message "Il est temps de dormir !"
if: github.event.schedule == '0 17 * * *'
- name: Exécuter le script Telegram pour le rappel de réveil
run: python scripts/release/reminders_bot.py --job send_message --message "Il est temps de se réveiller !"
if: github.event.schedule == '0 3 * * *'
- name: Exécuter le script Telegram pour le rappel de la maison des parents
run: python scripts/release/reminders_bot.py --job send_message --message "Aller chez les parents demain !"
if: github.event.schedule == '0 13 * * 2-4'
- name: Exécuter le script Telegram pour le rappel de sa propre maison
run: python scripts/release/reminders_bot.py --job send_message --message "Aller chez toi demain !"
if: github.event.schedule == '0 13 * * 0,1,5,6'
- name: Exécuter le script Telegram pour le rappel d'achat de produits frais sur JD.com
run: python scripts/release/reminders_bot.py --job send_message --message "Acheter des produits frais directement sur JD.com !"
if: github.event.schedule == '0 13 * * 3'
- name: Exécuter le script Telegram pour le rappel d'achat de plats livrés rapidement sur JD.com
run: python scripts/release/reminders_bot.py --job send_message --message "Acheter des plats livrés rapidement sur JD.com !"
if: github.event.schedule == '0 13 * * 5'
- name: Exécuter le script Telegram pour le rappel d'examen de licence associée
run: python scripts/release/reminders_bot.py --job send_message --message "S'inscrire à l'examen de licence associée"
if: github.event.schedule == '0 5 * 3,4,9,10 1'
- name: Exécuter le script Telegram pour le rappel de feuille de temps Clarity
run: python scripts/release/reminders_bot.py --job send_message --message "Soumettre la feuille de temps Clarity"
if: github.event.schedule == '0 9 * * 5'
- name: Exécuter le script Telegram pour le rappel de feuille de temps fournisseur
run: python scripts/release/reminders_bot.py --job send_message --message "Soumettre la feuille de temps fournisseur"
if: github.event.schedule == '0 16 25 * *'
- name: Exécuter le script Telegram pour le rappel de soutien familial au prêt
run: python scripts/release/reminders_bot.py --job send_message --message "Demander à la famille de soutenir le paiement du prêt"
if: github.event.schedule == '0 13 16 * *'
- name: Exécuter le script Telegram pour le rappel de regarder la télé avec ma partenaire
run: python scripts/release/reminders_bot.py --job send_message --message "Il est temps de regarder la télé avec ta partenaire !"
if: github.event.schedule == '0 14 * * 5,6,0'
- name: Exécuter le script Telegram pour le rappel d'autocollant de stationnement
run: python scripts/release/reminders_bot.py --job send_message --message "Enlever l'autocollant de stationnement de la voiture"
if: github.event.schedule == '0 18 * * 3,4,5'
- name: Exécuter le script Telegram pour un message de test
run: python scripts/release/reminders_bot.py --job send_message --message "Ceci est un message test depuis GitHub Actions."
if: github.event_name == 'workflow_dispatch'
import os
import requests
from dotenv import load_dotenv
import json
import argparse
load_dotenv()
TELEGRAM_BOT2_API_KEY = os.environ.get("TELEGRAM_BOT2_API_KEY")
TELEGRAM_CHAT_ID = "610574272"
def envoyer_message_telegram(bot_token, chat_id, message):
"""Envoie un message à un chat Telegram en utilisant l'API Bot de Telegram."""
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
params = {
"chat_id": chat_id,
"text": message
}
response = requests.post(url, params=params)
if response.status_code != 200:
print(f"Erreur lors de l'envoi du message Telegram : {response.status_code} - {response.text}")
def obtenir_chat_id(bot_token):
"""Récupère l'ID du chat du dernier message envoyé au bot."""
url = f"https://api.telegram.org/bot{bot_token}/getUpdates"
response = requests.get(url)
if response.status_code == 200:
updates = response.json()
print(json.dumps(updates, indent=4))
if updates['result']:
chat_id = updates['result'][-1]['message']['chat']['id']
return chat_id
return None
def envoyer_rappel(message):
"""Envoie un message de rappel sur Telegram."""
if TELEGRAM_BOT2_API_KEY and TELEGRAM_CHAT_ID:
envoyer_message_telegram(TELEGRAM_BOT2_API_KEY, TELEGRAM_CHAT_ID, f"Rappel : {message}")
else:
print("TELEGRAM_BOT2_API_KEY et TELEGRAM_CHAT_ID ne sont pas définis.")
def main():
parser = argparse.ArgumentParser(description="Script de Bot Telegram")
parser.add_argument('--job', choices=['get_chat_id', 'send_message'], required=True, help="Tâche à effectuer")
parser.add_argument('--message', help="Message personnalisé à envoyer", default=None)
args = parser.parse_args()
if args.job == 'get_chat_id':
bot_token = TELEGRAM_BOT2_API_KEY
chat_id = obtenir_chat_id(bot_token)
if chat_id:
print(f"ID du chat : {chat_id}")
else:
print("Impossible de récupérer l'ID du chat.")
elif args.job == 'send_message':
if args.message:
envoyer_rappel(args.message)
else:
print("Aucun message fourni pour la tâche send_message.")
if __name__ == '__main__':
main()