示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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)