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

Discord Python机器人仅删除自身消息的实现问题求助

解决Discord机器人仅删除自身消息的问题

我明白你想实现只清理机器人自己发送的消息,官方文档的代码跑不起来大概率是Discord.py版本差异或者变量引用的问题,我给你梳理下可行的方案:

先排查核心问题

你现在的代码用的是bot实例,但官方示例用的是client,而且旧版的purge_from方法在Discord.py v1.0+已经被替换成了purge,这很可能是你代码报错的核心原因。

完整可用的实现代码(适配新版Discord.py)

这里给你适配当前主流Discord.py版本的代码,直接就能用:

@bot.command()
async def purge(ctx, msglimit: int):
    # 定义检查函数:只匹配机器人自己的消息
    def is_bot_message(m):
        return m.author == bot.user

    # 批量删除符合条件的消息
    deleted = await ctx.channel.purge(limit=msglimit, check=is_bot_message)
    
    # 发送清理完成的提示
    await ctx.send(f"已清理 **{len(deleted)}** 条机器人消息")

关键细节说明

  • 版本适配:新版Discord.py用ctx.channel.purge()替代了旧版的purge_from,参数逻辑一致,但调用方式更直观。
  • 检查函数:is_bot_message函数会过滤出所有作者是机器人自身的消息,确保不会误删用户消息。
  • 权限要求:记得给机器人开启「管理消息」的权限,否则无法执行删除操作。
  • 参数简化:新版Discord.py不需要再写pass_context=True,上下文会自动传递给ctx参数。

如果你还在使用旧版Discord.py(v0.16.x)

如果因为某些原因不能升级版本,也可以修改官方示例的变量引用,把client换成你自己的bot实例:

@bot.command(pass_context=True)
async def purge(ctx, msglimit: int):
    def is_me(m):
        return m.author == bot.user  # 这里把client换成bot
    deleted = await bot.purge_from(ctx.message.channel, limit=msglimit, check=is_me)
    await bot.say(f"Cleared **{len(deleted)}** Messages")

这样应该就能正常运行了,要是还有问题可以看看控制台的报错信息,大概率是权限或者版本的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:25