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

如何为Discord机器人创建指定用户的/purge清理命令

解决Discord机器人清理指定用户消息的问题

直接给你改好的代码,再讲清楚关键改动:

# Purge command
@commands.has_permissions(administrator=True)
@bot.slash_command(
    name="purge", description="Purge messages from channel (can target a specific user)",
    guild_ids=[1222114873962663967]
)
async def purge(ctx, number: int, user: discord.Member = None):
    # 定义消息过滤函数:指定用户时只留该用户的消息,否则保留所有消息
    def is_target_user(msg):
        return msg.author == user if user else True

    # 执行清理:limit+1是为了包含这条命令本身的消息
    purged_messages = await ctx.channel.purge(limit=number + 1, check=is_target_user)
    # 统计实际清理的有效消息数(减去命令自身)
    actual_count = len(purged_messages) - 1

    # 根据是否指定用户返回对应提示
    if user:
        await ctx.respond(f"已清理 {actual_count} 条来自 {user.mention} 的消息")
    else:
        await ctx.respond(f"已清理 {actual_count} 条消息")

关键改动说明:

  • 添加可选用户参数:把user: discord.Member = None加入函数参数,= None标记该参数为可选,用户使用命令时可选择是否传入目标用户。
  • 消息过滤逻辑:通过check参数传入自定义过滤函数is_target_user,精准控制要清理的消息范围——指定用户时只清理该用户的消息,未指定则清理所有消息。
  • 优化回复内容:根据是否指定用户生成不同提示,同时用len(purged_messages)-1统计实际清理的消息数(因为命令本身的消息会被算进limit里,需要减去)。

额外注意:

  • 确保你的discord.py版本为v2.x及以上,该版本才支持slash命令的完整特性。
  • discord.Member类型仅适用于服务器(guild)环境,刚好你的命令指定了guild_ids,完全适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:47:02