@ -3,6 +3,9 @@ import re
import copy
import configparser
import io
import signal
import sys
import pickle
from matrix_bot_api . matrix_bot_api import MatrixBotAPI
from matrix_bot_api . mregex_handler import MRegexHandler
@ -21,6 +24,26 @@ cartes_base = ["As de carreau", "2 de carreau", "3 de carreau", "4 de carreau",
" 10 de trefle " , " Valet de trefle " , " Dame de trefle " , " Roi de trefle " , " Joker rouge " , " Joker noir " ]
cartes = list ( cartes_base )
bot = None
clock = { }
def horloge_read ( ) :
global clock
try :
with open ( " horloge " , " rb " ) as fichier :
loader = pickle . Unpickler ( fichier )
clock = loader . load ( )
except :
if ( ! fichier . closed ) :
fichier . close ( )
fichier = open ( " horloge.txt " , " w " )
fichier . close ( )
def signal_handler ( signal , frame ) :
with open ( " horloge " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( clock )
sys . exit ( 0 )
class Parser : #Pour parser la ligne de commande
def __init__ ( self , str , nick , room ) :
@ -108,6 +131,16 @@ class Parser: #Pour parser la ligne de commande
return True
return False
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 "
return ( nick )
def card ( room , event ) :
room . send_text ( cartes_base [ random . randrange ( 0 , len ( cartes_base ) ) ] )
@ -229,13 +262,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige):
def entryPoint ( room , event ) :
global parser
text = event [ ' content ' ] [ ' body ' ]
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 "
nick = getNick ( room , event )
parser = Parser ( text , nick , room )
print ( text )
@ -499,13 +526,7 @@ def reponses(room, phrases):
room . send_text ( phrases [ i ] )
def jdr ( 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 "
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " Rock & Role baby! " )
phrases . append ( " De toute maniere " + nick + " , les gens ont perdu la foi dans le rolisme. " )
@ -513,13 +534,7 @@ def jdr(room, event):
reponses ( room , phrases )
def gens ( 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 "
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " L ' enfer c ' est les autres. " )
phrases . append ( " Bah " + nick + " , les gens c ' est pratique pour jouer aux osselets. Bon faut juste trouver ou mettre la chair ensuite. " )
@ -527,13 +542,7 @@ def gens(room, event):
reponses ( room , phrases )
def va ( 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 "
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " Moi ca va si jamais quelqu ' un se pose la question... " )
phrases . append ( " Quand l ' appetit va, tout va " + nick + " ! " )
@ -541,13 +550,7 @@ def va(room, event):
reponses ( room , phrases )
def maman ( 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 "
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " On avait dit ' Pas les mamans ' ! " )
phrases . append ( " Oh, c ' est pas la mere a boire " + nick + " }! " )
@ -556,13 +559,7 @@ def maman(room, event):
def hi_callback ( room , event ) :
# Somebody said hi, let's say Hi back
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 "
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " Salutations " + nick + " ! " )
phrases . append ( " Chalut " + nick + " :) " )
@ -579,14 +576,7 @@ def echo_callback(room, event):
def liste ( room , event ) :
res = [ ]
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 "
nick = getNick ( room , event )
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
@ -605,7 +595,105 @@ def liste(room, event):
else :
room . send_text ( " Utilisation : !liste <options/de/la/liste> [nombre d elements] " )
def cristal ( room , event ) :
nick = getNick ( room , event )
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
if ( len ( args ) < 2 | | args [ len ( args ) - 1 ] [ - 1 ] != ' ? ' ) :
room . send_text ( " Utilisation : !cristal <Quel est votre question?> " )
else :
args [ len ( args ) - 1 ] = args [ len ( args ) - 1 ] [ 0 : - 1 ]
args = list ( set ( args ) . difference ( set ( [ " Dans " , " Jusque " , " le " , " la " , " les " , " de " , " des " , " un " , " une " , " est " , " sont " , " serait " , " seraient " , " était " , " étaient " , " sera " , " seront " , " ont " , " aurait " , " auraient " , " aura " , " auront " , " a " , " à " ] ) ) )
conj = args [ 0 ]
args . pop ( 0 )
cle = max ( args , key = len )
if ( conj == " Est-ce " | | conj == " est-ce " ) :
# traitement Oui/non
phrases = [ ]
phrases . append ( " Evidemment " + nick + " , qu ' est ce que tu croyais? " )
phrases . append ( " Non " + nick + " , malheurement non. " )
phrases . append ( " Oui " + nick + " , et quelque chose d ' encore pire ensuite pour " + cle + " ! " )
phrases . append ( " Je ne sais pas si je dois te le dire au risque de te faire de la peine, " + nick + " ... " )
reponses ( room , phrases )
elif ( conj == " Combien " | | conj == " combien " ) :
# traitement quantité
phrases = [ ]
phrases . append ( " Enormement " + nick + " ! " )
phrases . append ( " Quasiment aucun " + nick + " :) " )
phrases . append ( " Peu comparé à l ' immensité, mais au niveau de " + nick + " , forcément... " )
phrases . append ( " J ' en vois des dizaines, des centaines et par un prompt renfort ils furent 500 en arrivant au port! " )
reponses ( room , phrases )
elif ( conj == " Pourquoi " | | conj == " pourquoi " ) :
# traitement raison
phrases = [ ]
phrases . append ( " Parce que la vie est injuste " + nick + " ! " )
phrases . append ( " A cause del ' orgueil, " + nick + " , la mère de tous les vices. " )
phrases . append ( " Pour la richesse, pour le pouvoir, pour le pouvoir qu ' apporte la richesse. " )
phrases . append ( " A cause d ' une démence aussi soudaine que passagère. " )
reponses ( room , phrases )
elif ( conj == " Comment " | | conj == " comment " ) :
# traitement methode
phrases = [ ]
phrases . append ( " Discrètement, sournoisement, vicieusement " + nick + " ! " )
phrases . append ( " Avec panache! :) " )
phrases . append ( " Avec un trombone et un élastique, comme McGuy " + nick + " ! " )
phrases . append ( " Avec une aide des plus innattendues. " )
reponses ( room , phrases )
elif ( conj == " Quand " | | conj == " quand " ) :
# traitement temps
phrases = [ ]
phrases . append ( " Plus vite que tu ne l ' imagine, retourne toi " + nick + " ! " )
phrases . append ( " Dans vraiment de temps, mais n ' est pas mort ce qui à jamais dort... " )
phrases . append ( " Pile poil la durée que tu imaginais. " )
phrases . append ( " Dans plus lontemps que tu ne le pensais, mais tous les intervenants ont une bonne excuse. Leur collègue de droite a merdé. " )
reponses ( room , phrases )
elif ( conj == " Où " | | conj == " où " ) :
# traitement lieu
phrases = [ ]
phrases . append ( " Dans la ville voisine " )
phrases . append ( " A l ' extérieur " )
phrases . append ( " Au dernier endroit où on y penserait " )
phrases . append ( " Là où les ennuis se concentrent, comme d ' habitude " )
reponses ( room , phrases )
else :
# reponse generique
phrases = [ ]
phrases . append ( " Toujours en mouvement le futur est. Toujours sans lunettes flou je vois. " )
phrases . append ( " La boule de cristal est momentanément indisponible, veuillez réitérer votre divination ultérieurement. " )
phrases . append ( " Une ombre plane sur ton âme, ses crocs approchent. " )
phrases . append ( " Tu portes quelque chose de sombre, je refuse de me laisser souiller. " )
reponses ( room , phrases )
def horloge ( room , event ) :
global clock
nick = getNick ( room , event )
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
if ( len ( args ) == 0 ) :
# Liste des horloges du salon
for cle , valeur in clock . items ( ) :
if ( cle [ 0 ] == room . room_id ) :
room . send_text ( cle [ 1 ] + " : \u1F54 0 \n " ) if ( valeur == 0 )
room . send_text ( cle [ 1 ] + " : \u1F55 2 \n " ) if ( valeur == 1 )
room . send_text ( cle [ 1 ] + " : \u1F55 5 \n " ) if ( valeur == 2 )
room . send_text ( cle [ 1 ] + " : \u1F55 8 \n " ) if ( valeur == 3 )
room . send_text ( cle [ 1 ] + " : \u1F55 9 \n " ) if ( valeur == 4 )
room . send_text ( cle [ 1 ] + " : \u1F55 A \n " ) if ( valeur == 5 )
room . send_text ( cle [ 1 ] + " : \u1F55 B \n " ) if ( valeur == 6 )
room . send_text ( cle [ 1 ] + " : " + valeur + " \n " ) if ( valeur > 6 )
elif ( len ( args ) > = 2 & & args [ len ( args ) - 1 ] . isnumeric ( ) ) :
# Place le niveau de l'horloge entre 0 et 6
nv = int ( args [ len ( args ) - 1 ] )
clock [ room . room_id , args [ 0 : - 1 ] ] = nv
elif ( len ( args ) > = 2 & & args [ 0 ] == " del " ) :
# Supprime une horloge
args . pop ( 0 )
clock . pop ( room . room_id , args )
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 invitations ( room_id , state ) :
global bot
try :
@ -661,7 +749,17 @@ def main():
# Un élément d'une liste
liste_handler = MCommandHandler ( " liste " , liste )
bot . add_handler ( liste_handler )
# Boule de cristal
cristal_handler = MCommandHandler ( " cristal " , cristal )
bot . add_handler ( cristal_handler )
# horloges
horloge_read ( )
signal . signal ( signal . SIGINT , signal_handler )
horloge_handler = MCommandHandler ( " horloge " , horloge )
bot . add_handler ( horloge_handler )
# Invitations
bot . client . add_invite_listener ( invitations )