繁体   English   中英

获取端口选项时 discord.js v13 minecraft-server-util 断言错误

[英]discord.js v13 minecraft-server-util assertion error when getting the option of port

我目前正在使用 minecraft-server-util 创建一个 Minecraft 服务器检查器命令,但每次我在端口选项中输入端口号时,都会出现错误AssertionError [ERR_ASSERTION]: Expected 'port' to be a 'number', got 'object'出去。 我目前正在使用 discord.js v13 中的新交互事物。

代码:

const { SlashCommandBuilder } = require('@discordjs/builders');
const { MessageAttachment } = require('discord.js');
const util = require('minecraft-server-util');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('minecraft')
        .setDescription('Checks the status of a minecraft server.')
        .addStringOption(option => option.setName('address').setDescription('Enter the server address.').setRequired(true))
        .addNumberOption(option => option.setName('port').setDescription('Enter the server port. (25565 IS THE DEFAULT PORT)').setRequired(true)),
    async execute(interaction, client, MessageEmbed) {
        let server = interaction.options.getString('address');
        let serverPort = interaction.options.getNumber('port');

        if(serverPort == NaN) return interaction.reply({ content: 'The server port you provided is not a number.', ephemeral: true });

        util.status(server, { port: parseInt(serverPort)}).then((response) => {
            var fav = response.favicon.split(",").slice(1).join(",");
            var imageStream = Buffer.from(fav, "base64");
            var attachment = new MessageAttachment(imageStream, "favicon.png");
            const embed = new MessageEmbed()
            .setColor('#008000')
            .setTitle('Minecraft Server Status')
            .attachFiles([attachment])
            .addFields(
                {name: 'Server IP', value: response.host},
                {name: 'Online Players', value: response.onlinePlayers},
                {name: 'Player Threshold', value: response.maxPlayers},
                {name: 'MOTD', value: response.motd.clean},
                {name: 'Version', value: response.version},
            )
            .setThumbnail("attachment://favicon.png")
            interaction.reply({ embeds: [embed] })
        })
        .catch ((error) => {
            interaction.reply({ content: 'There was an error finding this server.', ephemeral: true });
            throw error;
        })
    },
};

即使我将.addNumberOption更改为.addStringOption并使用parseInt(serverPort)serverPort解析为 integer ,它仍然无法工作。

错误是您在这里传递了 object 作为第二个参数: util.status(server, { port: serverPort })而它应该是端口号

return util.status(server, serverPort)

另一件事, serverPort == NaN总是false 甚至NaN == NaN也是false 您应该改用isNaN

 let serverPort = NaN console.log(serverPort == NaN) console.log(serverPort === NaN) console.log(isNaN(serverPort))

虽然我不确定它是否曾经是NaN ,因为getNumber()返回选项的值,或者null如果未设置且不需要。

似乎它与我的 PC 有关,因为当我将它托管在 Heroku 上时,它似乎起作用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM