Python > Obter conteúdo do post se mencionado

Isto é ótimo. Obrigado pelas informações. Não há muitas informações sobre Python x Discourse disponíveis por aqui, então fico feliz em aprender, e talvez isso ajude outras pessoas. Acabei de testar seu código e ele parece funcionar como esperado. Claro, não parei de jogar, então encontrei uma solução alternativa para chegar até a etapa 5 e uma maneira diferente de obter os valores que precisava até uma cópia bruta do conteúdo da postagem.

O que eu quero é basicamente isto.

  1. Receber notificações
  2. Obter números de postagem
  3. Obter conteúdo da postagem
  4. Gerar resposta com OpenAI
  5. Postar resposta
  6. Marcar essa mesma notificação como lida?
# Configurar um loop para executar o bot indefinidamente
while True:
    # Obter ações do usuário e buscar ID da postagem    
    data = {
    'username': 'theuser',
    # Para menções e respostas, preciso obter os filtros 6 + 7, mas por algum motivo apenas 1 resposta JSON é dada.
    'filter': 6 | 7,
    'limit': 10,
    }
    
    unread_mentions = client.user_actions.json.get(data)
    print(unread_mentions)

    user_actions = unread_mentions['user_actions']

    # Loop sobre cada menção não lida
    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}')
    
        # Obter o conteúdo da postagem   
        post = client.posts[post_id].json.get()

        # Imprimir o conteúdo da postagem
        post_content = post['raw']

        # Gerar uma resposta para a postagem
        response = generate_response(post_content)
    
        # Postar uma resposta no fórum
        content = {
            'topic_id': topic_id,
            'raw': response + ' @' + str(username)
        }
        make_post = client.posts.json.post(content)

Atualmente estou tendo dois problemas:

  • Apenas 1 menção é buscada. Devo ter esquecido algo, mas ainda não descobri o porquê.
  • Claro, queremos responder a uma postagem apenas uma vez, e como estamos em loop, precisamos de algo aqui para evitar isso.
    • Podemos armazenar o post_id em um arquivo .txt (não tenho certeza de quantos dados isso pode armazenar, acho que você pode lidar com muitas menções aqui.
    • Minha solução ideal era marcar a notificação como lida. Mas percebi que em nenhum dos nossos códigos estamos buscando menções não lidas (bem, tentei no início, buscando notificações não lidas, mas não consegui extrair/armazenar a variável post_id que eu precisava usar /posts/get.json e buscar o conteúdo “raw”).

Meu objetivo final é alimentar a resposta com a API OpenAI. Mas primeiro preciso encontrar uma maneira de resolver os problemas acima.