0
我創建了一個帶有PRAW的Reddit機器人,它在發現關鍵字時自動響應消息。問題在於人們現在正在發送關鍵詞,而其中一個mod告訴我限制每個線程回覆一條評論。我不是主程序員,但我相信機器人只會掃描所有線程合併的25條最新評論。它並不關心當前的單個線程。有關如何限制機器人只回復每個線程一條評論的任何想法?PRAW限制每個線程的Reddit機器人
謝謝
我創建了一個帶有PRAW的Reddit機器人,它在發現關鍵字時自動響應消息。問題在於人們現在正在發送關鍵詞,而其中一個mod告訴我限制每個線程回覆一條評論。我不是主程序員,但我相信機器人只會掃描所有線程合併的25條最新評論。它並不關心當前的單個線程。有關如何限制機器人只回復每個線程一條評論的任何想法?PRAW限制每個線程的Reddit機器人
謝謝
您的問題有多種解決方案。使用已經響應的線程保留數據庫將是最乾淨的,或者在這種情況下,因爲它的信息非常少,您可以將線程ID保存到文件中。
但是,如果這個數據庫/文件丟失,或者手動刪除bot帖子或整個其他場景,這將是有問題的。因此,現在最好的方法是動態地執行此操作,如果稍後會減慢bot的速度,則可以考慮將上述方法添加爲查找以獲得更快的響應。
我現在所談論的是每次查看評論時,您應該得到submission_id
並掃描所有評論以確保沒有機器人回覆已添加(或者ceratian閾值未被通過)。
def scan():
for c in reddit_client.get_comments('chosen_subreddit'):
if keyword not in c.body.lower(): #check main requirement
continue
if c.author == None: #comment deleted
continue
if c.author.name == bot_name: #don't bother with comments made by bot
continue
answer(c,c.link_id[3:])
def answer(comment, sub_id)
sub = reddit_client.get_submission(submission_id=sub_id)
sub.replace_more_comments(limit=None,threshold=0)
flat_comments = praw.helpers.flatten_tree(sub.comments)
if len([com for com in flat_comments if com.author != None and com.author.name.lower() == bot_name.lower()]) > 0:
return False
#here you can prepare response and do other stuff
#....
#....
comment.reply(prepared_response)
return True