Бот Reddit извлекает только новые сообщения при запуске, но не извлекает активно сообщения, сделанные, когда бот уже запущен.

Некоторое время назад я начал с python и сделал простого бота для Reddit. К сожалению, функциональность бота работает только с сообщениями, сделанными до запуска бота в терминале. Если после запуска бота в сабреддите создается сообщение, он не комментирует и не получает эти сообщения.

Еще одна вещь, которая может быть связана, это то, что консоль выводит «Нет подходящих сообщений прямо сейчас». дважды вместо одного раза. Я не уверен, связано ли это.

Вот код, который, я думаю, является импортом для этой проблемы, если вам нужно больше контекста, дайте мне знать !:

def mainloop():
    counter1 = 0  # Counts submissions in new that have been crawled
    for submission in subreddit.new(limit=5):  # Get the 5 newest submissions
        counter1 = counter1 + 1

        callings = ['canada', 'canadian', '????????']  # Triggers
        normalized_title = submission.title.lower()
        normalized_text = submission.selftext.lower()

        while True:
            if submission.id not in posts_replied_to:  # If the post is new to the bot
                time.sleep(30)  # Keep spam low
                for canadian_mentions in callings:
                    if canadian_mentions in normalized_title:  # If trigger is in title
                        # Make the reply, print to console, then add the post to the replied storage
                        submission.reply(reply_text)
                        print("Bot replying to : ", submission.title, "\n")
                        posts_replied_to.append(submission.id)
                    elif canadian_mentions in normalized_text:  # If trigger is in text body
                        # Make the reply, print to console, then add the post to the replied storage
                        submission.reply(reply_text)
                        print("Bot replying to : ", submission.selftext, "\n")
                        posts_replied_to.append(submission.id)
                    else:
                        print("No applicable posts right now.")

person Bryn    schedule 27.08.2018    source источник
comment
У вас есть бесконечный цикл while True: после проверки новых сообщений: for submission in subreddit.new(limit=5): Вы больше никогда не получите новые сообщения после того, как войдете в бесконечный цикл. Вам нужно изменить код.   -  person abc    schedule 28.08.2018
comment
Большое спасибо, проблема была в этом, а также в другом. Удаление цикла while не изменило того факта, что он не получал новых сообщений, но это было половиной проблемы. В моем коде для печати новых сообщений не было оператора else:, и программа бездействовала на этом операторе. если бы я исправил это и тоже вышел из цикла while True, у него все равно была бы такая же проблема! Благодарность!   -  person Bryn    schedule 28.08.2018


Ответы (1)


Вы можете использовать объект stream.

for post in reddit.subreddit(subreddit).stream.submissions(skip_existing=True):
    # Do stuff
    print(post.selftext)

Это будет печатать сообщения в реальном времени по мере их создания.

person kpaul    schedule 16.09.2018