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

Discord机器人报错DiscordAPIError[40060]但仍正常运行,求解原因

解决DiscordAPIError[40060]: Interaction has already been acknowledged错误

错误原因

这个报错是因为Discord对slash命令的交互有3秒超时限制:如果你的命令逻辑(比如这里的users.all()数据库查询)执行时间超过3秒,Discord会自动标记该交互已被处理,后续再调用interaction.reply()就会触发这个错误。虽然机器人最终可能还是能完成操作,但Discord的交互机制已经判定超时,所以抛出了这个异常。

修复方案

在执行耗时操作(比如数据库查询)前,先调用interaction.deferReply()告知Discord“稍后会回复”,这样可以把交互超时时间延长到15分钟,等操作完成后再用interaction.editReply()替换初始的加载提示。

修改后的代码如下:

const { SlashCommandBuilder } = require('discord.js');
const { QuickDB } = require('quick.db');
const db = new QuickDB();

const users = db.table('users');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('manager')
        .setDescription('获取管理信息。'),
    async execute(interaction) {
        // 先发送延迟回复,申请更长处理时间
        await interaction.deferReply();
        // 执行数据库查询,获取users表的所有数据(返回数组)
        const userList = await users.all();
        // 格式化返回内容,根据需求调整
        let replyContent = '你已进入管理界面!\n';
        if (userList.length > 0) {
            replyContent += `当前用户数据共${userList.length}条:\n`;
            userList.forEach((item, idx) => {
                replyContent += `${idx+1}. 用户ID: ${item.id},数据: ${JSON.stringify(item.value)}\n`;
            });
        } else {
            replyContent += '暂无用户数据。';
        }
        // 替换延迟回复为实际内容
        await interaction.editReply(replyContent);
    },
};

额外说明

  • users.all()本身就会返回数组格式的结果,直接用变量接收后即可遍历、处理这些数据。
  • 如果不想让其他成员看到回复,可以在deferReply时添加参数:await interaction.deferReply({ ephemeral: true }),这样只有命令发起者能看到内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:50:51