docs: update cli app example

This commit is contained in:
Timofey Gelazoniya 2025-02-07 08:56:39 +03:00
parent 0959403b1b
commit d90a916fa5
Signed by: zeldon
GPG Key ID: 047886915281DD2A

View File

@ -1,40 +1,83 @@
#!/usr/bin/env node
/** /**
* Usage examples: * Usage examples:
* - Java (with custom timeout): node cli.js -j --host="mc.hypixel.net" --timeout 1000 * - Java (with custom timeout): node cli.js -j --host="mc.hypixel.net" --timeout 1000
* - Bedrock: node cli.js -b --host="play.timecrack.net" * - Bedrock: node cli.js -b --host="play.timecrack.net"
*/ */
import { pingBedrock, pingJava } from '../index.js'; import { pingBedrock, pingJava } from "../index.js";
const args = getArgs(); const DEFAULT_TIMEOUT = 5000;
const JAVA_DEFAULT_PORT = 25565;
const BEDROCK_DEFAULT_PORT = 19132;
if (shouldShowHelp(args)) { try {
const args = parseArgs(process.argv.slice(2));
if (shouldShowHelp(args)) {
printHelp(); printHelp();
process.exit(0);
}
validateArgs(args);
const port = Number(args.port) || getDefaultPort(args);
const timeout = Number(args.timeout) || DEFAULT_TIMEOUT;
if (args.j) {
await pingJavaServer(args.host, port, timeout);
} else if (args.b) {
await pingBedrockServer(args.host, port, timeout);
}
} catch (err) {
console.error(`ERROR: ${err.message}`);
process.exit(1); process.exit(1);
} }
if (!args.host) { function parseArgs(rawArgs) {
console.error('ERROR: The host argument not found! Use -h or --help.'); const args = {};
process.exit(1);
for (let i = 0; i < rawArgs.length; i++) {
const arg = rawArgs[i];
if (arg.startsWith("--")) {
// Handle --key=value and --key value formats
const [key, value] = arg.slice(2).split("=");
args[key] = value ?? rawArgs[++i] ?? true;
} else if (arg.startsWith("-")) {
// Handle short flags (-j, -b, -h)
const flags = arg.slice(1).split("");
flags.forEach((flag) => {
args[flag] = true;
});
}
}
return args;
} }
// easter egg <3 function validateArgs(args) {
if (args.j && args.b) { if (args.j && args.b) {
printInterestingFacts(); printInterestingFacts();
process.exit(0); process.exit(0);
} }
const port = args.port || getDefaultPort(args); if (!args.host) {
const timeout = args.timeout || 500; throw new Error("The host argument not found! Use -h or --help.");
}
if (args.j) { if (!args.j && !args.b) {
await pingJavaServer(args.host, port, timeout) throw new Error("Must specify either -j or -b flag. Use -h or --help.");
.catch(err => console.error(`ERROR: ${err.message}`)); }
} else if (args.b) {
await pingBedrockServer(args.host, port, timeout) if (args.port && (isNaN(args.port) || args.port < 1 || args.port > 65535)) {
.catch(err => console.error(`ERROR: ${err.message}`)); throw new Error("Port must be a number between 1 and 65535");
} else { }
console.error('ERROR: Unsupported flag passed. Use -h or --help.');
if (args.timeout && (isNaN(args.timeout) || args.timeout < 0)) {
throw new Error("Timeout must be a positive number");
}
} }
function shouldShowHelp(args) { function shouldShowHelp(args) {
@ -51,8 +94,13 @@ function printHelp() {
OPTIONS: OPTIONS:
-j Use for Minecraft Java Edition -j Use for Minecraft Java Edition
-b Use for Minecraft Bedrock Edition -b Use for Minecraft Bedrock Edition
-h, --help Show this help message
P.S. Don't use them at the same time!`); --host The server address (required)
--port The server port (default: ${JAVA_DEFAULT_PORT} for Java, ${BEDROCK_DEFAULT_PORT} for Bedrock)
--timeout The socket timeout in milliseconds (default: ${DEFAULT_TIMEOUT})
P.S. Don't use -j and -b at the same time!`);
} }
function printInterestingFacts() { function printInterestingFacts() {
@ -66,37 +114,27 @@ function printInterestingFacts() {
} }
function getDefaultPort(args) { function getDefaultPort(args) {
return args.j ? 25565 : 19132; return args.j ? JAVA_DEFAULT_PORT : BEDROCK_DEFAULT_PORT;
} }
async function pingJavaServer(host, port, timeout) { async function pingJavaServer(host, port, timeout) {
const data = await pingJava(host, { port, timeout }); const data = await pingJava(host, { port, timeout });
console.log(`host: ${host}\nprotocol: ${data.version?.protocol}\nonline: ${data.players?.online}`); console.log(`Host: ${host}
Version: ${data.version?.name} (protocol: ${data.version?.protocol})
Players: ${data.players?.online}/${data.players?.max}
Description: ${
typeof data.description === "string"
? data.description
: data.description?.text
}`);
} }
async function pingBedrockServer(host, port, timeout) { async function pingBedrockServer(host, port, timeout) {
const data = await pingBedrock(host, { port, timeout }); const data = await pingBedrock(host, { port, timeout });
console.log(`host: ${host}\nprotocol: ${data.version.protocol}\nonline: ${data.players.online}`); console.log(`Host: ${host}
} Edition: ${data.edition}
Version: ${data.version.minecraftVersion} (protocol: ${data.version.protocolVersion})
// parsing command line arguments Players: ${data.players.online}/${data.players.max}
function getArgs() { Name: ${data.name}
const args = {}; Gamemode: ${data.gameMode}`);
process.argv.slice(2).forEach(arg => {
// long arg
if (arg.slice(0, 2) === '--') {
const longArg = arg.split('=');
const longArgFlag = longArg[0].slice(2, longArg[0].length);
const longArgValue = longArg.length > 1 ? longArg[1] : true;
args[longArgFlag] = longArgValue;
// flags
} else if (arg[0] === '-') {
const flags = arg.slice(1, arg.length).split('');
flags.forEach(flag => {
args[flag] = true;
});
}
});
return args;
} }