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

commands.Cog.listener()函数异常行为排查与修正求助

问题分析与解决方案

核心问题点

  • 违禁词遍历逻辑错误:原代码将违禁词列表转成字符串后拆分单个字符遍历,而非直接遍历列表中的完整单词,导致检测逻辑完全偏离预期。
  • 提前终止检查:遍历过程中只要遇到不匹配的词就直接return,导致后续违禁词无法被检测,比如mouse会因为前面的cat不匹配而跳过检查。
  • 误触发删除:由于遍历单个字符,任何包含违禁词中单个字符的消息都会被误删,比如noob中的o存在于dog中,因此被误删。

修正后的代码实现

@commands.Cog.listener()
async def on_message(self, message):
    if message.author.bot:
        return
    
    bwl = GetWF(message.guild.id)  # 获取对应服务器的违禁词列表
    if bwl is not None:
        try:
            # 直接遍历违禁词列表中的每个单词
            for word in bwl:
                # 检查消息内容是否包含违禁词(可根据需求改为全词匹配)
                if word.lower() in message.content.lower():
                    await message.delete()
                    await message.channel.send(f"`HEY {message.author.name}!\nThat word is banned!`")
                    # 找到违禁词后跳出循环,避免重复发送提示
                    break
        except Exception as e:
            print(f"检测违禁词时出错: {e}")
    else:
        print("未找到该服务器的违禁词列表")
    
    await client.process_commands(message)

关键优化说明

  • 直接遍历违禁词列表:无需对列表做多余的字符串转换,直接遍历bwl中的每个完整单词,保证检测对象正确。
  • 移除错误的return:仅在找到违禁词并处理后break循环,而非遇到不匹配就终止,确保所有违禁词都能被检查。
  • 大小写不敏感检测:使用lower()统一转换为小写,避免因大小写差异导致漏检(如Mouse和mouse都会被检测)。
  • 异常处理优化:添加错误打印,便于排查问题,而非静默返回。

内容的提问来源于stack exchange,提问作者Roy Eastman-Kodak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:50:10