hebdobot/hebdobot.py

85 lines
2.6 KiB
Python

"""
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()