2024-04-01 19:27:52 +02:00
|
|
|
"""
|
|
|
|
Bot IRC permettant de gérer la revue hebdomadaire de l'April.
|
|
|
|
"""
|
|
|
|
import time
|
2024-01-11 08:17:25 +01:00
|
|
|
|
|
|
|
from ircbot import IrcBot
|
2024-04-01 19:27:52 +02:00
|
|
|
|
|
|
|
from events import events
|
|
|
|
from hooks import hooks
|
2024-01-11 08:17:25 +01:00
|
|
|
import logger
|
2024-04-01 19:27:52 +02:00
|
|
|
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)
|
2024-01-11 08:17:25 +01:00
|
|
|
|
2024-04-01 19:27:52 +02:00
|
|
|
for hook in hooks:
|
|
|
|
if hook.process(self, channel, sender, message):
|
|
|
|
break
|
2024-01-11 08:17:25 +01:00
|
|
|
|
2024-04-01 19:27:52 +02:00
|
|
|
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)
|
2024-01-11 08:17:25 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2024-04-01 19:27:52 +02:00
|
|
|
HebdoBot(settings).start()
|