@ -36,6 +36,8 @@ bieres = {} # Boissons a offrir
welcome = { } # Messages d'accueil des salons
admins = [ ] # Admins du bot
modos = { } # Moderateurs des salons
modules = { } # Modules activés par salon
liste_mod = [ ] # Modules disponibles
# Chargement des données persistantes
def horloge_read ( ) :
@ -91,25 +93,43 @@ def modos_read():
modos = loader . load ( )
except :
modos = { }
def modules_read ( ) :
global modules
try :
with open ( " modules " , " rb " ) as fichier :
loader = pickle . Unpickler ( fichier )
modules = loader . load ( )
except :
modules = { }
def save_obj ( ) :
if ( ' horloge ' in liste_mod ) :
with open ( " horloge " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( clock )
if ( ' stats ' in liste_mod ) :
with open ( " stats " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( stats )
if ( ' quote ' in liste_mod ) :
with open ( " quotes " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( quotes )
if ( ' biere ' in liste_mod ) :
with open ( " bieres " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( bieres )
if ( ' welcome ' in liste_mod ) :
with open ( " welcome " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( welcome )
with open ( " moderateurs " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( modos )
with open ( " modules " , " wb " ) as fichier :
saver = pickle . Pickler ( fichier )
saver . dump ( modules )
def signal_handler ( signal , frame ) : # Sauvegarder les données persistantes avant sortie
save_obj ( )
@ -285,9 +305,11 @@ def getNick(room, event): # Obtenir le DisplayName à partir du mxid
return ( nick )
def card ( room , event ) : # Tirer une carte du paquet sans la retirer
if ( modules [ room . room_id , ' card ' ] ) :
room . send_text ( cartes_base [ random . randrange ( 0 , len ( cartes_base ) ) ] )
def carte ( room , event ) : # Tirer une carte du paquet en la retirant ensuite
if ( modules [ room . room_id , ' carte ' ] ) :
global cartes
args = event [ ' content ' ] [ ' body ' ] . split ( )
if ( len ( args ) > 1 ) :
@ -443,6 +465,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z): # La
return ( result , total , jet )
def entryPoint ( room , event ) : # Analyse des commandes ":", point d'entrée pour les jets de dés
if ( modules [ room . room_id , ' roll ' ] ) :
global parser
text = event [ ' content ' ] [ ' body ' ]
nick = getNick ( room , event )
@ -716,6 +739,7 @@ def reponses(room, phrases): # Afficher une réponse aléatoire dans la liste
room . send_text ( phrases [ i ] )
def jdr ( room , event ) :
if ( modules [ room . room_id , ' jdr ' ] ) :
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " Rock & Role baby! " )
@ -724,6 +748,7 @@ def jdr(room, event):
reponses ( room , phrases )
def gens ( room , event ) :
if ( modules [ room . room_id , ' gens ' ] ) :
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " L ' enfer c ' est les autres. " )
@ -732,6 +757,7 @@ def gens(room, event):
reponses ( room , phrases )
def va ( room , event ) :
if ( modules [ room . room_id , ' va ' ] ) :
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " Moi ca va si jamais quelqu ' un se pose la question... " )
@ -739,15 +765,8 @@ def va(room, event):
phrases . append ( " Attention a " + nick + " , la suite est ' not safe for depression ' " )
reponses ( room , phrases )
def maman ( room , event ) :
nick = getNick ( room , event )
phrases = [ ]
phrases . append ( " On avait dit ' Pas les mamans ' ! " )
phrases . append ( " Oh, c ' est pas la mere a boire " + nick + " }! " )
phrases . append ( " C ' est pas l ' homme qui prend la mere, c ' est la mere qui prend l ' homme... " )
reponses ( room , phrases )
def hi_callback ( room , event ) :
if ( modules [ room . room_id , ' salut ' ] ) :
# Somebody said hi, let's say Hi back
nick = getNick ( room , event )
phrases = [ ]
@ -758,6 +777,7 @@ def hi_callback(room, event):
reponses ( room , phrases )
def liste ( room , event ) : # Afficher un élement aléatoire d'une liste fournie
if ( modules [ room . room_id , ' liste ' ] ) :
res = [ ]
nick = getNick ( room , event )
@ -778,7 +798,8 @@ def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
else :
room . send_text ( " Utilisation : !liste <options/de/la/liste> [nombre d elements] " )
def cristal ( room , event ) :
def cristal ( room , event ) : # Affiche une réponse à une question posée
if ( modules [ room . room_id , ' cristal ' ] ) :
nick = getNick ( room , event )
args = event [ ' content ' ] [ ' body ' ] . split ( )
@ -850,6 +871,7 @@ def cristal(room, event):
reponses ( room , phrases )
def horloge ( room , event ) : # Gestion des horloges PBTA
if ( modules [ room . room_id , ' horloge ' ] ) :
global clock
nick = getNick ( room , event )
@ -887,6 +909,7 @@ def horloge(room, event): # Gestion des horloges PBTA
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 ) : # Enregistrement des statistiques
if ( modules [ room . room_id , ' stats ' ] ) :
global stats
nick = getNick ( room , event )
user = event [ ' sender ' ]
@ -938,6 +961,7 @@ def statistiques(room,event): # Enregistrement des statistiques
stats [ room . room_id , nick ] = usrstats2
def last ( room , event ) : # Regarde la dernière fois que quelqu'un a écrit un message
if ( modules [ room . room_id , ' stats ' ] ) :
global stats
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
@ -956,6 +980,7 @@ def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un mess
# room.send_text(cle[1] + "\n")
def actif ( room , event ) : # Stats d'activité d'une personne
if ( modules [ room . room_id , ' stats ' ] ) :
global stats
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
@ -972,6 +997,7 @@ def actif(room,event): # Stats d'activité d'une personne
room . send_text ( pers + " : Personne non reconnue \n " )
def nb_kap ( room , event ) :
if ( modules [ room . room_id , ' stats ' ] ) :
global stats
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
@ -994,6 +1020,7 @@ def nb_kap(room,event):
room . send_text ( pers + " : Personne non reconnue \n " )
def quote ( room , event ) : # Gestion des citations
if ( modules [ room . room_id , ' quote ' ] ) :
global quotes
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
@ -1102,6 +1129,7 @@ def quote(room,event): # Gestion des citations
room . send_text ( " Je n ' ai pas de citations pour ce salon " )
def biere ( room , event ) : # Gestion des boissons
if ( modules [ room . room_id , ' biere ' ] ) :
global bieres
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
@ -1229,6 +1257,7 @@ def biere(room,event): # Gestion des boissons
room . send_text ( " Je n ' ai pas de breuvages pour ce salon " )
def boissons ( room , event ) : # Gestion des alias de boissons
if ( modules [ room . room_id , ' biere ' ] ) :
boisson = " "
elu = " "
@ -1254,6 +1283,7 @@ def boissons(room,event): # Gestion des alias de boissons
biere ( room , event )
def accueil ( room , event ) : # Mettre un message d'accueil
if ( modules [ room . room_id , ' welcome ' ] ) :
lmod = modos [ room . room_id ]
if ( event [ ' sender ' ] in admins or event [ ' sender ' ] in lmod ) :
global welcome
@ -1268,6 +1298,7 @@ def accueil(room,event): # Mettre un message d'accueil
salon . send_text ( " Vous n ' êtes pas autorisés à modifier le message d ' accueil. " )
def bienvenue ( event ) : # Affichage d'un message d'accueil aux nouveaux venus
if ( modules [ room . room_id , ' welcome ' ] ) :
room_id = event [ ' room_id ' ]
room = bot . client . rooms [ room_id ]
membership = event [ ' content ' ] [ ' membership ' ]
@ -1318,11 +1349,65 @@ def modo(room,event): # Definition d'un moderateur
else :
salon . send_text ( " Vous n ' êtes pas autorisés à définir les modérateurs. " )
def module ( room , event ) : # Definition des modules d'un salon
lmod = [ ]
try :
lmod = modos [ room . room_id ]
except :
lmod = [ ]
if ( event [ ' sender ' ] in admins or event [ ' sender ' ] in lmod ) :
global modules
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
if ( len ( args ) == 2 and args [ 0 ] == " add " ) :
args . pop ( 0 )
rmod = args [ 0 ]
if ( rmod in liste_mod ) :
modules [ room . room_id , rmod ] = True
room . send_text ( candidat + " Module : " + rmod + " activé. " )
else :
room . send_text ( candidat + " Module : " + rmod + " inconnu. " )
elif ( len ( args ) == 2 and args [ 0 ] == " del " ) :
args . pop ( 0 )
rmod = args [ 0 ]
if ( rmod in liste_mod ) :
modules [ room . room_id , rmod ] = False
room . send_text ( candidat + " Module : " + rmod + " désactivé. " )
else :
room . send_text ( candidat + " Module : " + rmod + " inconnu. " )
else :
# Lister les modules actifs du salon
rmod = " "
for cle , valeur in modules . items ( ) :
if ( cle [ 0 ] == room . room_id and valeur == True ) :
rmod = rmod + cle [ 1 ] + " , "
if ( len ( rmod ) > 1 ) :
rmod = rmod [ : - 2 ]
room . send_text ( " Modules actuels : " + rmod )
# Lister les modules disponibles
dmod = " "
for val in liste_mod :
dmod = dmod + val + " , "
if ( len ( dmod ) > 1 ) :
dmod = dmod [ : - 2 ]
room . send_text ( " Modules disponibles : " + dmod )
else :
salon . send_text ( " Vous n ' êtes pas autorisés à définir les modules du salon. " )
def invitations ( room_id , state ) : # Reponse aux invitations
global bot
try :
global bot
bot . client . join_room ( room_id )
if ( ' welcome ' in liste_mod ) :
modules [ room . room_id , ' welcome ' ] = True
if ( ' roll ' in liste_mod ) :
modules [ room . room_id , ' roll ' ] = True
if ( ' quote ' in liste_mod ) :
modules [ room . room_id , ' quote ' ] = True
if ( ' liste ' in liste_mod ) :
modules [ room . room_id , ' liste ' ] = True
time . sleep ( 2 )
del bot
save ( )
@ -1336,8 +1421,8 @@ def main():
USERNAME = " " # Bot's username
PASSWORD = " " # Bot's password
SERVER = " " # Matrix server URL
mods = [ " roll " , " quote " , " biere " , " stats " , " liste " , " horloge " , " carte " , " card " , " cristal " , " welcome " , " salut " , " jdr " , " gens " , " va " ]
global admins
if ( ' AUTH ' in config ) :
USERNAME = config [ ' AUTH ' ] [ ' username ' ] # Bot's username
PASSWORD = config [ ' AUTH ' ] [ ' password ' ] # Bot's password
@ -1346,9 +1431,14 @@ def main():
else :
print ( " Probleme de lecture de configuration asmodee.ini " )
#print("admins")
#for admin in admins:
# print(admin)
global liste_mod
if ( ' MOD ' in config ) :
try :
liste_mod = config [ ' MOD ' ] [ ' liste ' ] . split ( ' , ' ) # Liste des modules
except :
liste_mod = mods
else
liste_mod = mods
# Create an instance of the MatrixBotAPI
global bot
@ -1361,43 +1451,51 @@ def main():
bot . add_handler ( aide_handler )
# Add a regex handler waiting for keywords and answers
#hi_handler = MRegexHandler("[Ss]alut|[Cc]halut|'lut|[Cc]oucou|[Bb]onjour|[Hh]ello", hi_callback)
#bot.add_handler(hi_handler)
#jdr_handler = MRegexHandler("[Jj]dr|[Rr]pg", jdr)
#bot.add_handler(jdr_handler)
#gens_handler = MRegexHandler("[Gg]ens", gens)
#bot.add_handler(gens_handler)
#maman_handler = MRegexHandler("[Mm]aman|[Mm]ere", maman)
#bot.add_handler(maman_handler)
#va_handler = MRegexHandler("ca va|vas]", va)
#bot.add_handler(va_handler)
if ( ' salut ' in liste_mod ) :
hi_handler = MRegexHandler ( " [Ss]alut|[Cc]halut| ' lut|[Cc]oucou|[Bb]onjour|[Hh]ello " , hi_callback )
bot . add_handler ( hi_handler )
if ( ' jdr ' in liste_mod ) :
jdr_handler = MRegexHandler ( " [Jj]dr|[Rr]pg " , jdr )
bot . add_handler ( jdr_handler )
if ( ' gens ' in liste_mod ) :
gens_handler = MRegexHandler ( " [Gg]ens " , gens )
bot . add_handler ( gens_handler )
if ( ' va ' in liste_mod ) :
va_handler = MRegexHandler ( " ca va|vas] " , va )
bot . add_handler ( va_handler )
# Add a regex handler waiting for the dice commands and aliases
if ( ' roll ' in liste_mod ) :
entry_handler = MCommandHandler ( " " , entryPoint , ' : ' )
bot . add_handler ( entry_handler )
# Cartes !card tire une carte d'un paquet plein !carte tire une carte qui disparait du paquet
if ( ' card ' in liste_mod ) :
card_handler = MCommandHandler ( " card " , card )
bot . add_handler ( card_handler )
if ( ' carte ' in liste_mod ) :
carte_handler = MCommandHandler ( " carte " , carte )
bot . add_handler ( carte_handler )
# Un élément d'une liste
if ( ' liste ' in liste_mod ) :
liste_handler = MCommandHandler ( " liste " , liste )
bot . add_handler ( liste_handler )
# Boule de cristal
if ( ' cristal ' in liste_mod ) :
cristal_handler = MCommandHandler ( " cristal " , cristal )
bot . add_handler ( cristal_handler )
signal . signal ( signal . SIGINT , signal_handler )
# horloges
if ( ' horloge ' in liste_mod ) :
horloge_read ( )
signal . signal ( signal . SIGINT , signal_handler )
horloge_handler = MCommandHandler ( " horloge " , horloge )
bot . add_handler ( horloge_handler )
# stats
if ( ' stats ' in liste_mod ) :
stats_read ( )
stats_handler = MAllHandler ( statistiques )
bot . add_handler ( stats_handler )
@ -1409,11 +1507,13 @@ def main():
bot . add_handler ( nb_kap_handler )
# quotes
if ( ' quote ' in liste_mod ) :
quotes_read ( )
quote_handler = MCommandHandler ( " quote " , quote )
bot . add_handler ( quote_handler )
# bieres
if ( ' biere ' in liste_mod ) :
bieres_read ( )
biere_handler = MCommandHandler ( " biere " , biere )
bot . add_handler ( biere_handler )
@ -1421,6 +1521,7 @@ def main():
bot . add_handler ( boisson_handler )
# Accueil
if ( ' welcome ' in liste_mod ) :
welcome_read ( )
welcome_handler = MCommandHandler ( " accueil " , accueil )
bot . add_handler ( welcome_handler )
@ -1431,6 +1532,11 @@ def main():
modos_handler = MCommandHandler ( " modo " , modo )
bot . add_handler ( modos_handler )
# Definition des modules
modules_read ( )
modules_handler = MCommandHandler ( " module " , module )
bot . add_handler ( modules_handler )
# Invitations
bot . client . add_invite_listener ( invitations )