From 9d40b26a06bae33d63fa56d7abe395ef9c077058 Mon Sep 17 00:00:00 2001 From: Matheus Sampaio Queiroga Date: Thu, 21 Oct 2021 15:52:13 -0300 Subject: [PATCH] Update find server versions --- bin/Docker.js | 3 +- bin/bds_maneger.js | 322 ++++++++++++++------------------------ bin/bds_maneger_v2.js | 116 -------------- bin/old_bds_maneger.js | 215 +++++++++++++++++++++++++ lib/BdsSystemInfo.js | 22 +-- src/BdsServersDownload.js | 79 +++++++--- 6 files changed, 407 insertions(+), 350 deletions(-) delete mode 100644 bin/bds_maneger_v2.js create mode 100644 bin/old_bds_maneger.js diff --git a/bin/Docker.js b/bin/Docker.js index b229785..b77e318 100755 --- a/bin/Docker.js +++ b/bin/Docker.js @@ -7,6 +7,7 @@ const BdsCore = require("../index"); const { GetPlatform, bds_dir } = require("../lib/BdsSettings"); const { CronJob } = require("cron"); const BdsInfo = require("../BdsManegerInfo.json"); +const { PlatformVersionsV2 } = require("../src/BdsServersDownload"); // Get Current Tokens and Show in the console function ShowToken() { @@ -36,7 +37,7 @@ function StartServer(){ new CronJob("0 */1 * * *", async () => { try { const CurrentLocalVersion = BdsCore.getBdsConfig().server.versions[GetPlatform()], - CurrentRemoteVersion = Object.getOwnPropertyNames((await (await fetch(BdsInfo.Fetchs.servers)).json())[GetPlatform()])[0]; + CurrentRemoteVersion = (await PlatformVersionsV2(GetPlatform())).latest; if (CurrentLocalVersion !== CurrentRemoteVersion) { let currenttime = `Hello we are starting the server upgrade from version ${CurrentLocalVersion} to version ${CurrentRemoteVersion}, you have 20 seconds to exit the server` console.log("Update Server:", currenttime); diff --git a/bin/bds_maneger.js b/bin/bds_maneger.js index fb028a8..9dad6e9 100755 --- a/bin/bds_maneger.js +++ b/bin/bds_maneger.js @@ -1,215 +1,131 @@ #!/usr/bin/env node -const readline = require("readline"); -const cli_color = require("cli-color"); -const BdsConfigAndInfo = require("../BdsManegerInfo.json"); if (process.platform === "win32") process.title = "Bds Maneger CLI"; else process.title = "Bds-Manger-CLI"; process.env.IS_BDS_CLI = process.env.IS_BIN_BDS = true; -// Bds Maneger ArgV -const argv = require("minimist")(process.argv.slice(2)); -if (Object.getOwnPropertyNames(argv).length <= 1) argv.help = true +// External Modules +const cli_color = require("cli-color"); +const inquirer = require("inquirer"); -// Bds Core Imports -const bds = require("../index"); -const SystemInfo = require("../lib/BdsSystemInfo"); -const { bds_dir, GetServerVersion, GetPlatform, UpdatePlatform, GetServerPaths, GetPaths } = require("../lib/BdsSettings"); +// Bin Args +const ProcessArgs = require("minimist")(process.argv.slice(2)); + +// Import Bds Core +const BdsCore = require("../index"); const commandExits = require("../lib/commandExist"); -const download = require("../src/BdsServersDownload"); +const readline = require("readline"); +// const BdsMenus = require("./bds_maneger/menus"); +const { PlatformVersionsV2 } = require("../src/BdsServersDownload"); +const { GetPlatform } = require("../lib/BdsSettings"); -// Options -const - server = (argv.p || argv.platform), - version = (argv.v || argv.version), - SystemCheck = (argv.S || argv.system_info), - bds_version = (argv.d || argv.download), - start = (argv.s || argv.server_version), - help = (argv.h || argv.help), - kill = (argv.k || argv.kill); - -// -------------------------- -const Versions = GetServerVersion(); - -// Bds kill -if (kill) bds.kill(); - -// Set Bds Platform -if (server) { - console.log(cli_color.yellow(`Set Platform: ${server}`)); - UpdatePlatform(server); +async function DownloadServer() { + const ora = (await import("ora")).default; + const PlatformVersion = await PlatformVersionsV2() + const waitUserSelectVersion = (await inquirer.prompt({ + type: "list", + name: "version", + message: `Select the version to download ${GetPlatform()}`, + choices: Object.keys(PlatformVersion.versions).map(version => ({name: `v${version}`, value: version})) + })).version; + const RunSpinner = ora("Downloading...").start(); + try { + const DownloadRes = await BdsCore.download(waitUserSelectVersion); + RunSpinner.succeed(`Downloaded ${DownloadRes.version}, Published in ${DownloadRes.data.getDate()}/${DownloadRes.data.getMonth()}/${DownloadRes.data.getFullYear()}`); + } catch (err) { + RunSpinner.fail(String(err)); + process.exit(1); + } } -// Start Server -async function StartServer(){ - const Servers = (await (await fetch(BdsConfigAndInfo.Fetchs.servers)).json()); - // Check Server Update - if (Versions[GetPlatform()] !== null) { - if (Versions[GetPlatform()] !== Servers.latest[GetPlatform()]) { - const message = [ - `Hello, I have a little warning, There is a new version of ${GetPlatform()}, going from version ${GetServerVersion[GetPlatform()]} to ${Servers.latest[GetPlatform()]}`, - "And we strongly recommend keeping the servers up to date, to maintain compatibility between game versions.", - `At any time you can update using the options -p ${GetPlatform()} -d "${Servers.latest[GetPlatform()]}"` - ] - console.log(cli_color.yellow(message.join("\n"))); - } - } else if (Versions[GetPlatform()] === null) { - console.log(cli_color.red("Install Server")); - process.exit(1) - } +async function info() { + const { valid_platform } = await (require("../lib/BdsSystemInfo"))(); + var checkothearch = ""; + if (process.platform === "linux" && BdsCore.arch !== "x64"){checkothearch = `qemu-x86_64-static is installed to emulate an x64 system: ${commandExits("qemu-x86_64-static")}\n`} + if (process.platform === "android" && BdsCore.arch !== "x64"){checkothearch = `qemu-x86_64 is installed to emulate an x64 system: ${commandExits("qemu-x86_64")}\n`} + const info = [ + `Bds Maneger Core And Bds Maneger CLI version: ${cli_color.magentaBright(BdsCore.package_json.version)}`, + `System: ${cli_color.yellow(process.platform)}, architecture: ${cli_color.blue(BdsCore.arch)}`, + checkothearch, + "**************************************************************", + "* Servers currently available:", + `* - Bedrock: ${valid_platform.bedrock}`, + `* - Java and Spigot: ${valid_platform.java ? cli_color.green("Available") : cli_color.red("Needs Java installed https://upstream.bdsmaneger.com/docs/Java?Installer=info")}`, + `* - Dragonfly: ${valid_platform.dragonfly}`, + `* - Pocketmine-MP: ${valid_platform.pocketmine}`, + "*", + "**************************************************************" + ]; + console.log(cli_color.whiteBright(info.join("\n").replace(/true/gi, cli_color.greenBright("true")).replace(/false/gi, cli_color.redBright("false")).replace(/undefined/gi, cli_color.red("undefined")))); + // End + return; +} + +async function help() { + const help = [ + `Bds Maneger CLI version: ${cli_color.magentaBright(BdsCore.package_json.version)}`, + `System: ${cli_color.yellow(process.platform)}, architecture: ${cli_color.blue(BdsCore.arch)}`, + "**************************************************************", + "* Usage: bds-maneger-cli [options]", + "*", + "* Options:", + "* -h, --help Print this help", + "* -i, --info Print info about Bds Maneger Core and Platforms", + "* -d, --download Download a server", + "* -s, --start Start a server", + "* -p, --platform Change the platform", + "* -n, --no-api Don't start the Bds Maneger API Rest", + "*", + "* Examples:", + "* bds-maneger-cli -d", + "* bds-maneger-cli -s", + "* bds-maneger-cli -p bedrock", + "* bds-maneger-cli -i", + "* bds-maneger-cli -h", + "**************************************************************" + ]; + return console.log(cli_color.whiteBright(help.join("\n").replace(/true/gi, cli_color.greenBright("true")).replace(/false/gi, cli_color.redBright("false")).replace(/undefined/gi, cli_color.red("undefined")))); +} + +// Async functiona +async function Runner() { + // ESM Modules + const ora = (await import("ora")).default; + + // Update Bds Core Platform + if (ProcessArgs.platform || ProcessArgs.p) { + const UpdatePla = ora("Updating Bds Platform").start(); try { - console.log(cli_color.yellow("Send a \"@stop\" command to stop the server and exit\nUse CTRL + C to force exit"), "\n"); - // Start Server - const bds_server = bds.start(); - bds_server.log(data => process.stdout.write(cli_color.cyan(data))); - bds_server.exit(function (code){ - if (code === 3221225781 && process.platform === "win32") { - console.log(cli_color.red("Open the url: https://docs.the-bds-maneger.org/Bds Maneger core/WindowsFixDll")); - return open("https://docs.the-bds-maneger.org/Bds Maneger core/WindowsFixDll"); - } - console.log(cli_color.red(`"leaving the server, status code: ${code}"`)); - process.exit(code); - }); - - // CLI Commands - const rl = readline.createInterface({input: process.stdin,output: process.stdout}); - rl.on("line", (input) => { - // Stop - if (input.trim() === "@stop") { - rl.close(); - bds_server.stop() - } - // Server input - else bds_server.command(input); - }); - rl.on("close", ()=>{ - console.log(cli_color.redBright("stopping server")); - bds_server.stop(); - }) - bds_server.exit(function(c){ - if (c !== 0) rl.close(); - }) - bds.api(); - } catch (err) { - console.log(cli_color.redBright(`Bds Maneger Start Server Error: \n******\n${err}`)); - process.exit(2) + BdsCore.platform_update(ProcessArgs.platform || ProcessArgs.p); + UpdatePla.succeed(`Now the platform is the ${ProcessArgs.platform || ProcessArgs.p}`); + } catch (error) { + UpdatePla.fail(`Unable to update platform to ${ProcessArgs.platform || ProcessArgs.p}`); + process.exit(1); } + } + + // Print Info about Bds Core and Platforms + if (ProcessArgs.info || ProcessArgs.i) { + await info(); + return; + } + + // Help + if (ProcessArgs.help || ProcessArgs.h) { + await help(); + return; + } + + // Download + if (ProcessArgs.download || ProcessArgs.d) await DownloadServer(); + if (!(ProcessArgs.start || ProcessArgs.s)) return; + + // Start + const BdsCoreStart = BdsCore.start(); + BdsCoreStart.log(data => console.log(cli_color.blueBright(data.replace(/\n$/gi, "")))); + BdsCoreStart.exit(code => { + console.log(cli_color.redBright(`Bds Core Exit with code ${code}, Uptimed: ${BdsCoreStart.uptime}`)); + process.exit(code); + }); + if (!(ProcessArgs["no-api"])) BdsCore.api(); + readline } -(async () => { - // Bds Maneger CLI Help - if (help) { - let help = [ - "usage: bds_maneger [options]", - "", - "options:", - " -s --start Start Server", - " -k --kill Detect and kill bds servers", - " -p --platform Select server platform", - " -d --download server version to install, default \"latest\"", - " --interactive Install the server interactively", - " -S --system_info System info and test", - " -h --help Print this list and exit.", - " -v --version Print the version and exit." - ] - console.log(cli_color.yellow(help.join("\n"))); - process.exit(); - } - - // Get Bds Core Version - if (version) { - const Info = [ - `Bds Maneger Core version: ${bds.package_json.version}`, - "", - "****************** Bds Maneger Core contributors ******************", - "", - ] - for (let contri of bds.extra_json.contributors) { - Info.push(`********* ${contri.name} *********`) - if (contri.email) Info.push(`* ${contri.email}`) - if (contri.url) Info.push(`* ${contri.url}`) - Info.push("*") - Info.push("*********") - } - console.log(Info.join("\n")); - process.exit(); - } - - if (SystemCheck) { - const { valid_platform } = await SystemInfo(); - var checkothearch = ""; - if (process.platform === "linux" && bds.arch !== "x64"){checkothearch = `qemu-x86_64-static is installed to emulate an x64 system: ${commandExits("qemu-x86_64-static")}\n`} - if (process.platform === "android" && bds.arch !== "x64"){checkothearch = `qemu-x86_64 is installed to emulate an x64 system: ${commandExits("qemu-x86_64")}\n`} - const help = [ - `Bds Maneger Core And Bds Maneger CLI version: ${cli_color.magentaBright(bds.package_json.version)}`, - `System: ${cli_color.yellow(process.platform)}, architecture: ${cli_color.blue(bds.arch)}`, - checkothearch, - "**************************************************************", - "* Bds Maneger dirs:", - `* - Config: ${cli_color.yellowBright(bds_dir)}`, - `* - Players File: ${cli_color.yellowBright(GetPaths("player"))}`, - "*", - "* Bds Servers dirs:", - `* - Bedrock Server: ${cli_color.yellowBright(GetServerPaths("bedrock"))}`, - `* - Pocketmine-MP Server: ${cli_color.yellowBright(GetServerPaths("pocketmine"))}`, - `* - Dragonfly: ${cli_color.yellowBright(GetServerPaths("dragonfly"))}`, - `* - Java Server: ${cli_color.yellowBright(GetServerPaths("java"))}`, - `* - Spigot Server: ${cli_color.yellowBright(GetServerPaths("spigot"))}`, - "*", - "**************************************************************", - "* Servers currently available:", - `* - Bedrock: ${valid_platform.bedrock}`, - `* - Pocketmine-MP: ${valid_platform.pocketmine}`, - `* - Dragonfly: ${valid_platform.dragonfly}`, - `* - Java: ${valid_platform.java}`, - `* - Spigot: ${valid_platform.java}`, - "*", - "**************************************************************" - ]; - console.log( - cli_color.whiteBright(help.join("\n") - .replace(/true/gi, cli_color.greenBright("true")) - .replace(/false/gi, cli_color.redBright("false")) - .replace(/undefined/gi, cli_color.red("undefined")) - )); - process.exit(0) - } - - // Download server - if (bds_version){ - (async () => { - try { - if (argv.interactive) { - const LoadVersion = (await (await fetch(BdsConfigAndInfo.Fetchs.servers)).json())[GetPlatform()] - const Version = Object.getOwnPropertyNames(LoadVersion) - - const StartQuestion = (Readline) => { - Readline.question("Select a version to download: ", input => { - if (Version[parseInt(input) - 1]) { - Readline.close(); - download(Version[parseInt(input) - 1], true, function(){ - if (start) return StartServer(); - console.log("Installation was successful, so start the server with the -s option"); - process.exit(0); - }) - } else { - console.log("Invalid Option"); - StartQuestion(Readline); - } - }); - } - - console.log(`Selected platform: ${GetPlatform()}, Total available versions: ${Version.length}`); - console.log(`${cli_color.red("Option")} ${cli_color.green("Version")}`); - - for (let option in Version) console.log(`${cli_color.red(parseInt(option) + 1)}: ${cli_color.green(Version[option])}`); - StartQuestion(readline.createInterface({input: process.stdin,output: process.stdout})); - } - else bds.download(bds_version, true, function(){ - if (start) StartServer(); - }) - } catch (error) {console.error(error);process.exit(165);} - })(); - } - - // Start server - if (start && !(server || version || SystemCheck || bds_version || help)) StartServer(); - -})() \ No newline at end of file +Runner(); diff --git a/bin/bds_maneger_v2.js b/bin/bds_maneger_v2.js deleted file mode 100644 index 86ef0c6..0000000 --- a/bin/bds_maneger_v2.js +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env node -if (process.platform === "win32") process.title = "Bds Maneger CLI"; else process.title = "Bds-Manger-CLI"; -process.env.IS_BDS_CLI = process.env.IS_BIN_BDS = true; - -// External Modules -const cli_color = require("cli-color"); -const serverline = require("serverline"); -const inquirer = require("inquirer"); - -// Bin Args -const ProcessArgs = require("minimist")(process.argv.slice(2)); - -// Import Bds Core -const BdsCore = require("../index"); -const BdsReq = require("../lib/Requests"); -const BdsExtraInfo = require("../BdsManegerInfo.json"); -const commandExits = require("../lib/commandExist"); -const BdsMenus = require("./bds_maneger/menus"); - -// Async functiona -async function Runner() { - // ESM Modules - const ora = (await import("ora")).default; - - // Update Bds Core Platform - if (ProcessArgs.platform || ProcessArgs.p) { - const UpdatePla = ora("Updating Bds Platform").start(); - try { - BdsCore.platform_update(ProcessArgs.platform || ProcessArgs.p); - UpdatePla.succeed(`Now the platform is the ${ProcessArgs.platform || ProcessArgs.p}`); - } catch (error) { - UpdatePla.fail(`Unable to update platform to ${ProcessArgs.platform || ProcessArgs.p}`); - process.exit(1); - } - } - - // Print Info about Bds Core and Platforms - if (ProcessArgs.info || ProcessArgs.i) { - const { valid_platform } = await (require("../lib/BdsSystemInfo"))(); - var checkothearch = ""; - if (process.platform === "linux" && BdsCore.arch !== "x64"){checkothearch = `qemu-x86_64-static is installed to emulate an x64 system: ${commandExits("qemu-x86_64-static")}\n`} - if (process.platform === "android" && BdsCore.arch !== "x64"){checkothearch = `qemu-x86_64 is installed to emulate an x64 system: ${commandExits("qemu-x86_64")}\n`} - const help = [ - `Bds Maneger Core And Bds Maneger CLI version: ${cli_color.magentaBright(BdsCore.package_json.version)}`, - `System: ${cli_color.yellow(process.platform)}, architecture: ${cli_color.blue(BdsCore.arch)}`, - checkothearch, - "**************************************************************", - "* Servers currently available:", - `* - Bedrock: ${valid_platform.bedrock}`, - `* - Pocketmine-MP: ${valid_platform.pocketmine}`, - `* - Dragonfly: ${valid_platform.dragonfly}`, - `* - Java: ${valid_platform.java}`, - `* - Spigot: ${valid_platform.java}`, - "*", - "**************************************************************" - ]; - console.log(cli_color.whiteBright(help.join("\n").replace(/true/gi, cli_color.greenBright("true")).replace(/false/gi, cli_color.redBright("false")).replace(/undefined/gi, cli_color.red("undefined")))); - // End - return; - } - - // Download - if (ProcessArgs.download || ProcessArgs.d) { - const VersionList = Object.getOwnPropertyNames((await BdsReq.json(BdsExtraInfo.Fetchs.servers))[BdsCore.BdsSettigs.GetPlatform()]).map(version => ({ - name: `${BdsCore.BdsSettigs.GetPlatform()}: v${version}`, - value: version, - })) - if ((ProcessArgs.download || ProcessArgs.d) === true || (ProcessArgs.download || ProcessArgs.d) === "latest") ProcessArgs.d = ProcessArgs.download = (await inquirer.prompt([ - { - type: "list", - name: "download", - message: "Select the platform to download", - choices: VersionList - } - ])).download; - const oraDownload = ora(`Downloading ${BdsCore.BdsSettigs.GetPlatform()} on version ${ProcessArgs.d || ProcessArgs.download}`).start(); - try { - const DownloadInfo = await BdsCore.download.v2(ProcessArgs.d || ProcessArgs.download, true); - const DownloadSucess = ["Downloaded Successfully"]; - if (DownloadInfo.version) DownloadSucess.push(`Version: ${DownloadInfo.version}`); - if (DownloadInfo.data) DownloadSucess.push(`Data: ${DownloadInfo.data}`); - if (DownloadInfo.platform) DownloadSucess.push(`Bds Core Platform: ${DownloadInfo.platform}`); - oraDownload.succeed(DownloadSucess.join(", ")) - } catch (error) { - oraDownload.fail(error.message); - process.exit(1); - } - } - - if (!(ProcessArgs.start || ProcessArgs.s)) return; - - // Start - const BdsCoreStart = BdsCore.start(); - BdsCoreStart.log(data => console.log(cli_color.blueBright(data.replace(/\n$/gi, "")))); - BdsCoreStart.exit(code => { - console.log(cli_color.redBright(`Bds Core Exit with code ${code}, Uptimed: ${BdsCoreStart.uptime}`)); - process.exit(code); - }); - serverline.init(); - serverline.setCompletion(["tp"]); - serverline.setPrompt("Command > "); - serverline.on("line", async function(line) { - if (/^@/.test(line)) { - serverline.close(); - if (/^@stop/.test(line)) { - BdsCoreStart.stop(); - return; - } else if (/^@tp/.test(line)) { - await BdsMenus.TpMenu(); - } - return serverline.init(); - } else BdsCoreStart.command(line); - }); - if (!(ProcessArgs["no-api"])) BdsCore.api() -} -Runner(); diff --git a/bin/old_bds_maneger.js b/bin/old_bds_maneger.js new file mode 100644 index 0000000..fb028a8 --- /dev/null +++ b/bin/old_bds_maneger.js @@ -0,0 +1,215 @@ +#!/usr/bin/env node +const readline = require("readline"); +const cli_color = require("cli-color"); +const BdsConfigAndInfo = require("../BdsManegerInfo.json"); +if (process.platform === "win32") process.title = "Bds Maneger CLI"; else process.title = "Bds-Manger-CLI"; +process.env.IS_BDS_CLI = process.env.IS_BIN_BDS = true; + +// Bds Maneger ArgV +const argv = require("minimist")(process.argv.slice(2)); +if (Object.getOwnPropertyNames(argv).length <= 1) argv.help = true + +// Bds Core Imports +const bds = require("../index"); +const SystemInfo = require("../lib/BdsSystemInfo"); +const { bds_dir, GetServerVersion, GetPlatform, UpdatePlatform, GetServerPaths, GetPaths } = require("../lib/BdsSettings"); +const commandExits = require("../lib/commandExist"); +const download = require("../src/BdsServersDownload"); + +// Options +const + server = (argv.p || argv.platform), + version = (argv.v || argv.version), + SystemCheck = (argv.S || argv.system_info), + bds_version = (argv.d || argv.download), + start = (argv.s || argv.server_version), + help = (argv.h || argv.help), + kill = (argv.k || argv.kill); + +// -------------------------- +const Versions = GetServerVersion(); + +// Bds kill +if (kill) bds.kill(); + +// Set Bds Platform +if (server) { + console.log(cli_color.yellow(`Set Platform: ${server}`)); + UpdatePlatform(server); +} + +// Start Server +async function StartServer(){ + const Servers = (await (await fetch(BdsConfigAndInfo.Fetchs.servers)).json()); + // Check Server Update + if (Versions[GetPlatform()] !== null) { + if (Versions[GetPlatform()] !== Servers.latest[GetPlatform()]) { + const message = [ + `Hello, I have a little warning, There is a new version of ${GetPlatform()}, going from version ${GetServerVersion[GetPlatform()]} to ${Servers.latest[GetPlatform()]}`, + "And we strongly recommend keeping the servers up to date, to maintain compatibility between game versions.", + `At any time you can update using the options -p ${GetPlatform()} -d "${Servers.latest[GetPlatform()]}"` + ] + console.log(cli_color.yellow(message.join("\n"))); + } + } else if (Versions[GetPlatform()] === null) { + console.log(cli_color.red("Install Server")); + process.exit(1) + } + try { + console.log(cli_color.yellow("Send a \"@stop\" command to stop the server and exit\nUse CTRL + C to force exit"), "\n"); + // Start Server + const bds_server = bds.start(); + bds_server.log(data => process.stdout.write(cli_color.cyan(data))); + bds_server.exit(function (code){ + if (code === 3221225781 && process.platform === "win32") { + console.log(cli_color.red("Open the url: https://docs.the-bds-maneger.org/Bds Maneger core/WindowsFixDll")); + return open("https://docs.the-bds-maneger.org/Bds Maneger core/WindowsFixDll"); + } + console.log(cli_color.red(`"leaving the server, status code: ${code}"`)); + process.exit(code); + }); + + // CLI Commands + const rl = readline.createInterface({input: process.stdin,output: process.stdout}); + rl.on("line", (input) => { + // Stop + if (input.trim() === "@stop") { + rl.close(); + bds_server.stop() + } + // Server input + else bds_server.command(input); + }); + rl.on("close", ()=>{ + console.log(cli_color.redBright("stopping server")); + bds_server.stop(); + }) + bds_server.exit(function(c){ + if (c !== 0) rl.close(); + }) + bds.api(); + } catch (err) { + console.log(cli_color.redBright(`Bds Maneger Start Server Error: \n******\n${err}`)); + process.exit(2) + } +} +(async () => { + // Bds Maneger CLI Help + if (help) { + let help = [ + "usage: bds_maneger [options]", + "", + "options:", + " -s --start Start Server", + " -k --kill Detect and kill bds servers", + " -p --platform Select server platform", + " -d --download server version to install, default \"latest\"", + " --interactive Install the server interactively", + " -S --system_info System info and test", + " -h --help Print this list and exit.", + " -v --version Print the version and exit." + ] + console.log(cli_color.yellow(help.join("\n"))); + process.exit(); + } + + // Get Bds Core Version + if (version) { + const Info = [ + `Bds Maneger Core version: ${bds.package_json.version}`, + "", + "****************** Bds Maneger Core contributors ******************", + "", + ] + for (let contri of bds.extra_json.contributors) { + Info.push(`********* ${contri.name} *********`) + if (contri.email) Info.push(`* ${contri.email}`) + if (contri.url) Info.push(`* ${contri.url}`) + Info.push("*") + Info.push("*********") + } + console.log(Info.join("\n")); + process.exit(); + } + + if (SystemCheck) { + const { valid_platform } = await SystemInfo(); + var checkothearch = ""; + if (process.platform === "linux" && bds.arch !== "x64"){checkothearch = `qemu-x86_64-static is installed to emulate an x64 system: ${commandExits("qemu-x86_64-static")}\n`} + if (process.platform === "android" && bds.arch !== "x64"){checkothearch = `qemu-x86_64 is installed to emulate an x64 system: ${commandExits("qemu-x86_64")}\n`} + const help = [ + `Bds Maneger Core And Bds Maneger CLI version: ${cli_color.magentaBright(bds.package_json.version)}`, + `System: ${cli_color.yellow(process.platform)}, architecture: ${cli_color.blue(bds.arch)}`, + checkothearch, + "**************************************************************", + "* Bds Maneger dirs:", + `* - Config: ${cli_color.yellowBright(bds_dir)}`, + `* - Players File: ${cli_color.yellowBright(GetPaths("player"))}`, + "*", + "* Bds Servers dirs:", + `* - Bedrock Server: ${cli_color.yellowBright(GetServerPaths("bedrock"))}`, + `* - Pocketmine-MP Server: ${cli_color.yellowBright(GetServerPaths("pocketmine"))}`, + `* - Dragonfly: ${cli_color.yellowBright(GetServerPaths("dragonfly"))}`, + `* - Java Server: ${cli_color.yellowBright(GetServerPaths("java"))}`, + `* - Spigot Server: ${cli_color.yellowBright(GetServerPaths("spigot"))}`, + "*", + "**************************************************************", + "* Servers currently available:", + `* - Bedrock: ${valid_platform.bedrock}`, + `* - Pocketmine-MP: ${valid_platform.pocketmine}`, + `* - Dragonfly: ${valid_platform.dragonfly}`, + `* - Java: ${valid_platform.java}`, + `* - Spigot: ${valid_platform.java}`, + "*", + "**************************************************************" + ]; + console.log( + cli_color.whiteBright(help.join("\n") + .replace(/true/gi, cli_color.greenBright("true")) + .replace(/false/gi, cli_color.redBright("false")) + .replace(/undefined/gi, cli_color.red("undefined")) + )); + process.exit(0) + } + + // Download server + if (bds_version){ + (async () => { + try { + if (argv.interactive) { + const LoadVersion = (await (await fetch(BdsConfigAndInfo.Fetchs.servers)).json())[GetPlatform()] + const Version = Object.getOwnPropertyNames(LoadVersion) + + const StartQuestion = (Readline) => { + Readline.question("Select a version to download: ", input => { + if (Version[parseInt(input) - 1]) { + Readline.close(); + download(Version[parseInt(input) - 1], true, function(){ + if (start) return StartServer(); + console.log("Installation was successful, so start the server with the -s option"); + process.exit(0); + }) + } else { + console.log("Invalid Option"); + StartQuestion(Readline); + } + }); + } + + console.log(`Selected platform: ${GetPlatform()}, Total available versions: ${Version.length}`); + console.log(`${cli_color.red("Option")} ${cli_color.green("Version")}`); + + for (let option in Version) console.log(`${cli_color.red(parseInt(option) + 1)}: ${cli_color.green(Version[option])}`); + StartQuestion(readline.createInterface({input: process.stdin,output: process.stdout})); + } + else bds.download(bds_version, true, function(){ + if (start) StartServer(); + }) + } catch (error) {console.error(error);process.exit(165);} + })(); + } + + // Start server + if (start && !(server || version || SystemCheck || bds_version || help)) StartServer(); + +})() \ No newline at end of file diff --git a/lib/BdsSystemInfo.js b/lib/BdsSystemInfo.js index ae8510a..8b085d7 100644 --- a/lib/BdsSystemInfo.js +++ b/lib/BdsSystemInfo.js @@ -4,11 +4,16 @@ const { execSync } = require("child_process"); const commadExist = require("./commandExist"); const Request = require("./Requests"); const bds = require("../index"); +const { PlatformVersionsV2 } = require("../src/BdsServersDownload"); async function CheckSystemAsync() { const PHPBin = await Request.JSON("https://raw.githubusercontent.com/The-Bds-Maneger/Php_Static_Binary/main/binarys.json"), - Servers = await Request.JSON("https://raw.githubusercontent.com/The-Bds-Maneger/external_files/main/Server.json"); + Servers = { + bedrock: await PlatformVersionsV2("bedrock"), + spigot: await PlatformVersionsV2("spigot"), + dragonfly: await PlatformVersionsV2("dragonfly"), + } let system, require_qemu = false; const valid_platform = { @@ -23,7 +28,7 @@ async function CheckSystemAsync() { else valid_platform["pocketmine"] = false; // - if (!(Servers.dragonfly[Servers.latest.dragonfly][process.platform][bds.arch])) valid_platform["dragonfly"] = false; + if (!(Servers.dragonfly.versions[Servers.dragonfly.latest][process.platform][bds.arch])) valid_platform["dragonfly"] = false; // SoSystem X if (process.platform == "win32") { @@ -32,8 +37,8 @@ async function CheckSystemAsync() { system = "Linux"; // Bedrock Check - if (Servers.bedrock[Servers.latest.bedrock][arch]) { - if (Servers.bedrock[Servers.latest.bedrock][arch][process.platform]) valid_platform["bedrock"] = true; + if (Servers.bedrock.versions[Servers.bedrock.latest][process.platform]) { + if (Servers.bedrock.versions[Servers.bedrock.latest][process.platform][arch]) valid_platform["bedrock"] = true; else valid_platform["bedrock"] = false; } else valid_platform["bedrock"] = false; @@ -46,22 +51,21 @@ async function CheckSystemAsync() { } } else if (process.platform == "darwin") { system = "MacOS"; - valid_platform["bedrock"] = false } else if (process.platform === "android") { system = "Android"; - valid_platform["bedrock"] = false } else { throw new Error(`The Bds Maneger Core does not support ${process.platform} systems, as no tests have been done.`); } return { - system, - require_qemu, - valid_platform, + system: system, + require_qemu: require_qemu, + valid_platform: valid_platform, }; } module.exports = CheckSystemAsync; +module.exports.CheckSystemAsync = CheckSystemAsync; // System Architect (x64, aarch64 and others) let arch; diff --git a/src/BdsServersDownload.js b/src/BdsServersDownload.js index 2dbe214..22b7e87 100644 --- a/src/BdsServersDownload.js +++ b/src/BdsServersDownload.js @@ -3,12 +3,46 @@ const path = require("path"); const { writeFileSync, existsSync, readFileSync, readdirSync, rmSync } = fs; const { join, resolve } = path; var AdmZip = require("adm-zip"); -const BdsInfo = require("../lib/BdsSystemInfo"); const { GetServerPaths, GetPlatform } = require("../lib/BdsSettings"); const Extra = require("../BdsManegerInfo.json"); const bds = require("../index"); const Request = require("../lib/Requests"); +// Get Platform Object Versions +async function PlatformVersionsV2(SelectPlatform = "") { + const CurrentPlatform = SelectPlatform || GetPlatform(); + let ResToRetuen = { + latest: "", + versions: { + "123.123.123": { + data: `${new Date()}`, + url: "", + linux: { + aarch64: "", + armv7: "", + x64: "", + i386: "" + }, + win32: { + aarch64: "", + x64: "", + i386: "" + }, + darwin: { + aarch64: "", + x64: "" + }, + android: { + aarch64: "", + x64: "" + } + } + } + } + ResToRetuen = await Request.json(`https://raw.githubusercontent.com/The-Bds-Maneger/ServerVersions/main/${CurrentPlatform}/server.json`); + return ResToRetuen; +} + // Php download and install async function php_download() { const bds_dir_pocketmine = GetServerPaths("pocketmine"); @@ -51,32 +85,27 @@ async function php_download() { // New Download Method async function BdsDownloadV2(version = "latest") { const CurrentPlatform = GetPlatform(); - const { valid_platform, require_qemu } = await BdsInfo(); + const { valid_platform, require_qemu } = await (require("../lib/BdsSystemInfo")).CheckSystemAsync(); const LocalServersVersions = bds.BdsSettigs.GetServerVersion(); const { ServersPaths } = bds.BdsSettigs; - // Load Version List - const ServerDownloadJSON = await Request.json(Extra.Fetchs.servers); - - // Check is latest version options or boolean - if (typeof version === "boolean" || /true|false|null|undefined|latest/.test(`${version}`.toLocaleLowerCase())) version = ServerDownloadJSON.latest[CurrentPlatform]; - if (!version) throw Error("No version found"); - const ReturnObject = { version, platform: CurrentPlatform, url: "", - data: "", + data: new Date(), skip: false } // Bedrock if (CurrentPlatform === "bedrock") { + const BedrockVersions = await PlatformVersionsV2("bedrock"); + if (typeof version === "boolean" || /true|false|null|undefined|latest/.test(`${version}`.toLocaleLowerCase())) version = BedrockVersions.latest; if (valid_platform.bedrock) { if (LocalServersVersions.bedrock !== version) { // Add info to ReturnObject - if (require_qemu) ReturnObject.url = ServerDownloadJSON.bedrock[version]["x64"][process.platform]; else ReturnObject.url = ServerDownloadJSON.bedrock[version][bds.arch][process.platform]; - ReturnObject.data = ServerDownloadJSON.bedrock[version].data; + if (require_qemu) ReturnObject.url = BedrockVersions.versions[version][process.platform]["x64"]; else ReturnObject.url = BedrockVersions.versions[version][process.platform][bds.arch]; + ReturnObject.data = BedrockVersions.versions[version].data ? new Date(BedrockVersions.versions[version].data) : null; // Download and Add buffer to AdmZip const BedrockZip = new AdmZip(await Request.buffer(ReturnObject.url)); @@ -113,11 +142,13 @@ async function BdsDownloadV2(version = "latest") { // Java else if (CurrentPlatform === "java") { + const JavaVersions = await PlatformVersionsV2("java"); + if (typeof version === "boolean" || /true|false|null|undefined|latest/.test(`${version}`.toLocaleLowerCase())) version = JavaVersions.latest; if (valid_platform.java) { if (LocalServersVersions.java !== version) { // Add info to ReturnObject - ReturnObject.url = ServerDownloadJSON.java[version].url; - ReturnObject.data = ServerDownloadJSON.java[version].data; + ReturnObject.url = JavaVersions.versions[version].url; + ReturnObject.data = JavaVersions.versions[version].data; // Download and write java file const JavaBufferJar = await Request.buffer(ReturnObject.url); @@ -138,12 +169,13 @@ async function BdsDownloadV2(version = "latest") { // Spigot else if (CurrentPlatform === "spigot") { + const SpigotVersions = await PlatformVersionsV2("spigot"); + if (typeof version === "boolean" || /true|false|null|undefined|latest/.test(`${version}`.toLocaleLowerCase())) version = SpigotVersions.latest; if (valid_platform.spigot) { if (LocalServersVersions.spigot !== version) { // Add info to ReturnObject - const FindedSpigot = ServerDownloadJSON.spigot.find(spigot => spigot.version === version); - ReturnObject.url = FindedSpigot.url; - ReturnObject.data = FindedSpigot.data; + ReturnObject.url = SpigotVersions.versions[version].url; + ReturnObject.data = SpigotVersions.versions[version].data; // Download and write java file fs.writeFileSync(path.join(ServersPaths.spigot, "spigot.jar"), await Request.buffer(ReturnObject.url), "binary"); @@ -160,11 +192,13 @@ async function BdsDownloadV2(version = "latest") { // Dragonfly else if (CurrentPlatform === "dragonfly") { + const DragonflyVersions = await PlatformVersionsV2("dragonfly"); + if (typeof version === "boolean" || /true|false|null|undefined|latest/.test(`${version}`.toLocaleLowerCase())) version = DragonflyVersions.latest; if (valid_platform.dragonfly) { if (LocalServersVersions.dragonfly !== version) { // Add info to ReturnObject - ReturnObject.url = ServerDownloadJSON.dragonfly[version][process.platform][bds.arch] - ReturnObject.data = ServerDownloadJSON.dragonfly[version].data; + ReturnObject.url = DragonflyVersions.versions[version][process.platform][bds.arch] + ReturnObject.data = DragonflyVersions.versions[version].data; // Download let DgBin = path.join(ServersPaths.dragonfly, "Dragonfly"); @@ -183,11 +217,13 @@ async function BdsDownloadV2(version = "latest") { // Pocketmine-MP else if (CurrentPlatform === "pocketmine") { + const PocketmineVersions = await PlatformVersionsV2("pocketmine"); + if (typeof version === "boolean" || /true|false|null|undefined|latest/.test(`${version}`.toLocaleLowerCase())) version = PocketmineVersions.latest; if (valid_platform.pocketmine) { if (LocalServersVersions.pocketmine !== version) { // Add info to ReturnObject - ReturnObject.url = ServerDownloadJSON.pocketmine[version].url; - ReturnObject.data = ServerDownloadJSON.pocketmine[version].data; + ReturnObject.url = PocketmineVersions.versions[version].url; + ReturnObject.data = PocketmineVersions.versions[version].data; // Download PHP Bin await php_download(); @@ -216,3 +252,4 @@ async function BdsDownloadV2(version = "latest") { // Export module.exports = BdsDownloadV2; module.exports.v2 = BdsDownloadV2; +module.exports.PlatformVersionsV2 = PlatformVersionsV2; \ No newline at end of file -- 2.50.0