今天 (7.8.2021) Discord.js v13 已经发布。所以我升级了我以前的 Discord.js 安装
npm i discord.js@latest
然后将我的基本 index.js 文件调整为这种状态(我遵循了 Discord.js 指南):
const { Client, Intents } = require("discord.js");
const client = new Client({
intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES],
});
client.once("ready", () => {
console.log("Ready!");
});
client.login("my-token");
但是,当我尝试运行我的代码时,我不断收到此错误:
$节点。
(节点:11216)UnhandledPromiseRejectionWarning:ReferenceError:未定义 AbortController
在 RequestHandler.execute (C:\ pathTo \node_modules\discord.js\src\rest\RequestHandler.js:172:15)
自 2018 年以来,我一直在使用 Discord.js ,因此我对新版本遇到问题感到惊讶。这是 Discord.js v13 库的问题吗?如果不是,我该如何修复错误?
原文由 Behemoth 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题:
使用 Discord.js v13 的 先决条件 之一是您需要使用 NodeJS v16.6 或更高版本(强调我的):
修复:
解决方法是更新您的节点版本,您可以通过运行
node -v
确认您当前的节点版本。有 多种不同的方法 来更新节点,如果您使用的是 Linux / iOS,一种方法是运行以下命令:第一个命令安装命令行界面 n ,然后第二个命令使用
n
更新到最新稳定版本的节点。如果您使用的是 Windows,则可以按照 pradeek 的 回答 中的概述安装 NVM 。Heroku 用户注意事项:
按照上述步骤更新节点版本后,您可能需要通过添加/更新引擎来更新
package.json
文件:为什么这在 v13 中中断了?:
在 discordjs 的几个版本之前,添加了一项功能,可以中止花费太长时间(超过 15 秒)的请求。为了实现这个功能,他们之前使用的是节点包 abort-controller 。然而,现在 nodejs 已经发展,它现在有自己的 AbortController 全局而不需要外部包。 Discord.js v13 现在依赖这个全局变量,因为它们 不再使用中止控制器包。为了使用
AbortController
由 nodejs 提供的全局,您需要使用节点 v15 或更高版本 - 但是,根据 discord.js 指南的建议,您应该使用 v16.6+ 来启用对它可能使用的其他功能。