Discord.py 1.0.0 echo命令无法删除消息:ctx无delete_message属性报错
解决Discord.py 1.0.0中Echo命令的错误问题
你遇到的问题主要是因为Discord.py 1.0.0版本对API做了不少改动,你的代码还沿用了旧版本的写法,我来帮你一步步修正:
首先梳理几个核心问题:
- 变量名不统一:你初始化的是
client = Bot(...),但装饰器用的是@bot.command,这会导致命令无法被正确识别,得把变量名统一成client或者bot。 delete_message方法已被移除:1.0.0版本后,Discord.py删除了client.delete_message()方法,取而代之的是直接调用消息对象的delete()异步方法。- 发送消息的方式错误:
client.send(ctx.message)这种写法不符合新版本规范,你需要回显的是消息内容,应该用ctx.send()方法传入ctx.message.content。 pass_context=True在1.0版本中已不再需要,默认就会传递上下文。
修正后的完整代码如下:
from discord.ext import commands client = commands.Bot(description="Test bot", command_prefix="&", pm_help=False) @client.command() async def echo(ctx): # 回显触发命令的消息内容 await ctx.send(ctx.message.content) # 删除触发命令的原消息 await ctx.message.delete() # 记得添加运行Bot的代码,替换成你的Bot令牌 client.run("你的Bot令牌字符串")
如果你想优化echo命令,让它只回显命令后的内容(比如输入&echo 这是测试时,只回显"这是测试"而不是整条命令),可以改成带参数的版本:
@client.command() async def echo(ctx, *, content: str): await ctx.send(content) await ctx.message.delete()
这里的*表示接收所有后续文本作为参数,能更好地满足日常使用需求。
最后提醒一句:要确保你的Bot拥有对应频道的消息删除权限,否则执行delete()方法时会抛出权限不足的错误哦。
内容的提问来源于stack exchange,提问作者webneko
相关产品推荐
相关产品推荐

