Browse Source

moderateurs

master
Nemesis 6 years ago
parent
commit
db8785b0ab
  1. 136
      asmodee.py

136
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,14 +1375,15 @@ 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…
Cancel
Save