检查文本文件中的单词

时间:2018-08-13 11:24:39

标签: python python-3.x discord.py

您好,我正在为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

2 个答案:

答案 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)