Browse Source

ne pas prendre en compte ses propres messages

master
Nemesis 6 years ago
parent
commit
0ad9c5665e
  1. 96
      asmodee.py

96
asmodee.py

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

Loading…
Cancel
Save