Browse Source

modules par salon et par instance du bot

master
Nemesis 6 years ago
parent
commit
002ff1090a
  1. 2
      asmodee.ini
  2. 156
      asmodee.py

2
asmodee.ini

@ -4,3 +4,5 @@ password = ""
server = ""
admin = ""
[MOD]
liste = "roll,quote,biere,stats,liste,horloge,carte,card,cristal,welcome,salut,jdr,gens,va"

156
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)
signal.signal(signal.SIGINT, signal_handler)
# horloges
if ('horloge' in liste_mod):
horloge_read()
signal.signal(signal.SIGINT, signal_handler)
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…
Cancel
Save