@ -42,6 +42,7 @@ admins = [] # Admins du bot
modos = { } # Moderateurs des salons
modules = { } # Modules activés par salon
liste_mod = [ ] # Modules disponibles
USERNAME = " "
# Chargement des données persistantes
def horloge_read ( ) :
@ -52,7 +53,7 @@ def horloge_read():
clock = loader . load ( )
except :
clock = { }
def stats_read ( ) :
global stats
try :
@ -61,7 +62,7 @@ def stats_read():
stats = loader . load ( )
except :
stats = { }
def quotes_read ( ) :
global quotes
try :
@ -80,7 +81,7 @@ def citations_read():
except :
citations = { }
def bieres_read ( ) :
global bieres
try :
@ -152,6 +153,15 @@ def signal_handler(signal, frame): # Sauvegarder les données persistantes avant
save_obj ( )
sys . exit ( 0 )
def not_myself ( f ) :
def handler ( room , event ) :
if event [ ' sender ' ] == USERNAME :
return
f ( room , event )
return handler
class Userstats : #Pour garder des stats sur les users
def __init__ ( self , room , user , nick ) :
self . room = room
@ -313,7 +323,6 @@ def verifPMRoom(room, event): # Pour obtenir ou créer un salon pour les message
print ( " il etait deja dedans, c ' est sale " )
return salon
def getNick ( room , event ) : # Obtenir le DisplayName à partir du mxid
members = room . get_joined_members ( )
nick = " "
@ -330,7 +339,8 @@ def getNick(room, event): # Obtenir le DisplayName à partir du mxid
except :
nick = event [ ' sender ' ]
return ( nick )
@not_myself
def card ( room , event ) : # Tirer une carte du paquet sans la retirer
global modules
try :
@ -341,6 +351,7 @@ def card(room, event): # Tirer une carte du paquet sans la retirer
reponse = cartes_base [ random . randrange ( 0 , len ( cartes_base ) ) ]
msg ( room , reponse )
@not_myself
def carte ( room , event ) : # Tirer une carte du paquet en la retirant ensuite
global modules
try :
@ -361,8 +372,10 @@ def carte(room, event): # Tirer une carte du paquet en la retirant ensuite
msg ( room , cartes [ i ] )
cartes . pop ( i )
@not_myself
def help ( room , event ) : # Aide en message privé
help_center ( room , event , " help " , True )
@not_myself
def aide ( room , event ) : # Aide dans le salon
help_center ( room , event , " aide " , False )
def help_center ( room , event , name , private ) : # Aide sur les commandes disponibles
@ -530,6 +543,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z): # La
#print("fin rolls : " + str(result) + "|" + str(total) + "|" + str(jet))
return ( result , total , jet )
@not_myself
def entryPoint ( room , event ) : # Analyse des commandes ":", point d'entrée pour les jets de dés
global modules
try :
@ -811,7 +825,8 @@ def rollTypePoint(): # Parser le nombre de faces du dé
def reponses ( room , phrases , content = False ) : # Afficher une réponse aléatoire dans la liste
i = random . randrange ( 0 , len ( phrases ) )
msg ( room , phrases [ i ] , content )
@not_myself
def jdr ( room , event ) :
global modules
try :
@ -826,6 +841,7 @@ def jdr(room, event):
phrases . append ( " Bon, c ' est quand la prochaine partie " + nick + " ? " )
reponses ( room , phrases )
@not_myself
def gens ( room , event ) :
global modules
try :
@ -854,6 +870,7 @@ def va(room, event):
phrases . append ( " Attention a " + nick + " , la suite est ' not safe for depression ' " )
reponses ( room , phrases )
@not_myself
def hi_callback ( room , event ) :
global modules
try :
@ -870,6 +887,7 @@ def hi_callback(room, event):
phrases . append ( " Oh non, et voilà de nouveau " + nick + " ... " )
reponses ( room , phrases )
@not_myself
def liste ( room , event ) : # Afficher un élement aléatoire d'une liste fournie
global modules
try :
@ -879,7 +897,7 @@ def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
if ( modules [ room . room_id , ' liste ' ] ) :
res = [ ]
nick = getNick ( room , event )
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
try :
@ -897,6 +915,7 @@ def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
else :
msg ( room , " Utilisation : !liste <options/de/la/liste> [nombre d elements] " )
@not_myself
def cristal ( room , event ) : # Affiche une réponse à une question posée
global modules
try :
@ -905,7 +924,7 @@ def cristal(room, event): # Affiche une réponse à une question posée
modules [ room . room_id , ' cristal ' ] = False
if ( modules [ room . room_id , ' cristal ' ] ) :
nick = getNick ( room , event )
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
if ( len ( args ) < 2 or args [ len ( args ) - 1 ] [ - 1 ] != ' ? ' ) :
@ -974,6 +993,7 @@ def cristal(room, event): # Affiche une réponse à une question posée
phrases . append ( " Tu portes quelque chose de sombre, je refuse de me laisser souiller. " )
reponses ( room , phrases )
@not_myself
def horloge ( room , event ) : # Gestion des horloges PBTA
global modules
try :
@ -983,7 +1003,7 @@ def horloge(room, event): # Gestion des horloges PBTA
if ( modules [ room . room_id , ' horloge ' ] ) :
global clock
nick = getNick ( room , event )
args = event [ ' content ' ] [ ' body ' ] . split ( )
args . pop ( 0 )
if ( len ( args ) == 0 ) :
@ -1016,7 +1036,8 @@ def horloge(room, event): # Gestion des horloges PBTA
del clock [ room . room_id , ' ' . join ( args ) ]
else :
msg ( room , " 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. " )
@not_myself
def statistiques ( room , event ) : # Enregistrement des statistiques
global modules
try :
@ -1029,7 +1050,7 @@ def statistiques(room,event): # Enregistrement des statistiques
user = event [ ' sender ' ]
usrstats1 = 0
usrstats2 = 0
if ( ' body ' in event [ ' content ' ] ) :
try :
usrstats1 = stats [ room . room_id , user ]
@ -1039,12 +1060,12 @@ def statistiques(room,event): # Enregistrement des statistiques
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 ( usrstats1 . mess > = usrstats2 . mess ) :
usrstats2 . mess = usrstats1 . mess + 1
@ -1052,7 +1073,7 @@ def statistiques(room,event): # Enregistrement des statistiques
else :
usrstats1 . mess = usrstats2 . mess + 1
usrstats2 . mess = usrstats1 . mess
# recup nb lettres +lettres phrase, lettres phrases sinon
if ( usrstats1 . char > = usrstats2 . char ) :
usrstats2 . char = usrstats1 . char + len ( event [ ' content ' ] [ ' body ' ] )
@ -1060,7 +1081,7 @@ def statistiques(room,event): # Enregistrement des statistiques
else :
usrstats1 . char = usrstats2 . char + len ( event [ ' content ' ] [ ' body ' ] )
usrstats2 . char = usrstats1 . char
# si kapoue, recup nb kapoue +1, 1 sinon
if ( re . match ( " .*KAPOUE|.*[Kk]apoue " , event [ ' content ' ] [ ' body ' ] ) ) :
if ( usrstats1 . kapoue > = usrstats2 . kapoue ) :
@ -1069,11 +1090,12 @@ def statistiques(room,event): # Enregistrement des statistiques
else :
usrstats1 . kapoue = usrstats2 . kapoue + 1
usrstats2 . kapoue = usrstats1 . kapoue
# insertion des objets
stats [ room . room_id , user ] = usrstats1
stats [ room . room_id , nick ] = usrstats2
@not_myself
def last ( room , event ) : # Regarde la dernière fois que quelqu'un a écrit un message
global modules
try :
@ -1097,7 +1119,8 @@ def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un mess
#for cle,valeur in stats.items():
# if (cle[0] == room.room_id):
# msg(room,cle[1] + "\n")
@not_myself
def actif ( room , event ) : # Stats d'activité d'une personne
global modules
try :
@ -1119,7 +1142,8 @@ def actif(room,event): # Stats d'activité d'une personne
msg ( room , usrstats . nick + " a poste " + str ( usrstats . mess ) + " messages avec une moyenne de " + moy + " caracteres par message " )
except :
msg ( room , pers + " : Personne non reconnue \n " )
@not_myself
def nb_kap ( room , event ) :
global modules
try :
@ -1147,7 +1171,8 @@ def nb_kap(room,event):
msg ( room , usrstats . nick + " a crié " + str ( usrstats . kapoue ) + " KAPOUE! Faites le manger par des fourmis! Pauvres bêtes... " )
except :
msg ( room , pers + " : Personne non reconnue \n " )
@not_myself
def quote ( room , event ) : # Gestion des citations
global modules
try :
@ -1163,7 +1188,7 @@ def quote(room,event): # Gestion des citations
famous = quotes [ room . room_id ]
except :
famous = { }
if ( len ( args ) > 3 and args [ 0 ] == " add " ) :
#ajoute une quote
args . pop ( 0 )
@ -1262,6 +1287,7 @@ def quote(room,event): # Gestion des citations
else :
msg ( room , " Je n ' ai pas de citations pour ce salon " )
@not_myself
def addquote ( room , event ) : # enregistrer les citations mode reponses matrix
global modules
try :
@ -1275,12 +1301,14 @@ def addquote(room,event): # enregistrer les citations mode reponses matrix
if len ( json . dumps ( content ) ) > 420 :
# Enlève la commande de la citation
try :
content [ ' body ' ] = content [ ' body ' ] . replace ( " \n addquote " , " " )
content [ ' body ' ] = content [ ' body ' ] . replace ( " \n !addquote " , " " )
content [ ' body ' ] = content [ ' body ' ] . replace ( " \n ! " , " \n " )
except :
print ( " \n \n erreur body " + json . dumps ( content ) )
try :
content [ ' formatted_body ' ] = content [ ' formatted_body ' ] . replace ( " <p>addquote</p> \n " , " " )
content [ ' formatted_body ' ] = content [ ' formatted_body ' ] . replace ( " addquote " , " " )
content [ ' formatted_body ' ] = content [ ' formatted_body ' ] . replace ( " <p>!addquote</p> \n " , " " )
content [ ' formatted_body ' ] = content [ ' formatted_body ' ] . replace ( " !addquote " , " " )
content [ ' formatted_body ' ] = content [ ' formatted_body ' ] . replace ( " <p>! " , " <p> " )
except :
print ( " \n \n erreur formatted_body " + json . dumps ( content ) )
@ -1306,6 +1334,7 @@ def addquote(room,event): # enregistrer les citations mode reponses matrix
msg ( room , " Ajout de la citation de " + auteur + " : " )
bot . client . api . send_message_event ( room . room_id , ' m.room.message ' , content , None , None )
@not_myself
def showquote ( room , event ) : # afficher les citations mode reponse matrix
global modules
try :
@ -1341,8 +1370,8 @@ def showquote(room, event): # afficher les citations mode reponse matrix
reponses ( room , phrases , True )
else :
msg ( room , " Je n ' ai pas de citations pour ce salon " )
@not_myself
def biere ( room , event ) : # Gestion des boissons
global modules
try :
@ -1476,6 +1505,7 @@ def biere(room,event): # Gestion des boissons
else :
msg ( room , " Je n ' ai pas de breuvages pour ce salon " )
@not_myself
def boissons ( room , event ) : # Gestion des alias de boissons
global modules
try :
@ -1485,7 +1515,7 @@ def boissons(room,event): # Gestion des alias de boissons
if ( modules [ room . room_id , ' biere ' ] ) :
boisson = " "
elu = " "
args = event [ ' content ' ] [ ' body ' ] . split ( )
try :
boisson = args [ 0 ] [ 1 : ]
@ -1495,7 +1525,7 @@ def boissons(room,event): # Gestion des alias de boissons
if ( len ( args ) > 0 ) :
elu = " " . join ( args )
if ( len ( elu ) > 0 and len ( boisson ) > 0 ) :
event [ ' content ' ] [ ' body ' ] = " !biere give " + elu + " : " + boisson
elif ( len ( elu ) > 0 ) :
@ -1507,6 +1537,7 @@ def boissons(room,event): # Gestion des alias de boissons
biere ( room , event )
@not_myself
def accueil ( room , event ) : # Mettre un message d'accueil
global modules
try :
@ -1523,10 +1554,10 @@ def accueil(room,event): # Mettre un message d'accueil
if ( len ( args ) > 0 ) :
welcome [ room . room_id ] = reponse
msg ( room , " Le message d ' accueil est désormais : " + reponse )
else :
msg ( salon , " Vous n ' êtes pas autorisés à modifier le message d ' accueil. " )
def bienvenue ( event ) : # Affichage d'un message d'accueil aux nouveaux venus
room_id = event [ ' room_id ' ]
room = bot . client . rooms [ room_id ]
@ -1556,6 +1587,7 @@ def bienvenue(event): # Affichage d'un message d'accueil aux nouveaux venus
if ( membership == " join " and prev_member != " join " ) :
msg ( room , " Bienvenue sur " + alias + " , " + nick + " . " + reponse )
@not_myself
def modo ( room , event ) : # Definition d'un moderateur
global modos
lmod = [ ]
@ -1590,6 +1622,7 @@ def modo(room,event): # Definition d'un moderateur
else :
msg ( salon , " Vous n ' êtes pas autorisés à définir les modérateurs. " )
@not_myself
def module ( room , event ) : # Definition des modules d'un salon
lmod = [ ]
try :
@ -1662,6 +1695,7 @@ def invitations(room_id, state): # Reponse aux invitations
main ( )
def main ( ) :
global USERNAME
config = configparser . ConfigParser ( )
config . read ( ' asmodee.ini ' )
USERNAME = " " # Bot's username
@ -1761,7 +1795,7 @@ def main():
quote_handler = MCommandHandler ( " quote " , quote )
bot . add_handler ( quote_handler )
citations_read ( )
addquote_handler = MEndHandler ( " addquote " , addquote )
addquote_handler = MEndHandler ( " ! addquote" , addquote )
bot . add_handler ( addquote_handler )
showquote_handler = MCommandHandler ( " showquote " , showquote )
bot . add_handler ( showquote_handler )