我的机器人已经离线,没有错误,它昨天还在工作

My bot has been offline with no error, it was working yesterday

我收到一个错误,如下所示,昨天效果很好,今天就不行了。

const express = require("express");
const app = express();

    app.listen(3000, () => {
      console.log("Project is running!");
    })
    
    app.get("/", (req, res) => {
      res.send("Hello World!");
    })
    
    const Discord = require("discord.js")
    const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES"] });
    
    client.on("messageCreate", message => {
      if(message.content === "jobs") {
        message.channel.send("fortnite battle royale");
      }
    })
    
    client.on("messageCreate", message => {
      if(message.content === "ping") {
        message.channel.send("pong, you idiot, you should know the rest");
      }
    })
    
    client.on("messageCreate", message => {
      if(message.content === "pls dont help") {
        message.channel.send(message.author.toString() + " " +"ok, i wont, all you had to do was ask... also dank memer stole this command");
      }
    })
    
    
    client.on("messageCreate", message => {
       if (message.author.bot) return;
      if(message.content.includes("dream")) {
       var msgnumber= (Math.floor((Math.random() * 2) + 1));
        console.log(msgnumber);
        if (msgnumber===1) {
             message.channel.send("did someone say dream!?");
        } else if (msgnumber===2) {
             message.channel.send("why we talkin' about dream... huh!?")
        }
      }
    })
    
    client.on('messageCreate', message => {
      if (message.content === '!ping') {  
        message.channel.send(`Latency is ${Date.now() - message.createdTimestamp}ms. API Latency is ${Math.round(client.ws.ping)}ms`);
      }
    });
    
    client.on("messageCreate", message => {
      if(message.content === "username") {
        message.channel.send(message.author.username);
      }
    })
    
    client.on('ready', () => {
      console.log('Bot is online!')
      client.user.setActivity('not being entertained', {type : 'PLAYING'} )
    })
    
    client.login(process.env.token);

昨天运行良好,早些时候它在线但没有响应命令。

我在 Replit 中托管它。难道我做错了什么?我没有收到说明我的机器人在线的消息,就像昨天它工作时一样。

更新:我现在收到一个错误,我认为这是一个好兆头。

    node:events:504
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1330:16)
    at listenInCluster (node:net:1378:12)
    at Server.listen (node:net:1465:7)
    at Function.listen (/home/runner/DiscordBot/node_modules/express/lib/application.js:635:24)
    at Object.<anonymous> (/home/runner/DiscordBot/index.js:4:5)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1357:8)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  code: 'EADDRINUSE',
  errno: -98,
  syscall: 'listen',
  address: '::',
  port: 3000
}
exit status 1

地址已在使用意味着您尝试为当前执行分配的端口已经occupied/allocated到其他进程

如果您正在使用 linux:

sudo lsof -t -i tcp:3000 | sudo xargs kill

如果您正在使用 windows

netstat -ano | findstr :3000

然后你会得到一个pid 运行这个命令并把50968改成你得到的pid

taskkill /PID 50968 /F

或尝试

npx kill-port 3000

您在 Replit 上托管,该服务运行数百台服务器,通常在同一台机器上有多个用户的项目 运行(尤其是对于免费用户)。您不能简单地选择任意端口并期望它是免费的。 Replit 上的任何其他用户恰好与您在同一台机器上,他们可能已经声明了端口 3000,如果该端口对 Replit 的用户完全可用的话。在与您之前相同的 Replit 服务器上,端口 3000 上可能没有用户 运行,但现在有了。这就是您收到此错误的原因。端口 3000 也是一个非常受欢迎的端口,因此尝试将其用作 Replit 上的端口并不是一个好主意。

幸运的是,像 Replit 这样的 mass-hosting 服务通过为您提供一个包含为您的项目指定的开放端口的环境变量来解决这个问题。您可以使用 process.env.PORT 访问它,如下所示:

app.listen(process.env.PORT, () => {
    console.log("Project is running!");
})

这将保证您避免出现端口 already-in-use 错误。这也避免了尝试关闭端口所涉及的混乱(无论如何你实际上无法控制 Replit),使你的 other question 变得不必要。