2016-08-04 61 views
0

我創建了一個帶有PRAW的Reddit機器人,它在發現關鍵字時自動響應消息。問題在於人們現在正在發送關鍵詞,而其中一個mod告訴我限制每個線程回覆一條評論。我不是主程序員,但我相信機器人只會掃描所有線程合併的25條最新評論。它並不關心當前的單個線程。有關如何限制機器人只回復每個線程一條評論的任何想法?PRAW限制每個線程的Reddit機器人

謝謝

回答

0

您的問題有多種解決方案。使用已經響應的線程保留數據庫將是最乾淨的,或者在這種情況下,因爲它的信息非常少,您可以將線程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