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"]
|
||||
cartes=list(cartes_base)
|
||||
bot = None
|
||||
clock = {}
|
||||
stats = {}
|
||||
quotes = {}
|
||||
bieres = {}
|
||||
welcome = {}
|
||||
membres = {}
|
||||
clock = {} # horloges pbta
|
||||
stats = {} # Statistiques sur les messages
|
||||
quotes = {} # Citations
|
||||
bieres = {} # Boissons a offrir
|
||||
welcome = {} # Messages d'accueil des salons
|
||||
admins = [] # Admins du bot
|
||||
modos = {} # Moderateurs des salons
|
||||
|
||||
# Chargement des données persistantes
|
||||
def horloge_read():
|
||||
global clock
|
||||
try:
|
||||
|
@ -82,17 +83,16 @@ def welcome_read():
|
|||
except:
|
||||
welcome = {}
|
||||
|
||||
def membres_read():
|
||||
global membres
|
||||
def modos_read():
|
||||
global modos
|
||||
try:
|
||||
with open("membres", "rb") as fichier:
|
||||
with open("moderateurs", "rb") as fichier:
|
||||
loader = pickle.Unpickler(fichier)
|
||||
membres = loader.load()
|
||||
modos = loader.load()
|
||||
except:
|
||||
membres = {}
|
||||
modos = {}
|
||||
|
||||
|
||||
def signal_handler(signal, frame):
|
||||
def signal_handler(signal, frame): # Sauvegarder les données persistantes avant sortie
|
||||
with open("horloge", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(clock)
|
||||
|
@ -108,9 +108,9 @@ def signal_handler(signal, frame):
|
|||
with open("welcome", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(welcome)
|
||||
with open("membres", "wb") as fichier:
|
||||
with open("moderateurs", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(membres)
|
||||
saver.dump(modos)
|
||||
sys.exit(0)
|
||||
|
||||
class Userstats: #Pour garder des stats sur les users
|
||||
|
@ -209,7 +209,7 @@ class Parser: #Pour parser la ligne de commande
|
|||
return True
|
||||
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
|
||||
nick = ""
|
||||
try:
|
||||
|
@ -261,7 +261,7 @@ def verifPMRoom(room, event):
|
|||
return salon
|
||||
|
||||
|
||||
def getNick(room, event):
|
||||
def getNick(room, event): # Obtenir le DisplayName à partir du mxid
|
||||
members = room.get_joined_members()
|
||||
nick = ""
|
||||
try:
|
||||
|
@ -275,10 +275,10 @@ def getNick(room, event):
|
|||
nick = event['sender']
|
||||
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))])
|
||||
|
||||
def carte(room, event):
|
||||
def carte(room, event): # Tirer une carte du paquet en la retirant ensuite
|
||||
global cartes
|
||||
args = event['content']['body'].split()
|
||||
if (len(args) > 1):
|
||||
|
@ -292,11 +292,11 @@ def carte(room, event):
|
|||
room.send_text(cartes[i])
|
||||
cartes.pop(i)
|
||||
|
||||
def help(room, event):
|
||||
def help(room, event): # Aide en message privé
|
||||
help_center(room,event,"help",True)
|
||||
def aide(room, event):
|
||||
def aide(room, event): # Aide dans le salon
|
||||
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.pop(0)
|
||||
salon = room
|
||||
|
@ -340,7 +340,7 @@ def help_center(room,event,name,private):
|
|||
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")
|
||||
|
||||
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?
|
||||
roll = 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))
|
||||
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
|
||||
total = 0
|
||||
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))
|
||||
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
|
||||
text = event['content']['body']
|
||||
nick = getNick(room,event)
|
||||
|
@ -468,7 +468,7 @@ def entryPoint(room, event):
|
|||
room.send_text("Je n'ai pas compris " + text)
|
||||
|
||||
|
||||
def rollOptionPoint():
|
||||
def rollOptionPoint(): # Parse des options
|
||||
global parser
|
||||
while (True):
|
||||
if (parser.eat("[Ee]",1)):
|
||||
|
@ -558,7 +558,7 @@ def rollOptionPoint():
|
|||
else:
|
||||
break
|
||||
|
||||
def dupli(orig):
|
||||
def dupli(orig): # Duplication d'un parser
|
||||
salon = orig.room
|
||||
orig.room = None
|
||||
nouv = copy.deepcopy(orig)
|
||||
|
@ -567,7 +567,7 @@ def dupli(orig):
|
|||
nouv.room = salon
|
||||
return nouv
|
||||
|
||||
def rollXPoint():
|
||||
def rollXPoint(): # Parser le nombre de lancers de dés identiques
|
||||
global parser
|
||||
rollPlusMoinsPoint()
|
||||
if (parser.eat("[xX]",1)):
|
||||
|
@ -586,7 +586,7 @@ def rollXPoint():
|
|||
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
|
||||
parser.arg["roll_sig"] = True
|
||||
parser.arg["error"] = None
|
||||
|
@ -652,7 +652,7 @@ def rollPlusMoinsPoint():
|
|||
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
|
||||
if (parser.eat("[-+]", 1)):
|
||||
if (parser.mtch == "-"):
|
||||
|
@ -661,7 +661,7 @@ def rollEntityPoint():
|
|||
rollNbPoint()
|
||||
|
||||
|
||||
def rollNbPoint():
|
||||
def rollNbPoint(): # Parser le nombre de dés
|
||||
global parser
|
||||
parser.arg["roll_nb"] = None
|
||||
if (parser.eat(r"\d+",1)):
|
||||
|
@ -670,7 +670,7 @@ def rollNbPoint():
|
|||
rollDPoint()
|
||||
|
||||
|
||||
def rollDPoint():
|
||||
def rollDPoint(): # Parser le mot clé identifiant un dé
|
||||
global parser
|
||||
if (parser.eat("[dD]",1)):
|
||||
if (not parser.arg.get("roll_nb",False)):
|
||||
|
@ -683,7 +683,7 @@ def rollDPoint():
|
|||
parser.arg["error"] = True
|
||||
|
||||
|
||||
def rollTypePoint():
|
||||
def rollTypePoint(): # Parser le nombre de faces du dé
|
||||
global parser
|
||||
if (parser.space()):
|
||||
parser.arg["roll_typ"] = 6
|
||||
|
@ -698,7 +698,7 @@ def rollTypePoint():
|
|||
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))
|
||||
room.send_text(phrases[i])
|
||||
|
||||
|
@ -744,14 +744,7 @@ def hi_callback(room, event):
|
|||
phrases.append("Oh non, et voilà de nouveau " + nick + "...")
|
||||
reponses(room, phrases)
|
||||
|
||||
def echo_callback(room, event):
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
||||
# Echo what they said back
|
||||
room.send_text(' '.join(args))
|
||||
|
||||
def liste(room, event):
|
||||
def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
|
||||
res = []
|
||||
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.")
|
||||
reponses(room, phrases)
|
||||
|
||||
def horloge(room, event):
|
||||
def horloge(room, event): # Gestion des horloges PBTA
|
||||
global clock
|
||||
nick = getNick(room,event)
|
||||
|
||||
|
@ -879,7 +872,7 @@ def horloge(room, event):
|
|||
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 statistiques(room,event):
|
||||
def statistiques(room,event): # Enregistrement des statistiques
|
||||
global stats
|
||||
nick = getNick(room,event)
|
||||
user = event['sender']
|
||||
|
@ -930,7 +923,7 @@ def statistiques(room,event):
|
|||
stats[room.room_id,user] = usrstats1
|
||||
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
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -948,7 +941,7 @@ def last(room,event):
|
|||
# if (cle[0] == room.room_id):
|
||||
# room.send_text(cle[1] + "\n")
|
||||
|
||||
def actif(room,event):
|
||||
def actif(room,event): # Stats d'activité d'une personne
|
||||
global stats
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -986,7 +979,7 @@ def nb_kap(room,event):
|
|||
except:
|
||||
room.send_text(pers + " : Personne non reconnue\n")
|
||||
|
||||
def quote(room,event):
|
||||
def quote(room,event): # Gestion des citations
|
||||
global quotes
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -1082,7 +1075,7 @@ def quote(room,event):
|
|||
else:
|
||||
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
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -1197,7 +1190,7 @@ def biere(room,event):
|
|||
else:
|
||||
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 = ""
|
||||
elu = ""
|
||||
|
||||
|
@ -1222,7 +1215,7 @@ def boissons(room,event):
|
|||
|
||||
biere(room,event)
|
||||
|
||||
def accueil(room,event):
|
||||
def accueil(room,event): # Mettre un message d'accueil
|
||||
if (event['sender'] in admins):
|
||||
global welcome
|
||||
args = event['content']['body'].split()
|
||||
|
@ -1235,7 +1228,7 @@ def accueil(room,event):
|
|||
else:
|
||||
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 = bot.client.rooms[room_id]
|
||||
membership = event['content']['membership']
|
||||
|
@ -1249,7 +1242,37 @@ def bienvenue(event):
|
|||
if (membership == "join"):
|
||||
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
|
||||
try:
|
||||
global bot
|
||||
|
@ -1352,13 +1375,14 @@ def main():
|
|||
|
||||
# Accueil
|
||||
welcome_read()
|
||||
membres_read()
|
||||
welcome_handler = MCommandHandler("accueil", accueil)
|
||||
bot.add_handler(welcome_handler)
|
||||
bot.client.add_listener(bienvenue, event_type="m.room.member")
|
||||
|
||||
#test_handler = MCommandHandler("test", verifPMRoom)
|
||||
#bot.add_handler(test_handler)
|
||||
# Definition des moderateurs
|
||||
modos_read()
|
||||
modos_handler = MCommandHandler("modo", modo)
|
||||
bot.add_handler(modos_handler)
|
||||
|
||||
# Invitations
|
||||
bot.client.add_invite_listener(invitations)
|
||||
|
|
Loading…
Reference in a new issue