generated from Nemesis/Exemple
moderateurs
This commit is contained in:
parent
383e9e7765
commit
db8785b0ab
1 changed files with 80 additions and 56 deletions
134
asmodee.py
134
asmodee.py
|
@ -29,14 +29,15 @@ 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"]
|
"10 de trefle", "Valet de trefle", "Dame de trefle", "Roi de trefle", "Joker rouge", "Joker noir"]
|
||||||
cartes=list(cartes_base)
|
cartes=list(cartes_base)
|
||||||
bot = None
|
bot = None
|
||||||
clock = {}
|
clock = {} # horloges pbta
|
||||||
stats = {}
|
stats = {} # Statistiques sur les messages
|
||||||
quotes = {}
|
quotes = {} # Citations
|
||||||
bieres = {}
|
bieres = {} # Boissons a offrir
|
||||||
welcome = {}
|
welcome = {} # Messages d'accueil des salons
|
||||||
membres = {}
|
|
||||||
admins = [] # Admins du bot
|
admins = [] # Admins du bot
|
||||||
|
modos = {} # Moderateurs des salons
|
||||||
|
|
||||||
|
# Chargement des données persistantes
|
||||||
def horloge_read():
|
def horloge_read():
|
||||||
global clock
|
global clock
|
||||||
try:
|
try:
|
||||||
|
@ -82,17 +83,16 @@ def welcome_read():
|
||||||
except:
|
except:
|
||||||
welcome = {}
|
welcome = {}
|
||||||
|
|
||||||
def membres_read():
|
def modos_read():
|
||||||
global membres
|
global modos
|
||||||
try:
|
try:
|
||||||
with open("membres", "rb") as fichier:
|
with open("moderateurs", "rb") as fichier:
|
||||||
loader = pickle.Unpickler(fichier)
|
loader = pickle.Unpickler(fichier)
|
||||||
membres = loader.load()
|
modos = loader.load()
|
||||||
except:
|
except:
|
||||||
membres = {}
|
modos = {}
|
||||||
|
|
||||||
|
def signal_handler(signal, frame): # Sauvegarder les données persistantes avant sortie
|
||||||
def signal_handler(signal, frame):
|
|
||||||
with open("horloge", "wb") as fichier:
|
with open("horloge", "wb") as fichier:
|
||||||
saver = pickle.Pickler(fichier)
|
saver = pickle.Pickler(fichier)
|
||||||
saver.dump(clock)
|
saver.dump(clock)
|
||||||
|
@ -108,9 +108,9 @@ def signal_handler(signal, frame):
|
||||||
with open("welcome", "wb") as fichier:
|
with open("welcome", "wb") as fichier:
|
||||||
saver = pickle.Pickler(fichier)
|
saver = pickle.Pickler(fichier)
|
||||||
saver.dump(welcome)
|
saver.dump(welcome)
|
||||||
with open("membres", "wb") as fichier:
|
with open("moderateurs", "wb") as fichier:
|
||||||
saver = pickle.Pickler(fichier)
|
saver = pickle.Pickler(fichier)
|
||||||
saver.dump(membres)
|
saver.dump(modos)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
class Userstats: #Pour garder des stats sur les users
|
class Userstats: #Pour garder des stats sur les users
|
||||||
|
@ -209,7 +209,7 @@ class Parser: #Pour parser la ligne de commande
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def verifPMRoom(room, event):
|
def verifPMRoom(room, event): # Pour obtenir ou créer un salon pour les messages privés avec l'utilisateur
|
||||||
global bot
|
global bot
|
||||||
nick = ""
|
nick = ""
|
||||||
try:
|
try:
|
||||||
|
@ -261,7 +261,7 @@ def verifPMRoom(room, event):
|
||||||
return salon
|
return salon
|
||||||
|
|
||||||
|
|
||||||
def getNick(room, event):
|
def getNick(room, event): # Obtenir le DisplayName à partir du mxid
|
||||||
members = room.get_joined_members()
|
members = room.get_joined_members()
|
||||||
nick = ""
|
nick = ""
|
||||||
try:
|
try:
|
||||||
|
@ -275,10 +275,10 @@ def getNick(room, event):
|
||||||
nick = event['sender']
|
nick = event['sender']
|
||||||
return(nick)
|
return(nick)
|
||||||
|
|
||||||
def card(room, event):
|
def card(room, event): # Tirer une carte du paquet sans la retirer
|
||||||
room.send_text(cartes_base[random.randrange(0,len(cartes_base))])
|
room.send_text(cartes_base[random.randrange(0,len(cartes_base))])
|
||||||
|
|
||||||
def carte(room, event):
|
def carte(room, event): # Tirer une carte du paquet en la retirant ensuite
|
||||||
global cartes
|
global cartes
|
||||||
args = event['content']['body'].split()
|
args = event['content']['body'].split()
|
||||||
if (len(args) > 1):
|
if (len(args) > 1):
|
||||||
|
@ -292,11 +292,11 @@ def carte(room, event):
|
||||||
room.send_text(cartes[i])
|
room.send_text(cartes[i])
|
||||||
cartes.pop(i)
|
cartes.pop(i)
|
||||||
|
|
||||||
def help(room, event):
|
def help(room, event): # Aide en message privé
|
||||||
help_center(room,event,"help",True)
|
help_center(room,event,"help",True)
|
||||||
def aide(room, event):
|
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):
|
def help_center(room,event,name,private): # Aide sur les commandes disponibles
|
||||||
args = event['content']['body'].split()
|
args = event['content']['body'].split()
|
||||||
args.pop(0)
|
args.pop(0)
|
||||||
salon = room
|
salon = room
|
||||||
|
@ -340,7 +340,7 @@ def help_center(room,event,name,private):
|
||||||
else:
|
else:
|
||||||
salon.send_text("Commandes disponibles:\n- !card\n- !carte\n- !liste <options/de/la/liste> [Nombre d'elements souhaites]\n- !horloge : gestion des horloges PBTA\n- !last : Date de dernier post\n- !actif : Nombre de message et taille moyenne de ceux ci\n- !quote : citations du salon\n- !biere : breuvages du salon\n- :roll <options> <des>\n- :sw <options> <des>\n- :dom <options> <des>\n- :wod <options> <des>\n- :owod <options> <des>\n- :ars <options> <des>\n- :des <options> <des>\n- :star <options> <des>\n\n- Pour plus de details, tapez !" + name + " <commande>\n\nRetrouvez Asmodee sur https://git.ombreport.info/nemesis/asmodee_matrix")
|
salon.send_text("Commandes disponibles:\n- !card\n- !carte\n- !liste <options/de/la/liste> [Nombre d'elements souhaites]\n- !horloge : gestion des horloges PBTA\n- !last : Date de dernier post\n- !actif : Nombre de message et taille moyenne de ceux ci\n- !quote : citations du salon\n- !biere : breuvages du salon\n- :roll <options> <des>\n- :sw <options> <des>\n- :dom <options> <des>\n- :wod <options> <des>\n- :owod <options> <des>\n- :ars <options> <des>\n- :des <options> <des>\n- :star <options> <des>\n\n- Pour plus de details, tapez !" + name + " <commande>\n\nRetrouvez Asmodee sur https://git.ombreport.info/nemesis/asmodee_matrix")
|
||||||
|
|
||||||
def roll(result,type,explosif,nb,f,noadd,ars,relance,mitige):
|
def roll(result,type,explosif,nb,f,noadd,ars,relance,mitige): # Lancement d'un dé
|
||||||
# verif type et contenu params?
|
# verif type et contenu params?
|
||||||
roll = 0
|
roll = 0
|
||||||
new = 0
|
new = 0
|
||||||
|
@ -374,7 +374,7 @@ def roll(result,type,explosif,nb,f,noadd,ars,relance,mitige):
|
||||||
#print("fin roll " + str(result) + " " + str(roll) + " " + str(new))
|
#print("fin roll " + str(result) + " " + str(roll) + " " + str(new))
|
||||||
return (result,roll,new)
|
return (result,roll,new)
|
||||||
|
|
||||||
def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z):
|
def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z): # Lancement d'un groupe de dés
|
||||||
y = 0
|
y = 0
|
||||||
total = 0
|
total = 0
|
||||||
allresult = []
|
allresult = []
|
||||||
|
@ -429,7 +429,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z):
|
||||||
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)
|
||||||
|
|
||||||
def entryPoint(room, event):
|
def entryPoint(room, event): # Analyse des commandes ":", point d'entrée pour les jets de dés
|
||||||
global parser
|
global parser
|
||||||
text = event['content']['body']
|
text = event['content']['body']
|
||||||
nick = getNick(room,event)
|
nick = getNick(room,event)
|
||||||
|
@ -468,7 +468,7 @@ def entryPoint(room, event):
|
||||||
room.send_text("Je n'ai pas compris " + text)
|
room.send_text("Je n'ai pas compris " + text)
|
||||||
|
|
||||||
|
|
||||||
def rollOptionPoint():
|
def rollOptionPoint(): # Parse des options
|
||||||
global parser
|
global parser
|
||||||
while (True):
|
while (True):
|
||||||
if (parser.eat("[Ee]",1)):
|
if (parser.eat("[Ee]",1)):
|
||||||
|
@ -558,7 +558,7 @@ def rollOptionPoint():
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
def dupli(orig):
|
def dupli(orig): # Duplication d'un parser
|
||||||
salon = orig.room
|
salon = orig.room
|
||||||
orig.room = None
|
orig.room = None
|
||||||
nouv = copy.deepcopy(orig)
|
nouv = copy.deepcopy(orig)
|
||||||
|
@ -567,7 +567,7 @@ def dupli(orig):
|
||||||
nouv.room = salon
|
nouv.room = salon
|
||||||
return nouv
|
return nouv
|
||||||
|
|
||||||
def rollXPoint():
|
def rollXPoint(): # Parser le nombre de lancers de dés identiques
|
||||||
global parser
|
global parser
|
||||||
rollPlusMoinsPoint()
|
rollPlusMoinsPoint()
|
||||||
if (parser.eat("[xX]",1)):
|
if (parser.eat("[xX]",1)):
|
||||||
|
@ -586,7 +586,7 @@ def rollXPoint():
|
||||||
parser.arg["error"] = True
|
parser.arg["error"] = True
|
||||||
|
|
||||||
|
|
||||||
def rollPlusMoinsPoint():
|
def rollPlusMoinsPoint(): # Gérer les bloc du jet séparés par les + et -, afficher le résultat
|
||||||
global parser
|
global parser
|
||||||
parser.arg["roll_sig"] = True
|
parser.arg["roll_sig"] = True
|
||||||
parser.arg["error"] = None
|
parser.arg["error"] = None
|
||||||
|
@ -652,7 +652,7 @@ def rollPlusMoinsPoint():
|
||||||
parser.room.send_text("Rien compris. Essayez '!help' pour obtenir de l'aide.")
|
parser.room.send_text("Rien compris. Essayez '!help' pour obtenir de l'aide.")
|
||||||
|
|
||||||
|
|
||||||
def rollEntityPoint():
|
def rollEntityPoint(): # Parser les séparateurs de bloc + et -
|
||||||
global parser
|
global parser
|
||||||
if (parser.eat("[-+]", 1)):
|
if (parser.eat("[-+]", 1)):
|
||||||
if (parser.mtch == "-"):
|
if (parser.mtch == "-"):
|
||||||
|
@ -661,7 +661,7 @@ def rollEntityPoint():
|
||||||
rollNbPoint()
|
rollNbPoint()
|
||||||
|
|
||||||
|
|
||||||
def rollNbPoint():
|
def rollNbPoint(): # Parser le nombre de dés
|
||||||
global parser
|
global parser
|
||||||
parser.arg["roll_nb"] = None
|
parser.arg["roll_nb"] = None
|
||||||
if (parser.eat(r"\d+",1)):
|
if (parser.eat(r"\d+",1)):
|
||||||
|
@ -670,7 +670,7 @@ def rollNbPoint():
|
||||||
rollDPoint()
|
rollDPoint()
|
||||||
|
|
||||||
|
|
||||||
def rollDPoint():
|
def rollDPoint(): # Parser le mot clé identifiant un dé
|
||||||
global parser
|
global parser
|
||||||
if (parser.eat("[dD]",1)):
|
if (parser.eat("[dD]",1)):
|
||||||
if (not parser.arg.get("roll_nb",False)):
|
if (not parser.arg.get("roll_nb",False)):
|
||||||
|
@ -683,7 +683,7 @@ def rollDPoint():
|
||||||
parser.arg["error"] = True
|
parser.arg["error"] = True
|
||||||
|
|
||||||
|
|
||||||
def rollTypePoint():
|
def rollTypePoint(): # Parser le nombre de faces du dé
|
||||||
global parser
|
global parser
|
||||||
if (parser.space()):
|
if (parser.space()):
|
||||||
parser.arg["roll_typ"] = 6
|
parser.arg["roll_typ"] = 6
|
||||||
|
@ -698,7 +698,7 @@ def rollTypePoint():
|
||||||
parser.arg["error"] = True
|
parser.arg["error"] = True
|
||||||
|
|
||||||
|
|
||||||
def reponses(room, phrases):
|
def reponses(room, phrases): # Afficher une réponse aléatoire dans la liste
|
||||||
i = random.randrange(0,len(phrases))
|
i = random.randrange(0,len(phrases))
|
||||||
room.send_text(phrases[i])
|
room.send_text(phrases[i])
|
||||||
|
|
||||||
|
@ -744,14 +744,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)
|
||||||
|
|
||||||
def echo_callback(room, event):
|
def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
|
||||||
args = event['content']['body'].split()
|
|
||||||
args.pop(0)
|
|
||||||
|
|
||||||
# Echo what they said back
|
|
||||||
room.send_text(' '.join(args))
|
|
||||||
|
|
||||||
def liste(room, event):
|
|
||||||
res = []
|
res = []
|
||||||
nick = getNick(room,event)
|
nick = getNick(room,event)
|
||||||
|
|
||||||
|
@ -842,7 +835,7 @@ def cristal(room, event):
|
||||||
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)
|
||||||
|
|
||||||
def horloge(room, event):
|
def horloge(room, event): # Gestion des horloges PBTA
|
||||||
global clock
|
global clock
|
||||||
nick = getNick(room,event)
|
nick = getNick(room,event)
|
||||||
|
|
||||||
|
@ -879,7 +872,7 @@ def horloge(room, event):
|
||||||
else:
|
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.")
|
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):
|
def statistiques(room,event): # Enregistrement des statistiques
|
||||||
global stats
|
global stats
|
||||||
nick = getNick(room,event)
|
nick = getNick(room,event)
|
||||||
user = event['sender']
|
user = event['sender']
|
||||||
|
@ -930,7 +923,7 @@ def statistiques(room,event):
|
||||||
stats[room.room_id,user] = usrstats1
|
stats[room.room_id,user] = usrstats1
|
||||||
stats[room.room_id,nick] = usrstats2
|
stats[room.room_id,nick] = usrstats2
|
||||||
|
|
||||||
def last(room,event):
|
def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un message
|
||||||
global stats
|
global stats
|
||||||
args = event['content']['body'].split()
|
args = event['content']['body'].split()
|
||||||
args.pop(0)
|
args.pop(0)
|
||||||
|
@ -948,7 +941,7 @@ def last(room,event):
|
||||||
# if (cle[0] == room.room_id):
|
# if (cle[0] == room.room_id):
|
||||||
# room.send_text(cle[1] + "\n")
|
# room.send_text(cle[1] + "\n")
|
||||||
|
|
||||||
def actif(room,event):
|
def actif(room,event): # Stats d'activité d'une personne
|
||||||
global stats
|
global stats
|
||||||
args = event['content']['body'].split()
|
args = event['content']['body'].split()
|
||||||
args.pop(0)
|
args.pop(0)
|
||||||
|
@ -986,7 +979,7 @@ def nb_kap(room,event):
|
||||||
except:
|
except:
|
||||||
room.send_text(pers + " : Personne non reconnue\n")
|
room.send_text(pers + " : Personne non reconnue\n")
|
||||||
|
|
||||||
def quote(room,event):
|
def quote(room,event): # Gestion des citations
|
||||||
global quotes
|
global quotes
|
||||||
args = event['content']['body'].split()
|
args = event['content']['body'].split()
|
||||||
args.pop(0)
|
args.pop(0)
|
||||||
|
@ -1082,7 +1075,7 @@ def quote(room,event):
|
||||||
else:
|
else:
|
||||||
room.send_text("Je n'ai pas de citations pour ce salon")
|
room.send_text("Je n'ai pas de citations pour ce salon")
|
||||||
|
|
||||||
def biere(room,event):
|
def biere(room,event): # Gestion des boissons
|
||||||
global bieres
|
global bieres
|
||||||
args = event['content']['body'].split()
|
args = event['content']['body'].split()
|
||||||
args.pop(0)
|
args.pop(0)
|
||||||
|
@ -1197,7 +1190,7 @@ def biere(room,event):
|
||||||
else:
|
else:
|
||||||
room.send_text("Je n'ai pas de breuvages pour ce salon")
|
room.send_text("Je n'ai pas de breuvages pour ce salon")
|
||||||
|
|
||||||
def boissons(room,event):
|
def boissons(room,event): # Gestion des alias de boissons
|
||||||
boisson = ""
|
boisson = ""
|
||||||
elu = ""
|
elu = ""
|
||||||
|
|
||||||
|
@ -1222,7 +1215,7 @@ def boissons(room,event):
|
||||||
|
|
||||||
biere(room,event)
|
biere(room,event)
|
||||||
|
|
||||||
def accueil(room,event):
|
def accueil(room,event): # Mettre un message d'accueil
|
||||||
if (event['sender'] in admins):
|
if (event['sender'] in admins):
|
||||||
global welcome
|
global welcome
|
||||||
args = event['content']['body'].split()
|
args = event['content']['body'].split()
|
||||||
|
@ -1235,7 +1228,7 @@ def accueil(room,event):
|
||||||
else:
|
else:
|
||||||
salon.send_text("Vous n'êtes pas autorisés à modifier le message d'accueil.")
|
salon.send_text("Vous n'êtes pas autorisés à modifier le message d'accueil.")
|
||||||
|
|
||||||
def bienvenue(event):
|
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]
|
||||||
membership = event['content']['membership']
|
membership = event['content']['membership']
|
||||||
|
@ -1249,7 +1242,37 @@ def bienvenue(event):
|
||||||
if (membership == "join"):
|
if (membership == "join"):
|
||||||
room.send_text("Bienvenue sur " + alias + ", " + nick + ". " + msg)
|
room.send_text("Bienvenue sur " + alias + ", " + nick + ". " + msg)
|
||||||
|
|
||||||
def invitations(room_id, state):
|
def modo(room,event): # Definition d'un moderateur
|
||||||
|
if (event['sender'] in admins):
|
||||||
|
global modos
|
||||||
|
lmod = modos[room.room_id]
|
||||||
|
args = event['content']['body'].split()
|
||||||
|
args.pop(0)
|
||||||
|
if (len(args) > 1 and args[0] == "add"):
|
||||||
|
args.pop(0)
|
||||||
|
candidat = " ".join(args)
|
||||||
|
if (not candidat in lmod):
|
||||||
|
lmod.append(candidat)
|
||||||
|
modos[room.room_id] = lmod
|
||||||
|
room.send_text(candidat + " devient moderateur.")
|
||||||
|
else:
|
||||||
|
room.send_text(candidat + " est déjà moderateur.")
|
||||||
|
elif (len(args) > 1 and args[0] == "del"):
|
||||||
|
args.pop(0)
|
||||||
|
candidat = " ".join(args)
|
||||||
|
if (candidat in lmod):
|
||||||
|
place = index(candidat,lmod)
|
||||||
|
del lmod[place]
|
||||||
|
modos[room.room_id] = lmod
|
||||||
|
room.send_text(candidat + " n'est plus moderateur.")
|
||||||
|
else:
|
||||||
|
room.send_text(candidat + " n'est pas moderateur.")
|
||||||
|
else:
|
||||||
|
room.send_text(lmod)
|
||||||
|
else:
|
||||||
|
salon.send_text("Vous n'êtes pas autorisés à définir les modérateurs.")
|
||||||
|
|
||||||
|
def invitations(room_id, state): # Reponse aux invitations
|
||||||
global bot
|
global bot
|
||||||
try:
|
try:
|
||||||
global bot
|
global bot
|
||||||
|
@ -1352,13 +1375,14 @@ def main():
|
||||||
|
|
||||||
# Accueil
|
# Accueil
|
||||||
welcome_read()
|
welcome_read()
|
||||||
membres_read()
|
|
||||||
welcome_handler = MCommandHandler("accueil", accueil)
|
welcome_handler = MCommandHandler("accueil", accueil)
|
||||||
bot.add_handler(welcome_handler)
|
bot.add_handler(welcome_handler)
|
||||||
bot.client.add_listener(bienvenue, event_type="m.room.member")
|
bot.client.add_listener(bienvenue, event_type="m.room.member")
|
||||||
|
|
||||||
#test_handler = MCommandHandler("test", verifPMRoom)
|
# Definition des moderateurs
|
||||||
#bot.add_handler(test_handler)
|
modos_read()
|
||||||
|
modos_handler = MCommandHandler("modo", modo)
|
||||||
|
bot.add_handler(modos_handler)
|
||||||
|
|
||||||
# Invitations
|
# Invitations
|
||||||
bot.client.add_invite_listener(invitations)
|
bot.client.add_invite_listener(invitations)
|
||||||
|
|
Loading…
Reference in a new issue