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

Discord机器人开发:如何实现指定频道触发后批量删除另一频道含特定内容的消息

问题分析与修正方案

你的代码没法实现预期功能,存在几个关键问题:

  • 错误地给自定义函数opt1添加了@bot.event装饰器——这个装饰器仅用于注册Discord.py内置的事件处理器(比如on_message),自定义工具函数不能这么用,会触发bot运行错误。
  • 清理消息的频道完全搞错了:你在用户发送“++”的频道(954573376209420328)执行purge,但实际需要清理的是另一个频道(954573387387265024),即便check里判断了消息所属频道,在错误的频道里也找不到符合条件的消息。
  • 缺少bot.process_commands调用:如果你的bot还有其他命令,覆盖on_message后不调用这个方法会导致所有命令失效。

正确实现代码

@bot.event
async def on_message(message):
    # 先处理bot的其他命令(如果有的话),保证原有功能不受影响
    await bot.process_commands(message)
    
    # 判断是否是目标触发频道的指定消息
    if '++' in message.content.strip() and message.channel.id == 954573376209420328:
        # 获取需要清理的目标频道
        target_channel = bot.get_channel(954573387387265024)
        if target_channel is None:
            # 可选:给触发用户反馈频道不存在的问题
            await message.channel.send("目标频道不存在,无法执行清理操作")
            return
        
        # 在目标频道清理包含"++"的消息
        await target_channel.purge(
            limit=100,
            check=lambda x: '++' in x.content.strip().lower()
        )
        # 可选:给触发用户反馈清理完成
        await message.channel.send("已完成目标频道的消息清理")

代码说明

  1. 去掉了多余的opt1函数,把逻辑整合到on_message里更简洁(如果后续需要复用清理逻辑,也可以抽成普通函数,但绝对不能加@bot.event装饰器)。
  2. 先调用bot.process_commands,确保bot的其他命令能正常运行。
  3. 通过bot.get_channel获取目标清理频道,先判断频道是否存在,避免出现找不到频道的报错。
  4. 在目标频道执行purge操作,check只需要判断消息内容包含"++"即可——因为已经在目标频道里执行清理,不需要额外判断频道ID。

内容的提问来源于stack exchange,提问作者Alexandr Zubkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:52:37