如何使用 on_message_edit 事件来阻止脏话? (不和谐.py)

时间:2021-02-28 18:08:31

标签: python discord.py

如果有人使用 on_message_edit 事件将消息编辑为脏话消息,我希望我的机器人删除该消息,但我一直在尝试解决这个问题,但到目前为止没有任何效果。这是不起作用的代码。

with open("badwords.txt") as file:
    blacklist = file.read().split('\n')

@client.event
async def on_message_edit(before, after, message):
    for word in blacklist:
        regex_match_true = re.compile(fr"[{symbols}]*".join(list(word)), re.IGNORECASE)
        regex_match_none = re.compile(fr"([{letters}]+{word})|({word}[{letters}]+)", re.IGNORECASE)
        if regex_match_true.search(message.content) and regex_match_none.search(message.content) is None:
            #embed here
            await message.delete()
            break

2 个答案:

答案 0 :(得分:0)

on_message_edit 事件没有 message 参数。有参数 beforeafter,它们都是 discord.Message 对象。据我了解,在一条消息被编辑后,如果它包含一个黑名单词,你试图删除它。您可以使用 after.content 获取已编辑消息的内容。然后你可以检查它是否包含黑名单这个词。

blacklist = open('badwords.txt', 'r').read().split('\n')

@client.event
async def on_message_edit(before, after):
    for word in blacklist:
        if word in after.content:
            await after.delete()
            return

这是一个如何执行此操作的简单示例,但如果您想使用 regex,也可以使用它。

参考

答案 1 :(得分:0)

with open("badwords.txt") as file:
    blacklist = [line.strip() for line in file.readlines()]

@client.event
async def on_message_edit(before, after):
    for word in after.content.split():
        if word.lower() in blacklist:
            #embed here
            return await message.delete()