""" Bot IRC permettant de gérer la revue hebdomadaire de l'April. """ import time from ircbot import IrcBot from events import events from hooks import hooks import logger from review.review import Review import settings class HebdoBot(IrcBot): def __init__(self, settings): super().__init__(settings) self.VERSION = "3.0.0" self.review = Review() for event in events: event.init_scheduler(self.reactor.scheduler, self.callback) logger.info( "--==============================INIT====" "======================================--" ) logger.info(f"Hebdobot {self.VERSION}") def callback(self, minutes): """ Envoi des notification sur IRC et les réseaux sociaux. """ if minutes == 15: # Envoi sur IRC self.send( self.channel, f"Plus que {minutes} minutes avant le début de la revue hebdomdaire.", ) # Envoi sur Mastodon # TODO : Gérer mastodon # ~ mastodon.send( # ~ "Revue hebdomadaire April à 12h sur notre salon : " # ~ "http://april.org/salon-irc-de-lapril\nCette revue ne dure qu'une " # ~ "quinzaine de minutes et permet d'avoir une idée des actions en cours " # ~ "et à venir.\nVous pouvez aussi juste nous faire un coucou. Et ça met " # ~ "en appétit :)", # ~ ) def on_privmsg(self, connection, event): """ Tous les messages privés sont ignorés. Si l'utilisateur tente une commande, on lui signale de le faire plutôt sur le canal public. """ target = event.source.nick message = event.arguments[0] if message[0] == "!": self.send(target, "Vos commandes dans le salon public") def on_pubmsg(self, connection, event): """ Tous les messages publics sont pris en compte. On utilise les hooks chargés au démarrage pour cela. """ channel = event.target sender = event.source.nick message = event.arguments[0] if self.review.is_started: self.review.add_message(sender, message) for hook in hooks: if hook.process(self, channel, sender, message): break def send(self, target, message): if self.review.is_started and target == self.channel: self.review.add_message(self.nickname, message) super().send(target, message) if __name__ == "__main__": HebdoBot(settings).start()