首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预期“端口”为“数字”、“对象”、“我的服务器状态检查错误”

预期“端口”为“数字”、“对象”、“我的服务器状态检查错误”
EN

Stack Overflow用户
提问于 2022-01-04 21:11:02
回答 2查看 204关注 0票数 0

我有这个简单的代码在我的不和谐的机器人检查mc服务器。

代码语言:javascript
复制
const Discord = require('discord.js')
const client = new Discord.Client()
const { MessageButton, MessageButtonStyles } = require('discord-buttons')
require('discord-buttons')(client)
const db = require('quick.db')
let mineutil = require('minecraft-server-util')

client.on('ready', () => {
  console.log('Started!\n---')
  client.user.setPresence({
    status: 'online',
    activity: {
      type: 'LISTENING',
      name: '!help'
    }
  })
})

client.on('message', async (message) => {
  if (message.content == 'привет') {
    message.reply('привет')   
  }

//more code

  const SERVER_ADDRESS = 'adress'
  const SERVER_PORT = 25565
  const STATUS_ONLINE = '**Сервер включен**  -  '
  const STATUS_PLAYERS = '**{online}** **человек(a) онлайн!**'
  const STATUS_EMPTY = '**никто не играет**'
  const cacheTime = 15 * 1000; // 15 sec cache time
  let data, lastUpdated = 0;

  function statusCommand(message) {
    getStatus().then(data => {
      let status = STATUS_ONLINE;
      status += data.onlinePlayers ?
        STATUS_PLAYERS.replace('{online}', data.onlinePlayers) : STATUS_EMPTY;
      let statuspanel = new Discord.MessageEmbed()
        .setColor('2ecc71')
        .setDescription(status)
      send(statuspanel)
    }).catch(err => {
      console.error(err)
      let statuserror = new Discord.MessageEmbed()
        .setColor('ff0000')
        .setDescription('**Сервер выключен**')
      send(statuserror)
    })
  }
  function getStatus() {
    if (Date.now() < lastUpdated + cacheTime) return Promise.resolve(data);
    return mineutil.status(SERVER_ADDRESS, { port: SERVER_PORT })
      .then(res => {
        data = res;
        lastUpdated = Date.now();
        return data;
      })
  }

  if (message.content == '!server') {
    statusCommand(message)
  }

})

client.login(TOKEN)

它在Visual中工作,但我只是将它放在Replit上,它捕捉到了以下错误:

代码语言:javascript
复制
(node:172) UnhandledPromiseRejectionWarning: AssertionError [ERR_ASSERTION]: Expected 'port' to be a 'number', got 'object'
    at Object.status (/home/runner/Makak-discord-bot/node_modules/minecraft-server-util/dist/status.js:23:26)
    at getStatus (/home/runner/Makak-discord-bot/index.js:210:21)
    at statusCommand (/home/runner/Makak-discord-bot/index.js:192:5)
    at Client.<anonymous> (/home/runner/Makak-discord-bot/index.js:219:5)
    at Client.emit (events.js:314:20)
    at Client.EventEmitter.emit (domain.js:483:12)
    at MessageCreateAction.handle (/home/runner/Makak-discord-bot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (/home/runner/Makak-discord-bot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/home/runner/Makak-discord-bot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (/home/runner/Makak-discord-bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
(node:172) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:172) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

如果我将{ port: SERVER_PORT }更改为25565,它总是说服务器关闭,即使服务器联机(

对不起,我的英文和俄文的代码

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-04 21:46:25

编辑刚刚看到了问题的最后一行,即当使用数字而不是对象时,服务器被报告为脱机。这实际上证实了我的怀疑,因为您不再从SDK本身获得错误(例如,它似乎“工作”,因为它至少正在进行网络调用)。我会再次检查您的地址和端口号,并确保服务器可以从副本访问。

-最初的答复如下

在不知道您正在使用的mineutil API的情况下很难肯定地说,但是看起来您发送的mineutil.status()函数可能比您需要的要多(如果您使用的是这个图书馆,我相当肯定您正在使用)。

我猜下面这一行:

return mineutil.status(SERVER_ADDRESS, { port: SERVER_PORT })

它发送一个对象‘{port: SERVER_PORT}’作为它的第二个参数,应该只是发送数字本身。例如:

代码语言:javascript
复制
return mineutil.status(SERVER_ADDRESS, SERVER_PORT )
票数 2
EN

Stack Overflow用户

发布于 2022-01-05 09:19:31

这是Replit服务器端错误,无法修复(

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70585118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档