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

Discord.py 如何实现仅清理/purge 机器人发送的消息

Discord.py 仅删除机器人消息的 purge 命令实现方案

实现核心是调用频道的purge方法时,通过check参数传入自定义过滤规则,仅匹配机器人发送的消息执行删除。


前缀命令实现示例(适配discord.py v1.x/v2.x)

import discord
from discord.ext import commands

# 初始化机器人,注意需开启消息内容意图
bot = commands.Bot(command_prefix="!", intents=discord.Intents(message_content=True, guilds=True, messages=True))

@bot.command(name="purge_bot")
@commands.has_permissions(manage_messages=True) # 限制仅拥有管理消息权限的用户可调用
async def purge_bot_msg(ctx, limit: int = 100):
    # 过滤规则:仅返回发送者为机器人自身的消息
    def check_rule(message):
        return message.author == bot.user

    # 执行消息删除操作
    deleted_count = await ctx.channel.purge(limit=limit, check=check_rule)
    # 发送临时反馈,3秒后自动删除
    await ctx.send(f"成功清理 {len(deleted_count)} 条机器人发送的消息", delete_after=3)

斜杠命令(应用命令)实现示例(适配discord.py v2.x)

@bot.tree.command(name="purge_bot", description="清理指定数量的机器人发送消息")
@discord.app_commands.checks.has_permissions(manage_messages=True)
async def slash_purge_bot(interaction: discord.Interaction, limit: int = 100):
    def check_rule(message):
        return message.author == interaction.client.user

    deleted_count = await interaction.channel.purge(limit=limit, check=check_rule)
    await interaction.response.send_message(f"成功清理 {len(deleted_count)} 条机器人消息", ephemeral=True, delete_after=3)

注意事项

  • 机器人必须被授予管理消息权限,否则无法执行删除操作
  • 单次purge默认最多处理100条历史消息,如需清理更多可通过循环批量拉取历史消息处理
  • 如果需要额外过滤规则,仅需修改check_rule函数的返回逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:39:03