python - 用于 twitch 的原始 Python IRC 聊天机器人

标签 python bots irc twitch

我目前正在为 Twitch.tv 开发 IRC 机器人,我想知道如何实现禁用单词列表?这是我到目前为止所拥有的,由于我对 python 的了解有限,我感到很困惑。到目前为止,除了检查消息中是否包含禁用词之外,一切都运行良好。这是有问题的代码:

if bannedWords.split in message:
                sendMessage(s, "/ban " + user)
                break

我想检查一个列表,看看该消息是否包含列表中的任何内容?

bannedWords = ["badword1", "badword1"]

但我只是不确定..

import string
from Read import getUser, getMessage
from Socket import openSocket, sendMessage
from Initialize import joinRoom

s = openSocket()
joinRoom(s)
readbuffer = ""
bannedWords = ["badword1", "badword1"]
while True:
        readbuffer = readbuffer + s.recv(1024)
        temp = string.split(readbuffer, "\n")
        readbuffer = temp.pop()

        for line in temp:
            print(line)
            if "PING" in line:
                s.send(line.replace("PING", "PONG"))
                break
            user = getUser(line)
            message = getMessage(line)
            print user + " typed :" + message
            if bannedWords.split in message:
                sendMessage(s, "/ban " + user)
                break

提前致谢!!

最佳答案

假设 messagebannedWords 都是字符串:

if any(map(message.__contains__, bannedWords.split())):
    ...

另一方面,如果 bannedWords 已经是一个列表,如代码示例所示,请跳过拆分(实际上 list 类型没有方法 split):

if any(map(message.__contains__, bannedWords)):
    ...

这将检查字符串的任何部分是否存在任何禁止的单词; “另一边的草更绿。” 将匹配诸如 “ass” 之类的禁用词。

请注意,map 在两个主要 Python 版本之间的行为有所不同:

  • 在 Python 2 中,map 创建一个list,这抵消了 any 的短路行为所提供的优势。请改用生成器表达式:any(消息中的单词对应bannedWords中的单词)
  • 在 Python 3 中,map 创建一个迭代器,它将延迟地将函数应用于给定的可迭代对象。

附注

关于bannedWords.split(),在Python中使用多行字符串文字生成的单词列表等是很常见的,如下所示:

bannedWords = """
banned
words
are
bad
mmkay
""".split()

关于python - 用于 twitch 的原始 Python IRC 聊天机器人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361679/

相关文章:

python - 是否可以在不将编码器传递给 json.dumps() 的情况下将枚举转储到 json 中?

python - 如何在mongoengine python中聚合组

asp.net-mvc - 防止机器人抓取网站的某些区域

haskell - 在 IRC 机器人 (Haskell) 中实现 CTCP 命令

java - 使用 shell 在 java 中运行机器人

java - 为什么在 IRC 聊天中使用 PircBot 的 getPrefix 方法不返回任何内容?

javascript - 我需要 Node 客户端中客户端之间的路由数据来纠正连接的用户

python - 需要帮助设计基于 NEAT 算法的神经网络的适应度评估

python - "or"运算符不返回 bool 的动机是什么?

php - Twitter api - 是否可以发布线程?