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

