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

Discord.js机器人删除消息时报错10008(Unknown Message)如何解决?

问题原因

你遇到的报错码10008代表目标消息已不存在,和你猜测的原因一致:触发删除逻辑时,消息已经被其他主体(比如发消息的机器人、消息发送者、频道管理员)提前删除了。


解决方案

方案1:直接捕获删除操作的异常(推荐)

提前检测消息是否存在需要额外调用Discord接口,效率更低,直接在删除操作的Promise回调中捕获异常是最优解,只需要修改setTimeout中的代码,给msg.delete()添加catch处理即可:

client.on("messageCreate", msg => {
    let borrar = false;
    let delay = 0;
    if (msg.author.username === 'Ayana') {
        delay = 10000;
        borrar = true;
    }
    if (msg.content.startsWith('=') || msg.content.startsWith('-')) {
        delay = 15000;
        borrar = true;
    }
    if (borrar) {
        setTimeout(() => {
            msg.delete()
                .catch(err => {
                    // 错误码10008为消息不存在,直接忽略即可
                    if (err.code !== 10008) {
                        // 其他错误比如无权限等,可以按需打印日志排查
                        console.error('删除消息失败:', err)
                    }
                })
        }, delay);
    }
}) // Borra comandos y respuestas de bots

方案2:提前检测消息是否存在(可选)

如果确实需要提前判断消息状态,可以先调用频道的消息fetch方法查询目标消息是否存在,存在再执行删除:

setTimeout(async () => {
    try {
        // 尝试拉取目标消息,拉取成功说明消息存在
        await msg.channel.messages.fetch(msg.id);
        await msg.delete();
    } catch (err) {
        // 拉取失败或者删除失败都在这里处理,同样可以过滤10008错误
        if (err.code !== 10008) {
            console.error('操作失败:', err)
        }
    }
}, delay)

注意事项

  • 确保你的机器人已经被授予对应频道的管理消息权限,否则会出现403权限不足的错误
  • 不要直接依赖msg.deleted属性判断,这个属性只在当前客户端缓存中标记了消息是否被你的机器人删除,其他主体删除的消息不会更新这个属性,判断结果不可靠

内容的提问来源于stack exchange,提问作者Cristian David Moraleda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:48:04