generated from Nemesis/Exemple
stats
This commit is contained in:
parent
ec976c637e
commit
046529b1db
2 changed files with 114 additions and 2 deletions
105
asmodee.py
105
asmodee.py
|
@ -8,12 +8,15 @@ import signal
|
||||||
import sys
|
import sys
|
||||||
import pickle
|
import pickle
|
||||||
import time
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from matrix_bot_api.matrix_bot_api import MatrixBotAPI
|
from matrix_bot_api.matrix_bot_api import MatrixBotAPI
|
||||||
from matrix_bot_api.mregex_handler import MRegexHandler
|
from matrix_bot_api.mregex_handler import MRegexHandler
|
||||||
from matrix_bot_api.mcommand_handler import MCommandHandler
|
from matrix_bot_api.mcommand_handler import MCommandHandler
|
||||||
from matrix_client.client import MatrixClient
|
from matrix_client.client import MatrixClient
|
||||||
|
|
||||||
|
from mall_handler import MAllHandler
|
||||||
|
|
||||||
# Version initiale par Philippe Depriester et Clement Gauche
|
# 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", \
|
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)
|
cartes=list(cartes_base)
|
||||||
bot = None
|
bot = None
|
||||||
clock = {}
|
clock = {}
|
||||||
|
stats = {}
|
||||||
|
|
||||||
def horloge_read():
|
def horloge_read():
|
||||||
global clock
|
global clock
|
||||||
|
@ -37,12 +41,33 @@ def horloge_read():
|
||||||
except:
|
except:
|
||||||
clock = {}
|
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):
|
def signal_handler(signal, frame):
|
||||||
with open("horloge", "wb") as fichier:
|
with open("horloge", "wb") as fichier:
|
||||||
saver = pickle.Pickler(fichier)
|
saver = pickle.Pickler(fichier)
|
||||||
saver.dump(clock)
|
saver.dump(clock)
|
||||||
|
with open("stats", "wb") as fichier:
|
||||||
|
saver = pickle.Pickler(fichier)
|
||||||
|
saver.dump(stats)
|
||||||
sys.exit(0)
|
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
|
class Parser: #Pour parser la ligne de commande
|
||||||
def __init__(self, str, nick, room):
|
def __init__(self, str, nick, room):
|
||||||
|
@ -134,10 +159,12 @@ def getNick(room, event):
|
||||||
members = room.get_joined_members()
|
members = room.get_joined_members()
|
||||||
nick = ""
|
nick = ""
|
||||||
try:
|
try:
|
||||||
#nick = members[event['sender']]['displayname']
|
|
||||||
nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0]
|
nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0]
|
||||||
except:
|
except:
|
||||||
nick = "Voisin du dessus"
|
try:
|
||||||
|
nick = members[event['sender']]['displayname']
|
||||||
|
except:
|
||||||
|
nick = event['sender']
|
||||||
return(nick)
|
return(nick)
|
||||||
|
|
||||||
def card(room, event):
|
def card(room, event):
|
||||||
|
@ -729,6 +756,73 @@ def horloge(room, event):
|
||||||
else:
|
else:
|
||||||
room.send_text("Utilisation : \n- !horloge : Affiche les horloges. \n- !horloge <nom> <niveau> : Place ou crée l'horloge au niveau spécifié.\n- !horloge del <nom> : Supprime l'horloge.")
|
room.send_text("Utilisation : \n- !horloge : Affiche les horloges. \n- !horloge <nom> <niveau> : Place ou crée l'horloge au niveau spécifié.\n- !horloge del <nom> : 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 <name ou id> : 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):
|
def invitations(room_id, state):
|
||||||
global bot
|
global bot
|
||||||
try:
|
try:
|
||||||
|
@ -799,6 +893,13 @@ def main():
|
||||||
horloge_handler = MCommandHandler("horloge", horloge)
|
horloge_handler = MCommandHandler("horloge", horloge)
|
||||||
bot.add_handler(horloge_handler)
|
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
|
# Invitations
|
||||||
bot.client.add_invite_listener(invitations)
|
bot.client.add_invite_listener(invitations)
|
||||||
|
|
||||||
|
|
11
mall_handler.py
Normal file
11
mall_handler.py
Normal file
|
@ -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)
|
Loading…
Reference in a new issue