Python > Получить содержимое поста, если упомянут

Это здорово. Спасибо за информацию. В сети не так много материалов по Python x Discourse, поэтому я рад научиться новому, и, возможно, это поможет и другим. Я только что попробовал ваш код, и он, кажется, работает как ожидалось. Конечно, я не остановился на достигнутом, поэтому нашёл обходной путь, чтобы дойти до шага 5, а также другой способ получить нужные мне значения вплоть до сырого текста поста.

Вот что я хочу получить в итоге:

  1. Получать уведомления
  2. Получать номера постов (post_numbers)
  3. Получать содержимое поста
  4. Генерировать ответ с помощью OpenAI
  5. Отправлять ответ
  6. Помечать то же самое уведомление как прочитанное?
# Настройка бесконечного цикла для работы бота
while True:
    # Получение user_actions и извлечение id поста
    data = {
    'username': 'theuser',
    # Для упоминаний и ответов мне нужны фильтры 6 и 7, но по какой-то причине возвращается только один JSON-ответ.
    'filter': 6 | 7,
    'limit': 10,
    }
    
    unread_mentions = client.user_actions.json.get(data)
    print(unread_mentions)

    user_actions = unread_mentions['user_actions']

    # Перебор каждого непрочитанного упоминания
    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}')
    
        # Получение содержимого поста
        post = client.posts[post_id].json.get()

        # Вывод содержимого поста
        post_content = post['raw']

        # Генерация ответа на пост
        response = generate_response(post_content)
    
        # Отправка ответа на форум
        content = {
            'topic_id': topic_id,
            'raw': response + ' @' + str(username)
        }
        make_post = client.posts.json.post(content)

В настоящее время у меня две проблемы:

  • Запрашивается только одно упоминание. Должно быть, я что-то упустил, но пока не понял, почему.
  • Конечно, мы хотим отвечать на пост только один раз, и поскольку у нас цикл, нам нужно что-то, чтобы предотвратить повторные ответы.
    • Мы можем хранить post_id в файле .txt (не уверен, сколько данных он может вместить, но, думаю, вы сможете обработать довольно много упоминаний).
    • Идеальное решение для меня — помечать уведомление как прочитанное. Но я понял, что ни в одном из наших кодов мы не запрашиваем непрочитанные упоминания (хотя я сначала пытался получить непрочитанные уведомления, но не смог извлечь/сохранить переменную post_id, которая мне нужна для вызова /posts/get.json и получения содержимого “raw”.

Моя конечная цель — использовать ответ с API OpenAI. Но сначала мне нужно решить вышеуказанные проблемы.