【问题标题】:Why is my reddit comment bot commenting in all caps?为什么我的 reddit 评论机器人全部大写?
【发布时间】:2021-08-28 20:01:54
【问题描述】:

当输入键盘时,此机器人会读取文本文件以发布随机响应。但是,当 txt 文件以正确的语法编写时,它会全部大写。

对不起,如果我完全无知。我正处于学习的早期阶段,这是我的基石。这段代码不是我的,但我正在修改它以供我使用。

#!/usr/bin/env python3

import praw
import random
import config

class Bot:

    def __init__(
            self,
            client_id,
            client_secret,
            username,
            password,
            user_agent,
            path_to_quotes,
            subreddit_name,
            trigger
        ):
        self.client_id = client_id
        self.client_secret = client_secret
        self.username = username
        self.password = password
        self.user_agent = user_agent
        self.path_to_quotes = path_to_quotes
        self.subreddit_name = subreddit_name
        self.trigger = trigger.lower()

        with open(self.path_to_quotes) as f:
            self.quotes = [q.upper() for q in f.read().split('\n') if q]

        self.number_quotes = len(self.quotes)

        self.reddit = praw.Reddit(
            client_id=self.client_id,
            client_secret=self.client_secret,
            user_agent=self.user_agent,
            username=self.username,
            password=self.password
        )

        self.subreddit = self.reddit.subreddit(self.subreddit_name)

        self.reset_buffer()

    def reset_buffer(self):
        self.used_quotes = []
        self.unused_quotes = list(range(self.number_quotes))

    def get_quotes(self):
        return self.quotes 

    def contains_trigger(self, comment):
        return self.trigger in str(comment.body).lower()

    def get_random_quote(self, comment):
        if not self.unused_quotes:
            self.reset_buffer()
 
        random_int = random.choice(self.unused_quotes)
        random_quote = self.quotes[random_int]

        author = '/u/' + str(comment.author)
        random_quote = random_quote.replace('!USERNAME', author)

        self.unused_quotes.remove(random_int)
        self.used_quotes.append(random_int)

        return random_quote

    def welcome_message(self):
        print('Posting as /u/' + self.username, 'on /r/' + self.subreddit_name)
        print('Trigger word is', self.trigger)
        print('Use <Ctrl> + c to exit')

    def start_stream(self):
        self.welcome_message()
        for comment in self.subreddit.stream.comments():
            trigger_status = self.contains_trigger(comment)
            same_author = str(comment.author).lower == config.username.lower()

            if trigger_status and not same_author:
                random_quote = self.get_random_quote(comment)
                comment.reply(random_quote)

def main():
    bot = Bot(
        client_id = config.client_id,
        client_secret = config.client_secret, 
        username = config.username, 
        password = config.password, 
        user_agent = config.user_agent, 
        path_to_quotes = config.path_to_quotes,
        subreddit_name = config.subreddit_name,
        trigger = config.trigger
    )

    bot.start_stream()

if __name__ == '__main__':
    main()

【问题讨论】:

  • self.quotes = [q.upper() for q in f.read().split('\n') if q] 正在将您从文件中读取的所有引号转换为大写,然后再对它们进行任何操作。将q.upper() 替换为q

标签: python bots reddit praw


【解决方案1】:

当您在第 30 行读取文件时,您正在将引号转换为大写

self.quotes = [q.upper() for q in f.read().split('\n') if q]

你可以删除.upper()

self.quotes = [q for q in f.read().split('\n') if q]

【讨论】:

  • 谢谢。跟进问题。如果我要在里面放一个睡眠定时器来阻止它发布太多,它会去哪里?我一直在试图找出实际发送响应推荐的行的位置。
【解决方案2】:

这部分是你的问题:

with open(self.path_to_quotes) as f:
        self.quotes = [q.upper() for q in f.read().split('\n') if q]

q.upper() 接受q 中的任何内容,并将其变为大写。你想要这个:

with open(self.path_to_quotes) as f:
        self.quotes = [q for q in f.read().split('\n') if q]

【讨论】:

  • 谢谢。跟进问题。如果我要在里面放一个睡眠定时器来阻止它发布太多,它会去哪里?我一直在试图找出实际发送响应推荐的行的位置。
  • @rpm,嗯,这超出了我的工资等级。请作为单独的问题发布,社区可以提供帮助。祝你好运!
【解决方案3】:

self.quotes = [q.upper() for q in f.read().split('\n') if q]

正如您在此处看到的,q,这是您的文本文件中的一行,在列表解析中被转换为大写。 upper 是一种字符串方法,将字符串中的所有小写字符转换为大写。

去掉对upper的调用应该没问题。

【讨论】:

  • 谢谢。跟进问题。如果我要在里面放一个睡眠定时器来阻止它发布太多,它会去哪里?我一直在试图找出实际发送响应推荐的行的位置。
猜你喜欢
  • 2020-06-30
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多