Superbe travail !
Idéalement, vous pourriez envisager de l’empaqueter sous forme de plugin afin d’éviter d’avoir besoin d’un exécutable ou d’un script séparé : Developing Discourse Plugins - Part 1 - Create a basic plugin
Sur le plan architectural, vous pourriez également envisager d’utiliser les événements natifs de Discourse pour capturer le moment où vous souhaitez envoyer un message à un utilisateur, ce qui éviterait toute planification.
Mais si vous en avez besoin, Discourse dispose également d’un excellent planificateur et de nombreux plugins permettent de créer des « Jobs » personnalisés. Scheduling jobs from a plugin - #2 by simon