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.
- Receber notificações
- Obter números de postagem
- Obter conteúdo da postagem
- Gerar resposta com OpenAI
- Postar resposta
- 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.