我目前正在为 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
提前致谢!!
最佳答案
假设 message
和 bannedWords
都是字符串:
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/