【问题标题】:Discord.py swear word filterDiscord.py 发誓词过滤器
【发布时间】:2020-09-17 07:04:54
【问题描述】:

我正在制作一个带有重写功能的 discord.py 机器人。我想制作一个反脏话过滤器,这样如果有人在消息中发誓,它将删除消息并发送消息。我有一个包含我需要的所有单词的 swear word 文件。

这是我到目前为止的代码,但它不起作用:

@client.event
async def on_message(ctx, message):
    msg = message.content
    with open('badWords.txt') as BadWords:
        if msg in BadWords.read():
            await message.delete()
            await ctx.send("Dont use that word!")
        else:
            await ctx.process_commands(message)

感谢所有帮助!

【问题讨论】:

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


    【解决方案1】:

    假设BadWords.txt 的格式如下:

    Word1 Word2 Word3
    

    请注意,每个单词都用空格隔开。

    所以,我们需要在on_message() 函数之外打开文件。如果它在函数内部,那么我们会一直打开它,每次。这对机器人来说可能很难。因此,在顶部,import 语句下方:

    with open('BadWords.txt', 'r') as f:
        words = f.read()
        badwords = words.split()
    
    

    现在,您拥有了一个名为 badwords 的数组中的所有单词。进入你的 on_message() 函数,然后添加:

    @client.event
    async def on_message(ctx, message):
        msg = message.content
        for word in badwords:
            if word in msg:
                await message.delete()
                await ctx.send("Dont use that word!")
        await ctx.process_message(message)
    

    【讨论】:

    • process_message 有什么作用?
    • @BhavyadeepYadav process_message() 方法允许使用相同的消息执行命令。如果不存在,则只会执行 on_message() 事件的代码。
    • 谢谢! :D 这帮助我回答了同样问题的其他问题。
    • 太棒了!我做了.splitlines() 而不是split(),所以它只分割每行而不是在单词中间(因为默认是任何空格)。
    【解决方案2】:
    async def on_message(ctx, message):
        msg = message.content
        with open('badWords.txt') as BadWords:
            if msg in BadWords.read():
                await message.delete()
                await ctx.send("Dont use that word!")
        await ctx.process_commands(message)
    

    await ctx.process_commands(message) 允许您在使用 on_message 之后使用命令。

    【讨论】:

    • 由于缩进错误导致代码格式错误,请修复。如果msg in BadWords.read() 为假怎么办?那么await ctx.process_commands(message)就不会执行了。
    【解决方案3】:

    Administrator permissions(permission integer '8') 的 Discord 机器人与普通用户具有相同的权限。由于没有用户可以delete 另一个用户的消息,因此机器人也不能这样做。因此,机器人也不能edit其他用户的消息。

    【讨论】:

    • 这并不完全正确。如果您在 discord.py 的文档中查看 here,机器人能够删除消息。
    • Administrator Permissions (8) 的机器人拥有与服务器管理员相同的权限。由于管理员可以删除其他人的消息,因此具有此给定权限的机器人也可以。这些机器人还可以查看所有频道(甚至是对大多数成员隐藏的频道),并执行其他拥有此权限的人类成员可以执行的其他操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多