Tôt ou tard votre bot devra faire quelque chose sans qu'on le lui demande : publier un message quotidien, vider un vieux salon, vérifier un service externe. Toutes les bibliothèques facilitent cela, et les trois erreurs habituelles portent toutes sur ce qui se passe quand le bot ne tourne pas.
Les outils
| Approche | Bonne pour |
|---|---|
| La boucle de tâches de la bibliothèque | Tout ce qui est à intervalle fixe. Elle démarre et s'arrête avec le bot. |
| Un planificateur façon cron | « Tous les jours à neuf heures » plutôt que « toutes les 24 heures ». |
| Une tâche du panel lançant une commande | Ce qui doit arriver même si le processus du bot va mal. |
Les trois erreurs
- Confondre un intervalle et une horloge
« Toutes les 86400 secondes » dérive : le compte part du démarrage du bot, donc un redémarrage à 15 h déplace votre publication de 9 h à 15 h pour toujours. Si l'heure compte, utilisez un planificateur qui connaît les heures, pas les intervalles.
- Ignorer dans quel fuseau vous êtes
Un serveur ne tourne pas forcément à votre heure locale. « Neuf heures du matin » est neuf heures quelque part ; vérifiez où, et réglez-le explicitement plutôt que de le découvrir au matin.
- Perdre l'exécution due pendant l'arrêt
Un bot en redémarrage à neuf heures rate simplement neuf heures. Si une tâche ne doit pas être sautée, enregistrez la dernière exécution réussie et vérifiez au démarrage s'il en reste une due.
Un nettoyage qui supprime les messages un par un, ou une annonce qui publie dans cinquante salons en boucle serrée, heurte les limites décrites dans l'article dédié. Regroupez là où l'API le permet, et espacez ce que vous ne pouvez pas regrouper : la tâche n'est pas urgente, laissez-la être lente.
« Tâche quotidienne terminée à 09:00 » est une ligne et répond instantanément, pour toujours, à « est-ce que ça a tourné ? ». Sans elle, la seule preuve est la visibilité de l'effet, ce qui n'est pas du tout la même chose.
Réglez la tâche dans une minute, regardez-la se déclencher, puis redémarrez le bot et vérifiez qu'elle se déclenche toujours à l'heure prévue et non une minute après le démarrage.