@ -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 <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 ) :
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 )