Python 脚本不过滤不一致的脏话

Python 脚本不过滤不一致的脏话,python,discord.py,Python,Discord.py,我正在尝试创建我的discord.py机器人来删除带有脏话的邮件,然后发布公告,并因为他的行为而辱骂他。我在.txt文件中加载了一个坏单词列表,看起来像:“坏单词,坏单词2,等等” 我试过很多方法,但我真的不知道怎么做 机器人称自己太多,看起来像是递归或smth! 他不仅对坏话有反应,对好话也有反应。我认为最好的解决办法是使用re 此外,您正在使用GuildChannel.purge,而您可以只使用消息。删除如果至少为了清晰起见,并且不删除它发送的消息,如果使用该逻辑,则永远不会调用bot.p

我正在尝试创建我的discord.py机器人来删除带有脏话的邮件,然后发布公告,并因为他的行为而辱骂他。我在.txt文件中加载了一个坏单词列表,看起来像:“坏单词,坏单词2,等等”

我试过很多方法,但我真的不知道怎么做

机器人称自己太多,看起来像是递归或smth!
他不仅对坏话有反应,对好话也有反应。

我认为最好的解决办法是使用
re

此外,您正在使用
GuildChannel.purge
,而您可以只使用
消息。删除
如果至少为了清晰起见,并且不删除它发送的消息,如果使用该逻辑,则永远不会调用bot.process_命令,除非有一个坏字,所以如果没有坏字,请调用它,或者将它放在方法的末尾

with open('badwords.txt','r') as f:
    bad_words = '|'.join(s for l in f for s in l.split(', '))
    bad_word_checker = re.compile(bad_words).search

@bot.event 
async def on_message(message)
    if bad_word_checker(message.content):
        await message.delete()
        await message.channel.send(...)
    else:
        await bot.process_commands(message)
问题是

[bad_word.strip(', ').lower() for bad_word in file.read()]
file.read()在一个字符串中读取整个文件,通过对其进行迭代,可以迭代字符串中的字符,因此在列表理解中,坏单词不包含单词,而是包含字母。 在您显示的示例中,用户发送了一个字符的消息,因此,如果该字符在文件中至少出现一次,则您的bot会将其视为一个坏单词

确切的解决方案取决于badwords.txt格式,如果您说所有单词都在同一行中,并用“,”分隔,那么这应该可以实现

bad_words = file.read().strip().lower().split(', ')

所以我现在解决了这个问题。就像波尔库所说的那样,这是一个迭代错误,就是这样! 我还使用了俄语单词,我想他们在加密方面犯了错误(你可以通过MIMEtext来解决)。这是我的最终代码:

with open('badwords.txt') as file:
    file = file.read().split()


#----------------------------------EVENTS----------------------------------

@bot.event 
async def on_message(message):
    for badword in file:
        if badword in message.content.lower():
            await message.delete()
            await message.channel.send(f'{message.author.mention}! Your message has not passed moderation!')
        else:
            await bot.process_commands(message)


badwords.txt看起来像什么?badword1,badword2,badword3。。。。。直到最后。它看起来和我现在拼写的一模一样。直截了当地说,我猜在阅读文件时会出现这个问题,因为我有俄语单词,所以当我打印整个列表时,它会给出:x04c\x04n\x04\x00\x00e\x04c等。可能我应该尝试编解码器,然后在第16行出现了这种情况,在on_message if bad_word checker(message)中:TypeError:应为字符串或字节,如object
message.content
My Error
with open('badwords.txt') as file:
    file = file.read().split()


#----------------------------------EVENTS----------------------------------

@bot.event 
async def on_message(message):
    for badword in file:
        if badword in message.content.lower():
            await message.delete()
            await message.channel.send(f'{message.author.mention}! Your message has not passed moderation!')
        else:
            await bot.process_commands(message)