Мой бот Reddit отвечает на один и тот же комментарий и сам снова и снова - PullRequest
1 голос
/ 08 марта 2020

Итак, я очень новичок в python и сделал простой Reddit-бот, который отвечает на комментарий. Это работало нормально этим утром, но теперь он отвечает на тот же комментарий и даже сам снова и снова. Я не могу найти, как это исправить с моими плохими навыками поиска в гугле ... вот и я. Код такой:

import praw
import time
import config

REPLY_MESSAGE = "Di Molto indeed"

def authenticate():
    print("Authenticating...")
    reddit = praw.Reddit(client_id = config.client_id,
                    client_secret = config.client_secret,
                    username = config.username,
                    password = config.password,
                    user_agent = 'FuriousVanezianLad by /u/FuriousVanezianLad')
    print("Authenticated as {}".format(reddit.user.me()))
    return reddit


def main():
    reddit = authenticate()
    while True:
            run_bot(reddit)


def run_bot(reddit):
    print("Obtaining 25 comments...")
    for comment in reddit.subreddit('test').comments(limit=25):
        if "Di Molto" in comment.body:
            print('String with "Di Molto" found in comment {}',format(comment.id))
            comment.reply(REPLY_MESSAGE)
            print("Replied to comment " + comment.id)

    print("Sleeping for 10 seconds...")
    time.sleep(10)


if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print("Interrupted")

Я взял этот код из обновлений Bboe для "Как создать Reddit Bot - часть первая от Busterroni". Я не знаю, что не так, но он комментирует сам себя. Извините, я знаю, что это глупый вопрос, и он может быть решен раньше, но я не смог его найти ...

Извините еще раз и заранее спасибо за помощь!

1 Ответ

0 голосов
/ 09 марта 2020

Проблема в том, что вы снова и снова выбираете 25 новых комментариев, а новые комментарии не делаются (или они делаются с низкой скоростью), поэтому вы в конечном итоге обрабатываете одни и те же комментарии несколько раз.

Я рекомендую вместо этого использовать поток, который является функцией PRAW. Потоки извлекают новые элементы (в данном случае, комментарии) по мере их публикации. Таким образом, вы не будете обрабатывать один и тот же комментарий более одного раза. Кроме того, проверьте, если вы сделали конкретный комментарий, прежде чем ответить на него. Вот модифицированная версия вашего кода, которая использует потоки и проверяет, сделал ли вы комментарий:

def run_bot(reddit):
    me = reddit.user.me()
    try:
        for comment in reddit.subreddit('test').stream.comments(skip_existing=True):
            if "Di Molto" in comment.body and comment.author != me:
                print('String with "Di Molto" found in comment {}',format(comment.id))
                comment.reply(REPLY_MESSAGE)
                print("Replied to comment " + comment.id)

    except Exception as e:
        print("Got exception: {}".format(e))
        print("Sleeping for 10 seconds...")
        time.sleep(10)
...