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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:38