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

Python Discord Bot指定用户消息删除功能实现求助

解决Discord机器人删除指定用户消息的问题

我来帮你搞定这个需求!你的现有代码是删除频道内最新的N条消息,要改成只删特定用户的消息其实很简单,只需要加个用户参数并做个判断就行,下面是具体的修改方案:

修改后的代码

import discord
from discord.ext import commands

@client.command()
@commands.has_permissions(manage_messages=True)  # 限制只有有权限的用户能使用这个命令
async def purge(ctx, user: discord.User, number: int):
    counter = 0
    # 注意:如果你的Discord.py是v2.x版本,需要把logs_from改成history()
    async for message in ctx.message.channel.history(limit=None):  # 遍历频道消息,直到找够目标数量
        if counter >= number:
            break
        if message.author == user:
            await message.delete()
            counter += 1
    await ctx.send(f"已删除{user.name}的{counter}条消息", delete_after=5)  # 发送提示并自动删除

关键修改点说明

  • 添加用户参数:把命令参数改成user: discord.User,这样你可以通过@用户名或者用户ID来指定目标用户,Discord.py会自动帮你解析成User对象。
  • 消息判断条件:在遍历消息时增加if message.author == user,只有当消息作者是指定用户时才执行删除操作。
  • 权限控制:添加@commands.has_permissions(manage_messages=True)装饰器,确保只有拥有管理消息权限的用户才能调用这个命令,避免滥用。
  • 适配新版本:如果你的Discord.py是v2.x及以上版本,原来的logs_from方法已经被弃用,需要替换成history(),代码里已经标注了这一点。

额外优化建议

  • 如果想支持“删除该用户所有消息”的功能,可以把number参数设为可选,比如:
    async def purge(ctx, user: discord.User, number: int = None):
        counter = 0
        async for message in ctx.message.channel.history(limit=None):
            if number is not None and counter >= number:
                break
            if message.author == user:
                await message.delete()
                counter += 1
    
  • 可以添加错误处理,比如当用户不存在时给出提示:
    @purge.error
    async def purge_error(ctx, error):
        if isinstance(error, commands.BadArgument):
            await ctx.send("找不到指定的用户,请检查用户名或ID是否正确!")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:07:23