2016-08-04 7 views
0

PRAWでRedditボットを作成しました。キーワードを見つけたら自動的にメッセージで応答します。問題は、人々が今やキーワードをスパムしているということです。改造者の1人が、ボットがスレッドごとに1つのコメントに返信するように制限するように指示しました。私はマスターのプログラマーではないが、ボットはすべてのスレッドを組み合わせた最新の25件のコメントだけをスキャンすると信じている。現在、個々のスレッドは気にしません。スレッドごとに1つのコメントに返信するようにボットを制限する方法に関するアイデアはありますか?PRAWスレッドごとにRedditボットを制限する

ありがとうございました

答えて

0

問題には複数の解決策があります。既に応答したスレッドを持つデータベースを維持するのが最もきれいです。この場合、情報はほとんどないので、スレッドIDをファイルに保存するだけで済みます。

しかし、このデータベース/ファイルが失われたり、ボットポストが手作業または他のシナリオ全体で削除されたりすると問題になります。だからおそらく最善のアプローチは動的に行うことです。後でボットを遅くすると、上記のメソッドを高速応答のためのルックアップとして追加することを検討するかもしれません。

私が今話しているのは、あなたがコメントをチェックするたびに、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 
関連する問題