Complete refactoring in order to use scheduler
This commit is contained in:
parent
ed8ae46086
commit
b9d2d2378a
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@ venv/
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
|
|
||||||
*.log
|
*.log
|
||||||
|
users.conf
|
||||||
reviews/
|
reviews/
|
||||||
|
|
||||||
.coverage
|
.coverage
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# Hebdobot v3
|
# Hebdobot v3
|
||||||
|
|
||||||
Ce projet est une refonte d'Hebdobot pour l'april en python.
|
Ce projet est une refonte d'Hebdobot pour l'April en Python.
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
from dataclasses import dataclass
|
|
||||||
import time
|
|
||||||
|
|
||||||
from bot.hooks import hooks
|
|
||||||
from bot.review.review import Review
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Answer:
|
|
||||||
target: str
|
|
||||||
message: str
|
|
||||||
|
|
||||||
|
|
||||||
class Hebdobot:
|
|
||||||
def __init__(self, settings, channel, nickname="hebdobot"):
|
|
||||||
self.settings = settings
|
|
||||||
self.channel = channel
|
|
||||||
self.nickname = nickname
|
|
||||||
self.answers = []
|
|
||||||
|
|
||||||
# Gestion de la revue hebdomadaire
|
|
||||||
self.review = Review()
|
|
||||||
|
|
||||||
def on_private_message(self, channel, sender, message):
|
|
||||||
"""
|
|
||||||
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.
|
|
||||||
"""
|
|
||||||
self.answers = []
|
|
||||||
if message[0] == "!":
|
|
||||||
self.send(sender, "vos commandes dans le salon public")
|
|
||||||
|
|
||||||
return self.answers
|
|
||||||
|
|
||||||
def on_public_message(self, channel, sender, message):
|
|
||||||
"""
|
|
||||||
Tous les messages publics sont pris en compte. On utilise les hooks chargés au
|
|
||||||
démarrage pour cela.
|
|
||||||
"""
|
|
||||||
self.answers = []
|
|
||||||
if self.review.is_started:
|
|
||||||
self.review.add_message(sender, message)
|
|
||||||
|
|
||||||
for hook in hooks:
|
|
||||||
if hook.process(self, channel, sender, message):
|
|
||||||
break
|
|
||||||
|
|
||||||
return self.answers
|
|
||||||
|
|
||||||
def send(self, target, message):
|
|
||||||
self.answers.append(Answer(target, message))
|
|
||||||
if self.review.is_started and target == self.channel:
|
|
||||||
self.review.add_message(self.nickname, message)
|
|
@ -1,44 +0,0 @@
|
|||||||
import logger
|
|
||||||
|
|
||||||
|
|
||||||
class Help:
|
|
||||||
def process(self, bot, channel, sender, message):
|
|
||||||
"""
|
|
||||||
Le message est pris en compte si l'utilisateur demande de l'aide.
|
|
||||||
"""
|
|
||||||
if message.lower() in ("!aide", "!help", "!aide hebdobot", "!help hebdobot"):
|
|
||||||
logger.info("!help caught.")
|
|
||||||
|
|
||||||
bot.send(
|
|
||||||
sender,
|
|
||||||
f"Bienvenue {sender}. Je suis {bot.nickname}, le robot de gestion "
|
|
||||||
"des revues hebdomadaires de l'April.",
|
|
||||||
)
|
|
||||||
bot.send(sender, "Voici les commandes que je comprends :")
|
|
||||||
bot.send(sender, " ")
|
|
||||||
bot.send(sender, " !aide,!help : afficher cette aide")
|
|
||||||
bot.send(
|
|
||||||
sender,
|
|
||||||
" !aide commande : afficher l'aide de la commande !commande"
|
|
||||||
)
|
|
||||||
bot.send(sender, " !début : commencer une nouvelle revue")
|
|
||||||
bot.send(sender, " % message : traiter comme un commentaire")
|
|
||||||
bot.send(sender, " # titre : démarrer un sujet individuel")
|
|
||||||
bot.send(sender, " ## titre : démarrer un sujet collectif")
|
|
||||||
bot.send(
|
|
||||||
sender,
|
|
||||||
" !oups : annuler la dernière entrée dans un point de "
|
|
||||||
"revue",
|
|
||||||
)
|
|
||||||
bot.send(sender, " !courant : afficher le sujet en cours")
|
|
||||||
bot.send(sender, " !fin : terminer la revue en cours")
|
|
||||||
bot.send(sender, " !stop : abandonner la revue en cours")
|
|
||||||
bot.send(sender, " ")
|
|
||||||
bot.send(
|
|
||||||
sender,
|
|
||||||
"Autres commandes : !anniv, !bonjour, !chrono, !date, !hello, "
|
|
||||||
"!licence, !manquants, !merci, !record, !salut, !stats, !status, "
|
|
||||||
"!version",
|
|
||||||
)
|
|
||||||
|
|
||||||
return True
|
|
5
events/__init__.py
Normal file
5
events/__init__.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from .event import Event
|
||||||
|
|
||||||
|
events = (
|
||||||
|
Event(),
|
||||||
|
)
|
31
events/event.py
Normal file
31
events/event.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
"""
|
||||||
|
Script used to...
|
||||||
|
"""
|
||||||
|
import time
|
||||||
|
|
||||||
|
import settings
|
||||||
|
|
||||||
|
SCHEDULER_DELAY = 60
|
||||||
|
|
||||||
|
|
||||||
|
class Event:
|
||||||
|
def __init__(self):
|
||||||
|
self.scheduler = None
|
||||||
|
self.callback = None
|
||||||
|
self.event_id = 1
|
||||||
|
self.last_update = time.gmtime()
|
||||||
|
|
||||||
|
def init_scheduler(self, scheduler, callback):
|
||||||
|
self.scheduler = scheduler
|
||||||
|
self.callback = callback
|
||||||
|
self.scheduler.execute_every(SCHEDULER_DELAY, self.do_something)
|
||||||
|
|
||||||
|
def do_something(self):
|
||||||
|
now = time.localtime()
|
||||||
|
# Gestion du rappel avant la revue hebdomadaire
|
||||||
|
for reminder in settings.CRON_REVIEW_REMINDERS:
|
||||||
|
if now.tm_hour == reminder[0] and now.tm_min == reminder[1]:
|
||||||
|
# On calcule le nombre de minutes avant la revue hebdomadaire
|
||||||
|
minutes = (settings.REVIEW_HOUR[0] - now.tm_hour) * 60
|
||||||
|
minutes += settings.REVIEW_HOUR[1] - now.tm_min
|
||||||
|
self.callback(minutes)
|
82
hebdobot.py
82
hebdobot.py
@ -1,24 +1,84 @@
|
|||||||
import click
|
"""
|
||||||
|
Bot IRC permettant de gérer la revue hebdomadaire de l'April.
|
||||||
|
"""
|
||||||
|
import time
|
||||||
|
|
||||||
from ircbot import IrcBot
|
from ircbot import IrcBot
|
||||||
import settings
|
|
||||||
|
from events import events
|
||||||
|
from hooks import hooks
|
||||||
import logger
|
import logger
|
||||||
|
from review.review import Review
|
||||||
|
import settings
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
class HebdoBot(IrcBot):
|
||||||
@click.option("--version", is_flag=True, help="Display bot version and exit.")
|
def __init__(self, settings):
|
||||||
def main(version):
|
super().__init__(settings)
|
||||||
if version:
|
self.VERSION = "3.0.0"
|
||||||
click.echo(f"Hebdobot {settings.VERSION}")
|
self.review = Review()
|
||||||
exit(0)
|
|
||||||
|
for event in events:
|
||||||
|
event.init_scheduler(self.reactor.scheduler, self.callback)
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"--==============================INIT===="
|
"--==============================INIT===="
|
||||||
"======================================--"
|
"======================================--"
|
||||||
)
|
)
|
||||||
logger.info(f"Hebdobot {settings.VERSION}")
|
logger.info(f"Hebdobot {self.VERSION}")
|
||||||
IrcBot(settings).start()
|
|
||||||
|
|
||||||
|
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__":
|
if __name__ == "__main__":
|
||||||
main()
|
HebdoBot(settings).start()
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import privatebinapi
|
||||||
|
|
||||||
import logger
|
import logger
|
||||||
from bot.review.stats import ReviewData, ReviewStats
|
from review.stats import ReviewData, ReviewStats
|
||||||
|
|
||||||
|
|
||||||
class FinishReview:
|
class FinishReview:
|
||||||
@ -58,7 +60,14 @@ class FinishReview:
|
|||||||
stats.save()
|
stats.save()
|
||||||
|
|
||||||
# On copie ce texte sur un pad
|
# On copie ce texte sur un pad
|
||||||
url = ""
|
pastebin_url = ""
|
||||||
|
if bot.settings.PASTEBIN_URL != "":
|
||||||
|
result = privatebinapi.send(
|
||||||
|
bot.settings.PASTEBIN_URL,
|
||||||
|
text=report,
|
||||||
|
expiration=bot.settings.PASTEBIN_EXPIRATION,
|
||||||
|
)
|
||||||
|
pastebin_url = result.full_url
|
||||||
|
|
||||||
# On sauve le texte dans un fichier
|
# On sauve le texte dans un fichier
|
||||||
review_path = os.path.join(
|
review_path = os.path.join(
|
||||||
@ -74,7 +83,7 @@ class FinishReview:
|
|||||||
f"% C'était la {stats.size}e revue hebdomadaire de l'April, la "
|
f"% C'était la {stats.size}e revue hebdomadaire de l'April, la "
|
||||||
f"{stats.year_review(bot.review.year)}e de l'année {bot.review.year}.",
|
f"{stats.year_review(bot.review.year)}e de l'année {bot.review.year}.",
|
||||||
)
|
)
|
||||||
bot.send(channel, f"% Compte-rendu de la revue : {url}")
|
bot.send(channel, f"% Compte-rendu de la revue : {pastebin_url}")
|
||||||
bot.send(channel, "% Durée de la revue : {temps_ecoule} minutes")
|
bot.send(channel, "% Durée de la revue : {temps_ecoule} minutes")
|
||||||
bot.send(channel, "% Nombre de personnes participantes : {combien}")
|
bot.send(channel, "% Nombre de personnes participantes : {combien}")
|
||||||
bot.send(
|
bot.send(
|
@ -18,4 +18,5 @@ class Hello:
|
|||||||
logger.info("!hello caught.")
|
logger.info("!hello caught.")
|
||||||
|
|
||||||
bot.send(channel, f"{sender}, bonjour \\o/")
|
bot.send(channel, f"{sender}, bonjour \\o/")
|
||||||
|
|
||||||
return True
|
return True
|
39
hooks/help.py
Normal file
39
hooks/help.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
import logger
|
||||||
|
|
||||||
|
|
||||||
|
class Help:
|
||||||
|
def process(self, bot, channel, sender, message):
|
||||||
|
"""
|
||||||
|
Le message est pris en compte si l'utilisateur demande de l'aide.
|
||||||
|
"""
|
||||||
|
if message.lower() in ("!aide", "!help", "!aide hebdobot", "!help hebdobot"):
|
||||||
|
logger.info("!help caught.")
|
||||||
|
|
||||||
|
bot.send_multiple(
|
||||||
|
sender,
|
||||||
|
(
|
||||||
|
f"Bienvenue {sender}. Je suis {bot.nickname}, le robot de gestion "
|
||||||
|
"des revues hebdomadaires de l'April.",
|
||||||
|
"Voici les commandes que je comprends :",
|
||||||
|
" ",
|
||||||
|
" !aide,!help : afficher cette aide",
|
||||||
|
" !aide commande : afficher l'aide de la commande !commande",
|
||||||
|
" !début : commencer une nouvelle revue",
|
||||||
|
" % message : traiter comme un commentaire",
|
||||||
|
" # titre : démarrer un sujet individuel",
|
||||||
|
" ## titre : démarrer un sujet collectif",
|
||||||
|
" !oups : annuler la dernière entrée dans un point de "
|
||||||
|
"revue",
|
||||||
|
" !courant : afficher le sujet en cours",
|
||||||
|
" !fin : terminer la revue en cours",
|
||||||
|
" !stop : abandonner la revue en cours",
|
||||||
|
" ",
|
||||||
|
"Autres commandes : !anniv, !bonjour, !chrono, !date, !hello, "
|
||||||
|
"!licence, !manquants, !merci, !record, !salut, !stats, !status, "
|
||||||
|
"!version",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
return True
|
@ -10,4 +10,3 @@ class InputReview:
|
|||||||
logger.info("message during review caught.")
|
logger.info("message during review caught.")
|
||||||
|
|
||||||
bot.review.add_input(sender, message)
|
bot.review.add_input(sender, message)
|
||||||
return True
|
|
@ -1,7 +1,7 @@
|
|||||||
import locale
|
import locale
|
||||||
|
|
||||||
import logger
|
import logger
|
||||||
from bot.review.stats import ReviewStats
|
from review.stats import ReviewStats
|
||||||
|
|
||||||
|
|
||||||
class Record:
|
class Record:
|
@ -14,11 +14,10 @@ class StartReview:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
# TODO: tester l'heure de démarrage de la revue
|
# TODO: tester l'heure de démarrage de la revue
|
||||||
|
|
||||||
bot.review.start(sender)
|
bot.review.start(sender)
|
||||||
bot.send(sender, f"% Bonjour {sender}, vous êtes responsable de réunion.")
|
bot.send(sender, f"% Bonjour {sender}, vous êtes responsable de réunion.")
|
||||||
bot.send(sender, "% Pour terminer la réunion, tapez !fin")
|
bot.send(sender, "% Pour terminer la réunion, tapez !fin")
|
||||||
# ~ bot.checkReviewAnniversary();
|
# TODO: bot.checkReviewAnniversary();
|
||||||
bot.send(channel, "% Début de la réunion hebdomadaire")
|
bot.send(channel, "% Début de la réunion hebdomadaire")
|
||||||
bot.send(
|
bot.send(
|
||||||
channel,
|
channel,
|
@ -1,7 +1,7 @@
|
|||||||
import locale
|
import locale
|
||||||
|
|
||||||
import logger
|
import logger
|
||||||
from bot.review.stats import ReviewStats
|
from review.stats import ReviewStats
|
||||||
|
|
||||||
|
|
||||||
class Stats:
|
class Stats:
|
@ -10,7 +10,7 @@ class Status:
|
|||||||
logger.info("!status caught.")
|
logger.info("!status caught.")
|
||||||
|
|
||||||
bot.send(sender, f"{sender}, voici l'état d'Hebdobot :")
|
bot.send(sender, f"{sender}, voici l'état d'Hebdobot :")
|
||||||
bot.send(sender, f" revue en cours : {bot.review is not None}")
|
bot.send(sender, f" revue en cours : {bot.review.started}")
|
||||||
if bot.review.is_started:
|
if bot.review.is_started:
|
||||||
bot.send(sender, f" animateur revue : {bot.review.owner}")
|
bot.send(sender, f" animateur revue : {bot.review.owner}")
|
||||||
else:
|
else:
|
@ -23,6 +23,7 @@ class StopReview:
|
|||||||
)
|
)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
bot.send(channel, "Abandon de la revue en cours.")
|
|
||||||
bot.review.cancel()
|
bot.review.cancel()
|
||||||
|
bot.send(channel, "Abandon de la revue en cours.")
|
||||||
|
|
||||||
return True
|
return True
|
@ -8,6 +8,6 @@ class Version:
|
|||||||
"""
|
"""
|
||||||
if message.lower() == "!version":
|
if message.lower() == "!version":
|
||||||
logger.info("!version caught.")
|
logger.info("!version caught.")
|
||||||
bot.send(channel, bot.settings.VERSION)
|
bot.send(channel, bot.VERSION)
|
||||||
|
|
||||||
return True
|
return True
|
30
ircbot.py
30
ircbot.py
@ -1,14 +1,10 @@
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import irc.bot
|
import irc.bot
|
||||||
import irc.strings
|
|
||||||
|
|
||||||
from bot.hebdobot import Hebdobot
|
|
||||||
|
|
||||||
|
|
||||||
class IrcBot(irc.bot.SingleServerIRCBot):
|
class IrcBot(irc.bot.SingleServerIRCBot):
|
||||||
def __init__(self, settings):
|
def __init__(self, settings):
|
||||||
# Récupération des paramètres
|
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
self.server = self.settings.IRC_SERVER
|
self.server = self.settings.IRC_SERVER
|
||||||
self.port = self.settings.IRC_PORT
|
self.port = self.settings.IRC_PORT
|
||||||
@ -16,39 +12,23 @@ class IrcBot(irc.bot.SingleServerIRCBot):
|
|||||||
self.nickname = self.settings.IRC_NICK
|
self.nickname = self.settings.IRC_NICK
|
||||||
self.password = self.settings.IRC_PASSWORD
|
self.password = self.settings.IRC_PASSWORD
|
||||||
|
|
||||||
self.bot = Hebdobot(self.settings, self.channel, self.nickname)
|
# Starting Bot
|
||||||
|
|
||||||
# Démarrage et connexion à IRC
|
|
||||||
irc.bot.SingleServerIRCBot.__init__(
|
irc.bot.SingleServerIRCBot.__init__(
|
||||||
self, [(self.server, self.port)], self.nickname, self.nickname
|
self, [(self.server, self.port)], self.nickname, self.nickname
|
||||||
)
|
)
|
||||||
|
|
||||||
def on_nicknameinuse(self, connection, event):
|
def on_nicknameinuse(self, connection, event):
|
||||||
# TODO: Re-tester si son propre nom est disponible plus tard.
|
# TODO: Check again if name is available later
|
||||||
self.nickname = self.nickname + "_"
|
self.nickname = self.nickname + "_"
|
||||||
self.bot.nickname = self.nickname
|
|
||||||
connection.nick(self.nickname)
|
connection.nick(self.nickname)
|
||||||
|
|
||||||
def on_welcome(self, connection, event):
|
def on_welcome(self, connection, event):
|
||||||
connection.join(self.channel)
|
connection.join(self.channel)
|
||||||
|
|
||||||
def on_privmsg(self, connection, event):
|
def send(self, target, message):
|
||||||
channel = event.target
|
self.connection.privmsg(target, message)
|
||||||
sender = event.source.nick
|
|
||||||
message = event.arguments[0]
|
|
||||||
answers = self.bot.on_private_message(channel, sender, message)
|
|
||||||
for answer in answers:
|
|
||||||
self.connection.privmsg(answer.target, answer.message)
|
|
||||||
|
|
||||||
def on_pubmsg(self, connection, event):
|
|
||||||
channel = event.target
|
|
||||||
sender = event.source.nick
|
|
||||||
message = event.arguments[0]
|
|
||||||
answers = self.bot.on_public_message(channel, sender, message)
|
|
||||||
for answer in answers:
|
|
||||||
self.connection.privmsg(answer.target, answer.message)
|
|
||||||
|
|
||||||
def send_multiple(self, target, messages):
|
def send_multiple(self, target, messages):
|
||||||
for message in messages:
|
for message in messages:
|
||||||
self.connection.privmsg(target, message)
|
self.send(target, message)
|
||||||
time.sleep(self.settings.IRC_DELAY)
|
time.sleep(self.settings.IRC_DELAY)
|
||||||
|
@ -2,8 +2,8 @@ from datetime import datetime
|
|||||||
import locale
|
import locale
|
||||||
from textwrap import fill
|
from textwrap import fill
|
||||||
|
|
||||||
from bot.review.topic import Message, Topic
|
from review.topic import Message, Topic
|
||||||
from bot.review.aliases import Aliases
|
from review.aliases import Aliases
|
||||||
|
|
||||||
|
|
||||||
LENGTH_LINE = 80
|
LENGTH_LINE = 80
|
21
settings.py
21
settings.py
@ -4,8 +4,6 @@ import os
|
|||||||
|
|
||||||
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
VERSION = "3.0.0"
|
|
||||||
|
|
||||||
# Log File
|
# Log File
|
||||||
LOGFILE = os.environ.get("LOGFILE", os.path.join(BASE_DIR, "hebdobot.log"))
|
LOGFILE = os.environ.get("LOGFILE", os.path.join(BASE_DIR, "hebdobot.log"))
|
||||||
LOGLEVEL = os.environ.get("LOGLEVEL", logging.DEBUG)
|
LOGLEVEL = os.environ.get("LOGLEVEL", logging.DEBUG)
|
||||||
@ -15,19 +13,28 @@ LOGDATE = os.environ.get("LOGDATE", "%Y-%m-%d %H:%M:%S")
|
|||||||
# IRC configuration
|
# IRC configuration
|
||||||
IRC_SERVER = os.environ.get("IRC_SERVER", "irc.libera.chat")
|
IRC_SERVER = os.environ.get("IRC_SERVER", "irc.libera.chat")
|
||||||
IRC_PORT = int(os.environ.get("IRC_PORT", 6667))
|
IRC_PORT = int(os.environ.get("IRC_PORT", 6667))
|
||||||
IRC_CHANNEL = os.environ.get("IRC_CHANNEL", " #bidibot")
|
IRC_CHANNEL = os.environ.get("IRC_CHANNEL", " #april")
|
||||||
IRC_NICK = os.environ.get("IRC_NICK", " Testbot")
|
IRC_NICK = os.environ.get("IRC_NICK", "Testbot")
|
||||||
IRC_PASSWORD = os.environ.get("IRC_PASSWORD", " ")
|
IRC_PASSWORD = os.environ.get("IRC_PASSWORD", " ")
|
||||||
IRC_DELAY = float(os.environ.get("IRC_DELAY", 0.5)) # Délai entre plusieurs messages
|
IRC_DELAY = float(os.environ.get("IRC_DELAY", 0.5)) # Délai entre plusieurs messages
|
||||||
|
|
||||||
# User Alias
|
# User aliases
|
||||||
USER_ALIASES = ""
|
USER_ALIASES = os.environ.get("USER_ALIASES", os.path.join(BASE_DIR, "users.conf"))
|
||||||
|
|
||||||
# Review
|
# Review
|
||||||
|
REVIEW_HOUR = (16, 30)
|
||||||
REVIEW_DIRECTORY = os.environ.get("REVIEW_DIRECTORY", os.path.join(BASE_DIR, "reviews"))
|
REVIEW_DIRECTORY = os.environ.get("REVIEW_DIRECTORY", os.path.join(BASE_DIR, "reviews"))
|
||||||
REVIEW_PASTEBIN = ""
|
|
||||||
REVIEW_STATS = os.environ.get("REVIEW_STATS", os.path.join(REVIEW_DIRECTORY, "reviewstats.csv"))
|
REVIEW_STATS = os.environ.get("REVIEW_STATS", os.path.join(REVIEW_DIRECTORY, "reviewstats.csv"))
|
||||||
|
|
||||||
|
# Pastebin
|
||||||
|
PASTEBIN_URL = "https://paste.chapril.org/"
|
||||||
|
# Values : 5min, 10min, 1hour, 1day, 1week, 1month, 1year, never
|
||||||
|
PASTEBIN_EXPIRATION = "5min"
|
||||||
|
|
||||||
|
# Cron
|
||||||
|
CRON_REVIEW_REMINDERS = [(11, 45)]
|
||||||
|
CRON_STOP_BOT = [(16, 15)]
|
||||||
|
|
||||||
# Mastodon
|
# Mastodon
|
||||||
MASTODON_SERVER = ""
|
MASTODON_SERVER = ""
|
||||||
MASTODON_NAME = ""
|
MASTODON_NAME = ""
|
||||||
|
@ -4,8 +4,6 @@ import os
|
|||||||
|
|
||||||
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
VERSION = "3.0.0"
|
|
||||||
|
|
||||||
# Log File
|
# Log File
|
||||||
LOGFILE = os.environ.get("LOGFILE", os.path.join(BASE_DIR, "hebdobot.log"))
|
LOGFILE = os.environ.get("LOGFILE", os.path.join(BASE_DIR, "hebdobot.log"))
|
||||||
LOGLEVEL = os.environ.get("LOGLEVEL", logging.DEBUG)
|
LOGLEVEL = os.environ.get("LOGLEVEL", logging.DEBUG)
|
||||||
@ -16,18 +14,27 @@ LOGDATE = os.environ.get("LOGDATE", "%Y-%m-%d %H:%M:%S")
|
|||||||
IRC_SERVER = os.environ.get("IRC_SERVER", "irc.libera.chat")
|
IRC_SERVER = os.environ.get("IRC_SERVER", "irc.libera.chat")
|
||||||
IRC_PORT = int(os.environ.get("IRC_PORT", 6667))
|
IRC_PORT = int(os.environ.get("IRC_PORT", 6667))
|
||||||
IRC_CHANNEL = os.environ.get("IRC_CHANNEL", " #testbot")
|
IRC_CHANNEL = os.environ.get("IRC_CHANNEL", " #testbot")
|
||||||
IRC_NICK = os.environ.get("IRC_NICK", " Testbot")
|
IRC_NICK = os.environ.get("IRC_NICK", "Hebdobot")
|
||||||
IRC_PASSWORD = os.environ.get("IRC_PASSWORD", " ")
|
IRC_PASSWORD = os.environ.get("IRC_PASSWORD", " ")
|
||||||
IRC_DELAY = float(os.environ.get("IRC_DELAY", 0.5)) # Délai entre plusieurs messages
|
IRC_DELAY = float(os.environ.get("IRC_DELAY", 0)) # Délai entre plusieurs messages
|
||||||
|
|
||||||
# User aliases
|
# User aliases
|
||||||
USER_ALIASES = os.environ.get("USER_ALIASES", os.path.join(BASE_DIR, "users.conf"))
|
USER_ALIASES = os.environ.get("USER_ALIASES", os.path.join(BASE_DIR, "users.conf"))
|
||||||
|
|
||||||
# Review
|
# Review
|
||||||
|
REVIEW_HOUR = (16, 30)
|
||||||
REVIEW_DIRECTORY = os.environ.get("REVIEW_DIRECTORY", os.path.join(BASE_DIR, "reviews"))
|
REVIEW_DIRECTORY = os.environ.get("REVIEW_DIRECTORY", os.path.join(BASE_DIR, "reviews"))
|
||||||
REVIEW_PASTEBIN = ""
|
|
||||||
REVIEW_STATS = os.environ.get("REVIEW_STATS", os.path.join(REVIEW_DIRECTORY, "reviewstats.csv"))
|
REVIEW_STATS = os.environ.get("REVIEW_STATS", os.path.join(REVIEW_DIRECTORY, "reviewstats.csv"))
|
||||||
|
|
||||||
|
# Pastebin
|
||||||
|
PASTEBIN_URL = ""
|
||||||
|
# Values : 5min, 10min, 1hour, 1day, 1week, 1month, 1year, never
|
||||||
|
PASTEBIN_EXPIRATION = "5min"
|
||||||
|
|
||||||
|
# Cron
|
||||||
|
CRON_REVIEW_REMINDERS = [(11, 45)]
|
||||||
|
CRON_STOP_BOT = [(16, 15)]
|
||||||
|
|
||||||
# Mastodon
|
# Mastodon
|
||||||
MASTODON_SERVER = ""
|
MASTODON_SERVER = ""
|
||||||
MASTODON_NAME = ""
|
MASTODON_NAME = ""
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from bot.review.aliases import Aliases
|
from review.aliases import Aliases
|
||||||
from tests.utils import bot, CHANNEL, OWNER, SENDER
|
from tests.utils import bot
|
||||||
|
|
||||||
|
|
||||||
def test_aliases(bot):
|
def test_aliases(bot):
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from tests.utils import bot, CHANNEL, OWNER, SENDER
|
from tests.utils import bot, OWNER, SENDER
|
||||||
|
|
||||||
|
|
||||||
def setup_function():
|
def setup_function():
|
||||||
@ -9,7 +9,7 @@ def setup_function():
|
|||||||
|
|
||||||
|
|
||||||
def test_hook_listen_anniv(bot):
|
def test_hook_listen_anniv(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!anniv")
|
bot.test_public_message(bot.channel, SENDER, "!anniv")
|
||||||
assert len(bot.answers) == 3
|
assert len(bot.answers) == 3
|
||||||
assert bot.answers[0].message.startswith("La revue")
|
assert bot.answers[0].message.startswith("La revue")
|
||||||
assert bot.answers[1].message.startswith("Hebdobot")
|
assert bot.answers[1].message.startswith("Hebdobot")
|
||||||
@ -17,96 +17,96 @@ def test_hook_listen_anniv(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_hook_bad_command(bot):
|
def test_hook_bad_command(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!aniv")
|
bot.test_public_message(bot.channel, SENDER, "!aniv")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, Yo !"
|
assert bot.answers[0].message == f"{SENDER}, Yo !"
|
||||||
|
|
||||||
|
|
||||||
def test_hook_date(bot):
|
def test_hook_date(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!date")
|
bot.test_public_message(bot.channel, SENDER, "!date")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!time")
|
bot.test_public_message(bot.channel, SENDER, "!time")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!now")
|
bot.test_public_message(bot.channel, SENDER, "!now")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_hook_default(bot):
|
def test_hook_default(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "some message")
|
bot.test_public_message(bot.channel, SENDER, "some message")
|
||||||
assert bot.answers == []
|
assert bot.answers == []
|
||||||
|
|
||||||
|
|
||||||
def test_hook_hello(bot):
|
def test_hook_hello(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!salut")
|
bot.test_public_message(bot.channel, SENDER, "!salut")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!bonjour")
|
bot.test_public_message(bot.channel, SENDER, "!bonjour")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!hello")
|
bot.test_public_message(bot.channel, SENDER, "!hello")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "bonjour hebdobot")
|
bot.test_public_message(bot.channel, SENDER, "bonjour hebdobot")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
assert bot.answers[0].message == f"{SENDER}, bonjour \\o/"
|
||||||
|
|
||||||
|
|
||||||
def test_hook_help(bot):
|
def test_hook_help(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!help")
|
bot.test_public_message(bot.channel, SENDER, "!help")
|
||||||
assert len(bot.answers) == 15
|
assert len(bot.answers) == 15
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!aide")
|
bot.test_public_message(bot.channel, SENDER, "!aide")
|
||||||
assert len(bot.answers) == 15
|
assert len(bot.answers) == 15
|
||||||
|
|
||||||
|
|
||||||
def test_hook_license(bot):
|
def test_hook_license(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!license")
|
bot.test_public_message(bot.channel, SENDER, "!license")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message.startswith("Hebdobot est un logiciel libre")
|
assert bot.answers[0].message.startswith("Hebdobot est un logiciel libre")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!licence")
|
bot.test_public_message(bot.channel, SENDER, "!licence")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message.startswith("Hebdobot est un logiciel libre")
|
assert bot.answers[0].message.startswith("Hebdobot est un logiciel libre")
|
||||||
|
|
||||||
|
|
||||||
def test_hook_listen_alexandrie(bot):
|
def test_hook_listen_alexandrie(bot):
|
||||||
bot.on_public_message(CHANNEL, "alexandrie", "!version")
|
bot.test_public_message(bot.channel, "alexandrie", "!version")
|
||||||
assert bot.answers == []
|
assert bot.answers == []
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!version")
|
bot.test_public_message(bot.channel, SENDER, "!version")
|
||||||
assert bot.answers != []
|
assert bot.answers != []
|
||||||
|
|
||||||
|
|
||||||
def test_hook_record(bot):
|
def test_hook_record(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!record")
|
bot.test_public_message(bot.channel, SENDER, "!record")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message.startswith("Le record de participation")
|
assert bot.answers[0].message.startswith("Le record de participation")
|
||||||
|
|
||||||
|
|
||||||
def test_hook_stats(bot):
|
def test_hook_stats(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!stats")
|
bot.test_public_message(bot.channel, SENDER, "!stats")
|
||||||
assert len(bot.answers) == 5
|
assert len(bot.answers) == 5
|
||||||
assert bot.answers[0].message.startswith("% Il y a eu ")
|
assert bot.answers[0].message.startswith("% Il y a eu ")
|
||||||
|
|
||||||
|
|
||||||
def test_hook_stats_with_no_review(bot):
|
def test_hook_stats_with_no_review(bot):
|
||||||
os.remove("tests/reviews/reviewstats.csv")
|
os.remove("tests/reviews/reviewstats.csv")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!stats")
|
bot.test_public_message(bot.channel, SENDER, "!stats")
|
||||||
assert len(bot.answers) == 5
|
assert len(bot.answers) == 5
|
||||||
assert bot.answers[0].message == "% Il n'y a pas encore eu de revue."
|
assert bot.answers[0].message == "% Il n'y a pas encore eu de revue."
|
||||||
|
|
||||||
|
|
||||||
def test_hook_status(bot):
|
def test_hook_status(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!status")
|
bot.test_public_message(bot.channel, SENDER, "!status")
|
||||||
assert len(bot.answers) == 3
|
assert len(bot.answers) == 3
|
||||||
assert bot.answers[0].message.startswith(f"{SENDER}, voici l'état")
|
assert bot.answers[0].message.startswith(f"{SENDER}, voici l'état")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!statut")
|
bot.test_public_message(bot.channel, SENDER, "!statut")
|
||||||
assert len(bot.answers) == 3
|
assert len(bot.answers) == 3
|
||||||
assert bot.answers[0].message.startswith(f"{SENDER}, voici l'état")
|
assert bot.answers[0].message.startswith(f"{SENDER}, voici l'état")
|
||||||
assert bot.answers[1].message == f" revue en cours : {bot.review is not None}"
|
assert bot.answers[1].message == f" revue en cours : {bot.review.started}"
|
||||||
assert bot.answers[2].message == " animateur revue : none"
|
assert bot.answers[2].message == " animateur revue : none"
|
||||||
|
|
||||||
|
|
||||||
def test_hook_status_started_review(bot):
|
def test_hook_status_started_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!statut")
|
bot.test_public_message(bot.channel, SENDER, "!statut")
|
||||||
assert len(bot.answers) == 3
|
assert len(bot.answers) == 3
|
||||||
assert bot.answers[0].message.startswith(f"{SENDER}, voici l'état")
|
assert bot.answers[0].message.startswith(f"{SENDER}, voici l'état")
|
||||||
assert bot.answers[1].message == f" revue en cours : {bot.review is not None}"
|
assert bot.answers[1].message == f" revue en cours : {bot.review is not None}"
|
||||||
@ -114,11 +114,11 @@ def test_hook_status_started_review(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_hook_thanks(bot):
|
def test_hook_thanks(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!merci")
|
bot.test_public_message(bot.channel, SENDER, "!merci")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, de rien \\o/"
|
assert bot.answers[0].message == f"{SENDER}, de rien \\o/"
|
||||||
|
|
||||||
|
|
||||||
def test_hook_version(bot):
|
def test_hook_version(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!version")
|
bot.test_public_message(bot.channel, SENDER, "!version")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from tests.utils import bot, CHANNEL, OWNER, SENDER
|
from tests.utils import bot, OWNER, SENDER
|
||||||
|
|
||||||
|
|
||||||
def test_private_message(bot):
|
def test_private_message(bot):
|
||||||
bot.on_private_message(CHANNEL, SENDER, "hello")
|
bot.test_private_message(bot.channel, SENDER, "hello")
|
||||||
assert len(bot.answers) == 0
|
assert len(bot.answers) == 0
|
||||||
|
|
||||||
|
|
||||||
def test_private_command(bot):
|
def test_private_command(bot):
|
||||||
bot.on_private_message(CHANNEL, SENDER, "!hello")
|
bot.test_private_message(bot.channel, SENDER, "!hello")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "vos commandes dans le salon public"
|
assert bot.answers[0].message == "Vos commandes dans le salon public"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from tests.utils import bot, CHANNEL, OWNER, SENDER
|
from tests.utils import bot, OWNER, SENDER
|
||||||
|
|
||||||
|
|
||||||
def setup_function():
|
def setup_function():
|
||||||
@ -18,10 +18,10 @@ def test_complete_review(bot):
|
|||||||
text = ":".join(data[1:]).strip()
|
text = ":".join(data[1:]).strip()
|
||||||
messages.append((author, text))
|
messages.append((author, text))
|
||||||
|
|
||||||
bot.on_public_message(CHANNEL, "lllll", "!start")
|
bot.test_public_message(bot.channel, "lllll", "!start")
|
||||||
bot.review.start_time = datetime(2023, 12, 1, 12, 0, 0)
|
bot.review.start_time = datetime(2023, 12, 1, 12, 0, 0)
|
||||||
for message in messages:
|
for message in messages:
|
||||||
bot.on_public_message(CHANNEL, message[0], message[1])
|
bot.test_public_message(bot.channel, message[0], message[1])
|
||||||
|
|
||||||
# compare contents
|
# compare contents
|
||||||
with open("tests/datas/20231201-log-irc-revue-hebdomadaire.txt") as file_handle:
|
with open("tests/datas/20231201-log-irc-revue-hebdomadaire.txt") as file_handle:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from tests.utils import bot, CHANNEL, OWNER, SENDER
|
from tests.utils import bot, OWNER, SENDER
|
||||||
|
|
||||||
|
|
||||||
def setup_function():
|
def setup_function():
|
||||||
@ -17,17 +17,17 @@ def test_review_starting_new(bot):
|
|||||||
assert bot.review.ended == False
|
assert bot.review.ended == False
|
||||||
assert bot.review.start_time is None
|
assert bot.review.start_time is None
|
||||||
assert bot.review.end_time is None
|
assert bot.review.end_time is None
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert len(bot.answers) == 5
|
assert len(bot.answers) == 5
|
||||||
assert bot.answers[0].target == OWNER
|
assert bot.answers[0].target == OWNER
|
||||||
assert bot.answers[0].message.startswith(f"% Bonjour {OWNER}")
|
assert bot.answers[0].message.startswith(f"% Bonjour {OWNER}")
|
||||||
assert bot.answers[1].target == OWNER
|
assert bot.answers[1].target == OWNER
|
||||||
assert bot.answers[1].message.startswith("% Pour terminer")
|
assert bot.answers[1].message.startswith("% Pour terminer")
|
||||||
assert bot.answers[2].target == CHANNEL
|
assert bot.answers[2].target == bot.channel
|
||||||
assert bot.answers[2].message.startswith("% Début de")
|
assert bot.answers[2].message.startswith("% Début de")
|
||||||
assert bot.answers[3].target == CHANNEL
|
assert bot.answers[3].target == bot.channel
|
||||||
assert bot.answers[3].message.startswith("% rappel")
|
assert bot.answers[3].message.startswith("% rappel")
|
||||||
assert bot.answers[4].target == CHANNEL
|
assert bot.answers[4].target == bot.channel
|
||||||
assert bot.answers[4].message.startswith("% pour connaître")
|
assert bot.answers[4].message.startswith("% pour connaître")
|
||||||
assert bot.review.participants == []
|
assert bot.review.participants == []
|
||||||
assert bot.review.topics == []
|
assert bot.review.topics == []
|
||||||
@ -40,8 +40,8 @@ def test_review_starting_new(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_starting_started_review(bot):
|
def test_review_starting_started_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"% {OWNER}, une revue est déjà en cours."
|
assert bot.answers[0].message == f"% {OWNER}, une revue est déjà en cours."
|
||||||
assert bot.review.participants == []
|
assert bot.review.participants == []
|
||||||
@ -55,7 +55,7 @@ def test_review_starting_started_review(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_ending_not_started_review(bot):
|
def test_review_ending_not_started_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!fin")
|
bot.test_public_message(bot.channel, OWNER, "!fin")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
||||||
assert bot.review.participants == []
|
assert bot.review.participants == []
|
||||||
@ -69,8 +69,8 @@ def test_review_ending_not_started_review(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_ending_as_not_owner(bot):
|
def test_review_ending_as_not_owner(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!fin")
|
bot.test_public_message(bot.channel, SENDER, "!fin")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la revue."
|
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la revue."
|
||||||
assert bot.review.participants == []
|
assert bot.review.participants == []
|
||||||
@ -84,171 +84,171 @@ def test_review_ending_as_not_owner(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_on_collective_topic(bot):
|
def test_review_cancel_last_message_on_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## Collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## Collective topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.review.current_topic.messages) == 0
|
assert len(bot.review.current_topic.messages) == 0
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oops")
|
bot.test_public_message(bot.channel, SENDER, "!oops")
|
||||||
assert len(bot.review.current_topic.messages) == 0
|
assert len(bot.review.current_topic.messages) == 0
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!cancelprevious")
|
bot.test_public_message(bot.channel, SENDER, "!cancelprevious")
|
||||||
assert len(bot.review.current_topic.messages) == 0
|
assert len(bot.review.current_topic.messages) == 0
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_only_message_on_collective_topic(bot):
|
def test_review_cancel_only_message_on_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## Collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## Collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a message from owner")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is another message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is another message from owner")
|
||||||
assert len(bot.review.current_topic.messages) == 3
|
assert len(bot.review.current_topic.messages) == 3
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert len(bot.review.current_topic.messages) == 2
|
assert len(bot.review.current_topic.messages) == 2
|
||||||
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_from_two_on_collective_topic(bot):
|
def test_review_cancel_last_message_from_two_on_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## Collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## Collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a message from owner")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is another message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is another message from sender")
|
||||||
assert len(bot.review.current_topic.messages) == 3
|
assert len(bot.review.current_topic.messages) == 3
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert len(bot.review.current_topic.messages) == 2
|
assert len(bot.review.current_topic.messages) == 2
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_first_message_from_three_on_collective_topic(bot):
|
def test_review_cancel_first_message_from_three_on_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## Collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## Collective topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a message from owner")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is another message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is another message from owner")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a third message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a third message from owner")
|
||||||
assert len(bot.review.current_topic.messages) == 4
|
assert len(bot.review.current_topic.messages) == 4
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from owner"
|
assert bot.review.current_topic.messages[1].text == "This is a message from owner"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert len(bot.review.current_topic.messages) == 3
|
assert len(bot.review.current_topic.messages) == 3
|
||||||
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_no_message_on_collective_topic(bot):
|
def test_review_cancel_last_message_no_message_on_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## Collective topic")
|
bot.test_public_message(bot.channel, OWNER, "# Individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is my message")
|
bot.test_public_message(bot.channel, OWNER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_on_individual_topic(bot):
|
def test_review_cancel_last_message_on_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# Individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# Individual topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.review.current_topic.messages) == 0
|
assert len(bot.review.current_topic.messages) == 0
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oops")
|
bot.test_public_message(bot.channel, SENDER, "!oops")
|
||||||
assert len(bot.review.current_topic.messages) == 0
|
assert len(bot.review.current_topic.messages) == 0
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!cancelprevious")
|
bot.test_public_message(bot.channel, SENDER, "!cancelprevious")
|
||||||
assert len(bot.review.current_topic.messages) == 0
|
assert len(bot.review.current_topic.messages) == 0
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_only_message_on_individual_topic(bot):
|
def test_review_cancel_only_message_on_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# Individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# Individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a message from owner")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is another message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is another message from owner")
|
||||||
assert len(bot.review.current_topic.messages) == 3
|
assert len(bot.review.current_topic.messages) == 3
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert len(bot.review.current_topic.messages) == 2
|
assert len(bot.review.current_topic.messages) == 2
|
||||||
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_from_two_on_individual_topic(bot):
|
def test_review_cancel_last_message_from_two_on_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# Individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# Individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a message from owner")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is another message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is another message from sender")
|
||||||
assert len(bot.review.current_topic.messages) == 3
|
assert len(bot.review.current_topic.messages) == 3
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert len(bot.review.current_topic.messages) == 2
|
assert len(bot.review.current_topic.messages) == 2
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
assert bot.review.current_topic.messages[1].text == "This is a message from sender"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_first_message_from_three_on_individual_topic(bot):
|
def test_review_cancel_first_message_from_three_on_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# Individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# Individual topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a message from owner")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is another message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is another message from owner")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is a third message from owner")
|
bot.test_public_message(bot.channel, OWNER, "This is a third message from owner")
|
||||||
assert len(bot.review.current_topic.messages) == 4
|
assert len(bot.review.current_topic.messages) == 4
|
||||||
assert bot.review.current_topic.messages[1].text == "This is a message from owner"
|
assert bot.review.current_topic.messages[1].text == "This is a message from owner"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert len(bot.review.current_topic.messages) == 3
|
assert len(bot.review.current_topic.messages) == 3
|
||||||
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
assert bot.review.current_topic.messages[1].text == "This is another message from owner"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_no_message_on_individual_topic(bot):
|
def test_review_cancel_last_message_no_message_on_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# Individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# Individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is my message")
|
bot.test_public_message(bot.channel, OWNER, "This is my message")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.review.current_topic.messages) == 1
|
assert len(bot.review.current_topic.messages) == 1
|
||||||
assert bot.review.current_topic.messages[0].text == "This is my message"
|
assert bot.review.current_topic.messages[0].text == "This is my message"
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_no_review(bot):
|
def test_review_cancel_last_message_no_review(bot):
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, pas de revue en cours."
|
assert bot.answers[0].message == f"{SENDER}, pas de revue en cours."
|
||||||
|
|
||||||
|
|
||||||
def test_review_cancel_last_message_no_topic(bot):
|
def test_review_cancel_last_message_no_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!oups")
|
bot.test_public_message(bot.channel, SENDER, "!oups")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, pas de sujet en cours."
|
assert bot.answers[0].message == f"{SENDER}, pas de sujet en cours."
|
||||||
|
|
||||||
|
|
||||||
def test_review_collective_topic(bot):
|
def test_review_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
assert bot.review.current_topic is None
|
assert bot.review.current_topic is None
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
assert len(bot.answers) == 4
|
assert len(bot.answers) == 4
|
||||||
assert len(bot.review.topics) == 1
|
assert len(bot.review.topics) == 1
|
||||||
assert bot.review.current_topic is not None
|
assert bot.review.current_topic is not None
|
||||||
@ -256,13 +256,13 @@ def test_review_collective_topic(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_second_collective_topic(bot):
|
def test_review_second_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
assert bot.review.current_topic is None
|
assert bot.review.current_topic is None
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is my message")
|
bot.test_public_message(bot.channel, OWNER, "This is my message")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## second collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## second collective topic")
|
||||||
assert len(bot.answers) == 6
|
assert len(bot.answers) == 6
|
||||||
assert len(bot.review.topics) == 2
|
assert len(bot.review.topics) == 2
|
||||||
assert bot.review.current_topic is not None
|
assert bot.review.current_topic is not None
|
||||||
@ -270,7 +270,7 @@ def test_review_second_collective_topic(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_collective_no_review(bot):
|
def test_review_collective_no_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
assert len(bot.answers) == 0
|
assert len(bot.answers) == 0
|
||||||
assert not bot.review.is_started
|
assert not bot.review.is_started
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
@ -278,58 +278,58 @@ def test_review_collective_no_review(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_collective_topic_not_owner(bot):
|
def test_review_collective_topic_not_owner(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "## collective topic")
|
bot.test_public_message(bot.channel, SENDER, "## collective topic")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la réunion"
|
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la réunion"
|
||||||
|
|
||||||
|
|
||||||
def test_review_comment(bot):
|
def test_review_comment(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "% This is a comment")
|
bot.test_public_message(bot.channel, SENDER, "% This is a comment")
|
||||||
assert len(bot.answers) == 0
|
assert len(bot.answers) == 0
|
||||||
assert bot.review.messages[-1].text == "% This is a comment"
|
assert bot.review.messages[-1].text == "% This is a comment"
|
||||||
assert bot.review.current_topic is None
|
assert bot.review.current_topic is None
|
||||||
|
|
||||||
|
|
||||||
def test_review_current_without_review(bot):
|
def test_review_current_without_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!courant")
|
bot.test_public_message(bot.channel, OWNER, "!courant")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
||||||
assert not bot.review.is_started
|
assert not bot.review.is_started
|
||||||
|
|
||||||
|
|
||||||
def test_review_current_without_topic(bot):
|
def test_review_current_without_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!courant")
|
bot.test_public_message(bot.channel, OWNER, "!courant")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "% Pas de sujet en cours."
|
assert bot.answers[0].message == "% Pas de sujet en cours."
|
||||||
assert bot.review.is_started
|
assert bot.review.is_started
|
||||||
|
|
||||||
|
|
||||||
def test_review_current_with_collective_topic(bot):
|
def test_review_current_with_collective_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!courant")
|
bot.test_public_message(bot.channel, OWNER, "!courant")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.review.current_topic.title == "collective topic"
|
assert bot.review.current_topic.title == "collective topic"
|
||||||
assert bot.answers[0].message == f"% Sujet collectif en cours : {bot.review.current_topic.title}"
|
assert bot.answers[0].message == f"% Sujet collectif en cours : {bot.review.current_topic.title}"
|
||||||
|
|
||||||
|
|
||||||
def test_review_current_with_individual_topic(bot):
|
def test_review_current_with_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!courant")
|
bot.test_public_message(bot.channel, OWNER, "!courant")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.review.current_topic.title == "individual topic"
|
assert bot.review.current_topic.title == "individual topic"
|
||||||
assert bot.answers[0].message == f"% Sujet individuel en cours : {bot.review.current_topic.title}"
|
assert bot.answers[0].message == f"% Sujet individuel en cours : {bot.review.current_topic.title}"
|
||||||
|
|
||||||
|
|
||||||
def test_review_individual_topic(bot):
|
def test_review_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
assert bot.review.current_topic is None
|
assert bot.review.current_topic is None
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# individual topic")
|
||||||
assert len(bot.answers) == 3
|
assert len(bot.answers) == 3
|
||||||
assert len(bot.review.topics) == 1
|
assert len(bot.review.topics) == 1
|
||||||
assert bot.review.current_topic is not None
|
assert bot.review.current_topic is not None
|
||||||
@ -337,13 +337,13 @@ def test_review_individual_topic(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_second_individual_topic(bot):
|
def test_review_second_individual_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
assert bot.review.current_topic is None
|
assert bot.review.current_topic is None
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is my message")
|
bot.test_public_message(bot.channel, OWNER, "This is my message")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is a message from sender")
|
bot.test_public_message(bot.channel, SENDER, "This is a message from sender")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# second individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# second individual topic")
|
||||||
assert len(bot.answers) == 5
|
assert len(bot.answers) == 5
|
||||||
assert len(bot.review.topics) == 2
|
assert len(bot.review.topics) == 2
|
||||||
assert bot.review.current_topic is not None
|
assert bot.review.current_topic is not None
|
||||||
@ -351,7 +351,7 @@ def test_review_second_individual_topic(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_individual_no_review(bot):
|
def test_review_individual_no_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# individual topic")
|
||||||
assert len(bot.answers) == 0
|
assert len(bot.answers) == 0
|
||||||
assert not bot.review.is_started
|
assert not bot.review.is_started
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
@ -359,20 +359,20 @@ def test_review_individual_no_review(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_review_individual_topic_not_owner(bot):
|
def test_review_individual_topic_not_owner(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "# individual topic")
|
bot.test_public_message(bot.channel, SENDER, "# individual topic")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la réunion"
|
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la réunion"
|
||||||
|
|
||||||
|
|
||||||
def test_stop_review(bot):
|
def test_stop_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert bot.review.is_started
|
assert bot.review.is_started
|
||||||
assert not bot.review.is_ended
|
assert not bot.review.is_ended
|
||||||
bot.on_public_message(CHANNEL, OWNER, "A messsage")
|
bot.test_public_message(bot.channel, OWNER, "A messsage")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "Another messsage")
|
bot.test_public_message(bot.channel, OWNER, "Another messsage")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!stop")
|
bot.test_public_message(bot.channel, OWNER, "!stop")
|
||||||
assert not bot.review.is_started
|
assert not bot.review.is_started
|
||||||
assert not bot.review.is_ended
|
assert not bot.review.is_ended
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
@ -382,15 +382,15 @@ def test_stop_review(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_stop_review_not_owner(bot):
|
def test_stop_review_not_owner(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!stop")
|
bot.test_public_message(bot.channel, SENDER, "!stop")
|
||||||
assert bot.review.is_started
|
assert bot.review.is_started
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la réunion."
|
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la réunion."
|
||||||
|
|
||||||
|
|
||||||
def test_stop_review_no_review(bot):
|
def test_stop_review_no_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!stop")
|
bot.test_public_message(bot.channel, OWNER, "!stop")
|
||||||
assert not bot.review.is_started
|
assert not bot.review.is_started
|
||||||
assert not bot.review.is_ended
|
assert not bot.review.is_ended
|
||||||
assert len(bot.review.topics) == 0
|
assert len(bot.review.topics) == 0
|
||||||
@ -400,38 +400,38 @@ def test_stop_review_no_review(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_missing_no_review(bot):
|
def test_missing_no_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!manquants")
|
bot.test_public_message(bot.channel, OWNER, "!manquants")
|
||||||
assert not bot.review.is_started
|
assert not bot.review.is_started
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
||||||
|
|
||||||
|
|
||||||
def test_missing_no_topic(bot):
|
def test_missing_no_topic(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
assert bot.review.is_started
|
assert bot.review.is_started
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!manquants")
|
bot.test_public_message(bot.channel, OWNER, "!manquants")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "% Pas de sujet en cours."
|
assert bot.answers[0].message == "% Pas de sujet en cours."
|
||||||
|
|
||||||
|
|
||||||
def test_missing_no_one_is_missing(bot):
|
def test_missing_no_one_is_missing(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is owner message")
|
bot.test_public_message(bot.channel, OWNER, "This is owner message")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!manquants")
|
bot.test_public_message(bot.channel, OWNER, "!manquants")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "% Tout le monde s'est exprimé sur le sujet courant \\o/"
|
assert bot.answers[0].message == "% Tout le monde s'est exprimé sur le sujet courant \\o/"
|
||||||
|
|
||||||
|
|
||||||
def test_missing_one_is_missing(bot):
|
def test_missing_one_is_missing(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "This is my message")
|
bot.test_public_message(bot.channel, SENDER, "This is my message")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is owner message")
|
bot.test_public_message(bot.channel, OWNER, "This is owner message")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## a second collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## a second collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "This is the second owner message")
|
bot.test_public_message(bot.channel, OWNER, "This is the second owner message")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!manquants")
|
bot.test_public_message(bot.channel, OWNER, "!manquants")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == (
|
assert bot.answers[0].message == (
|
||||||
"% Personnes participantes ne s'étant pas exprimées sur le "
|
"% Personnes participantes ne s'étant pas exprimées sur le "
|
||||||
@ -440,68 +440,68 @@ def test_missing_one_is_missing(bot):
|
|||||||
|
|
||||||
|
|
||||||
def test_chrono_no_review(bot):
|
def test_chrono_no_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!chrono")
|
bot.test_public_message(bot.channel, OWNER, "!chrono")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "n/a"
|
assert bot.answers[0].message == "n/a"
|
||||||
|
|
||||||
|
|
||||||
def test_chrono(bot):
|
def test_chrono(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.review.start_time = datetime.today() - timedelta(seconds=87)
|
bot.review.start_time = datetime.today() - timedelta(seconds=87)
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!chrono")
|
bot.test_public_message(bot.channel, OWNER, "!chrono")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "01:27"
|
assert bot.answers[0].message == "01:27"
|
||||||
|
|
||||||
|
|
||||||
def test_finish_review(bot):
|
def test_finish_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "Owner message on collective topic")
|
bot.test_public_message(bot.channel, OWNER, "Owner message on collective topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "Sender message on collective topic")
|
bot.test_public_message(bot.channel, SENDER, "Sender message on collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "Owner message on individual topic")
|
bot.test_public_message(bot.channel, OWNER, "Owner message on individual topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "Sender message on individual topic")
|
bot.test_public_message(bot.channel, SENDER, "Sender message on individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!fin")
|
bot.test_public_message(bot.channel, OWNER, "!fin")
|
||||||
assert len(bot.answers) == 10
|
assert len(bot.answers) == 10
|
||||||
assert bot.answers[-2].message == "% Fin de la revue hebdomadaire"
|
assert bot.answers[-2].message == "% Fin de la revue hebdomadaire"
|
||||||
assert bot.answers[-1].message == "Revue finie."
|
assert bot.answers[-1].message == "Revue finie."
|
||||||
|
|
||||||
|
|
||||||
def test_finish_review_no_review(bot):
|
def test_finish_review_no_review(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!fin")
|
bot.test_public_message(bot.channel, OWNER, "!fin")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
assert bot.answers[0].message == f"{OWNER}, pas de revue en cours."
|
||||||
|
|
||||||
|
|
||||||
def test_finish_review_already_finished(bot):
|
def test_finish_review_already_finished(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "Owner message on collective topic")
|
bot.test_public_message(bot.channel, OWNER, "Owner message on collective topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "Sender message on collective topic")
|
bot.test_public_message(bot.channel, SENDER, "Sender message on collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "Owner message on individual topic")
|
bot.test_public_message(bot.channel, OWNER, "Owner message on individual topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "Sender message on individual topic")
|
bot.test_public_message(bot.channel, SENDER, "Sender message on individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!fin")
|
bot.test_public_message(bot.channel, OWNER, "!fin")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!fin")
|
bot.test_public_message(bot.channel, OWNER, "!fin")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "La revue est déjà finie."
|
assert bot.answers[0].message == "La revue est déjà finie."
|
||||||
|
|
||||||
|
|
||||||
def test_finish_review_not_owner(bot):
|
def test_finish_review_not_owner(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, OWNER, "## collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "Owner message on collective topic")
|
bot.test_public_message(bot.channel, OWNER, "Owner message on collective topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "Sender message on collective topic")
|
bot.test_public_message(bot.channel, SENDER, "Sender message on collective topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "# individual topic")
|
bot.test_public_message(bot.channel, OWNER, "# individual topic")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "Owner message on individual topic")
|
bot.test_public_message(bot.channel, OWNER, "Owner message on individual topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "Sender message on individual topic")
|
bot.test_public_message(bot.channel, SENDER, "Sender message on individual topic")
|
||||||
bot.on_public_message(CHANNEL, SENDER, "!fin")
|
bot.test_public_message(bot.channel, SENDER, "!fin")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la revue."
|
assert bot.answers[0].message == f"{SENDER}, vous n'êtes pas responsable de la revue."
|
||||||
|
|
||||||
|
|
||||||
def test_finish_review_no_participation(bot):
|
def test_finish_review_no_participation(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, OWNER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!fin")
|
bot.test_public_message(bot.channel, OWNER, "!fin")
|
||||||
assert len(bot.answers) == 1
|
assert len(bot.answers) == 1
|
||||||
assert bot.answers[0].message == "Participation nulle détectée. La revue est ignorée."
|
assert bot.answers[0].message == "Participation nulle détectée. La revue est ignorée."
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
from tests.utils import bot, CHANNEL, OWNER, SENDER
|
from tests.utils import bot, OWNER, SENDER
|
||||||
|
|
||||||
|
|
||||||
def test_topic_duration_not_ended(bot):
|
def test_topic_duration_not_ended(bot):
|
||||||
bot.on_public_message(CHANNEL, OWNER, "!start")
|
bot.test_public_message(bot.channel, SENDER, "!start")
|
||||||
bot.on_public_message(CHANNEL, OWNER, "## collective topic")
|
bot.test_public_message(bot.channel, SENDER, "## collective topic")
|
||||||
assert bot.review.current_topic.duration != ""
|
|
||||||
|
|
||||||
|
assert bot.review.current_topic.duration != ""
|
||||||
|
@ -1,13 +1,53 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from bot.hebdobot import Hebdobot
|
from hebdobot import HebdoBot
|
||||||
from tests import settings
|
from tests import settings
|
||||||
|
|
||||||
CHANNEL = "#test_channel"
|
|
||||||
OWNER = "me"
|
OWNER = "me"
|
||||||
SENDER = "foobar"
|
SENDER = "foobar"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Answer():
|
||||||
|
target: str
|
||||||
|
message: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Source():
|
||||||
|
nick: str
|
||||||
|
|
||||||
|
|
||||||
|
class Event():
|
||||||
|
def __init__(self, target, nick, message):
|
||||||
|
self.target = target
|
||||||
|
self.source = Source(nick)
|
||||||
|
self.arguments = [message]
|
||||||
|
|
||||||
|
|
||||||
|
def test_privmsg(self, target, message):
|
||||||
|
self.answers.append(Answer(target, message))
|
||||||
|
|
||||||
|
|
||||||
|
def test_public_message(self, target, sender, message):
|
||||||
|
self.answers = []
|
||||||
|
self.on_pubmsg(None, Event(target, sender, message))
|
||||||
|
|
||||||
|
|
||||||
|
def test_private_message(self, target, sender, message):
|
||||||
|
self.answers = []
|
||||||
|
self.on_privmsg(None, Event(target, sender, message))
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def bot():
|
def bot():
|
||||||
return Hebdobot(settings, CHANNEL, nickname="Hebdobot")
|
HebdoBot.test_public_message = test_public_message
|
||||||
|
HebdoBot.test_private_message = test_private_message
|
||||||
|
HebdoBot.test_privmsg = test_privmsg
|
||||||
|
hebdobot = HebdoBot(settings)
|
||||||
|
hebdobot.connection.privmsg = hebdobot.test_privmsg
|
||||||
|
hebdobot.answers = []
|
||||||
|
|
||||||
|
return hebdobot
|
||||||
|
14
users-sample.conf
Normal file
14
users-sample.conf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#
|
||||||
|
# Sample Hebdobot user file
|
||||||
|
#
|
||||||
|
|
||||||
|
Christian P. MOMON=cpm__,cpm_screen
|
||||||
|
Lionel Allorge=liot,liot_
|
||||||
|
Frédéric Couchet=madix
|
||||||
|
Isabella Vanni=cioccolisa
|
||||||
|
Étienne Gonnu=lonugem
|
||||||
|
Elsa Pottier=eipoca1
|
||||||
|
François Poulain=Polux__,Polux_,Polux,Polux[2]
|
||||||
|
Thérèse Godefroy=therese
|
||||||
|
Magali Garnero=Bookynette
|
||||||
|
Marie-Odile Morandi=Marie-Odile1,Marie-Odile
|
Loading…
Reference in New Issue
Block a user