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

添加discord.js命令后Nodemon卡在clean exit无法运行如何解决

问题根源

你的代码存在多个核心错误导致程序启动后直接退出,nodemon自然显示clean exit等待修改:

  • client.login 被写在了第二个message事件的回调内部,程序启动时不会执行登录逻辑,没有异步任务挂起,代码运行完直接结束进程。
  • 事件监听器嵌套注册:!ns、!uptime对应的事件监听器都套在另一个message事件回调里,每收到一次消息就会重复注册一次,引发重复响应、内存泄漏问题。
  • discord.js v13 已废弃message事件,需替换为messageCreate才能正常接收消息。
  • 之前添加的不完整代码存在括号/花括号未闭合的语法错误,删除后要确认所有语法结构正确闭合。

解决步骤

  1. 把client.login(process.env.token_renren)移到所有代码的最外层末尾,不要放在任何事件回调内部。
  2. 把所有嵌套的client.on事件监听器挪到外层,和!ping对应的事件平级。
  3. 将所有client.on("message", ...)替换为client.on("messageCreate", ...)。
  4. 检查所有括号、花括号的闭合情况,消除语法错误。

修正后的完整index.js参考

require('dotenv').config();

const {
    Client,
    Intents
} = require('discord.js');

const client = new Client({
    intents: [
        Intents.FLAGS.GUILDS,
        Intents.FLAGS.GUILD_MESSAGES,
        Intents.FLAGS.GUILD_MESSAGE_TYPING,
        Intents.FLAGS.GUILD_PRESENCES
    ]
});

const prefix = '!';

client.on('ready', () => {
    console.log('SHOWTIME!!');
    client.user.setStatus('idle');
});

client.on("messageCreate", (message) => {
    if (message.content == "!ping") {
        message.channel.send("Pinging ...")
            .then((msg) => {
                msg.edit("Pong! " + (Date.now() - message.createdTimestamp));
            });
    }
});

client.on("messageCreate", (message) => {
    if (message.author.bot) return;
    if (message.content == "!help") {
        message.channel.send("What can I help you with?")
            .then((msg) => {
                msg.react("1️⃣")
                    .then(() => msg.react("2️⃣"))
                    .then(() => msg.react("⏹"));
            });
    }
});

client.on("messageCreate", (message) => {
    if (message.content == "!ns") {
        message.react("🔜");
        message.reply('The next session is scheduled for ...!');
    }
});

client.on("messageCreate", 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);

修改完成后重新运行npm run dev即可正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:27:05