정말 유용하네요. 정보 주셔서 감사합니다. Python과 Discourse에 대한 정보가 밖에 많이 없어서 배우게 되어 좋고, 이 글이 다른 분들에게도 도움이 되었으면 합니다. 말씀하신 코드를 바로 시도해 봤는데, 예상대로 작동하는 것 같습니다. 물론 저는 멈추지 않고 계속 실험을 계속해서 5단계까지 도달하는 우회 방법을 찾았고, 게시글 원본(raw) 콘텐츠를 그대로 붙여넣을 수 있는 필요한 값을 가져오는 다른 방법도 찾았습니다.
제가 기본적으로 원하는 것은 다음과 같습니다.
- 알림 가져오기
- post_numbers 가져오기
- 게시글 콘텐츠 가져오기
- OpenAI로 답변 생성
- 답변 게시
- 해당 알림을 읽음으로 표시?
# 봇을 무한대로 실행하기 위한 루프 설정
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 파일에 저장할 수 있습니다 (얼마나 많은 데이터를 저장할 수 있을지 확실하지 않지만, 꽤 많은 멘션을 처리할 수 있을 것 같습니다.)
- 제 이상적인 해결책은 알림을 읽음으로 표시하는 것이었습니다. 하지만 우리의 코드 어디에서도 읽지 않은 멘션을 가져오는 것이 아니라는 것을 깨달았습니다 (처음에는 읽지 않은 알림을 가져오려고 시도했지만, /posts/get.json을 사용해 “raw” 콘텐츠를 가져오기 위해 필요한 post_id 변수를 추출/저장하는 데 실패했습니다.)
최종 목표는 OpenAI API로 응답을 피드하는 것입니다. 하지만 먼저 위의 문제를 해결하는 방법을 찾아야 합니다.