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

如何让Discord机器人删除自身发送的消息?代码问题排查

问题分析与解决

你的代码核心问题是删除对象搞错了:

  • ctx.message对应的是用户触发run命令时发送的那条消息(比如用户发的!run),不是机器人自己发送的「Loading...」消息。尝试删除用户消息需要机器人拥有「管理消息」权限,这就是你触发权限不足错误的原因。
  • 要删除机器人自身发送的消息,必须先保存ctx.send()返回的消息对象,再调用该对象的delete()方法。

修正后的代码

@client.command()
async def run(ctx):
    # 保存机器人发送的Loading消息实例
    loading_msg = await ctx.send("Loading...")
    # 删除机器人自己的Loading消息
    await loading_msg.delete()
    await ctx.send("Loading Complete!")

如果需要模拟真实加载的延迟效果,可以加入asyncio.sleep():

import asyncio

@client.command()
async def run(ctx):
    loading_msg = await ctx.send("Loading...")
    # 模拟2秒加载耗时
    await asyncio.sleep(2)
    await loading_msg.delete()
    await ctx.send("Loading Complete!")

额外说明

如果机器人删除自身消息仍报错,检查服务器权限设置:确保机器人拥有「发送消息」和「删除消息」权限(删除自身消息通常不需要高权限,但部分服务器可能有特殊配置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:04:53