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

discord.py运行clear/purge命令出现delete()传参错误如何修复

错误原因
  • 核心报错触发点:你写的await ctx.message.delete(sent)存在逻辑错误,ctx.message是用户发送的触发命令的消息本身,它的delete()方法不需要传入任何参数,你传入了sent对象才会触发「参数数量不匹配」的报错。你要删除发送的成功提示,应该调用sent对象自身的delete()方法。
  • 额外隐性错误:
    1. 代码缩进错误,当前embed定义、消息清理、提示发送的逻辑都没有缩进在clear函数的作用域内,运行会直接触发语法错误
    2. 使用了同步阻塞的time.sleep(),会导致整个机器人的所有事件响应被卡住,应该使用异步的asyncio.sleep()
    3. discord.py v1.0之后版本pass_context参数已经废弃,默认会自动传入ctx,不需要额外声明
修复后的完整代码
import asyncio
import discord
from discord.ext import commands

# 需和你之前的bot初始化逻辑保持一致,示例仅供参考
# bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

@bot.command()
@commands.has_permissions(manage_messages=True) # 可选:权限校验,仅拥有管理消息权限的用户可调用
async def clear(ctx, amount=5):
    # +1是把用户发送的命令消息也纳入清理范围,符合普通用户使用预期
    await ctx.channel.purge(limit=amount + 1)
    
    embed = discord.Embed(
        title = '🟢 操作成功',
        description = f'已清理 {amount} 条消息',
        colour = discord.Colour.blue()
    )
    sent = await ctx.send(embed=embed)
    await asyncio.sleep(3) 
    # 直接调用提示消息自身的删除方法
    await sent.delete()
额外注意事项
  • 使用前请确保你的机器人已经开启了服务器消息相关的Intents权限,同时在服务器内被授予了「管理消息」的权限,否则会触发权限不足的报错
  • 如果不需要限制调用权限,删除@commands.has_permissions(manage_messages=True)这行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:48:01