hebdobot/hebdobot.py

92 lines
2.7 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(self.reactor.scheduler, getattr(self, event.callback))
logger.info(
"--==============================INIT===="
"======================================--"
)
logger.info(f"Hebdobot {self.VERSION}")
def notifications(self, minutes):
"""
Envoi des notifications sur IRC.
"""
self.send(self.channel, f"Revue hebdomadaire dans {minutes} minutes.")
def mastodon(self):
"""
Envoi d'une notification 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 :)",
# ~ )
pass
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 on_join(self, connection, event):
"""
Lorsqu'il se connecte, le bot dit bonjour.
"""
if event.source.nick.lower() == self.nickname.lower():
self.send(event.target, "Bonjour tout le monde, je suis là :)")
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()