[英]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.