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
相关产品推荐
相关产品推荐

