generated from Nemesis/Exemple
modules par salon et par instance du bot
This commit is contained in:
parent
29fa8021cd
commit
002ff1090a
2 changed files with 710 additions and 602 deletions
|
@ -4,3 +4,5 @@ password = ""
|
|||
server = ""
|
||||
admin = ""
|
||||
|
||||
[MOD]
|
||||
liste = "roll,quote,biere,stats,liste,horloge,carte,card,cristal,welcome,salut,jdr,gens,va"
|
||||
|
|
158
asmodee.py
158
asmodee.py
|
@ -36,6 +36,8 @@ bieres = {} # Boissons a offrir
|
|||
welcome = {} # Messages d'accueil des salons
|
||||
admins = [] # Admins du bot
|
||||
modos = {} # Moderateurs des salons
|
||||
modules = {} # Modules activés par salon
|
||||
liste_mod = [] # Modules disponibles
|
||||
|
||||
# Chargement des données persistantes
|
||||
def horloge_read():
|
||||
|
@ -91,25 +93,43 @@ def modos_read():
|
|||
modos = loader.load()
|
||||
except:
|
||||
modos = {}
|
||||
|
||||
def modules_read():
|
||||
global modules
|
||||
try:
|
||||
with open("modules", "rb") as fichier:
|
||||
loader = pickle.Unpickler(fichier)
|
||||
modules = loader.load()
|
||||
except:
|
||||
modules = {}
|
||||
|
||||
def save_obj():
|
||||
if ('horloge' in liste_mod):
|
||||
with open("horloge", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(clock)
|
||||
if ('stats' in liste_mod):
|
||||
with open("stats", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(stats)
|
||||
if ('quote' in liste_mod):
|
||||
with open("quotes", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(quotes)
|
||||
if ('biere' in liste_mod):
|
||||
with open("bieres", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(bieres)
|
||||
if ('welcome' in liste_mod):
|
||||
with open("welcome", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(welcome)
|
||||
with open("moderateurs", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(modos)
|
||||
with open("modules", "wb") as fichier:
|
||||
saver = pickle.Pickler(fichier)
|
||||
saver.dump(modules)
|
||||
|
||||
def signal_handler(signal, frame): # Sauvegarder les données persistantes avant sortie
|
||||
save_obj()
|
||||
|
@ -285,9 +305,11 @@ def getNick(room, event): # Obtenir le DisplayName à partir du mxid
|
|||
return(nick)
|
||||
|
||||
def card(room, event): # Tirer une carte du paquet sans la retirer
|
||||
if (modules[room.room_id, 'card']):
|
||||
room.send_text(cartes_base[random.randrange(0,len(cartes_base))])
|
||||
|
||||
def carte(room, event): # Tirer une carte du paquet en la retirant ensuite
|
||||
if (modules[room.room_id, 'carte']):
|
||||
global cartes
|
||||
args = event['content']['body'].split()
|
||||
if (len(args) > 1):
|
||||
|
@ -443,6 +465,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z): # La
|
|||
return (result,total,jet)
|
||||
|
||||
def entryPoint(room, event): # Analyse des commandes ":", point d'entrée pour les jets de dés
|
||||
if (modules[room.room_id, 'roll']):
|
||||
global parser
|
||||
text = event['content']['body']
|
||||
nick = getNick(room,event)
|
||||
|
@ -716,6 +739,7 @@ def reponses(room, phrases): # Afficher une réponse aléatoire dans la liste
|
|||
room.send_text(phrases[i])
|
||||
|
||||
def jdr(room, event):
|
||||
if (modules[room.room_id, 'jdr']):
|
||||
nick = getNick(room,event)
|
||||
phrases = []
|
||||
phrases.append("Rock & Role baby!")
|
||||
|
@ -724,6 +748,7 @@ def jdr(room, event):
|
|||
reponses(room, phrases)
|
||||
|
||||
def gens(room, event):
|
||||
if (modules[room.room_id, 'gens']):
|
||||
nick = getNick(room,event)
|
||||
phrases = []
|
||||
phrases.append("L'enfer c'est les autres.")
|
||||
|
@ -732,6 +757,7 @@ def gens(room, event):
|
|||
reponses(room, phrases)
|
||||
|
||||
def va(room, event):
|
||||
if (modules[room.room_id, 'va']):
|
||||
nick = getNick(room,event)
|
||||
phrases = []
|
||||
phrases.append("Moi ca va si jamais quelqu'un se pose la question...")
|
||||
|
@ -739,15 +765,8 @@ def va(room, event):
|
|||
phrases.append("Attention a " + nick + ", la suite est 'not safe for depression'")
|
||||
reponses(room, phrases)
|
||||
|
||||
def maman(room, event):
|
||||
nick = getNick(room,event)
|
||||
phrases = []
|
||||
phrases.append("On avait dit 'Pas les mamans'!")
|
||||
phrases.append("Oh, c'est pas la mere a boire " + nick + "}!")
|
||||
phrases.append("C'est pas l'homme qui prend la mere, c'est la mere qui prend l'homme...")
|
||||
reponses(room, phrases)
|
||||
|
||||
def hi_callback(room, event):
|
||||
if (modules[room.room_id, 'salut']):
|
||||
# Somebody said hi, let's say Hi back
|
||||
nick = getNick(room,event)
|
||||
phrases = []
|
||||
|
@ -758,6 +777,7 @@ def hi_callback(room, event):
|
|||
reponses(room, phrases)
|
||||
|
||||
def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
|
||||
if (modules[room.room_id, 'liste']):
|
||||
res = []
|
||||
nick = getNick(room,event)
|
||||
|
||||
|
@ -778,7 +798,8 @@ def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
|
|||
else:
|
||||
room.send_text("Utilisation : !liste <options/de/la/liste> [nombre d elements]")
|
||||
|
||||
def cristal(room, event):
|
||||
def cristal(room, event): # Affiche une réponse à une question posée
|
||||
if (modules[room.room_id, 'cristal']):
|
||||
nick = getNick(room,event)
|
||||
|
||||
args = event['content']['body'].split()
|
||||
|
@ -850,6 +871,7 @@ def cristal(room, event):
|
|||
reponses(room, phrases)
|
||||
|
||||
def horloge(room, event): # Gestion des horloges PBTA
|
||||
if (modules[room.room_id, 'horloge']):
|
||||
global clock
|
||||
nick = getNick(room,event)
|
||||
|
||||
|
@ -887,6 +909,7 @@ def horloge(room, event): # Gestion des horloges PBTA
|
|||
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): # Enregistrement des statistiques
|
||||
if (modules[room.room_id, 'stats']):
|
||||
global stats
|
||||
nick = getNick(room,event)
|
||||
user = event['sender']
|
||||
|
@ -938,6 +961,7 @@ def statistiques(room,event): # Enregistrement des statistiques
|
|||
stats[room.room_id,nick] = usrstats2
|
||||
|
||||
def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un message
|
||||
if (modules[room.room_id, 'stats']):
|
||||
global stats
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -956,6 +980,7 @@ def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un mess
|
|||
# room.send_text(cle[1] + "\n")
|
||||
|
||||
def actif(room,event): # Stats d'activité d'une personne
|
||||
if (modules[room.room_id, 'stats']):
|
||||
global stats
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -972,6 +997,7 @@ def actif(room,event): # Stats d'activité d'une personne
|
|||
room.send_text(pers + " : Personne non reconnue\n")
|
||||
|
||||
def nb_kap(room,event):
|
||||
if (modules[room.room_id, 'stats']):
|
||||
global stats
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -994,6 +1020,7 @@ def nb_kap(room,event):
|
|||
room.send_text(pers + " : Personne non reconnue\n")
|
||||
|
||||
def quote(room,event): # Gestion des citations
|
||||
if (modules[room.room_id, 'quote']):
|
||||
global quotes
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -1102,6 +1129,7 @@ def quote(room,event): # Gestion des citations
|
|||
room.send_text("Je n'ai pas de citations pour ce salon")
|
||||
|
||||
def biere(room,event): # Gestion des boissons
|
||||
if (modules[room.room_id, 'biere']):
|
||||
global bieres
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
|
@ -1229,6 +1257,7 @@ def biere(room,event): # Gestion des boissons
|
|||
room.send_text("Je n'ai pas de breuvages pour ce salon")
|
||||
|
||||
def boissons(room,event): # Gestion des alias de boissons
|
||||
if (modules[room.room_id, 'biere']):
|
||||
boisson = ""
|
||||
elu = ""
|
||||
|
||||
|
@ -1254,6 +1283,7 @@ def boissons(room,event): # Gestion des alias de boissons
|
|||
biere(room,event)
|
||||
|
||||
def accueil(room,event): # Mettre un message d'accueil
|
||||
if (modules[room.room_id, 'welcome']):
|
||||
lmod = modos[room.room_id]
|
||||
if (event['sender'] in admins or event['sender'] in lmod):
|
||||
global welcome
|
||||
|
@ -1268,6 +1298,7 @@ def accueil(room,event): # Mettre un message d'accueil
|
|||
salon.send_text("Vous n'êtes pas autorisés à modifier le message d'accueil.")
|
||||
|
||||
def bienvenue(event): # Affichage d'un message d'accueil aux nouveaux venus
|
||||
if (modules[room.room_id, 'welcome']):
|
||||
room_id = event['room_id']
|
||||
room = bot.client.rooms[room_id]
|
||||
membership = event['content']['membership']
|
||||
|
@ -1318,11 +1349,65 @@ def modo(room,event): # Definition d'un moderateur
|
|||
else:
|
||||
salon.send_text("Vous n'êtes pas autorisés à définir les modérateurs.")
|
||||
|
||||
def module(room,event): # Definition des modules d'un salon
|
||||
lmod = []
|
||||
try:
|
||||
lmod = modos[room.room_id]
|
||||
except:
|
||||
lmod = []
|
||||
if (event['sender'] in admins or event['sender'] in lmod):
|
||||
global modules
|
||||
args = event['content']['body'].split()
|
||||
args.pop(0)
|
||||
if (len(args) == 2 and args[0] == "add"):
|
||||
args.pop(0)
|
||||
rmod = args[0]
|
||||
if (rmod in liste_mod):
|
||||
modules[room.room_id, rmod] = True
|
||||
room.send_text(candidat + "Module : " + rmod + " activé.")
|
||||
else:
|
||||
room.send_text(candidat + "Module : " + rmod + " inconnu.")
|
||||
elif (len(args) == 2 and args[0] == "del"):
|
||||
args.pop(0)
|
||||
rmod = args[0]
|
||||
if (rmod in liste_mod):
|
||||
modules[room.room_id, rmod] = False
|
||||
room.send_text(candidat + "Module : " + rmod + " désactivé.")
|
||||
else:
|
||||
room.send_text(candidat + "Module : " + rmod + " inconnu.")
|
||||
else:
|
||||
# Lister les modules actifs du salon
|
||||
rmod = ""
|
||||
for cle,valeur in modules.items():
|
||||
if (cle[0] == room.room_id and valeur == True):
|
||||
rmod = rmod + cle[1] + ", "
|
||||
if (len(rmod) > 1):
|
||||
rmod = rmod[:-2]
|
||||
room.send_text("Modules actuels : " + rmod)
|
||||
# Lister les modules disponibles
|
||||
dmod = ""
|
||||
for val in liste_mod:
|
||||
dmod = dmod + val + ", "
|
||||
if (len(dmod) > 1):
|
||||
dmod = dmod[:-2]
|
||||
room.send_text("Modules disponibles : " + dmod)
|
||||
else:
|
||||
salon.send_text("Vous n'êtes pas autorisés à définir les modules du salon.")
|
||||
|
||||
|
||||
def invitations(room_id, state): # Reponse aux invitations
|
||||
global bot
|
||||
try:
|
||||
global bot
|
||||
bot.client.join_room(room_id)
|
||||
if ('welcome' in liste_mod):
|
||||
modules[room.room_id, 'welcome'] = True
|
||||
if ('roll' in liste_mod):
|
||||
modules[room.room_id, 'roll'] = True
|
||||
if ('quote' in liste_mod):
|
||||
modules[room.room_id, 'quote'] = True
|
||||
if ('liste' in liste_mod):
|
||||
modules[room.room_id, 'liste'] = True
|
||||
time.sleep(2)
|
||||
del bot
|
||||
save()
|
||||
|
@ -1336,8 +1421,8 @@ def main():
|
|||
USERNAME = "" # Bot's username
|
||||
PASSWORD = "" # Bot's password
|
||||
SERVER = "" # Matrix server URL
|
||||
mods = ["roll", "quote", "biere", "stats", "liste", "horloge", "carte", "card", "cristal", "welcome", "salut", "jdr", "gens", "va"]
|
||||
global admins
|
||||
|
||||
if ('AUTH' in config):
|
||||
USERNAME = config['AUTH']['username'] # Bot's username
|
||||
PASSWORD = config['AUTH']['password'] # Bot's password
|
||||
|
@ -1346,9 +1431,14 @@ def main():
|
|||
else:
|
||||
print("Probleme de lecture de configuration asmodee.ini")
|
||||
|
||||
#print("admins")
|
||||
#for admin in admins:
|
||||
# print(admin)
|
||||
global liste_mod
|
||||
if ('MOD' in config):
|
||||
try:
|
||||
liste_mod = config['MOD']['liste'].split(',') # Liste des modules
|
||||
except:
|
||||
liste_mod = mods
|
||||
else
|
||||
liste_mod = mods
|
||||
|
||||
# Create an instance of the MatrixBotAPI
|
||||
global bot
|
||||
|
@ -1361,43 +1451,51 @@ def main():
|
|||
bot.add_handler(aide_handler)
|
||||
|
||||
# Add a regex handler waiting for keywords and answers
|
||||
#hi_handler = MRegexHandler("[Ss]alut|[Cc]halut|'lut|[Cc]oucou|[Bb]onjour|[Hh]ello", hi_callback)
|
||||
#bot.add_handler(hi_handler)
|
||||
#jdr_handler = MRegexHandler("[Jj]dr|[Rr]pg", jdr)
|
||||
#bot.add_handler(jdr_handler)
|
||||
#gens_handler = MRegexHandler("[Gg]ens", gens)
|
||||
#bot.add_handler(gens_handler)
|
||||
#maman_handler = MRegexHandler("[Mm]aman|[Mm]ere", maman)
|
||||
#bot.add_handler(maman_handler)
|
||||
#va_handler = MRegexHandler("ca va|vas]", va)
|
||||
#bot.add_handler(va_handler)
|
||||
if ('salut' in liste_mod):
|
||||
hi_handler = MRegexHandler("[Ss]alut|[Cc]halut|'lut|[Cc]oucou|[Bb]onjour|[Hh]ello", hi_callback)
|
||||
bot.add_handler(hi_handler)
|
||||
if ('jdr' in liste_mod):
|
||||
jdr_handler = MRegexHandler("[Jj]dr|[Rr]pg", jdr)
|
||||
bot.add_handler(jdr_handler)
|
||||
if ('gens' in liste_mod):
|
||||
gens_handler = MRegexHandler("[Gg]ens", gens)
|
||||
bot.add_handler(gens_handler)
|
||||
if ('va' in liste_mod):
|
||||
va_handler = MRegexHandler("ca va|vas]", va)
|
||||
bot.add_handler(va_handler)
|
||||
|
||||
# Add a regex handler waiting for the dice commands and aliases
|
||||
if ('roll' in liste_mod):
|
||||
entry_handler = MCommandHandler("", entryPoint, ':')
|
||||
bot.add_handler(entry_handler)
|
||||
|
||||
# Cartes !card tire une carte d'un paquet plein !carte tire une carte qui disparait du paquet
|
||||
if ('card' in liste_mod):
|
||||
card_handler = MCommandHandler("card", card)
|
||||
bot.add_handler(card_handler)
|
||||
|
||||
if ('carte' in liste_mod):
|
||||
carte_handler = MCommandHandler("carte", carte)
|
||||
bot.add_handler(carte_handler)
|
||||
|
||||
# Un élément d'une liste
|
||||
if ('liste' in liste_mod):
|
||||
liste_handler = MCommandHandler("liste", liste)
|
||||
bot.add_handler(liste_handler)
|
||||
|
||||
# Boule de cristal
|
||||
if ('cristal' in liste_mod):
|
||||
cristal_handler = MCommandHandler("cristal", cristal)
|
||||
bot.add_handler(cristal_handler)
|
||||
|
||||
# horloges
|
||||
horloge_read()
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
# horloges
|
||||
if ('horloge' in liste_mod):
|
||||
horloge_read()
|
||||
horloge_handler = MCommandHandler("horloge", horloge)
|
||||
bot.add_handler(horloge_handler)
|
||||
|
||||
# stats
|
||||
if ('stats' in liste_mod):
|
||||
stats_read()
|
||||
stats_handler = MAllHandler(statistiques)
|
||||
bot.add_handler(stats_handler)
|
||||
|
@ -1409,11 +1507,13 @@ def main():
|
|||
bot.add_handler(nb_kap_handler)
|
||||
|
||||
# quotes
|
||||
if ('quote' in liste_mod):
|
||||
quotes_read()
|
||||
quote_handler = MCommandHandler("quote", quote)
|
||||
bot.add_handler(quote_handler)
|
||||
|
||||
# bieres
|
||||
if ('biere' in liste_mod):
|
||||
bieres_read()
|
||||
biere_handler = MCommandHandler("biere", biere)
|
||||
bot.add_handler(biere_handler)
|
||||
|
@ -1421,6 +1521,7 @@ def main():
|
|||
bot.add_handler(boisson_handler)
|
||||
|
||||
# Accueil
|
||||
if ('welcome' in liste_mod):
|
||||
welcome_read()
|
||||
welcome_handler = MCommandHandler("accueil", accueil)
|
||||
bot.add_handler(welcome_handler)
|
||||
|
@ -1431,6 +1532,11 @@ def main():
|
|||
modos_handler = MCommandHandler("modo", modo)
|
||||
bot.add_handler(modos_handler)
|
||||
|
||||
# Definition des modules
|
||||
modules_read()
|
||||
modules_handler = MCommandHandler("module", module)
|
||||
bot.add_handler(modules_handler)
|
||||
|
||||
# Invitations
|
||||
bot.client.add_invite_listener(invitations)
|
||||
|
||||
|
|
Loading…
Reference in a new issue