forked from mindiell/hebdobot
92 lines
2.8 KiB
Python
92 lines
2.8 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].strip()
|
|
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()
|