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

