これは素晴らしいですね。情報ありがとうございます。Python x Discourseに関する情報はあまり多くないので、学べて嬉しいです。これは他の人にも役立つかもしれません。コードを試してみましたが、期待どおりに動作するようです。もちろん、プレイを止めたわけではないので、ステップ5まで進むための回避策と、投稿の生のコンテンツまで必要な値を取得するための別の方法を見つけました。
基本的にはこれがやりたいことです。
- 通知を取得する
- 投稿番号を取得する
- 投稿コンテンツを取得する
- OpenAIで返信を生成する
- 返信する
- 同じ通知を既読にする?
# ボットを無期限に実行するためのループを設定する
while True:
# ユーザーアクションを取得し、投稿IDを取得する
data = {
'username': 'theuser',
# メンションと返信の場合、フィルター6 + 7を取得する必要がありますが、なぜか1つの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)
現在、2つの問題があります。
- メンションが1つしか取得されません。何か忘れていると思いますが、まだ理由はわかりません。
- もちろん、投稿に一度だけ返信したいので、ループしているため、これを防ぐための何かが必要です。
- post_idを.txtファイルに保存できます(どれくらいのデータを保存できるかわかりませんが、かなりの数のメンションを処理できると思います)。
- 私の理想的な解決策は、通知を既読にすることでした。しかし、私たちのコードのどれも未読のメンションを取得していないことに気づきました(まあ、最初は未読通知を取得しようとしましたが、必要なpost_id変数を抽出/保存して、/posts/get.jsonを使用して「raw」コンテンツを取得することができませんでした)。
私の最終的な目標は、OpenAI APIで応答を供給することです。しかし、まず上記の問題を解決する方法を見つける必要があります。