为什么我的 reddit 评论机器人评论全部大写?

Why is my reddit comment bot commenting in all caps?

此机器人读取文本文件以 post 输入键盘时的随机响应。但是,当 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是string的一种方法,将字符串中的所有小写字符转换为大写。

删除对 upper 的调用,你应该没问题。

这部分是你的问题:

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]

当您在第 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]