Python > Obtenir le contenu du post s'il est mentionné

C’est bien. Merci pour l’info. Il n’y a pas beaucoup d’informations sur Python x Discourse disponibles ici, donc je suis heureux d’apprendre, et peut-être que cela aidera d’autres personnes. Je viens d’essayer votre code, et il semble fonctionner comme prévu. Bien sûr, je n’ai pas arrêté de jouer, j’ai donc trouvé une solution de contournement pour aller jusqu’à l’étape 5, et une manière différente d’obtenir les valeurs dont j’avais besoin jusqu’à un simple copier-coller du contenu du message.

Ce que je veux, c’est essentiellement ceci.

  1. Recevoir des notifications
  2. Obtenir les numéros de message
  3. Obtenir le contenu du message
  4. Générer une réponse avec OpenAI
  5. Publier la réponse
  6. Marquer cette même notification comme lue ?
# Configurer une boucle pour exécuter le bot indéfiniment
while True:
    # Obtenir les actions utilisateur et récupérer l'ID du message
    data = {
    'username': 'theuser',
    # Pour les mentions et les réponses, j'ai besoin d'obtenir les filtres 6 + 7, mais pour une raison quelconque, une seule réponse JSON est donnée.
    'filter': 6 | 7,
    'limit': 10,
    }

    unread_mentions = client.user_actions.json.get(data)
    print(unread_mentions)

    user_actions = unread_mentions['user_actions']

    # Boucler sur chaque mention non lue
    for user_action in unread_mentions['user_actions']:
        topic_id = user_action['topic_id']
        post_number = user_action['post_number']
        post_id = user_action['post_id']
        username = user_action['username']

        print(f'Topic ID: {topic_id}, Post Number: {post_number}, Post ID: {post_id}, Reply to: {username}')

        # Obtenir le contenu du message
        post = client.posts[post_id].json.get()

        # Afficher le contenu du message
        post_content = post['raw']

        # Générer une réponse au message
        response = generate_response(post_content)

        # Publier une réponse sur le forum
        content = {
            'topic_id': topic_id,
            'raw': response + ' @' + str(username)
        }
        make_post = client.posts.json.post(content)

Actuellement, j’ai deux problèmes :

  • Une seule mention est récupérée. J’ai dû oublier quelque chose, mais je n’ai pas encore trouvé pourquoi.
  • Bien sûr, nous voulons répondre à un message une seule fois, et comme nous sommes en boucle, nous avons besoin de quelque chose ici pour éviter cela.
    • Nous pouvons stocker le post_id dans un fichier .txt (je ne sais pas combien de données cela peut stocker, je pense que vous pouvez gérer pas mal de mentions ici.
    • Ma solution idéale était de marquer la notification comme lue. Mais j’ai réalisé que dans aucun de nos codes, nous ne récupérons les mentions non lues (enfin, j’ai essayé au début, en récupérant les notifications non lues, mais je n’ai pas pu extraire/stocker la variable post_id que je devais utiliser /posts/get.json et récupérer le contenu “raw”).

Mon objectif final est d’alimenter la réponse avec l’API OpenAI. Mais je dois d’abord trouver un moyen de résoudre les problèmes ci-dessus.