diff --git a/asmodee.py b/asmodee.py index eb0527c..318a040 100755 --- a/asmodee.py +++ b/asmodee.py @@ -8,12 +8,15 @@ import signal import sys import pickle import time +from datetime import datetime from matrix_bot_api.matrix_bot_api import MatrixBotAPI from matrix_bot_api.mregex_handler import MRegexHandler from matrix_bot_api.mcommand_handler import MCommandHandler from matrix_client.client import MatrixClient +from mall_handler import MAllHandler + # Version initiale par Philippe Depriester et Clement Gauche cartes_base = ["As de carreau", "2 de carreau", "3 de carreau", "4 de carreau", "5 de carreau", "6 de carreau", \ @@ -27,6 +30,7 @@ cartes_base = ["As de carreau", "2 de carreau", "3 de carreau", "4 de carreau", cartes=list(cartes_base) bot = None clock = {} +stats = {} def horloge_read(): global clock @@ -36,13 +40,34 @@ def horloge_read(): clock = loader.load() except: clock = {} + +def stats_read(): + global stats + try: + with open("stats", "rb") as fichier: + loader = pickle.Unpickler(fichier) + stats = loader.load() + except: + stats = {} def signal_handler(signal, frame): with open("horloge", "wb") as fichier: saver = pickle.Pickler(fichier) saver.dump(clock) + with open("stats", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(stats) sys.exit(0) +class Userstats: #Pour garder des stats sur les users + def __init__(self,room,user,nick): + self.room = room + self.user = user + self.nick = nick.strip() + self.date = 0 + self.mess = 0 + self.char = 0 + self.kapoue = 0 class Parser: #Pour parser la ligne de commande def __init__(self, str, nick, room): @@ -134,10 +159,12 @@ def getNick(room, event): members = room.get_joined_members() nick = "" try: - #nick = members[event['sender']]['displayname'] nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] except: - nick = "Voisin du dessus" + try: + nick = members[event['sender']]['displayname'] + except: + nick = event['sender'] return(nick) def card(room, event): @@ -729,6 +756,73 @@ def horloge(room, event): else: room.send_text("Utilisation : \n- !horloge : Affiche les horloges. \n- !horloge : Place ou crée l'horloge au niveau spécifié.\n- !horloge del : Supprime l'horloge.") +def statistiques(room,event): + global stats + nick = getNick(room,event) + user = event['sender'] + usrstats1 = 0 + usrstats2 = 0 + + try: + usrstats1 = stats[room.room_id,user] + except: + usrstats1 = Userstats(room.room_id,user,nick) + try: + usrstats2 = stats[room.room_id,nick] + except: + usrstats2 = Userstats(room.room_id,user,nick) + + # date de la phrase + date = datetime.now() + usrstats1.date = date + usrstats2.date = date + + # recup nb phrases +1, 1 sinon + if (userstats1.mess >= userstats2.mess): + userstats2.mess = userstats1.mess + 1 + userstats1.mess = userstats2.mess + else: + userstats1.mess = userstats2.mess + 1 + userstats2.mess = userstats1.mess + + # recup nb lettres +lettres phrase, lettres phrases sinon + if (userstats1.char >= userstats2.char): + userstats2.char = userstats1.char + len(event['content']['body']) + userstats1.char = userstats2.char + else: + userstats1.char = userstats2.char + len(event['content']['body']) + userstats2.char = userstats1.char + + # si kapoue, recup nb kapoue +1, 1 sinon + if (re.match("KAPOUE|[Kk]apoue", self._str)): + if (userstats1.kapoue >= userstats2.kapoue): + userstats2.kapoue = userstats1.kapoue + 1 + userstats1.kapoue = userstats2.kapoue + else: + userstats1.kapoue = userstats2.kapoue + 1 + userstats2.kapoue = userstats1.kapoue + + # insertion des objets + stats[room.room_id,user] = usrstats1 + stats[room.room_id,nick] = usrstats2 + +def last(room,event): + global stats + args = event['content']['body'].split() + args.pop(0) + if (len(args) == 0): + room.send_text("!last : Date de dernier emssage de la personne") + else: + pers=args[0] + try: + usrstats = stats[pers] + room.send_text("J'ai vu " + usrstats.nick + " poster pour la derniere fois le " + usrstats.date) + except: + room.send_text("Personne non reconnue : Personnes enregistrees :\n") + for cle,valeur in stats.items(): + room.send_text(cle + "\n") + + def invitations(room_id, state): global bot try: @@ -799,6 +893,13 @@ def main(): horloge_handler = MCommandHandler("horloge", horloge) bot.add_handler(horloge_handler) + # stats + stats_read() + stats_handler = MAllHandler(statistiques) + bot.add_handler(stats_handler) + last_handler = MCommandHandler("last", last) + bot.add_handler(last_handler) + # Invitations bot.client.add_invite_listener(invitations) diff --git a/mall_handler.py b/mall_handler.py new file mode 100644 index 0000000..03f5ba4 --- /dev/null +++ b/mall_handler.py @@ -0,0 +1,11 @@ +# coding: utf8 +from matrix_bot_api.mhandler import MHandler + + +class MAllHandler(MHandler): + + # command - String of command to handle + # handle_callback - Function to call if message contains command + # cmd_char - Character that denotes a command. '!' by default + def __init__(self, handle_callback): + MHandler.__init__(self, True, handle_callback) \ No newline at end of file