添加 discord.js 命令后,Nodemon 突然卡在 "clean exit - waiting for changes before restart"
Nodemon suddenly stuck in "clean exit - waiting for changes before restart" after adding discord.js command
我在 vs code 上使用 node.js + discord.js,这也是我第一次编码,所以请原谅我丑陋的格式等等。
一切都是最新的并且 运行 非常好,直到它......没有。这让我抓狂,none 对其他人有效的解决方案对我也有效。
我一直在关注 this 教程,但为了个性化我的机器人而偏离了它。
Index.js
require('dotenv').config();
const {
Client,
Message,
User,
ClientUser,
GuildMember,
ClientApplication,
Guild
} = require('discord.js');
const client = new Client({
intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MESSAGE_TYPING", "GUILD_PRESENCES"]
});
const prefix = '!';
client.on('ready', () => {
console.log('SHOWTIME!!');
client.user.setStatus('idle');
});
client.on("message", (message) => {// EventEmitter
if (message.content == "!ping") { // Check if message is "!ping"
message.channel.send("Pinging ...") // Placeholder for pinging ...
.then((msg) => { // Resolve promise
msg.edit("Pong! " + (Date.now() - message.createdTimestamp)); // Edits message with current timestamp minus timestamp of message
});
}
});
client.on("message", (message) => {
if (message.author.bot) return; {
if (message.content == "!help") {
message.channel.send("What can I help you with?")
.then((message) => {
message.react("1️⃣").then(_e => {
message.react("2️⃣").then(_e => {
message.react("⏹");
});
});
});
}
}
client.on("message", (message) => {
if (message.content == "!ns") {
(message.react)("");
message.reply('The next session is scheduled for ...!');
}
});
client.on("message", async (message) => {
if (message.author.bot) return; {
if (message.content == "!uptime") {
(message.react)("✨");
let days = Math.floor(client.uptime / 86400000);
let hours = Math.floor(client.uptime / 3600000) % 24;
let minutes = Math.floor(client.uptime / 60000) % 60;
let seconds = Math.floor(client.uptime / 1000) % 60;
message.channel.send((`__I have been online for...__\n${days}d ${hours}h ${minutes}m ${seconds}s!`));
}
}
});
client.login(process.env.token_renren);
});
package.JSON
{
"name": "renren_v2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node ./src/index.js",
"dev": "nodemon ./src/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"discord.js": "^13.1.0",
"dotenv": "^10.0.0",
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^2.0.12"
}
}
终端中不断显示的消息:
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./src/index.js`
[nodemon] clean exit - waiting for changes before restart
具体来说,Nodemon 在我添加 这个 特定命令后停止工作:
client.on("message", (message) => {
if (message.author.bot) return; {
if (message.content == "!help") {
message.channel.send("Hm? What can I help you with?")
.then((message) => {
message.react("1️⃣").then(_e => {
message.react("2️⃣").then(_e => {
message.react("⏹");
});
我在它第一次给我错误后将其删除,但又将其添加回去以查看是否是问题所在。将其添加回去后,将其删除将不再使 nodemon 工作。我试过卸载、将其安装为项目开发人员、清理安装节点等,但到目前为止没有任何效果。
A clean exit
表示您的程序完成且没有任何错误。这正是您的程序当前所做的。您定义了很多事件侦听器,但您的机器人本身从未启动。
正如@Zsolt 所指出的,您目前在消息处理程序中登录了您的 discord 客户端。这意味着,机器人必须在开始之前收到一条消息。但是由于您的机器人没有登录,所以这永远不会发生。
您需要将登录调用移动到脚本的底部,然后它应该可以工作:
client.login(process.env.token_renren)
关于您的代码结构的注释:
您正在为一个事件定义多个侦听器。虽然这有效,但您无法控制调用侦听器的顺序,这可能会导致意外行为。正如@Zsolt 指出的那样,您通常会定义 one message
侦听器,然后将事件传递给处理不同消息的特定函数。
您还更改了很多 then
,这会使代码很难阅读(这称为 callback hell)。您可以使用 async
函数来避免这种情况:
async function handleMessage(message) {
if (message.author.bot) return
if (message.content == "!help") {
let response = await message.channel.send("What can I help you with?")
await response.react("1️⃣")
await response.react("2️⃣")
await response.react("⏹")
}
}
client.on("message", handleMessage)
这使得代码更浅,更容易发现消息处理程序中的 login
调用等内容。
此外,现在大多数 IDE 都提供自动代码格式化。除非您正在处理不使用此功能的大型存储库,否则我强烈建议 运行 偶尔这样做。我为我的代码启用了“保存格式”并习惯了它,但这是个人喜好(尽管它确实可以节省时间,有些雇主甚至可能需要它)。这使得很容易发现错误的缩进和奇怪的格式,比如你的 if (message.author.bot) return; {
.
我在 vs code 上使用 node.js + discord.js,这也是我第一次编码,所以请原谅我丑陋的格式等等。 一切都是最新的并且 运行 非常好,直到它......没有。这让我抓狂,none 对其他人有效的解决方案对我也有效。 我一直在关注 this 教程,但为了个性化我的机器人而偏离了它。
Index.js
require('dotenv').config();
const {
Client,
Message,
User,
ClientUser,
GuildMember,
ClientApplication,
Guild
} = require('discord.js');
const client = new Client({
intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MESSAGE_TYPING", "GUILD_PRESENCES"]
});
const prefix = '!';
client.on('ready', () => {
console.log('SHOWTIME!!');
client.user.setStatus('idle');
});
client.on("message", (message) => {// EventEmitter
if (message.content == "!ping") { // Check if message is "!ping"
message.channel.send("Pinging ...") // Placeholder for pinging ...
.then((msg) => { // Resolve promise
msg.edit("Pong! " + (Date.now() - message.createdTimestamp)); // Edits message with current timestamp minus timestamp of message
});
}
});
client.on("message", (message) => {
if (message.author.bot) return; {
if (message.content == "!help") {
message.channel.send("What can I help you with?")
.then((message) => {
message.react("1️⃣").then(_e => {
message.react("2️⃣").then(_e => {
message.react("⏹");
});
});
});
}
}
client.on("message", (message) => {
if (message.content == "!ns") {
(message.react)("");
message.reply('The next session is scheduled for ...!');
}
});
client.on("message", async (message) => {
if (message.author.bot) return; {
if (message.content == "!uptime") {
(message.react)("✨");
let days = Math.floor(client.uptime / 86400000);
let hours = Math.floor(client.uptime / 3600000) % 24;
let minutes = Math.floor(client.uptime / 60000) % 60;
let seconds = Math.floor(client.uptime / 1000) % 60;
message.channel.send((`__I have been online for...__\n${days}d ${hours}h ${minutes}m ${seconds}s!`));
}
}
});
client.login(process.env.token_renren);
});
package.JSON
{
"name": "renren_v2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node ./src/index.js",
"dev": "nodemon ./src/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"discord.js": "^13.1.0",
"dotenv": "^10.0.0",
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^2.0.12"
}
}
终端中不断显示的消息:
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./src/index.js`
[nodemon] clean exit - waiting for changes before restart
具体来说,Nodemon 在我添加 这个 特定命令后停止工作:
client.on("message", (message) => {
if (message.author.bot) return; {
if (message.content == "!help") {
message.channel.send("Hm? What can I help you with?")
.then((message) => {
message.react("1️⃣").then(_e => {
message.react("2️⃣").then(_e => {
message.react("⏹");
});
我在它第一次给我错误后将其删除,但又将其添加回去以查看是否是问题所在。将其添加回去后,将其删除将不再使 nodemon 工作。我试过卸载、将其安装为项目开发人员、清理安装节点等,但到目前为止没有任何效果。
A clean exit
表示您的程序完成且没有任何错误。这正是您的程序当前所做的。您定义了很多事件侦听器,但您的机器人本身从未启动。
正如@Zsolt 所指出的,您目前在消息处理程序中登录了您的 discord 客户端。这意味着,机器人必须在开始之前收到一条消息。但是由于您的机器人没有登录,所以这永远不会发生。
您需要将登录调用移动到脚本的底部,然后它应该可以工作:
client.login(process.env.token_renren)
关于您的代码结构的注释:
您正在为一个事件定义多个侦听器。虽然这有效,但您无法控制调用侦听器的顺序,这可能会导致意外行为。正如@Zsolt 指出的那样,您通常会定义 one message
侦听器,然后将事件传递给处理不同消息的特定函数。
您还更改了很多 then
,这会使代码很难阅读(这称为 callback hell)。您可以使用 async
函数来避免这种情况:
async function handleMessage(message) {
if (message.author.bot) return
if (message.content == "!help") {
let response = await message.channel.send("What can I help you with?")
await response.react("1️⃣")
await response.react("2️⃣")
await response.react("⏹")
}
}
client.on("message", handleMessage)
这使得代码更浅,更容易发现消息处理程序中的 login
调用等内容。
此外,现在大多数 IDE 都提供自动代码格式化。除非您正在处理不使用此功能的大型存储库,否则我强烈建议 运行 偶尔这样做。我为我的代码启用了“保存格式”并习惯了它,但这是个人喜好(尽管它确实可以节省时间,有些雇主甚至可能需要它)。这使得很容易发现错误的缩进和奇怪的格式,比如你的 if (message.author.bot) return; {
.