from datetime import datetime import os import privatebinapi import logger from review.stats import ReviewData, ReviewStats class FinishReview: def process(self, bot, channel, sender, message): """ Si la commande est bonne, le bot met fin à la revue hebdomadaire. """ if message.lower() == "!fin": logger.info("!fin caught.") if not bot.review.is_started: bot.send(channel, f"{sender}, pas de revue en cours.") return True if not bot.review.is_owner(sender): bot.send(channel, f"{sender}, vous n'êtes pas responsable de la revue.") return True if bot.review.is_ended: bot.send(channel, "La revue est déjà finie.") return True if not bot.review.has_participants: bot.send(channel, "Participation nulle détectée. La revue est ignorée.") bot.review.cancel() return True # Ok, on clot la revue hebdomadaire bot.review.current_topic.close() bot.send( channel, f"% durée du point {bot.review.current_topic.title} : " f"{bot.review.current_topic.duration}", ) bot.review.close() # Chargement des statistiques des revues stats = ReviewStats(bot.settings.REVIEW_STATS) stats.load() # On génère le texte de la revue report = bot.review.report(stats, bot.settings.USER_ALIASES) # Mise à jour des statistiques des revues if bot.review.user_count > 1: stats.datas.append( ReviewData( bot.review.start_time, bot.review.user_count, bot.review.duration, ) ) stats.save() # On copie ce texte sur un pad pastebin_url = "" if bot.settings.PASTEBIN_URL != "": try: result = privatebinapi.send( bot.settings.PASTEBIN_URL, text=report, expiration=bot.settings.PASTEBIN_EXPIRATION, ) except: # En cas d'erreur, on re-essaye une fois après un temps d'attente time.sleep(int(bot.settings.PASTEBIN_WAIT)) result = privatebinapi.send( bot.settings.PASTEBIN_URL, text=report, expiration=bot.settings.PASTEBIN_EXPIRATION, ) try: pastebin_url = result["full_url"] except: bot.send(channel, "Erreur sur le pastebin.") # On sauve le texte dans un fichier review_file = ( f"{bot.review.start_time.strftime('%Y%m%d')}" "-log-irc-revue-hebdomadaire.txt" ) review_path = os.path.join(bot.settings.REVIEW_DIRECTORY, f"{review_file}") with open(review_path, "w") as file_handle: file_handle.write(report) bot.send( channel, 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}.", ) bot.send(channel, f"% Compte-rendu de la revue : {pastebin_url}") bot.send(channel, f"% Durée de la revue : {bot.review.duration} minutes") bot.send( channel, f"% Nombre de personnes participantes : {bot.review.user_count}", ) bot.send( channel, "% La participation moyenne aux revues est de " f"{stats.avg_users:.1f} personnes", ) bot.send( channel, f"% {' '.join(bot.review.participants)}, pensez à noter votre " "bénévalo : http://www.april.org/my?action=benevalo", ) bot.send( channel, f"% {bot.review.owner}, ne pas oublier d'ajouter le compte-rendu " "de la revue sur https://agir.april.org/issues/135 en utilisant " f"comme nom de fichier {review_file}", ) bot.send(channel, "% Fin de la revue hebdomadaire") bot.send(bot.review.owner, "Revue finie.") return True