您好,我正在为Discord创建一个反链接垃圾邮件机器人,并且尝试删除其中包含某些关键字/网址的邮件。
关键字列表保存在名为 /banned_words.json 的单独文件中,我希望当消息中检测到关键字时,机器人从该文件中读取该消息并删除该消息。
这是我正在使用的一小段代码,我在这段代码if word in word_set:
中苦苦挣扎,因此,感谢您提供一个如何定义word
的示例。
def __init__(self, bot):
self.bot = bot
self.bannedwords = dataIO.load_json('data/spamfilter/banned_words.json')
async def banned_words(self, message):
word = word in line.split():
word_set = set(self.bannedwords)
if word in word_set:
await self.bot.delete_message(message)
msg = await self.bot.send_message(
message.channel,
"{}, **Avertisement is not allowed on this server.**".format(
message.author.mention
)
)
await asyncio.sleep(6)
await self.bot.delete_message(msg)
return
答案 0 :(得分:0)
此行是完全错误的:
word = word in line.split():
首先,末尾有一个多余的冒号。其次,x in y
产生一个布尔值,该布尔值表示x
是否在y
中。
您将不得不遍历消息中的所有单词,并对每个单词进行检查:
word_set = set(self.bannedwords)
for word in line.split():
if word in word_set:
答案 1 :(得分:0)
以下是我使用内置的any
函数进行设置的方法:
class MyCog:
def __init__(self, bot):
self.bot = bot
self.bannedwords = set(dataIO.load_json('data/spamfilter/banned_words.json'))
async def banned_words(self, message):
words = set(message.content.split())
word_set = self.bannedwords
if any(word in word_set for word in words):
await self.bot.delete_message(message)
msg = await self.bot.send_message(
message.channel,
"{}, **Avertisement is not allowed on this server.**".format(
message.author.mention
)
)
await asyncio.sleep(6)
await self.bot.delete_message(msg)