def liste_joueurs(d): # d : pseudo-dictionnaire des arguments passés en GET (pwd, type) R = [] # Liste des blocs envoyés en réponse try: if ("pwd" in d) and (d["pwd"] == GLOBAL_PASSWORD): # Vérification mot de passe tous = cache_TDB.query.filter(cache_TDB.statut.in_(["vivant","MV","mort"])).all() # Liste des joueurs tels qu'actuellement en cache NT = len(tous) if "type" in d and d["type"] == "vivants": rep = cache_TDB.query.filter(cache_TDB.statut.in_(["vivant","MV"])).order_by(cache_TDB.nom).all() descr = "en vie" bouton_text = "Joueurs morts ☠" bouton_bloc = "Joueurs morts" elif "type" in d and d["type"] == "morts": rep = cache_TDB.query.filter(cache_TDB.statut == "mort").order_by(cache_TDB.nom).all() descr = "morts" bouton_text = "Joueurs en vie 🕺" bouton_bloc = "Joueurs en vie" else: raise ValueError('GET["type"] must be "vivants" or "morts"') NR = len(rep) if NR > 0: R.append(chatfuel.Text(f"Liste des {NR}/{NT} joueurs {descr} :")) LJ = [u.nom for u in rep] else: LJ = ["Minute, papillon !"] R.append(chatfuel.Text('\n'.join(LJ)).addQuickReplies([chatfuel.Button("show_block", bouton_text, bouton_bloc), chatfuel.Button("show_block", "Retour menu 🏠", "Menu")])) else: raise ValueError("WRONG OR MISSING PASSWORD!") except Exception as exc: db.session.rollback() if type(exc).__name__ == "OperationalError": return chatfuel.ErrorReport(Exception("Impossible d'accéder à la BDD, réessaie ! (souvent temporaire)"), verbose=verbose, message="Une erreur technique est survenue 😪\n Erreur :") else: return chatfuel.ErrorReport(exc, message="Une erreur technique est survenue 😪\nMerci d'en informer les MJs ! Erreur :") else: return chatfuel.Response(R)
def media_renderer(d, p): R = [] # Liste des blocs envoyés en réponse try: if ("pwd" in d) and (d["pwd"] == GLOBAL_PASSWORD): # Vérification mot de passe R.append(chatfuel.Image(p["media"]).addQuickReplies([chatfuel.Button("show_block", "Retour menu 🏠", "Menu"), chatfuel.Button("show_block", "Répondre 📤", "Envoi MP")])) else: raise ValueError("WRONG OR MISSING PASSWORD!") except Exception as e: return chatfuel.ErrorReport(exc, message="Une erreur technique est survenue 😪\nMerci d'en informer les MJs ! Erreur :") else: return chatfuel.Response(R)
def API_test(d, p): """ Récupère et renvoie une information à Chatfuel """ try: rep= chatfuel.Response([chatfuel.Text(f"d:{d}"), chatfuel.Text(f"p:{p}") ], #set_attributes={"a":1,"b":2}#, # redirect_to_blocks="Menu" ) except Exception as exc: rep = chatfuel.ErrorReport(exc) finally: return rep
def choix_cible(d, p, url_root): R = [] # Liste des blocs envoyés en réponse attrs = None # Attributs à modifier try: if ("pwd" in d) and (d["pwd"] == GLOBAL_PASSWORD): # Vérification mot de passe SM = difflib.SequenceMatcher() # Création du comparateur de chaînes slug1 = unidecode.unidecode(p["cible"]).lower() # Cible en minuscule et sans accents SM.set_seq1(slug1) # Première chaîne à comparer : cible demandée vivants = cache_TDB.query.filter(cache_TDB.statut.in_(["vivant","MV"])).all() scores = [] for joueur in vivants: slug2 = unidecode.unidecode(joueur.nom).lower() SM.set_seq2(slug2) # Pour chaque joueur, on compare la cible à son nom (en non accentué) score = SM.ratio() # On calcule la ressemblance if score == 1: # Cas particulier : joueur demandé correspondant exactement à un en BDD break scores.append((joueur.nom, joueur.messenger_user_id, score)) if score == 1: # Joueur demandé correspondant exactement à un en BDD attrs = {"cible": joueur.messenger_user_id} # On définit directement la cible (et on envoie aucun bloc) else: # Si pas de joueur correspondant parfaitement bests = [(nom, id) for (nom, id, score) in sorted(scores, key=lambda x:x[2], reverse=True)] # Meilleurs noms, dans l'ordre boutons = [chatfuel.Button("", nom, "", set_attributes={"cible": id}) for (nom, id) in bests[:5]] R.append(chatfuel.Text("Joueurs trouvés :").addQuickReplies(boutons)) else: raise ValueError("WRONG OR MISSING PASSWORD!") except Exception as exc: return chatfuel.ErrorReport(exc, message="Une erreur technique est survenue 😪\nMerci d'en informer les MJs ! Erreur :") else: return chatfuel.Response(R, set_attributes=attrs)