Esto es genial. Gracias por la información. No hay mucha información disponible sobre Python x Discourse, así que me alegra aprender, y tal vez esto ayude a otros. Acabo de probar tu código y parece funcionar como se esperaba. Por supuesto, no dejé de jugar, así que encontré una solución para llegar hasta el paso 5, y una forma diferente de obtener los valores que necesitaba hasta una copia en bruto del contenido de la publicación.
Lo que quiero es básicamente esto.
- Recibir notificaciones
- Obtener números de publicación
- Obtener contenido de la publicación
- Generar respuesta con OpenAI
- Publicar respuesta
- Marcar esa misma notificación como leída.
# Configurar un bucle para ejecutar el bot indefinidamente
while True:
# Obtener acciones del usuario y buscar el ID de la publicación
data = {
'username': 'theuser',
# Para menciones y respuestas, necesito obtener los filtros 6 + 7, pero por alguna razón solo se da 1 respuesta JSON.
'filter': 6 | 7,
'limit': 10,
}
unread_mentions = client.user_actions.json.get(data)
print(unread_mentions)
user_actions = unread_mentions['user_actions']
# Bucle sobre cada mención no leída
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}')
# Obtener el contenido de la publicación
post = client.posts[post_id].json.get()
# Imprimir el contenido de la publicación
post_content = post['raw']
# Generar una respuesta a la publicación
response = generate_response(post_content)
# Publicar una respuesta en el foro
content = {
'topic_id': topic_id,
'raw': response + ' @' + str(username)
}
make_post = client.posts.json.post(content)
Actualmente tengo dos problemas:
- Solo se recupera 1 mención. Debo haber olvidado algo, pero aún no he descubierto por qué.
- Por supuesto, queremos responder a una publicación solo una vez, y como estamos en un bucle, necesitamos algo aquí para evitar esto.
- Podemos almacenar el post_id en un archivo .txt (no estoy seguro de cuántos datos puede almacenar, creo que puedes manejar bastantes menciones aquí).
- Mi solución ideal era marcar la notificación como leída. Pero me di cuenta de que en ninguno de nuestros códigos recuperamos menciones no leídas (bueno, lo intenté al principio, recuperando notificaciones no leídas, pero no pude extraer/almacenar la variable post_id que necesitaba usar /posts/get.json y recuperar el contenido “raw”).
Mi objetivo final es alimentar la respuesta con la API de OpenAI. Pero primero necesito encontrar una manera de solucionar los problemas anteriores.