You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py开发Discord Bot命令重复执行与脏话过滤逻辑冲突问题

故障原因

你的on_message事件逻辑存在流程错误:

  • 你将await client.process_commands(message)写在了违禁词遍历的else分支里,每遍历1个违禁词,只要当前词没有命中消息内容,就会触发1次命令解析执行
  • 你的违禁词库刚好有7个词条,触发命令的正常消息本身不包含违禁词,所以7次遍历都会走到else分支,等于连续调用了7次命令处理,最终导致命令被重复执行7次
  • 而发送违禁词时会命中if分支,不会走到else调用命令处理,因此不会出现重复触发的问题
修复方案

调整on_message事件的执行逻辑:

  1. 先过滤机器人自身发送的消息,避免无效检测和自触发
  2. 遍历违禁词时只要命中任意一个,就执行删除消息、发送提示的操作,之后直接结束事件回调,不再处理后续逻辑
  3. 所有违禁词都未命中时,仅在遍历结束后调用1次命令处理方法

修复后的代码示例:

@client.event
async def on_message(message):
    # 先过滤机器人自己发的消息,避免循环触发
    if message.author.bot:
        return
    msg = message.content
    has_badword = False
    for x in badwords:
        if x in msg:
            has_badword = True
            break
    if has_badword:
        await message.delete()
        await message.channel.send("Please do not use this word ever")
        return
    # 确认无违禁词后,只调用一次命令处理
    await client.process_commands(message)

内容的提问来源于stack exchange,提问作者hARASİVa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:27:00