Docker image fix #158
@@ -19,7 +19,13 @@
|
||||
"smcpeak.default-keys-windows",
|
||||
"vscode-icons-team.vscode-icons",
|
||||
"me-dutour-mathieu.vscode-github-actions",
|
||||
"cschleiden.vscode-github-actions"
|
||||
"cschleiden.vscode-github-actions",
|
||||
"github.copilot",
|
||||
"eamodio.gitlens",
|
||||
"github.vscode-pull-request-github",
|
||||
"oderwat.indent-rainbow",
|
||||
"visualstudioexptteam.vscodeintellicode",
|
||||
"redhat.vscode-yaml"
|
||||
],
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
"browser": true,
|
||||
"commonjs": true,
|
||||
"es2021": true,
|
||||
"node": true,
|
||||
"shelljs": true
|
||||
"node": true
|
||||
},
|
||||
"globals": {
|
||||
"bds_log_string": "writable",
|
||||
@@ -24,6 +23,7 @@
|
||||
"error",
|
||||
"double"
|
||||
],
|
||||
"eqeqeq": 0
|
||||
"eqeqeq": 0,
|
||||
"no-async-promise-executor": "off"
|
||||
}
|
||||
}
|
||||
|
||||
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -1 +1,4 @@
|
||||
*.sh text=lf eol=lf
|
||||
*.sh text=LF eol=LF
|
||||
.devcontainer/* eol=LF text=LF
|
||||
*.js text=LF eol=LF
|
||||
* text=CRLF eol=CRLF
|
||||
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
- name: Npm and Node Setup
|
||||
uses: actions/setup-node@v2.3.0
|
||||
uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
node-version: 16.x
|
||||
registry-url: https://registry.npmjs.org/
|
||||
|
||||
2
.github/workflows/package_test.yml
vendored
2
.github/workflows/package_test.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2.3.0
|
||||
uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
2
.github/workflows/rc.yml
vendored
2
.github/workflows/rc.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@v2.3.0
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
node-version: 16.x
|
||||
registry-url: https://registry.npmjs.org/
|
||||
|
||||
2
.github/workflows/tag_version.yml
vendored
2
.github/workflows/tag_version.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@v2.3.0
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
node-version: 16.x
|
||||
registry-url: https://registry.npmjs.org/
|
||||
|
||||
13
.vscode/launch.json
vendored
13
.vscode/launch.json
vendored
@@ -4,19 +4,14 @@
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Docker Build and Run",
|
||||
"program": "${workspaceFolder}/.Build/DockerImage.js"
|
||||
"name": "Start Telegram bot dev",
|
||||
"program": "${workspaceFolder}/bin/telegram_bot.js"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Telegram BOT",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": [
|
||||
"run",
|
||||
"dev:telegram"
|
||||
],
|
||||
"port": 9229
|
||||
"name": "Docker Build and Run",
|
||||
"program": "${workspaceFolder}/.Build/DockerImage.js",
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -17,16 +17,17 @@
|
||||
"stop": "stop",
|
||||
"op": "op \"{{Player}}\"",
|
||||
"deop": "op \"{{Player}}\"",
|
||||
"ban": "tp \"{{Player}}\" ~ ~99999 ~",
|
||||
"kick": "kick \"{{Player}}\" \"{{Text}}\"",
|
||||
"tp": "tp \"{{Player}}\" {{CCO}}"
|
||||
"tp": "tp \"{{Player}}\" {{X}} {{Y}} {{X}}"
|
||||
},
|
||||
"java": {
|
||||
"stop": "stop",
|
||||
"op": "op \"{{Player}}\"",
|
||||
"deop": "op \"{{Player}}\"",
|
||||
"ban": "ban 0 0 0",
|
||||
"kick": "kick \"{{Player}}\" {{Text}}",
|
||||
"tp": "tp {{Player}} {{CCO}}"
|
||||
"op": "op {{Player}}",
|
||||
"deop": "op {{Player}}",
|
||||
"ban": "ban {{Player}}",
|
||||
"kick": "kick {{Player}} {{Text}}",
|
||||
"tp": "tp {{Player}} {{X}} {{Y}} {{X}}"
|
||||
},
|
||||
"pocketmine": {
|
||||
"stop": "stop",
|
||||
@@ -34,7 +35,7 @@
|
||||
"deop": "op {{Player}}",
|
||||
"ban": "ban {{Player}}",
|
||||
"kick": "kick {{Player}}",
|
||||
"tp": "tp {{Player}} {{CCO}}"
|
||||
"tp": "tp \"{{Player}}\" {{X}} {{Y}} {{X}}"
|
||||
}
|
||||
},
|
||||
"contributors": [
|
||||
|
||||
23
README.md
23
README.md
@@ -8,19 +8,21 @@ Any contribution is welcome, but before a look at [CONTRIBUTING.md](CONTRIBUTING
|
||||
|
||||
In Version 1.11.0 there was a big change in the way to get the new settings and that left a good part of the program broken, so for those who are going to upgrade to the latest versions of Bds maneger Core will have to change the settings manually.
|
||||
|
||||
## CI/CD tests
|
||||
## Documentation
|
||||
|
||||
We have a separate repository for all Bds Maneger Project documentation, <a href="https://docs.bdsmaneger.com/Bds Maneger core" target="_blank">link here from the main page</a>, <a href="https://github.com/The-Bds-Maneger/Bds-Manager-Project-Documentation" target="_blank">Repository link</a>
|
||||
|
||||
## Badges
|
||||
|
||||
[](https://github.com/The-Bds-Maneger/Bds-Maneger-Core/actions/workflows/codeql%20and%20ossar%20analysis.yml)
|
||||
[](https://the-bds-maneger.org/The-Bds-Maneger/Bds-Maneger-Core/-/pipelines/latest)
|
||||
|
||||
[](https://lgtm.com/projects/g/Bds-Maneger/bds_maneger_api/alerts/)
|
||||
[](https://lgtm.com/projects/g/Bds-Maneger/bds_maneger_api/context:javascript)
|
||||
[](https://www.codacy.com/gh/The-Bds-Maneger/Bds-Maneger-Core/dashboard?utm_source=github.com&utm_medium=referral&utm_content=The-Bds-Maneger/Bds-Maneger-Core&utm_campaign=Badge_Grade)
|
||||
[](https://deepscan.io/dashboard#view=project&tid=13683&pid=16691&bid=363172)
|
||||
[](https://deepscan.io/dashboard#view=project&tid=13683&pid=16691&bid=363172)
|
||||
|
||||
## Start our Docker image, making everything easier.
|
||||
## Start our Docker image, making everything easier
|
||||
|
||||
Windows:
|
||||
|
||||
```cmd
|
||||
$ docker run --rm -d --name BdsManegerCore -v BdsCore:/home/bds/bds_core ^
|
||||
-p 19132:19132/udp -p 19133:19133/udp -p 1932:1932/tcp ^
|
||||
@@ -37,6 +39,7 @@ bdsmaneger/core:latest
|
||||
```
|
||||
|
||||
Linux/MacOS:
|
||||
|
||||
```bash
|
||||
$ docker run --rm -d --name BdsManegerCore -v BdsCore/:/home/bds/bds_core \
|
||||
-p 19132:19132/udp -p 19133:19133/udp -p 1932:1932/tcp \
|
||||
@@ -54,13 +57,7 @@ bdsmaneger/core:latest
|
||||
|
||||
## We also have some Implementation Models for Azure
|
||||
|
||||
#### Microsoft Azure Container
|
||||
|
||||
The Azure container is a special machine for Docker Within Azure, it is fully managed by Azure, it only depends on the Docker image, but it has its limitations.
|
||||
|
||||
[](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FBds-Maneger%2FThe-Bds-Maneger-Docker%2Fmain%2Fazure%2FBdsMangerCore_docker.json)
|
||||
|
||||
#### Microsoft Azure Virtual machine
|
||||
### Microsoft Azure Virtual machine
|
||||
|
||||
Here we have a virtual machine totally dedicated to Bds Maneger Core, it still uses Docker to deploy Docker images.
|
||||
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
#!/usr/bin/env node
|
||||
if (process.platform === "win32") process.title = "Bds Maneger CLI";else process.title = "Bds_Manger_CLI"
|
||||
const readline = require("readline");
|
||||
|
||||
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;
|
||||
|
||||
const bds = require("../index");
|
||||
const { valid_platform } = require("../lib/BdsSystemInfo");
|
||||
const { bds_dir, GetServerVersion, GetPlatform, UpdatePlatform, GetServerPaths, GetPaths } = require("../lib/BdsSettings");
|
||||
const commandExits = require("../lib/commandExist");
|
||||
const download = require("../src/Scripts/download");
|
||||
process.env.IS_BDS_CLI = process.env.IS_BIN_BDS = true;
|
||||
const download = require("../src/BdsServersDownload");
|
||||
|
||||
// Bds Maneger ArgV
|
||||
const argv = require("minimist")(process.argv.slice(2));
|
||||
if (Object.getOwnPropertyNames(argv).length <= 1) argv.help = true
|
||||
@@ -32,7 +35,7 @@ if (kill) bds.kill();
|
||||
if (server) UpdatePlatform(server);
|
||||
|
||||
function StartServer(){
|
||||
const { Servers } = require("../../lib/ServerURL");
|
||||
const { Servers } = require("../lib/ServerURL");
|
||||
// Check Server Update
|
||||
if (Versions[GetPlatform()] !== null) {
|
||||
if (Versions[GetPlatform()] !== Servers.latest[GetPlatform()]) {
|
||||
@@ -56,9 +59,22 @@ function StartServer(){
|
||||
|
||||
// CLI Commands
|
||||
const rl = readline.createInterface({input: process.stdin,output: process.stdout});
|
||||
rl.on("line", (input) => {if (input === "@stop") {rl.close(); bds_server.stop()} else bds_server.command(input)});
|
||||
rl.on("close", ()=>{console.log("CTRL + C closed readline, stopping server");bds_server.stop()})
|
||||
bds_server.exit(function(c){if (c !== 0) rl.close()})
|
||||
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("CTRL + C closed readline, stopping server");
|
||||
bds_server.stop();
|
||||
})
|
||||
bds_server.exit(function(c){
|
||||
if (c !== 0) rl.close();
|
||||
})
|
||||
bds.api();
|
||||
} catch (err) {
|
||||
console.log(`Bds Maneger Start Server Error: \n******\n${err}`);
|
||||
|
||||
344
bin/telegram_bot.js
Normal file → Executable file
344
bin/telegram_bot.js
Normal file → Executable file
@@ -1,18 +1,13 @@
|
||||
const { Telegraf } = require("telegraf");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { Telegraf, Markup } = require("telegraf");
|
||||
const bds = require("../index");
|
||||
const { GetPlatform, GetPaths } = require("../lib/BdsSettings");
|
||||
const { GetPlatform, GetPaths, GetTelegramToken } = require("../lib/BdsSettings");
|
||||
const { GetKernel, arch, system } = require("../lib/BdsSystemInfo");
|
||||
const { Detect } = require("../src/Scripts/CheckKill");
|
||||
const TelegramOptions = require("minimist")(process.argv.slice(2));
|
||||
|
||||
if (TelegramOptions.h || TelegramOptions.help) {
|
||||
const Help = [];
|
||||
console.log(Help.join("\n"));
|
||||
process.exit(0)
|
||||
}
|
||||
const { Detect } = require("../src/CheckKill");
|
||||
const { Servers } = require("../lib/ServerURL");
|
||||
const { CheckTelegramUser } = require("../src/UsersAndtokenChecks")
|
||||
|
||||
// Bot Start And Help messages
|
||||
const HelpAndStart = [
|
||||
"Hello, welcome to Bds Maneger Telegram Bot",
|
||||
"",
|
||||
@@ -20,119 +15,282 @@ const HelpAndStart = [
|
||||
"Options:",
|
||||
" /start or /help: This message!",
|
||||
" /basic",
|
||||
" start, stop",
|
||||
" start, stop, backup",
|
||||
" /live_log",
|
||||
" enabler, disabler",
|
||||
" /live_log",
|
||||
" /download",
|
||||
" Version",
|
||||
" ",
|
||||
]
|
||||
|
||||
// Set Telegram Bot
|
||||
const bot = new Telegraf(bds.telegram_token);
|
||||
const bot = new Telegraf(GetTelegramToken());
|
||||
|
||||
// Start and Help Command
|
||||
bot.start((ctx)=>ctx.reply(HelpAndStart.join("\n")));
|
||||
bot.help((ctx)=>ctx.reply(HelpAndStart.join("\n")));
|
||||
|
||||
const ChatIDs = {}
|
||||
function SaveID(id = "a"){return ChatIDs[id] = true}
|
||||
function RemoveID(id = "a"){return delete ChatIDs[id]}
|
||||
function GetID(){return ChatIDs}
|
||||
// User
|
||||
bot.command("player", ctx => {
|
||||
// Check admin Username
|
||||
if (!(CheckTelegramUser(ctx.from.username))) return ctx.reply("you are not an administrator");
|
||||
|
||||
const Server = global.ServerExec;
|
||||
const CtxOption = ctx.message.text.replace("/player", "").trim();
|
||||
const CtxContext = CtxOption.replace(/^kick|^deop|^ban|^op/, "").trim();
|
||||
if (CtxOption) {
|
||||
const Players = CtxContext.split(/, |,/gi).filter(a => a.trim());
|
||||
console.log(Players);
|
||||
if (/kick/.test(CtxOption)){
|
||||
if (Players.length >= 1) {
|
||||
Players.forEach(Player => {
|
||||
Server.kick(Player);
|
||||
ctx.reply(`${Player} was kicked`);
|
||||
});
|
||||
} else ctx.reply("and the Players?")
|
||||
}
|
||||
else if (/deop/.test(CtxOption)){
|
||||
if (Players.length >= 1) {
|
||||
Players.forEach(Player => {
|
||||
Server.deop(Player);
|
||||
ctx.reply(`${Player} was deopped`);
|
||||
});
|
||||
} else ctx.reply("and the Players?")
|
||||
}
|
||||
else if (/ban/.test(CtxOption)){
|
||||
if (Players.length >= 1) {
|
||||
Players.forEach(Player => {
|
||||
Server.ban(Player);
|
||||
ctx.reply(`${Player} was banned`);
|
||||
});
|
||||
} else ctx.reply("and the Players?")
|
||||
}
|
||||
else if (/op/.test(CtxOption)){
|
||||
if (Players.length >= 1) {
|
||||
Players.forEach(Player => {
|
||||
Server.op(Player);
|
||||
ctx.reply(`${Player} was opped`);
|
||||
});
|
||||
} else ctx.reply("and the Players?")
|
||||
}
|
||||
else if (/list/.test(CtxOption)){
|
||||
const Player_Json_path = GetPaths("player");
|
||||
let Players_Json = JSON.parse(fs.readFileSync(Player_Json_path, "utf8"))[GetPlatform()];
|
||||
const new_players = {};
|
||||
Players_Json.forEach(Player => {
|
||||
console.log(Player);
|
||||
if (new_players[Player.Player]) {
|
||||
new_players[Player.Player].push([`Action: ${Player.Action}`, `Date: ${Player.Date}`].join("\n"));
|
||||
} else {
|
||||
new_players[Player.Player] = [
|
||||
[`Player: ${Player.Player}`, `Action: ${Player.Action}`, `Date: ${Player.Date}`].join("\n")
|
||||
]
|
||||
}
|
||||
});
|
||||
console.log(new_players);
|
||||
Object.getOwnPropertyNames(new_players).forEach(Player_Array => {
|
||||
let Length = Math.abs(new_players[Player_Array].length - 5);
|
||||
let Player = new_players[Player_Array].slice(0, Length).join("\n")
|
||||
ctx.reply(Player);
|
||||
});
|
||||
}
|
||||
else ctx.reply("Invalid option")
|
||||
} else {
|
||||
const ReplyOption = Markup.keyboard([
|
||||
"/player kick",
|
||||
"/player deop",
|
||||
"/player ban",
|
||||
"/player op",
|
||||
"/player list",
|
||||
]).oneTime().resize();
|
||||
ctx.reply("Player Options:", ReplyOption);
|
||||
}
|
||||
});
|
||||
|
||||
// Basic server
|
||||
bot.command("basic", ctx => {
|
||||
bot.command("basic", async ctx => {
|
||||
// Check admin Username
|
||||
if (!(CheckTelegramUser(ctx.from.username))) return ctx.reply("you are not an administrator");
|
||||
|
||||
const text = ctx.message.text.replace("/basic", "").trim();
|
||||
if (/start/.test(text)) {
|
||||
if (Detect()) ctx.reply("Stop Server");
|
||||
else {
|
||||
try {
|
||||
const Server = bds.start();
|
||||
Server.log(function (data){
|
||||
Object.getOwnPropertyNames(GetID()).forEach(Id => {
|
||||
console.log(Id);
|
||||
if (ChatIDs[Id]) bot.telegram.sendMessage(Id, data)
|
||||
})
|
||||
})
|
||||
return ctx.reply("Server Started")
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
ctx.reply("We couldn't start the server")
|
||||
ctx.reply(err.toString());
|
||||
if (text) {
|
||||
// Start Server
|
||||
if (/start/.test(text)) {
|
||||
if (Detect()) ctx.reply("Stop Server");
|
||||
else {
|
||||
try {
|
||||
const Server = bds.start();
|
||||
Server.log(function (data){
|
||||
for (let stx of global.LiveLog) stx.reply(data);
|
||||
});
|
||||
global.ServerExec = Server;
|
||||
return ctx.reply("Server Started")
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
ctx.reply("We couldn't start the server")
|
||||
ctx.reply(err.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (/stop/.test(text)) {
|
||||
if (Detect()) {
|
||||
try {
|
||||
bds.stop()
|
||||
ctx.reply("Stopping your server")
|
||||
} catch (err) {
|
||||
ctx.reply("We had an error for your server");
|
||||
ctx.reply(err.toString());
|
||||
}
|
||||
} else ctx.reply("Your server is stopped")
|
||||
} else return ctx.reply("Invalid option, they are just: start, stop")
|
||||
// Stop Server
|
||||
else if (/stop/.test(text)) {
|
||||
if (Detect()) {
|
||||
try {
|
||||
bds.stop()
|
||||
ctx.reply("Stopping your server")
|
||||
} catch (err) {
|
||||
ctx.reply("We had an error for your server");
|
||||
ctx.reply(err.toString());
|
||||
}
|
||||
} else ctx.reply("Your server is stopped")
|
||||
}
|
||||
// Backup
|
||||
else if (/backup/.test(text)) {
|
||||
const Backup = bds.backup();
|
||||
ctx.replyWithDocument({
|
||||
source: Backup.Buffer,
|
||||
filename: Backup.file_name,
|
||||
})
|
||||
}
|
||||
// Invalid option
|
||||
else return ctx.reply("Invalid option, they are just: start, stop")
|
||||
} else {
|
||||
await ctx.deleteMessage();
|
||||
const Options = Markup.keyboard([
|
||||
"/basic start",
|
||||
"/basic stop",
|
||||
"/basic backup",
|
||||
]).oneTime().resize();
|
||||
ctx.reply("Basic Options", Options);
|
||||
}
|
||||
});
|
||||
|
||||
// Select Platform
|
||||
bot.command("platform", ctx => {
|
||||
bot.command("platform", async ctx => {
|
||||
// Check admin Username
|
||||
if (!(CheckTelegramUser(ctx.from.username))) return ctx.reply("you are not an administrator");
|
||||
|
||||
const text = ctx.message.text.replace("/platform", "").trim();
|
||||
try {
|
||||
bds.BdsSettigs.UpdatePlatform(text);
|
||||
return ctx.reply(`Platform update to ${text}`)
|
||||
} catch (err) {
|
||||
ctx.reply("We were unable to change the platform")
|
||||
return ctx.reply(err.toString())
|
||||
if (text) {
|
||||
try {
|
||||
bds.BdsSettigs.UpdatePlatform(text);
|
||||
return ctx.reply(`Platform update to ${text}`)
|
||||
} catch (err) {
|
||||
ctx.reply("We were unable to change the platform")
|
||||
return ctx.reply(err.toString())
|
||||
}
|
||||
} else {
|
||||
await ctx.deleteMessage();
|
||||
const Keyboard = Markup.keyboard([
|
||||
"/platform bedrock",
|
||||
"/platform java",
|
||||
"/platform pocketmine",
|
||||
"/platform jsprismarine"
|
||||
]).oneTime().resize();
|
||||
ctx.reply("Select Platform", Keyboard)
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
// Download Server
|
||||
bot.command("download", async ctx => {
|
||||
// Check admin Username
|
||||
if (!(CheckTelegramUser(ctx.from.username))) return ctx.reply("you are not an administrator");
|
||||
|
||||
const version = ctx.message.text.replace(/\/download|[a-zA-Z]/gi, "").trim();
|
||||
if (version) {
|
||||
await bds.download(version, true);
|
||||
ctx.reply(`Sucess install ${GetPlatform()} with version ${version}`);
|
||||
} else {
|
||||
await ctx.deleteMessage();
|
||||
const KeyboardVersion = Markup.keyboard(Object.getOwnPropertyNames(Servers[GetPlatform()]).map(version => {
|
||||
return {
|
||||
text: `/download ${version}`
|
||||
}
|
||||
})).oneTime().resize();
|
||||
ctx.reply("Select Version to Install", KeyboardVersion);
|
||||
}
|
||||
});
|
||||
|
||||
// Command
|
||||
bot.command("command", async ctx => {
|
||||
// Check admin Username
|
||||
if (!(CheckTelegramUser(ctx.from.username))) return ctx.reply("you are not an administrator");
|
||||
|
||||
const text = ctx.message.text.replace("/command", "").trim();
|
||||
if (!(Detect())) return ctx.reply("Your server is stopped");
|
||||
if (text) {
|
||||
try {
|
||||
global.ServerExec.command(text);
|
||||
} catch (err) {
|
||||
ctx.reply("We couldn't execute the command");
|
||||
ctx.reply(`${err}`);
|
||||
}
|
||||
} else {
|
||||
await ctx.deleteMessage();
|
||||
return ctx.reply("/command <command>");
|
||||
}
|
||||
});
|
||||
|
||||
// Send Info
|
||||
bot.command("info", ctx => {
|
||||
const config = bds.get_config();
|
||||
const InfoRes = [
|
||||
`Bds Maneger core version: ${bds.package_json.version}`,
|
||||
"",
|
||||
"* System Info:",
|
||||
` Kernel: ${GetKernel()}`,
|
||||
` Arch: ${arch}`,
|
||||
` System: ${system}`,
|
||||
"",
|
||||
"* Server:",
|
||||
` platform: ${GetPlatform()}`,
|
||||
` world_name: ${config.world}`,
|
||||
` running: ${bds.detect()}`,
|
||||
` port: ${config.portv4}`,
|
||||
` port6: ${config.portv6}`,
|
||||
` max_players: ${config.players}`,
|
||||
` whitelist: ${config.whitelist}`,
|
||||
`Kernel: ${GetKernel()}`,
|
||||
`Arch: ${arch}`,
|
||||
`System: ${system}`,
|
||||
`Platform: ${GetPlatform()}`,
|
||||
`World_name: ${config.world}`,
|
||||
`Running: ${bds.detect()}`,
|
||||
`Port_V4: ${config.portv4}`,
|
||||
`Port_V6: ${config.portv6}`,
|
||||
`Max_players: ${config.players}`,
|
||||
`Whitelist: ${config.whitelist}`,
|
||||
]
|
||||
return ctx.reply(InfoRes.join("\n"))
|
||||
});
|
||||
|
||||
// Log
|
||||
bot.command("log", ctx => {
|
||||
try {
|
||||
// 4096
|
||||
const Log = fs.readFileSync(path.resolve(GetPaths("log"), "latest.log"), "utf8")
|
||||
if (Log.length >= 4096) ctx.reply(Log.substr(-4096));
|
||||
else ctx.reply(Log)
|
||||
} catch (err) {
|
||||
ctx.reply(err.toString())
|
||||
}
|
||||
ctx.reply(InfoRes.join("\n\n"));
|
||||
});
|
||||
|
||||
// Live Log User
|
||||
bot.command("live_log", ctx => {
|
||||
const option = ctx.message.text.replace("/platform", "").trim();
|
||||
if (/enable/.test(option)) {
|
||||
SaveID(ctx.from.id)
|
||||
console.log(GetID())
|
||||
} else if (/disable/.test(option)) {
|
||||
RemoveID(ctx.from.id)
|
||||
console.log(GetID())
|
||||
} else ctx.reply("Invalid option")
|
||||
ctx.reply(ctx.chat.id)
|
||||
})
|
||||
global.LiveLog = [];
|
||||
bot.command("live_log", async ctx => {
|
||||
// Check admin Username
|
||||
if (!(CheckTelegramUser(ctx.from.username))) return ctx.reply("you are not an administrator");
|
||||
|
||||
const option = ctx.message.text.replace("/live_log", "").trim();
|
||||
if (option) {
|
||||
if (/enable/.test(option)) {
|
||||
global.LiveLog.push(ctx);
|
||||
return ctx.reply("Sucess");
|
||||
} else if (/disable/.test(option)) {
|
||||
// ctx.from.id
|
||||
for (let ctx_Logs in global.LiveLog) {
|
||||
if (global.LiveLog[ctx_Logs].from.id === ctx.from.id) {
|
||||
delete global.LiveLog[ctx_Logs];
|
||||
global.LiveLog = global.LiveLog.filter(a=>a);
|
||||
return ctx.reply("Ok");
|
||||
}
|
||||
}
|
||||
return ctx.reply("You are not in the list");
|
||||
}
|
||||
}
|
||||
await ctx.deleteMessage();
|
||||
const ReplyOption = Markup.keyboard([
|
||||
"/live_log enable",
|
||||
"/live_log disable",
|
||||
]).oneTime().resize();
|
||||
ctx.reply("Enable/Disabled?", ReplyOption);
|
||||
});
|
||||
|
||||
// text
|
||||
bot.on("text", ctx => {
|
||||
console.log(ctx.message.text);
|
||||
if (!(/\/.*/gi.test(ctx.message.text))) global.ServerExec.command(`say ${ctx.message.text}`)
|
||||
});
|
||||
|
||||
// catch
|
||||
bot.catch(console.log);
|
||||
|
||||
// End And Lauch
|
||||
process.on("exit", bot.stop)
|
||||
bot.launch()
|
||||
bot.launch();
|
||||
console.log("Telegram was started");
|
||||
120
index.js
120
index.js
@@ -2,7 +2,11 @@
|
||||
const { resolve } = require("path");
|
||||
const path = require("path")
|
||||
const fs = require("fs");
|
||||
const { randomUUID } = require("crypto");
|
||||
const randomUUID = require("uuid").v4;
|
||||
const { bds_dir } = require("./lib/BdsSettings");
|
||||
|
||||
if (typeof fetch === "undefined") global.fetch = require("node-fetch");
|
||||
|
||||
function date(format) {
|
||||
const today = new Date(),
|
||||
yaer = today.getFullYear(),
|
||||
@@ -25,44 +29,43 @@ module.exports.package_path = bds_core_package
|
||||
module.exports.package_json = require("./package.json");
|
||||
module.exports.extra_json = require("./BdsManegerInfo.json");
|
||||
|
||||
const { bds_dir } = require("./lib/BdsSettings");
|
||||
// Inport and Export Arch
|
||||
const { arch } = require("./lib/BdsSystemInfo");
|
||||
|
||||
const { GetPaths, GetJsonConfig, UpdatePlatform, UpdateTelegramToken, GetTelegramToken } = require("./lib/BdsSettings")
|
||||
module.exports.arch = arch
|
||||
if (typeof fetch === "undefined") global.fetch = require("node-fetch");
|
||||
|
||||
const maneger_ips = require("./src/Scripts/external_ip")
|
||||
const { GetJsonConfig, UpdatePlatform, UpdateTelegramToken } = require("./lib/BdsSettings");
|
||||
|
||||
// Bds Maneger Core Network
|
||||
const maneger_ips = require("./src/BdsNetwork")
|
||||
module.exports.internal_ip = maneger_ips.internal_ip
|
||||
module.exports.external_ip = maneger_ips.external_ip
|
||||
module.exports.save_google_id = require("./lib/BdsSettings").CloudConfig.Driver
|
||||
module.exports.getBdsConfig = GetJsonConfig
|
||||
module.exports.change_platform = module.exports.platform_update = UpdatePlatform
|
||||
module.exports.tmphost = {
|
||||
host: maneger_ips.host,
|
||||
Response: maneger_ips.HostResponse
|
||||
}
|
||||
|
||||
// Get Old Method Config
|
||||
module.exports.getBdsConfig = GetJsonConfig;
|
||||
|
||||
/**
|
||||
* Update Current Platform
|
||||
*/
|
||||
module.exports.change_platform = module.exports.platform_update = UpdatePlatform;
|
||||
|
||||
/**
|
||||
* Save Telegram token in Settings File
|
||||
*/
|
||||
module.exports.telegram_token_save = UpdateTelegramToken
|
||||
|
||||
/**
|
||||
* The Bds Maneger Core Internal API REST
|
||||
*
|
||||
* @param {number} port - The port number, default is 1932
|
||||
*
|
||||
* @param {function} callback - The callback function after start API
|
||||
*/
|
||||
module.exports.api = require("./src/rest/api");
|
||||
|
||||
// ------------
|
||||
const user_file_connected = GetPaths("player");
|
||||
module.exports.players_files = user_file_connected
|
||||
if (!(fs.existsSync(user_file_connected))) {
|
||||
let config = {};
|
||||
config["bedrock"] = {};
|
||||
config["java"] = {};
|
||||
config["pocketmine"] = {};
|
||||
config["jsprismarine"] = {};
|
||||
let NewJson = JSON.stringify(config, null, 4);
|
||||
fs.writeFileSync(user_file_connected, NewJson);
|
||||
}
|
||||
|
||||
const file_user_check = fs.readFileSync(user_file_connected, "utf8");
|
||||
try {
|
||||
JSON.parse(file_user_check)
|
||||
} catch (error) {
|
||||
fs.renameSync(user_file_connected, `${user_file_connected}_old_${Math.random()}_${new Date().getDate()}_${new Date().getMonth()}_${new Date().getFullYear()}.json`)
|
||||
}
|
||||
|
||||
module.exports.telegram_token = GetTelegramToken();
|
||||
|
||||
function token_register() {
|
||||
const bds_token_path = path.join(bds_dir, "bds_tokens.json");
|
||||
if (!(fs.existsSync(bds_token_path))) fs.writeFileSync(bds_token_path, "[]");
|
||||
@@ -83,17 +86,6 @@ function token_register() {
|
||||
return bdsuid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update, Get and more to Modifications Bds Settings File
|
||||
*/
|
||||
module.exports.BdsSettigs = require("./lib/BdsSettings");
|
||||
|
||||
// Requires
|
||||
const { World_BAckup } = require("./src/Scripts/backups");
|
||||
const { config, get_config, config_example } = require("./src/Scripts/ServerSettings");
|
||||
const download = require("./src/Scripts/download");
|
||||
const { start, stop, BdsCommand } = require("./src/Scripts/basic_server")
|
||||
|
||||
/**
|
||||
* Register tokens to use in Bds Maneger REST and other supported applications
|
||||
*
|
||||
@@ -101,6 +93,17 @@ const { start, stop, BdsCommand } = require("./src/Scripts/basic_server")
|
||||
*/
|
||||
module.exports.token_register = token_register
|
||||
|
||||
/**
|
||||
* Update, Get and more to Modifications Bds Settings File
|
||||
*/
|
||||
module.exports.BdsSettigs = require("./lib/BdsSettings");
|
||||
|
||||
// Requires
|
||||
const { World_BAckup } = require("./src/BdsBackup");
|
||||
const { config, get_config } = require("./src/ServerSettings");
|
||||
const download = require("./src/BdsServersDownload");
|
||||
const { start, stop, BdsCommand, CronBackups } = require("./src/BdsManegerServer")
|
||||
|
||||
/**
|
||||
* Take the current date
|
||||
*/
|
||||
@@ -114,6 +117,7 @@ module.exports.BdsDate = module.exports.date = date
|
||||
module.exports.command = BdsCommand
|
||||
// New management method
|
||||
|
||||
// Start Server
|
||||
/**
|
||||
* to start the server here in the sera script with child_process, then you will have to use the return function for your log custumization or anything else
|
||||
*
|
||||
@@ -121,23 +125,27 @@ module.exports.command = BdsCommand
|
||||
* server.log(function (log){console.log(log)})
|
||||
*/
|
||||
module.exports.start = start
|
||||
|
||||
// Stop Server
|
||||
/**
|
||||
* use this command for the server, that's all
|
||||
*/
|
||||
module.exports.stop = stop
|
||||
|
||||
// Create Backup of Bds Maneger Core and Servers along with your maps and settings
|
||||
/**
|
||||
* backup your map locally
|
||||
*/
|
||||
module.exports.backup = World_BAckup
|
||||
|
||||
const { Kill, Detect } = require("./src/Scripts/CheckKill")
|
||||
const { Kill, Detect } = require("./src/CheckKill")
|
||||
|
||||
/**
|
||||
* identify if there are any servers running in the background
|
||||
*
|
||||
* @example bds.detect()
|
||||
* // true: if the server is running
|
||||
* // false: if not already
|
||||
* true: if the server is running
|
||||
* false: if not already
|
||||
*/
|
||||
module.exports.detect = Detect
|
||||
module.exports.bds_detect = Detect
|
||||
@@ -153,19 +161,18 @@ module.exports.kill = Kill
|
||||
* use download( version, boolean ) // the boolean is for if you want to force the installation of the server
|
||||
*
|
||||
* @example
|
||||
* bedrock: bds.download("1.16.201.02")
|
||||
* bedrock: download("1.16.201.02")
|
||||
*
|
||||
* java: bds.download("1.16.5")
|
||||
* java: download("1.16.5")
|
||||
*
|
||||
* any platform: bds.download("latest") // It will download the latest version available for download
|
||||
* any platform: download("latest") // It will download the latest version available for download
|
||||
*/
|
||||
module.exports.download = download
|
||||
module.exports.config_example = config_example
|
||||
|
||||
/**
|
||||
* use this command to modify server settings
|
||||
*
|
||||
* @example bds.set_config({
|
||||
* @example set_config({
|
||||
name: "Bedrock our Java",
|
||||
description: "BDS Maneger",
|
||||
gamemode: "survival",
|
||||
@@ -177,23 +184,16 @@ module.exports.config_example = config_example
|
||||
players: 100,
|
||||
port: 19132,
|
||||
port6: 19133
|
||||
})
|
||||
});
|
||||
*/
|
||||
module.exports.set_config = config
|
||||
|
||||
/**
|
||||
* takes the server settings in JSON format
|
||||
*/
|
||||
module.exports.get_config = get_config
|
||||
|
||||
|
||||
/**
|
||||
* Get temp domain to Server and API (The Domain is even temporary).
|
||||
*/
|
||||
module.exports.tmphost = require("./lib/tempHost")
|
||||
|
||||
// Core Applications
|
||||
|
||||
/**
|
||||
* Load Crontab Backup
|
||||
*/
|
||||
module.exports.Cron_Loaded = require("./src/Scripts/LoadCronBackup")
|
||||
module.exports.Cron_Loaded = CronBackups;
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
const { join, resolve } = require("path");
|
||||
const { existsSync, writeFileSync, mkdirSync, readFileSync } = require("fs");
|
||||
const { homedir } = require("os");
|
||||
const { valid_platform } = require("./BdsSystemInfo");
|
||||
const yaml = {
|
||||
parse: require("js-yaml").load,
|
||||
stringify: require("js-yaml").dump
|
||||
}
|
||||
const FetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const { external_ip } = require("../src/Scripts/external_ip");
|
||||
const { valid_platform } = require("./BdsSystemInfo");
|
||||
|
||||
// PATHs
|
||||
const home = homedir();
|
||||
@@ -21,7 +19,7 @@ else if (valid_platform["java"]) default_platformConfig = "java";
|
||||
else if (valid_platform["pocketmine"]) default_platformConfig = "pocketmine";
|
||||
else default_platformConfig = "jsprismarine"
|
||||
|
||||
|
||||
// Config Base to Bds Maneger Core and others Projects
|
||||
var Config = {
|
||||
paths: {
|
||||
servers: join(bds_dir, "Servers"),
|
||||
@@ -30,11 +28,7 @@ var Config = {
|
||||
player: join(bds_dir, "Players.json")
|
||||
},
|
||||
bds: {
|
||||
enable_tmp_host: false,
|
||||
temelemetry: {
|
||||
id: null,
|
||||
load: false
|
||||
}
|
||||
enable_tmp_host: false
|
||||
},
|
||||
server: {
|
||||
platform: default_platformConfig,
|
||||
@@ -122,14 +116,6 @@ if (existsSync(ConfigPath)) Config = {
|
||||
}; else writeFileSync(ConfigPath, yaml.stringify(Config))
|
||||
process.on("exit", ()=>SaveConfig())
|
||||
|
||||
// Telemetry
|
||||
if (Config.bds.temelemetry.load) {
|
||||
if (!(Config.bds.temelemetry.id)) {
|
||||
Config.bds.temelemetry.id = FetchSync(`https://telemetry.the-bds-maneger.org/getid?external_ip=${JSON.stringify(external_ip)}`).text()
|
||||
SaveConfig()
|
||||
}
|
||||
}
|
||||
|
||||
// Paths
|
||||
if (!(existsSync(Config.paths["backups"]))) mkdirSync(Config.paths["backups"], {recursive: true})
|
||||
if (!(existsSync(Config.paths["log"]))) mkdirSync(Config.paths["log"], {recursive: true})
|
||||
@@ -149,108 +135,173 @@ for (let Servers of Object.getOwnPropertyNames(ServersPaths)) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
bds_dir: bds_dir,
|
||||
GetJsonConfig: function(){return Config},
|
||||
GetPaths: function(path = null){
|
||||
if (!(path)) throw new Error("Set path to get");
|
||||
if (!(path === "all" || Config.paths[path])) throw new Error("Put a valid path: " + Object.getOwnPropertyNames(Config.paths).join(", "));
|
||||
if (path === "all") return Config.paths
|
||||
return Config.paths[path]
|
||||
},
|
||||
GetServerPaths: function(path = null){
|
||||
if (!(path)) throw new Error("Set path to get");
|
||||
if (!(ServersPaths[path])) throw new Error("Put a valid path: " + Object.getOwnPropertyNames(ServersPaths).join(", "));
|
||||
return ServersPaths[path]
|
||||
},
|
||||
GetServerSettings: function(platform = Config.server.platform){
|
||||
return Config.server.Settings[platform]
|
||||
},
|
||||
UpdateServerVersion: function(version = null, platform = Config.server.platform){
|
||||
if (Config.server.versions[platform] || Config.server.versions[platform] === null) {
|
||||
Config.server.versions[platform] = version;
|
||||
SaveConfig()
|
||||
return Config.server.versions[platform]
|
||||
} else throw new Error("Platform invalid")
|
||||
},
|
||||
GetServerVersion: function(){return Config.server.versions},
|
||||
GetServerBan: function (){return Config.ban},
|
||||
GetCronBackup: function(){return Config.server.BackupCron},
|
||||
UpdatePlatform: function(platform = Config.server.platform){
|
||||
platform = platform.toLocaleLowerCase();
|
||||
if (platform === "bedrock") {
|
||||
Config.server.platform = "bedrock";
|
||||
SaveConfig()
|
||||
} else if (platform === "java") {
|
||||
Config.server.platform = "java";
|
||||
SaveConfig()
|
||||
} else if (platform === "pocketmine") {
|
||||
Config.server.platform = "pocketmine";
|
||||
SaveConfig()
|
||||
} else if (platform === "jsprismarine") {
|
||||
Config.server.platform = "jsprismarine";
|
||||
SaveConfig()
|
||||
} else throw new Error("platform no Exists")
|
||||
return platform
|
||||
},
|
||||
GetPlatform: function(){return Config.server.platform},
|
||||
UpdateTelegramToken: function (token = null){
|
||||
if (!(token)) throw new Error("Telegram Token invalid")
|
||||
Config.telegram.token = token
|
||||
// return settings by function
|
||||
function GetJsonConfig(){
|
||||
return Config
|
||||
}
|
||||
|
||||
// get the path from the settings and return by function
|
||||
function GetPaths(path = null){
|
||||
if (!(path)) throw new Error("Set path to get");
|
||||
if (!(path === "all" || Config.paths[path])) throw new Error("Put a valid path: " + Object.getOwnPropertyNames(Config.paths).join(", "));
|
||||
if (path === "all") return Config.paths
|
||||
return Config.paths[path]
|
||||
}
|
||||
|
||||
// Get the server paths if you don't send a throw
|
||||
function GetServerPaths(path = null){
|
||||
if (!(path)) throw new Error("Set path to get");
|
||||
if (!(ServersPaths[path])) throw new Error("Put a valid path: " + Object.getOwnPropertyNames(ServersPaths).join(", "));
|
||||
return ServersPaths[path]
|
||||
}
|
||||
|
||||
// Get the server settings for now it's only being used in Java
|
||||
function GetServerSettings(platform = Config.server.platform){
|
||||
return Config.server.Settings[platform]
|
||||
}
|
||||
|
||||
// Update the settings and save at the same time so as not to lose any information from the Bds Maneger settings
|
||||
function UpdateServerVersion(version = null, platform = Config.server.platform){
|
||||
if (Config.server.versions[platform] || Config.server.versions[platform] === null) {
|
||||
Config.server.versions[platform] = version;
|
||||
SaveConfig()
|
||||
return token
|
||||
},
|
||||
GetTelegramToken: function(){
|
||||
return Config.telegram.token
|
||||
},
|
||||
GetTelegramAdmins: function(){
|
||||
return Config.telegram.admins
|
||||
},
|
||||
GetTempHost: function(){return Config.bds.enable_tmp_host},
|
||||
UpdateTempHost: function(enable = false){
|
||||
// Check Boolean
|
||||
if (typeof enable !== "boolean") {console.log("Use Boolean, default false"); enable = false;}
|
||||
|
||||
// Save
|
||||
Config.bds.enable_tmp_host = enable
|
||||
return SaveConfig();
|
||||
},
|
||||
CloudConfig: {},
|
||||
GetCloudConfig: function(cloud = null){
|
||||
if (!(cloud) || !(Config.cloud[cloud])) throw new Error("Cloud no exists");
|
||||
return Config.cloud[cloud]
|
||||
return Config.server.versions[platform]
|
||||
} else throw new Error("Platform invalid")
|
||||
}
|
||||
|
||||
// Return an Object with all server versions installed
|
||||
function GetServerVersion(){
|
||||
return Config.server.versions
|
||||
}
|
||||
|
||||
// Catch Players/People from Servers/Telegram to be banned or removed from Server/Minecraft
|
||||
function GetServerBan(){
|
||||
return Config.ban
|
||||
}
|
||||
|
||||
// Cron for Backup
|
||||
function GetCronBackup(){
|
||||
return Config.server.BackupCron
|
||||
}
|
||||
|
||||
// Update the entire Bds Manager Core platform
|
||||
function UpdatePlatform(platform = Config.server.platform){
|
||||
platform = platform.toLocaleLowerCase();
|
||||
if (/bedrock/.test(platform)) {
|
||||
Config.server.platform = "bedrock";
|
||||
SaveConfig()
|
||||
} else if (/java/.test(platform)) {
|
||||
Config.server.platform = "java";
|
||||
SaveConfig()
|
||||
} else if (/pocketmine/.test(platform)) {
|
||||
Config.server.platform = "pocketmine";
|
||||
SaveConfig()
|
||||
} else if (/jsprismarine/.test(platform)) {
|
||||
Config.server.platform = "jsprismarine";
|
||||
SaveConfig()
|
||||
} else throw new Error("platform no Exists")
|
||||
return platform
|
||||
}
|
||||
|
||||
// Return to platform
|
||||
function GetPlatform(){
|
||||
return Config.server.platform
|
||||
}
|
||||
|
||||
// Telegram
|
||||
function UpdateTelegramToken(token = null){
|
||||
if (!(token)) throw new Error("Telegram Token invalid")
|
||||
Config.telegram.token = token
|
||||
SaveConfig()
|
||||
return token
|
||||
}
|
||||
|
||||
function GetTelegramToken(){
|
||||
return Config.telegram.token
|
||||
}
|
||||
|
||||
function GetTelegramAdmins(){
|
||||
return Config.telegram.admins
|
||||
}
|
||||
|
||||
// Get a temporary host to connect to the server.
|
||||
function GetTempHost(){
|
||||
return Config.bds.enable_tmp_host
|
||||
}
|
||||
|
||||
// Enable and/or disable pick up temporary host.
|
||||
function UpdateTempHost(enable = false){
|
||||
// Check Boolean
|
||||
if (typeof enable !== "boolean") {console.log("Use Boolean, default false"); enable = false;}
|
||||
|
||||
// Save
|
||||
Config.bds.enable_tmp_host = enable
|
||||
return SaveConfig();
|
||||
}
|
||||
|
||||
// Get the server settings
|
||||
function GetCloudConfig(cloud = null){
|
||||
if (!(cloud) || !(Config.cloud[cloud])) throw new Error("Cloud no exists");
|
||||
return Config.cloud[cloud]
|
||||
}
|
||||
|
||||
// Settings Cloud
|
||||
// Azure
|
||||
function Azure_Settings(account = null, key = null, container = null){
|
||||
if (!(account)) throw new Error("Set Azure Blob Account")
|
||||
if (!(key)) throw new Error("Set Azure Blob Key")
|
||||
if (!(container)) throw new Error("Set Azure Container")
|
||||
Config.cloud.Azure.Account = account
|
||||
Config.cloud.Azure.AccountKey = key
|
||||
Config.cloud.Azure.Container = container
|
||||
SaveConfig()
|
||||
return {
|
||||
Account: Config.cloud.Azure.Account,
|
||||
Key: Config.cloud.Azure.AccountKey,
|
||||
Container: Config.cloud.Azure.Container
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.CloudConfig = {
|
||||
Azure: function(account = null, key = null, container = null){
|
||||
if (!(account)) throw new Error("Set Azure Blob Account")
|
||||
if (!(key)) throw new Error("Set Azure Blob Key")
|
||||
if (!(container)) throw new Error("Set Azure Container")
|
||||
Config.cloud.Azure.Account = account
|
||||
Config.cloud.Azure.AccountKey = key
|
||||
Config.cloud.Azure.Container = container
|
||||
SaveConfig()
|
||||
return {
|
||||
Account: Config.cloud.Azure.Account,
|
||||
Key: Config.cloud.Azure.AccountKey,
|
||||
Container: Config.cloud.Azure.Container
|
||||
}
|
||||
},
|
||||
Oracle: function(bucket = null){
|
||||
if (!(bucket)) throw new Error("Set Oracle Bucket name")
|
||||
Config.cloud.Oracle.Bucket = bucket
|
||||
return {
|
||||
Bucket: bucket
|
||||
}
|
||||
},
|
||||
Google: function(){throw new Error("doesn't work yet")},
|
||||
Driver: function(rootid = null){
|
||||
if (!(rootid)) {rootid = null; console.log("No Backup folder id added for Google Driver");}
|
||||
Config.cloud.Driver.RootID = rootid
|
||||
SaveConfig()
|
||||
return {
|
||||
RootID: rootid
|
||||
}
|
||||
// Oracle
|
||||
function Oracle_Settings(bucket = null){
|
||||
if (!(bucket)) throw new Error("Set Oracle Bucket name")
|
||||
Config.cloud.Oracle.Bucket = bucket
|
||||
return {
|
||||
Bucket: bucket
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Google Drive
|
||||
function Google_Driver_Settings(rootid = null){
|
||||
if (!(rootid)) {rootid = null; console.log("No Backup folder id added for Google Driver");}
|
||||
Config.cloud.Driver.RootID = rootid
|
||||
SaveConfig()
|
||||
return {
|
||||
RootID: rootid
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
bds_dir: bds_dir,
|
||||
GetJsonConfig,
|
||||
GetPaths,
|
||||
GetServerPaths,
|
||||
GetServerSettings,
|
||||
UpdateServerVersion,
|
||||
GetServerVersion,
|
||||
GetServerBan,
|
||||
GetCronBackup,
|
||||
UpdatePlatform,
|
||||
GetPlatform,
|
||||
UpdateTelegramToken,
|
||||
GetTelegramToken,
|
||||
GetTelegramAdmins,
|
||||
GetTempHost,
|
||||
UpdateTempHost,
|
||||
GetCloudConfig,
|
||||
CloudConfig: {
|
||||
Azure: Azure_Settings,
|
||||
Oracle: Oracle_Settings,
|
||||
Driver: Google_Driver_Settings
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,11 +77,11 @@ function GetKernel() {
|
||||
else return `Amazon AWS Cloud ${process.arch}: ${require("os").cpus()[0].model}`;
|
||||
|
||||
// Windows WSL 1
|
||||
case /WSL2|microsft/.test(str):
|
||||
return "Microsoft WSL 2";
|
||||
// Windows WSL 2
|
||||
case /microsoft/.test(str):
|
||||
return "Microsoft WSL 1";
|
||||
// Windows WSL 2
|
||||
case /Microsoft/.test(str):
|
||||
return "Microsoft WSL 2";
|
||||
|
||||
// Azure Virtual Machinime (VM)
|
||||
case /[aA]zure/.test(str):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
const fetchSync = require("@the-bds-maneger/fetchsync");
|
||||
module.exports = {
|
||||
Servers: fetchSync("https://raw.githubusercontent.com/The-Bds-Maneger/external_files/main/Server.json").json(),
|
||||
PHPBin: fetchSync("https://raw.githubusercontent.com/The-Bds-Maneger/Php_Static_Binary/main/binarys.json").json(),
|
||||
GoogleDriver: fetchSync("https://raw.githubusercontent.com/The-Bds-Maneger/external_files/main/Credentials/Google.json").json()
|
||||
PHPBin: fetchSync("https://raw.githubusercontent.com/The-Bds-Maneger/Php_Static_Binary/main/binarys.json").json()
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
const fetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const { external_ip, Interfaces } = require("../src/Scripts/external_ip");
|
||||
const { GetTempHost } = require("./BdsSettings")
|
||||
|
||||
if (GetTempHost()){
|
||||
// Get HOST
|
||||
const HostResponse = fetchSync("https://bds-core-back-end.vercel.app/Gethost", {
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
body: JSON.stringify({
|
||||
mac: Interfaces[0].MAC,
|
||||
ip: external_ip.ipv4,
|
||||
}),
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
}).json();
|
||||
global.BdsTempHost = HostResponse.user.host.host
|
||||
module.exports.host = HostResponse.user.host.host
|
||||
module.exports.Response = HostResponse
|
||||
|
||||
console.log(`Bds Maneger Core Temp Host ID: ${HostResponse.user.ID}`)
|
||||
|
||||
// Delete Host
|
||||
process.on("exit", function () {
|
||||
const deleted_host = fetchSync("https://bds-core-back-end.vercel.app/DeleteHost", {
|
||||
method: "post",
|
||||
body: JSON.stringify({
|
||||
"ID": HostResponse.user.ID
|
||||
}),
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
}).json()
|
||||
if (deleted_host.error) console.log(deleted_host.error)
|
||||
})
|
||||
} else module.exports.host = null
|
||||
2155
package-lock.json
generated
2155
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
27
package.json
27
package.json
@@ -3,24 +3,24 @@
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"version": "1.13.2",
|
||||
"version": "1.13.4",
|
||||
"description": "Scripts to manage minecraft server's",
|
||||
"private": false,
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "node bin/bds_maneger.js -s",
|
||||
"start:telegram": "node bin/telegram_bot.js -e js",
|
||||
"stop": "node -p 'console.log(require(\"./\").kill());'",
|
||||
"test": "node .Build/test/ci.js",
|
||||
"ci": "node .Build/test/ci.js",
|
||||
"eslint": "eslint --debug .",
|
||||
"eslint:debug": "eslint --debug .",
|
||||
"eslint:fix": "eslint --fix .",
|
||||
"eslint:fix": "eslint --debug --fix .",
|
||||
"nexe": "node .Build/nexe_build.js",
|
||||
"Docker": "node .Build/DockerImage.js",
|
||||
"dev:telegram": "node bin/telegram_bot.js -e js"
|
||||
"Docker": "node .Build/DockerImage.js"
|
||||
},
|
||||
"bin": {
|
||||
"bds_maneger": "./bin/bds_maneger.js"
|
||||
"bds_maneger": "./bin/bds_maneger.js",
|
||||
"bds_telegram": "./bin/telegram_bot.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -39,18 +39,16 @@
|
||||
"author": "Sirherobrine23",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"bugs": {
|
||||
"url": "https://github.com/The-Bds-Maneger/Bds-Maneger-Core/issues",
|
||||
"email": "support@the-bds-maneger.org"
|
||||
"url": "https://github.com/The-Bds-Maneger/Bds-Maneger-Core/issues/new"
|
||||
},
|
||||
"homepage": "https://github.com/The-Bds-Maneger/Bds-Maneger-Core/",
|
||||
"docs_base": "https://docs.the-bds-maneger.org/Bds Maneger core/",
|
||||
"homepage": "https://docs.bdsmaneger.com/Bds Maneger core",
|
||||
"engines": {
|
||||
"node": ">=14",
|
||||
"npm": ">=7"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"post-merge": "npm update && npm install"
|
||||
"post-merge": "npm install --node-save -d"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -59,23 +57,22 @@
|
||||
"adm-zip": "^0.5.1",
|
||||
"body-parser": "^1.19.0",
|
||||
"cors": "^2.8.5",
|
||||
"create-desktop-shortcuts": "^1.4.0",
|
||||
"cron": "^1.8.2",
|
||||
"express": "^4.17.1",
|
||||
"express-fileupload": "^1.2.1",
|
||||
"express-prettify": "^0.1.1",
|
||||
"express-rate-limit": "^5.2.3",
|
||||
"googleapis": "^82.0.0",
|
||||
"googleapis": "^84.0.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"minimist": "^1.2.5",
|
||||
"node-cron": "^3.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"node-localstorage": "^2.1.6",
|
||||
"oci-sdk": "^2.0.0",
|
||||
"open": "^8.0.0",
|
||||
"properties-to-json": "^0.2.1",
|
||||
"request-ip": "^2.1.3",
|
||||
"telegraf": "^4.0.0"
|
||||
"telegraf": "^4.0.0",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"docker-run_build": "github:Sirherobrine23/Docker-Run_Build#main",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const bds = require("../../index")
|
||||
const bds = require("../index")
|
||||
const { join, resolve } = require("path");
|
||||
const { readdirSync, existsSync, readFileSync, statSync } = require("fs")
|
||||
const AdmZip = require("adm-zip");
|
||||
const { GetServerPaths, GetPaths, bds_dir } = require("../../lib/BdsSettings")
|
||||
const { GetServerPaths, GetPaths, bds_dir } = require("../lib/BdsSettings")
|
||||
|
||||
function Backup() {
|
||||
const zip = new AdmZip();
|
||||
@@ -44,7 +44,7 @@ function Backup() {
|
||||
for (let index of Object.getOwnPropertyNames(GetPaths("all")).filter(path => !/servers|backups/.test(path)).map(name => GetPaths(name))) {
|
||||
if (existsSync(index)) {
|
||||
const _S = statSync(resolve(index));
|
||||
if (_S.isFile() || _S.isSymbolicLink()) zip.addLocalFile(index); else zip.addLocalFolder(index)
|
||||
if (_S.isFile() || _S.isSymbolicLink()) zip.addLocalFile(index, "/BdsManegerCore"); else zip.addLocalFolder(index, join("/BdsManegerCore", index.replace(bds_dir, "")));
|
||||
}
|
||||
}
|
||||
|
||||
352
src/BdsManegerServer.js
Normal file
352
src/BdsManegerServer.js
Normal file
@@ -0,0 +1,352 @@
|
||||
const child_process = require("child_process");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { resolve, join } = require("path");
|
||||
const randomUUID = require("uuid").v4;
|
||||
const { CronJob } = require("cron");
|
||||
const { GetCronBackup } = require("../lib/BdsSettings");
|
||||
const { Backup } = require("./BdsBackup");
|
||||
|
||||
// Bds Maneger Inports
|
||||
const commandExists = require("../lib/commandExist");
|
||||
const BdsDetect = require("./CheckKill").Detect;
|
||||
const bds = require("../index");
|
||||
const { GetServerPaths, GetPaths, GetServerSettings, GetPlatform } = require("../lib/BdsSettings");
|
||||
const BdsInfo = require("../BdsManegerInfo.json");
|
||||
|
||||
// Set bdsexec functions
|
||||
global.BdsExecs = {};
|
||||
|
||||
function start() {
|
||||
if (BdsDetect()){let ErrorReturn = "You already have a server running"; console.warn(ErrorReturn); throw new Error(ErrorReturn);}
|
||||
|
||||
const SetupCommands = {
|
||||
command: String,
|
||||
args: [],
|
||||
cwd: String,
|
||||
env: process.env,
|
||||
}
|
||||
|
||||
// Minecraft Bedrock Oficial
|
||||
if (GetPlatform() === "bedrock"){
|
||||
// Check Darwin Platform
|
||||
if (process.platform === "darwin") throw new Error("Use a imagem Docker");
|
||||
|
||||
// Windows Platform
|
||||
else if (process.platform === "win32") {
|
||||
SetupCommands.command = "bedrock_server.exe";
|
||||
SetupCommands.cwd = GetServerPaths("bedrock")
|
||||
}
|
||||
|
||||
// Linux Platform
|
||||
else if (process.platform === "linux"){
|
||||
// Set Executable file
|
||||
try {child_process.execSync("chmod 777 bedrock_server", {cwd: GetServerPaths("bedrock")});} catch (error) {console.log(error);}
|
||||
|
||||
// Set Env and Cwd
|
||||
SetupCommands.cwd = GetServerPaths("bedrock");
|
||||
SetupCommands.env.LD_LIBRARY_PATH = GetServerPaths("bedrock");
|
||||
|
||||
// In case the cpu is different from x64, the command will use qemu static to run the server
|
||||
if (process.arch !== "x64") {
|
||||
if (!(commandExists("qemu-x86_64-static"))) throw new Error("Install qemu static")
|
||||
SetupCommands.command = "qemu-x86_64-static"
|
||||
SetupCommands.args.push("./bedrock_server");
|
||||
} else SetupCommands.command = "./bedrock_server";
|
||||
} else throw new Error("your system does not support Minecraft Bedrock (yet)")
|
||||
}
|
||||
|
||||
// Minecraft Java Oficial
|
||||
else if (GetPlatform() === "java") {
|
||||
const JavaConfig = GetServerSettings("java")
|
||||
|
||||
// Checking if java is installed on the device
|
||||
if (commandExists("java")) {
|
||||
SetupCommands.cwd = GetServerPaths("java");
|
||||
SetupCommands.command = "java";
|
||||
SetupCommands.args.push("-jar", `-Xms${JavaConfig.ram_mb}M`, `-Xmx${JavaConfig.ram_mb}M`, "MinecraftServerJava.jar", "nogui");
|
||||
} else {require("open")(bds.package_json.docs_base + "Java-Download#windows"); throw new Error(`Open: ${bds.package_json.docs_base + "Java-Download#windows"}`)}
|
||||
}
|
||||
|
||||
// Minecraft Bedrock (Pocketmine-MP)
|
||||
else if (GetPlatform() === "pocketmine") {
|
||||
// Start PocketMine-MP
|
||||
SetupCommands.command = join(resolve(GetServerPaths("pocketmine"), "bin", "php7", "bin"), "php");
|
||||
SetupCommands.args.push("./PocketMine-MP.phar");
|
||||
SetupCommands.cwd = GetServerPaths("pocketmine");
|
||||
}
|
||||
|
||||
// Minecraft Bedrock (JSPrismarine)
|
||||
else if (GetPlatform() === "jsprismarine") {
|
||||
// Start JSPrismarine
|
||||
SetupCommands.command = "node";
|
||||
SetupCommands.args.push("./packages/server/dist/Server.js");
|
||||
SetupCommands.cwd = GetServerPaths("jsprismarine");
|
||||
} else throw Error("Bds Config Error")
|
||||
|
||||
// Setup commands
|
||||
const ServerExec = child_process.execFile(SetupCommands.command, SetupCommands.args, {
|
||||
cwd: SetupCommands.cwd,
|
||||
env: SetupCommands.env
|
||||
});
|
||||
|
||||
// Post Start
|
||||
if (GetPlatform() === "java") {
|
||||
const eula_file = path.join(GetServerPaths("java"), "eula.txt");
|
||||
console.log(fs.readFileSync(eula_file, "utf8"));
|
||||
if (fs.readFileSync(eula_file, "utf8").includes("eula=false")) {
|
||||
fs.writeFileSync(eula_file, fs.readFileSync(eula_file, "utf8").replaceAll("eula=false", "eula=true"));
|
||||
throw new Error("Restart application/CLI")
|
||||
}
|
||||
}
|
||||
|
||||
// Log file
|
||||
|
||||
const LogFile = join(GetPaths("log"), `${bds.date()}_${GetPlatform()}_Bds_log.log`);
|
||||
const LatestLog_Path = path.join(GetPaths("log"), "latest.log");
|
||||
const LogSaveFunction = data => {
|
||||
fs.appendFileSync(LogFile, data);
|
||||
fs.appendFileSync(LatestLog_Path, data);
|
||||
return data;
|
||||
}
|
||||
fs.writeFileSync(LatestLog_Path, "");
|
||||
|
||||
// Player JSON File
|
||||
ServerExec.stdout.on("data", data => Player_Json(data, UpdateUserJSON));
|
||||
ServerExec.stderr.on("data", data => Player_Json(data, UpdateUserJSON));
|
||||
|
||||
// Log File
|
||||
ServerExec.stdout.on("data", LogSaveFunction);
|
||||
ServerExec.stderr.on("data", LogSaveFunction);
|
||||
|
||||
// Global and Run
|
||||
global.bds_log_string = ""
|
||||
ServerExec.stdout.on("data", data => {if (global.bds_log_string) global.bds_log_string = data; else global.bds_log_string += data});
|
||||
|
||||
const returnFuntion = {
|
||||
uuid: randomUUID(),
|
||||
stop: function (){
|
||||
ServerExec.stdin.write(BdsInfo.Servers[GetPlatform()].stop+"\n");
|
||||
return BdsInfo.Servers[GetPlatform()].stop;
|
||||
},
|
||||
command: async function (command = "list", callback = data => console.log(data)){
|
||||
return new Promise((resolve) => {
|
||||
ServerExec.stdin.write(`${command}\n`);
|
||||
if (typeof callback === "function") {
|
||||
const TempLog = []
|
||||
const ControlTempHost = data => {TempLog.push(data); return data;}
|
||||
ServerExec.stdout.on("data", data => ControlTempHost(data));
|
||||
ServerExec.stderr.on("data", data => ControlTempHost(data));
|
||||
setTimeout(() => {
|
||||
callback(TempLog.join("\n"));
|
||||
resolve(TempLog.join("\n"));
|
||||
}, 2500);
|
||||
}
|
||||
});
|
||||
},
|
||||
log: function (logCallback = function(data = ""){data.split("\n").filter(d=>{return (d !== "")}).forEach(l=>console.log(l))}){
|
||||
if (typeof logCallback !== "function") {
|
||||
console.warn("The log callback is not a function using console.log");
|
||||
logCallback = function(data = ""){data.split("\n").filter(d=>{return (d !== "")}).forEach(l=>console.log(l))}
|
||||
}
|
||||
ServerExec.stdout.on("data", data => logCallback(data));
|
||||
ServerExec.stderr.on("data", data => logCallback(data));
|
||||
},
|
||||
exit: function (exitCallback = process.exit){if (
|
||||
typeof exitCallback === "function") ServerExec.on("exit", code => exitCallback(code));
|
||||
},
|
||||
on: function(action = String(), callback = Function) {
|
||||
if (!(action === "all" || action === "connect" || action === "disconnect")) throw new Error("Use some valid action: all, connect, disconnect");
|
||||
|
||||
// Functions
|
||||
const data = data => Player_Json(data, function (array_status){
|
||||
for (let _player of array_status) {
|
||||
if (action === "all") callback(_player);
|
||||
else if (_player.Action === action) callback(_player)
|
||||
}
|
||||
});
|
||||
ServerExec.stdout.on("data", data);
|
||||
ServerExec.stderr.on("data", data);
|
||||
},
|
||||
op: function (player = "Steve") {
|
||||
let command = BdsInfo.Servers[GetPlatform()].op.replace("{{Player}}", player);
|
||||
ServerExec.stdin.write(command+"\n");
|
||||
return command;
|
||||
},
|
||||
deop: function (player = "Steve") {
|
||||
let command = BdsInfo.Servers[GetPlatform()].deop.replace("{{Player}}", player);
|
||||
ServerExec.stdin.write(command+"\n");
|
||||
return command;
|
||||
},
|
||||
ban: function (player = "Steve") {
|
||||
let command = BdsInfo.Servers[GetPlatform()].ban.replace("{{Player}}", player);
|
||||
ServerExec.stdin.write(command+"\n");
|
||||
return command;
|
||||
},
|
||||
kick: function (player = "Steve", text = "you got kicked") {
|
||||
let command = BdsInfo.Servers[GetPlatform()].kick.replace("{{Player}}", player).replace("{{Text}}", text);
|
||||
ServerExec.stdin.write(command+"\n");
|
||||
return command;
|
||||
},
|
||||
tp: function (player = "Steve", cord = {x: 0, y: 128, z: 0}) {
|
||||
let command = BdsInfo.Servers[GetPlatform()].tp.replace("{{Player}}", player);
|
||||
if (cord.x) command = command.replace("{{X}}", cord.x); else command = command.replace("{{X}}", 0);
|
||||
if (cord.y) command = command.replace("{{Y}}", cord.y); else command = command.replace("{{Y}}", 128);
|
||||
if (cord.y) command = command.replace("{{Z}}", cord.y); else command = command.replace("{{Z}}", 0);
|
||||
ServerExec.stdin.write(command+"\n");
|
||||
return command;
|
||||
}
|
||||
}
|
||||
ServerExec.on("exit", ()=>{delete global.BdsExecs[returnFuntion.uuid]});
|
||||
global.BdsExecs[returnFuntion.uuid] = returnFuntion;
|
||||
return returnFuntion;
|
||||
}
|
||||
|
||||
function Player_Json(data = "aaaaaa\n\n\naa", callback = () => {}){
|
||||
const Current_platorm = GetPlatform();
|
||||
// Bedrock
|
||||
if (Current_platorm === "bedrock") {
|
||||
// "[INFO] Player connected: Sirherobrine, xuid: 2535413418839840",
|
||||
// "[INFO] Player disconnected: Sirherobrine, xuid: 2535413418839840",
|
||||
const BedrockMap = data.split(/\n|\r/gi).map(line => {
|
||||
if (line.includes("connected") || line.includes("disconnected")) {
|
||||
let SplitLine = line.replace(/\[.+\]\s+Player/gi, "").trim().split(/\s+/gi);
|
||||
|
||||
// player
|
||||
let Player = line.trim().replace(/\[.+\]\s+Player/gi, "").trim().replace(/disconnected:|connected:/, "").trim().split(/,\s+xuid:/).filter(a=>a).map(a=>a.trim()).filter(a=>a);
|
||||
|
||||
//
|
||||
let Actions = null;
|
||||
if (/^disconnected/.test(SplitLine[0].trim())) Actions = "disconnect";
|
||||
else if (/^connected/.test(SplitLine[0].trim())) Actions = "connect";
|
||||
|
||||
// Object Map
|
||||
const ObjectReturn = {
|
||||
Player: Player[0],
|
||||
Action: Actions,
|
||||
xuid: Player[1] || null,
|
||||
Date: new Date(),
|
||||
}
|
||||
|
||||
// Return
|
||||
return ObjectReturn
|
||||
} else return false;
|
||||
}).filter(a=>a);
|
||||
callback(BedrockMap);
|
||||
}
|
||||
// Java and Pocketmine-MP
|
||||
else if (Current_platorm === "java" || Current_platorm === "pocketmine") {
|
||||
const JavaMap = data.split(/\n|\r/gi).map(line => {
|
||||
if (line.trim().includes("joined the game") || line.includes("left the game")) {
|
||||
line = line.replace(/^\[.+\] \[.+\/.+\]:/, "").trim();
|
||||
let Actions = null;
|
||||
if (/joined/.test(line)) Actions = "connect";
|
||||
else if (/left/.test(line)) Actions = "disconnect";
|
||||
|
||||
// Player Object
|
||||
const JavaObject = {
|
||||
Player: line.replace(/joined the game|left the game/gi, "").trim(),
|
||||
Action: Actions,
|
||||
Date: new Date(),
|
||||
}
|
||||
|
||||
// Return JSON
|
||||
return JavaObject
|
||||
} else return false;
|
||||
}).filter(a=>a);
|
||||
callback(JavaMap);
|
||||
}
|
||||
// JSPrismarine
|
||||
// else if (Current_platorm === "jsprismarine") console.log("It's still not working");
|
||||
}
|
||||
|
||||
const UpdateUserJSON = function (New_Object = new Array()){
|
||||
const Player_Json_path = GetPaths("player");
|
||||
const Current_platorm = GetPlatform();
|
||||
let Players_Json = {
|
||||
bedrock: [],
|
||||
java: [],
|
||||
pocketmine: [],
|
||||
jsprismarine: [],
|
||||
}
|
||||
if (fs.existsSync(Player_Json_path)) Players_Json = JSON.parse(fs.readFileSync(Player_Json_path, "utf8"));
|
||||
|
||||
// Array
|
||||
Players_Json[Current_platorm] = Players_Json[Current_platorm].concat(New_Object)
|
||||
|
||||
fs.writeFileSync(Player_Json_path, JSON.stringify(Players_Json, null, 2));
|
||||
return Players_Json
|
||||
}
|
||||
|
||||
// Search player in JSON
|
||||
function Player_Search(player = "dontSteve") {
|
||||
const Player_Json_path = GetPaths("player"), Current_platorm = GetPlatform();
|
||||
const Players_Json = JSON.parse(fs.readFileSync(Player_Json_path, "utf8"))[Current_platorm]
|
||||
for (let Player of Players_Json) {
|
||||
if (Player.Player === player.trim()) return Player;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
function GetSessions(){
|
||||
const ArraySessions = Object.getOwnPropertyNames(global.BdsExecs)
|
||||
if (ArraySessions.length === 0) throw "Start Server";
|
||||
if (ArraySessions.length >= 2) throw "Select a session manually:" + ArraySessions.join(", ")
|
||||
return global.BdsExecs[0]
|
||||
}
|
||||
|
||||
function BdsCommand(command = "list", SessionID = null) {
|
||||
if (!(command)) return false;
|
||||
try {
|
||||
var Session = {}
|
||||
if (!(SessionID)) Session = GetSessions(); else Session = global.BdsExecs[SessionID]
|
||||
Session.command(command);
|
||||
return true
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function stop(SessionID = null) {
|
||||
try {
|
||||
var Session = {}
|
||||
if (!(SessionID)) Session = GetSessions(); else Session = global.BdsExecs[SessionID]
|
||||
Session.stop()
|
||||
return true
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const Cloud_Backup = {
|
||||
Azure: require("./clouds/Azure").Uploadbackups,
|
||||
Driver: require("./clouds/GoogleDriver").Uploadbackups,
|
||||
Oracle: require("./clouds/OracleCI").Uploadbackups,
|
||||
}
|
||||
const CurrentBackups = GetCronBackup().map(Crron => {
|
||||
return {
|
||||
CronFunction: new CronJob(Crron.cron, async () => {
|
||||
console.log("Starting Server and World Backup");
|
||||
const CurrentBackup = Backup();
|
||||
// Azure
|
||||
if (Crron.Azure) Cloud_Backup.Azure(CurrentBackup.file_name, CurrentBackup.file_path);
|
||||
else console.info("Azure Backup Disabled");
|
||||
|
||||
// Google Driver
|
||||
if (Crron.Driver) Cloud_Backup.Driver(CurrentBackup.file_name, CurrentBackup.file_path);
|
||||
else console.info("Google Driver Backup Disabled");
|
||||
|
||||
// Oracle Bucket
|
||||
if (Crron.Oracle) Cloud_Backup.Oracle(CurrentBackup.file_name, CurrentBackup.file_path);
|
||||
else console.info("Oracle Bucket Backup Disabled");
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
start,
|
||||
BdsCommand,
|
||||
stop,
|
||||
CronBackups: CurrentBackups,
|
||||
Player_Search,
|
||||
}
|
||||
89
src/BdsNetwork.js
Normal file
89
src/BdsNetwork.js
Normal file
@@ -0,0 +1,89 @@
|
||||
// External User ip
|
||||
const fetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const os = require("os");
|
||||
const { GetTempHost } = require("../lib/BdsSettings");
|
||||
|
||||
const externalIP = {
|
||||
ipv4: fetchSync("https://api.ipify.org/").text().replace("\n", ""),
|
||||
ipv6: fetchSync("https://api64.ipify.org/").text().replace("\n", "")
|
||||
}
|
||||
|
||||
// Internal ip user
|
||||
const interfaces = os.networkInterfaces();
|
||||
const internal_ip = [];
|
||||
for (let inter of Object.getOwnPropertyNames(interfaces).map(index => interfaces[index])){
|
||||
for (let ind in inter){
|
||||
if (inter[ind].address.includes("::")) internal_ip.push(`[${inter[ind].address}]`)
|
||||
else internal_ip.push(inter[ind].address)
|
||||
}
|
||||
}
|
||||
|
||||
// Network Interfaces
|
||||
const Interfaces = Object.getOwnPropertyNames(interfaces).map(inter => {
|
||||
inter = interfaces[inter]
|
||||
if (inter[0].mac !== "00:00:00:00:00:00") {
|
||||
try {
|
||||
return {
|
||||
MAC: inter[0].mac,
|
||||
Interna_IP: {
|
||||
ipv4: inter[0].address,
|
||||
ipv6: inter[1].address,
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
return {
|
||||
MAC: inter[0].mac,
|
||||
Interna_IP: {
|
||||
ipv4: inter[0].address,
|
||||
ipv6: null,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}).filter(a=>a);
|
||||
|
||||
// Temp Host
|
||||
var host = null,
|
||||
HostResponse = null;
|
||||
|
||||
if (GetTempHost()){
|
||||
// Get HOST
|
||||
HostResponse = fetchSync("https://bds-core-back-end.vercel.app/Gethost", {
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
body: JSON.stringify({
|
||||
mac: Interfaces[0].MAC,
|
||||
ip: external_ip.ipv4,
|
||||
}),
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
}).json();
|
||||
global.BdsTempHost = HostResponse.user.host.host
|
||||
host = HostResponse.user.host.host
|
||||
|
||||
console.log(`Bds Maneger Core Temp Host ID: ${HostResponse.user.ID}`)
|
||||
|
||||
// Delete Host
|
||||
process.on("exit", function () {
|
||||
const deleted_host = fetchSync("https://bds-core-back-end.vercel.app/DeleteHost", {
|
||||
method: "post",
|
||||
body: JSON.stringify({
|
||||
"ID": HostResponse.user.ID
|
||||
}),
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
}).json()
|
||||
if (deleted_host.error) console.log(deleted_host.error)
|
||||
})
|
||||
} else module.exports.host = null
|
||||
|
||||
module.exports = {
|
||||
externalIP,
|
||||
ip: externalIP,
|
||||
internal_ip,
|
||||
Interfaces,
|
||||
HostResponse,
|
||||
host,
|
||||
}
|
||||
@@ -1,21 +1,61 @@
|
||||
var AdmZip = require("adm-zip");
|
||||
const { writeFileSync, existsSync, readFileSync, readdirSync } = require("fs");
|
||||
const { join, resolve } = require("path");
|
||||
const bds = require("../../index")
|
||||
const { valid_platform } = require("../../lib/BdsSystemInfo");
|
||||
const { GetServerPaths, GetServerVersion, UpdateServerVersion, GetPlatform } = require("../../lib/BdsSettings");
|
||||
const { GitClone } = require("../../lib/git_simples");
|
||||
const { writeFileSync, existsSync, readFileSync, readdirSync, rmSync } = require("fs");
|
||||
const { join, resolve, basename } = require("path");
|
||||
const bds = require("../index")
|
||||
const { valid_platform } = require("../lib/BdsSystemInfo");
|
||||
const { GetServerPaths, GetServerVersion, UpdateServerVersion, GetPlatform } = require("../lib/BdsSettings");
|
||||
const { GitClone } = require("../lib/git_simples");
|
||||
const { execSync } = require("child_process");
|
||||
const Extra = require("../../BdsManegerInfo.json");
|
||||
const Extra = require("../BdsManegerInfo.json");
|
||||
|
||||
const
|
||||
bds_dir_bedrock = GetServerPaths("bedrock"),
|
||||
bds_dir_java = GetServerPaths("java"),
|
||||
bds_dir_pocketmine = GetServerPaths("pocketmine"),
|
||||
bds_dir_jsprismarine = GetServerPaths("jsprismarine");
|
||||
async function php_download() {
|
||||
const bds_dir_pocketmine = GetServerPaths("pocketmine"),
|
||||
PHPBin = (await (await fetch(Extra.download.php)).json());
|
||||
const phpFolder = resolve(bds_dir_pocketmine, "bin");
|
||||
const phpExtensiosnsDir = resolve(bds_dir_pocketmine, "bin/php7/lib/php/extensions");
|
||||
|
||||
// Check Php Binary
|
||||
let urlPHPBin = PHPBin[process.platform]
|
||||
if (!(urlPHPBin)) throw new Error("unsupported system")
|
||||
urlPHPBin = urlPHPBin[bds.arch]
|
||||
|
||||
|
||||
// Remove Old php Binary if it exists
|
||||
if (existsSync(phpFolder)) {
|
||||
console.log("Removing old PHP files.");
|
||||
rmSync(phpFolder, { recursive: true });
|
||||
}
|
||||
console.log(`Downloading ${urlPHPBin}`);
|
||||
const ZipBuffer = Buffer.from((await (await fetch(urlPHPBin)).arrayBuffer()));
|
||||
console.log(`${basename(urlPHPBin)} downloaded`);
|
||||
|
||||
console.log(`Extracting ${basename(urlPHPBin)}`);
|
||||
const zipExtractBin = new AdmZip(ZipBuffer);
|
||||
zipExtractBin.extractAllTo(bds_dir_pocketmine, false)
|
||||
console.log("Successfully extracting the binaries")
|
||||
|
||||
let phpConfigInit = readFileSync(join(phpFolder, "php7", "bin", "php.ini"), "utf-8");
|
||||
if (!(existsSync(phpExtensiosnsDir))) return true;
|
||||
|
||||
const phpExtensiosns = readdirSync(phpExtensiosnsDir).map(FileFolder => {
|
||||
if (!(FileFolder.includes("debug-zts"))) return false;
|
||||
return resolve(phpExtensiosnsDir, FileFolder);
|
||||
}).filter(a=>a);
|
||||
|
||||
if (phpConfigInit.includes("extension_dir")) console.log("Skipping php.ini configuration");
|
||||
else {
|
||||
phpConfigInit = (`extension_dir="${phpExtensiosns.join()}"\n${phpConfigInit}`);
|
||||
writeFileSync(join(phpFolder, "php7", "bin", "php.ini"), phpConfigInit);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports = async function (version, force_install, callback) {
|
||||
const Servers = (await (await fetch(Extra.download.servers)).json()), PHPBin = (await (await fetch(Extra.download.php)).json());
|
||||
const bds_dir_bedrock = GetServerPaths("bedrock"),
|
||||
bds_dir_java = GetServerPaths("java"),
|
||||
bds_dir_pocketmine = GetServerPaths("pocketmine"),
|
||||
bds_dir_jsprismarine = GetServerPaths("jsprismarine");
|
||||
const Servers = (await (await fetch(Extra.download.servers)).json());
|
||||
const ServerVersion = GetServerVersion()
|
||||
const CurrentPlatform = GetPlatform()
|
||||
if (force_install === true) {
|
||||
@@ -92,28 +132,9 @@ module.exports = async function (version, force_install, callback) {
|
||||
|
||||
writeFileSync(join(bds_dir_pocketmine, "PocketMine-MP.phar"), Buffer.from((await (await fetch(PocketMineJson.url)).arrayBuffer())), "binary")
|
||||
console.log("Success downloading and saving PocketMine-MP php");
|
||||
|
||||
// Check PHP binary
|
||||
var urlPHPBin; /* Check System php */try {urlPHPBin = PHPBin[process.platform][bds.arch]} catch (error) {throw new Error("unsupported system")}
|
||||
console.log("Downloading PHP Binaries");
|
||||
// Get PHP bin File and extract
|
||||
const zipExtractBin = new AdmZip(Buffer.from((await (await fetch(urlPHPBin)).arrayBuffer())));
|
||||
|
||||
zipExtractBin.extractAllTo(bds_dir_pocketmine, true)
|
||||
console.log("Successfully extracting the binaries")
|
||||
await php_download();
|
||||
|
||||
// Check Configs and others
|
||||
const phpFolder = resolve(bds_dir_pocketmine, "bin")
|
||||
const phpConfigInit = readFileSync(join(phpFolder, "php7", "bin", "php.ini"), "utf-8").split(/\n/g).filter(a=>a.trim());
|
||||
// Post check extension_dir
|
||||
const phpExtensiosnsDir = resolve(bds_dir_pocketmine, "bin/php7/lib/php/extensions");const phpExtensiosns = readdirSync(phpExtensiosnsDir);var exetensionZen;for (let index of phpExtensiosns) if (index.includes("debug-zts")) exetensionZen = index
|
||||
// Check Php bin folder and bins
|
||||
var check_extension_dir = false;for (let index of phpConfigInit) if (index.includes("extension_dir")) check_extension_dir = true;
|
||||
if (check_extension_dir) console.log("Skipping php.ini configuration");
|
||||
else {
|
||||
phpConfigInit.push(`extension_dir="${resolve(phpExtensiosnsDir, exetensionZen)}"`);
|
||||
writeFileSync(join(phpFolder, "php7", "bin", "php.ini"), phpConfigInit.join("\n"));
|
||||
}
|
||||
// Update server Version
|
||||
UpdateServerVersion(version)
|
||||
// Callback
|
||||
@@ -1,43 +1,47 @@
|
||||
const { execSync } = require("child_process");
|
||||
|
||||
function getProcess(){
|
||||
const MountProcess = [];
|
||||
var getList = ""
|
||||
let MountProcess = [];
|
||||
if (process.platform === "win32") {
|
||||
console.info("Getting the process list in Windows is too slow");
|
||||
getList = execSync("tasklist").toString("utf8").split("\r").join("\n").split("\n").filter(d => {return !(d === "" || d.includes("====="))})
|
||||
delete getList[0];
|
||||
getList = getList.filter(d=>{return (d !== undefined)})
|
||||
for (let _line of getList) {
|
||||
_line = _line.split(/\s+/)
|
||||
// Get argument: wmic process where "ProcessID=4152" get commandline
|
||||
const pidNumber = (_line.length - 5)
|
||||
MountProcess.push({
|
||||
command: (function(){
|
||||
try {
|
||||
return execSync(`wmic process where "ProcessID=${_line[pidNumber]}" get commandline`).toString("utf8").split("\r").join("\n").split("\n").filter(d=>{return !(d.trim() === "" || d.trim() === "CommandLine")}).join(" ").trim().split("\"").join("").trim()
|
||||
} catch (err) {
|
||||
return null
|
||||
}
|
||||
})(),
|
||||
pid: parseInt(_line[pidNumber]),
|
||||
cpu: _line[(_line.length - 3)],
|
||||
mem: (_line[(_line.length - 2)].split(".").join("")),
|
||||
})
|
||||
}
|
||||
MountProcess = execSync("wmic path win32_process get Processid,Commandline,WorkingSetSize").toString().split(/\n/gi).filter(a => a.trim()).map(Line => {
|
||||
try {
|
||||
Line = Line.split(/\r/gi).filter(a => a).join("").trim();
|
||||
const line_split = Line.split(/\s+/gi);
|
||||
|
||||
// Ignore empty lines
|
||||
if (line_split.length <= 2) return false
|
||||
|
||||
let pid = line_split[Math.abs(line_split.length - 2)].toString();
|
||||
let mem = line_split[Math.abs(line_split.length - 1)].toString();
|
||||
let command = Line.slice(0, - Math.abs(pid.length)).trim().slice(0, - Math.abs(mem.length)).trim();
|
||||
pid = parseInt(pid);
|
||||
mem = parseInt(mem);
|
||||
if (command && pid && mem) return {
|
||||
command,
|
||||
pid,
|
||||
mem,
|
||||
}; else return false
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
return false
|
||||
}
|
||||
}).filter(a => a);
|
||||
} else {
|
||||
getList = execSync("ps -aux").toString("utf8").split("\n").filter(d=>{return !(/USER\s+/.test(d) || d === "")})
|
||||
for (let _line of getList) {
|
||||
_line = _line.split(/\s+/)
|
||||
MountProcess.push({
|
||||
command: (function(){var command = _line[10];const argvLenght = (_line.length - 11);for (let index = 0; index < argvLenght; index++) {command += ` ${_line[11 + index]}`;} return command})(),
|
||||
MountProcess = execSync("ps -aux").toString("utf8").split("\n").filter(d=>{return !(/USER\s+/.test(d) || d === "")}).map(_line => _line.split(/\s+/)).map(_line =>{
|
||||
return {
|
||||
command: (function(){
|
||||
var command = _line[10];
|
||||
const argvLenght = (_line.length - 11);
|
||||
for (let index = 0; index < argvLenght; index++) {
|
||||
command += ` ${_line[11 + index]}`;
|
||||
}
|
||||
return command;
|
||||
})(),
|
||||
pid: parseInt(_line[1]),
|
||||
cpu: _line[2],
|
||||
mem: _line[3],
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return MountProcess;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const bds = require("../../index")
|
||||
const { CheckBan } = require("./check");
|
||||
const { GetPlatform, GetPaths } = require("../../lib/BdsSettings");
|
||||
const bds = require("../index")
|
||||
const { CheckBan } = require("./UsersAndtokenChecks");
|
||||
const { GetPlatform, GetPaths } = require("../lib/BdsSettings");
|
||||
const fs = require("fs");
|
||||
|
||||
function MytypeKill(player) {
|
||||
@@ -1,21 +0,0 @@
|
||||
const { CronJob } = require("cron");
|
||||
const { GetCronBackup } = require("../../lib/BdsSettings");
|
||||
const { Backup } = require("./backups")
|
||||
const Cloud = {
|
||||
Azure: require("../clouds/Azure").Uploadbackups,
|
||||
Driver: require("../clouds/GoogleDriver").Uploadbackups,
|
||||
Oracle: require("../clouds/OracleCI").Uploadbackups,
|
||||
}
|
||||
|
||||
const CurrentBackups = GetCronBackup();
|
||||
module.exports = CurrentBackups.map(Crron => {
|
||||
return {
|
||||
CronFunction: new CronJob(Crron.cron, function(){
|
||||
console.log("Starting Server and World Backup");
|
||||
const CurrentBackup = Backup();
|
||||
if (Crron.Azure) Cloud.Azure(CurrentBackup.file_name, CurrentBackup.file_path); else console.info("Azure Backup Disabled");
|
||||
if (Crron.Driver) Cloud.Driver(CurrentBackup.file_name, CurrentBackup.file_path); else console.info("Google Driver Backup Disabled");
|
||||
if (Crron.Oracle) Cloud.Oracle(CurrentBackup.file_name, CurrentBackup.file_path); else console.info("Oracle Bucket Backup Disabled");
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -1,182 +0,0 @@
|
||||
const { exec, execFile } = require("child_process");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { resolve, join } = require("path");
|
||||
const commandExists = require("../../lib/commandExist");
|
||||
const saveUser = require("./PlayersSave");
|
||||
const bds = require("../../index");
|
||||
const { GetServerPaths, GetPaths, GetServerSettings, GetPlatform } = require("../../lib/BdsSettings");
|
||||
const BdsDetect = require("./CheckKill").Detect;
|
||||
const { randomUUID } = require("crypto");
|
||||
const { warn } = console;
|
||||
|
||||
// Set bdsexec functions
|
||||
global.BdsExecs = {};
|
||||
|
||||
function saveLog(data = "", LogFile = ""){
|
||||
fs.appendFileSync(path.join(GetPaths("log"), "latest.log"), data)
|
||||
fs.appendFileSync(LogFile, data)
|
||||
}
|
||||
function start() {
|
||||
if (BdsDetect()){
|
||||
console.warn("You already have a server running");
|
||||
throw "You already have a server running";
|
||||
} else {
|
||||
var start_server;
|
||||
|
||||
// Minecraft Bedrock Oficial
|
||||
if (GetPlatform() === "bedrock"){
|
||||
if (process.platform === "darwin") throw Error("Use a imagem Docker");
|
||||
else if (process.platform == "win32") start_server = exec("bedrock_server.exe", {
|
||||
cwd: GetServerPaths("bedrock"),
|
||||
});
|
||||
else if (process.platform == "linux"){
|
||||
// Set Executable file
|
||||
execFile("chmod 777 bedrock_server", {cwd: GetServerPaths("bedrock")});
|
||||
var BedrockCommand = "./bedrock_server";
|
||||
|
||||
// Emulation of the x86_64 architecture
|
||||
if (commandExists("qemu-x86_64-static") && process.arch !== "x64") BedrockCommand = "qemu-x86_64-static "+BedrockCommand;
|
||||
|
||||
// Start Bedrock Server
|
||||
start_server = exec(BedrockCommand, {cwd: GetServerPaths("bedrock"), env: {...process.env, LD_LIBRARY_PATH: GetServerPaths("bedrock")}})
|
||||
} else throw new Error("your system does not support Minecraft Bedrock (yet)")
|
||||
}
|
||||
|
||||
// Minecraft Java Oficial
|
||||
else if (GetPlatform() === "java") {
|
||||
const JavaConfig = GetServerSettings("java")
|
||||
|
||||
// Checking if java is installed on the device
|
||||
if (commandExists("java")) {
|
||||
start_server = execFile("java", [
|
||||
"-jar",
|
||||
`-Xms${JavaConfig.ram_mb}M`,
|
||||
`-Xmx${JavaConfig.ram_mb}M`,
|
||||
"MinecraftServerJava.jar",
|
||||
"nogui"
|
||||
], {cwd: GetServerPaths("java")})
|
||||
} else {
|
||||
var url = bds.package_json.docs_base; if (bds.system == "windows") url += "Java-Download#windows"; else if (bds.system === "linux") url = "Java-Download#linux"; else if (process.platform === "darwin") url = "Java-Download#macos"; else url = "Java-Download";
|
||||
require("open")(url);
|
||||
throw new Error(`Open: ${url}`)
|
||||
}
|
||||
} else if (GetPlatform() === "pocketmine") {
|
||||
// Start PocketMine-MP
|
||||
const php_bin_path = join(resolve(GetServerPaths("pocketmine"), "bin", "php7", "bin"), "php");
|
||||
start_server = execFile(php_bin_path, [
|
||||
"./PocketMine-MP.phar"
|
||||
], {
|
||||
cwd: GetServerPaths("pocketmine")
|
||||
})
|
||||
} else if (GetPlatform() === "jsprismarine") {
|
||||
// Start JSPrismarine
|
||||
start_server = execFile("node", [
|
||||
"./packages/server/dist/Server.js"
|
||||
], {
|
||||
cwd: GetServerPaths("jsprismarine")
|
||||
});
|
||||
} else throw Error("Bds Config Error")
|
||||
|
||||
// Post Start
|
||||
if (GetPlatform() === "java") {
|
||||
start_server.stdout.on("data", function(data){
|
||||
if (data.includes("agree"))
|
||||
if (data.includes("EULA")){
|
||||
const eula_file = path.join(GetServerPaths("java"), "eula.txt");
|
||||
fs.writeFileSync(eula_file, fs.readFileSync(eula_file, "utf8").split("eula=false").join("eula=true"));
|
||||
throw new Error("Restart application/CLI")
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Log file
|
||||
const LogFile = join(GetPaths("log"), `${bds.date()}_${GetPlatform()}_Bds_log.log`);
|
||||
// save User in Json
|
||||
start_server.stdout.on("data", data => saveUser(data))
|
||||
start_server.stderr.on("data", data => saveUser(data))
|
||||
// ---------------------------------------------------
|
||||
// Clear latest.log
|
||||
fs.writeFileSync(path.join(GetPaths("log"), "latest.log"), "")
|
||||
|
||||
// ---------------------------------------------------
|
||||
// stdout
|
||||
start_server.stdout.on("data", a=>saveLog(a, LogFile));
|
||||
start_server.stderr.on("data", a=>saveLog(a, LogFile));
|
||||
// ---------------------------------------------------
|
||||
// Global and Run
|
||||
global.bds_log_string = ""
|
||||
start_server.stdout.on("data", function(data){
|
||||
if (global.bds_log_string === undefined || global.bds_log_string === "") global.bds_log_string = data; else global.bds_log_string += data
|
||||
});
|
||||
global.bds_server_string = start_server;
|
||||
|
||||
// Functions return
|
||||
const returnFuntion = {
|
||||
uuid: randomUUID(),
|
||||
exec: start_server,
|
||||
stop: function (){start_server.stdin.write("stop\n")},
|
||||
command: function (command = "list", callback){
|
||||
const oldLog = global.bds_log_string;
|
||||
start_server.stdin.write(`${command}\n`);
|
||||
if (typeof callback === "function") {
|
||||
setTimeout(() => {
|
||||
// Run commands from command run in server;
|
||||
const log = global.bds_log_string.replace(oldLog, "").split(/\r/).filter(data => {if (data === "") return false; else return true;}).join("\n")
|
||||
if (log.length >= 1) callback(log); else callback("no log")
|
||||
}, 1555);
|
||||
}
|
||||
},
|
||||
log: function (logCallback = function(data = ""){data.split("\n").filter(d=>{return (d !== "")}).forEach(l=>console.log(l))}){
|
||||
if (typeof logCallback !== "function") {
|
||||
warn("The log callback is not a function using console.log");
|
||||
logCallback = function(data = ""){data.split("\n").filter(d=>{return (d !== "")}).forEach(l=>console.log(l))}
|
||||
}
|
||||
start_server.stdout.on("data", data => logCallback(data));
|
||||
start_server.stderr.on("data", data => logCallback(data));
|
||||
},
|
||||
exit: function (exitCallback = process.exit){if (
|
||||
typeof exitCallback === "function") start_server.on("exit", code => exitCallback(code));
|
||||
}
|
||||
}
|
||||
start_server.on("exit", ()=>{delete global.BdsExecs[returnFuntion.uuid]})
|
||||
global.BdsExecs[returnFuntion.uuid] = returnFuntion
|
||||
return returnFuntion
|
||||
}
|
||||
}
|
||||
|
||||
function GetSessions(){
|
||||
const ArraySessions = Object.getOwnPropertyNames(global.BdsExecs)
|
||||
if (ArraySessions.length === 0) throw "Start Server";
|
||||
if (ArraySessions.length >= 2) throw "Select a session manually:" + ArraySessions.join(", ")
|
||||
return global.BdsExecs[0]
|
||||
}
|
||||
|
||||
function BdsCommand(command = "list", SessionID = null) {
|
||||
if (!(command)) return false;
|
||||
try {
|
||||
var Session = {}
|
||||
if (!(SessionID)) Session = GetSessions(); else Session = global.BdsExecs[SessionID]
|
||||
Session.command(command);
|
||||
return true
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function stop(SessionID = null) {
|
||||
try {
|
||||
var Session = {}
|
||||
if (!(SessionID)) Session = GetSessions(); else Session = global.BdsExecs[SessionID]
|
||||
Session.stop()
|
||||
return true
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
start,
|
||||
BdsCommand,
|
||||
stop
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
// External User ip
|
||||
const fetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const os = require("os")
|
||||
const externalIP = {
|
||||
ipv4: fetchSync("https://api.ipify.org/").text().replace("\n", ""),
|
||||
ipv6: fetchSync("https://api64.ipify.org/").text().replace("\n", "")
|
||||
}
|
||||
module.exports.external_ip = externalIP
|
||||
module.exports.ip = externalIP
|
||||
|
||||
// Internal ip user
|
||||
const interfaces = os.networkInterfaces();
|
||||
const internal_ip = []
|
||||
for (let index of Object.getOwnPropertyNames(require("os").networkInterfaces())){
|
||||
const inter = interfaces[index]
|
||||
for (let ind in inter){
|
||||
if (inter[ind].address.includes("::")) internal_ip.push(`[${inter[ind].address}]`)
|
||||
else internal_ip.push(inter[ind].address)
|
||||
}
|
||||
}
|
||||
module.exports.internal_ip = internal_ip
|
||||
|
||||
// Network Interfaces
|
||||
const a = os.networkInterfaces();
|
||||
module.exports.Interfaces = Object.getOwnPropertyNames(a).map(inter => {
|
||||
inter = a[inter]
|
||||
if (inter[0].mac !== "00:00:00:00:00:00") {
|
||||
try {
|
||||
return {
|
||||
MAC: inter[0].mac,
|
||||
Interna_IP: {
|
||||
ipv4: inter[0].address,
|
||||
ipv6: inter[1].address,
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
return {
|
||||
MAC: inter[0].mac,
|
||||
Interna_IP: {
|
||||
ipv4: inter[0].address,
|
||||
ipv6: null,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}).filter(a=>a)
|
||||
@@ -2,7 +2,7 @@ var fs = require("fs");
|
||||
const path = require("path");
|
||||
const propertiesToJSON = require("properties-to-json");
|
||||
const { join } = require("path");
|
||||
const { GetServerPaths, GetPlatform } = require("../../lib/BdsSettings");
|
||||
const { GetServerPaths, GetPlatform } = require("../lib/BdsSettings");
|
||||
const bds_dir_bedrock = GetServerPaths("bedrock"), bds_dir_java = GetServerPaths("java"), bds_dir_pocketmine = GetServerPaths("pocketmine");
|
||||
const bedrockCPUThread = require("os").cpus().length;
|
||||
|
||||
@@ -244,7 +244,7 @@ function bds_get_config(){
|
||||
JsonConfig.commands = false;
|
||||
// JsonConfig.worldtype = config["level-type"];
|
||||
} else if (GetPlatform() === "jsprismarine") throw "Platform not fully supported";
|
||||
else throw new Error("Platform no exists, check config file")
|
||||
else throw new Error("Platform no exists, check config file");
|
||||
return JsonConfig;
|
||||
}
|
||||
function config_example(){
|
||||
@@ -1,22 +1,20 @@
|
||||
const { bds_dir, GetServerBan, GetTelegramAdmins, GetPlatform, GetPaths } = require("../../lib/BdsSettings");
|
||||
const { bds_dir, GetServerBan, GetTelegramAdmins, GetPlatform, GetPaths } = require("../lib/BdsSettings");
|
||||
const { existsSync, readFileSync } = require("fs")
|
||||
const { join } = require("path")
|
||||
|
||||
module.exports.checkUser = function (admin_name){
|
||||
var adm = GetTelegramAdmins();
|
||||
for(let check_ in adm){
|
||||
const admin_check = adm[check_]
|
||||
function CheckTelegramUser(admin_name){
|
||||
for(let admin_check of GetTelegramAdmins()){
|
||||
if (admin_name === admin_check || admin_check === "all_users") return true;
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
module.exports.CheckPlayer = function (player = "null"){
|
||||
function CheckPlayer(player = "null"){
|
||||
const json = require(GetPaths("player"))[GetPlatform()];
|
||||
if (json[player]) return true; else return false
|
||||
}
|
||||
|
||||
module.exports.token_verify = function (token){
|
||||
function token_verify(token){
|
||||
const path_tokens = join(bds_dir, "bds_tokens.json")
|
||||
if (existsSync(path_tokens)) var tokens = JSON.parse(readFileSync(path_tokens, "utf8")); else return false
|
||||
for (let token_verify of tokens) {
|
||||
@@ -26,7 +24,7 @@ module.exports.token_verify = function (token){
|
||||
return false
|
||||
}
|
||||
|
||||
module.exports.CheckBan = function (player){
|
||||
function CheckBan(player){
|
||||
var players = GetServerBan();
|
||||
for(let check_ in players){
|
||||
const admin_check = players[check_]
|
||||
@@ -35,4 +33,11 @@ module.exports.CheckBan = function (player){
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
CheckTelegramUser,
|
||||
CheckPlayer,
|
||||
CheckBan,
|
||||
token_verify
|
||||
}
|
||||
@@ -1,44 +1,39 @@
|
||||
const fs = require("fs");
|
||||
const { join } = require("path")
|
||||
const { google } = require("googleapis");
|
||||
const { bds_dir } = require("../../../lib/BdsSettings")
|
||||
const { randomUUID } = require("crypto");
|
||||
const express = require("express");
|
||||
const app = express();
|
||||
var cors = require("cors");
|
||||
const rateLimit = require("express-rate-limit");
|
||||
const bodyParser = require("body-parser");
|
||||
const fetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const Ips = require("../../Scripts/external_ip");
|
||||
const DefaultLoginDrive = {
|
||||
access_type: "offline",
|
||||
scope: [
|
||||
"https://www.googleapis.com/auth/drive"
|
||||
]
|
||||
}
|
||||
const GoogleDriveCredentials = fetchSync("https://raw.githubusercontent.com/The-Bds-Maneger/external_files/main/Credentials/Google.json").json()
|
||||
// -------------------------------------------------------------
|
||||
const { google } = require("googleapis");
|
||||
|
||||
const ip_andress = require("../../BdsNetwork");
|
||||
const { bds_dir } = require("../../../lib/BdsSettings");
|
||||
|
||||
const PathToToken = join(bds_dir, "google_user_token.json");
|
||||
|
||||
function expressGetGoogleDriveToken(callback){
|
||||
// Settings
|
||||
const limiter = rateLimit({
|
||||
windowMs: 1 * 60 * 1000, // minutes
|
||||
max: 100 // limit each IP to 100 requests per windowMs
|
||||
});
|
||||
app.use(bodyParser.json()); /* https://github.com/github/fetch/issues/323#issuecomment-331477498 */
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
app.use(limiter);
|
||||
app.use(cors());
|
||||
// Urls
|
||||
app.get("/request", (req, res) => {
|
||||
const secret = GoogleDriveCredentials.installed.client_secret;
|
||||
const client = GoogleDriveCredentials.installed.client_id;
|
||||
const redirect = `${req.protocol}://${req.headers.host}/save`;
|
||||
const oAuth2Client = new google.auth.OAuth2(client, secret, redirect);
|
||||
res.redirect(oAuth2Client.generateAuthUrl(DefaultLoginDrive))
|
||||
app.get("/save", (req, res) => {
|
||||
// Urls
|
||||
global.GoogleAuth = {}
|
||||
|
||||
async function LoadExpress(GoogleDriveCredentials, app = express(), closer = express().listen(1221)){
|
||||
return new Promise((resolve => {
|
||||
app.get("/request", (req, res) => {
|
||||
const SessionUUID = randomUUID();
|
||||
const secret = GoogleDriveCredentials.installed.client_secret;
|
||||
const client = GoogleDriveCredentials.installed.client_id;
|
||||
const redirect = `${req.protocol}://${req.headers.host}/${SessionUUID}/save`;
|
||||
const oAuth2Client = new google.auth.OAuth2(client, secret, redirect);
|
||||
global.GoogleAuth[SessionUUID] = oAuth2Client;
|
||||
res.redirect(oAuth2Client.generateAuthUrl({
|
||||
access_type: "offline",
|
||||
scope: [
|
||||
"https://www.googleapis.com/auth/drive"
|
||||
]
|
||||
}));
|
||||
});
|
||||
app.get("/:SessionUUID/save", (req, res) => {
|
||||
const { code } = req.query;
|
||||
const { SessionUUID } = req.params;
|
||||
// http://localhost:6899/save?code=********************************************************************&scope=https://www.googleapis.com/auth/drive
|
||||
const code = req.query.code
|
||||
|
||||
const oAuth2Client = global.GoogleAuth[SessionUUID];
|
||||
oAuth2Client.getToken(code, (err, save_token) => {
|
||||
if (err) return console.error("Error accessing keys and saving, Error:", err);
|
||||
oAuth2Client.setCredentials(save_token);
|
||||
@@ -46,40 +41,58 @@ function expressGetGoogleDriveToken(callback){
|
||||
fs.writeFile(PathToToken, JSON.stringify(save_token, null, 4), function (err){
|
||||
if (err) {
|
||||
console.error("We were unable to save json, please try again later");
|
||||
return close_server();
|
||||
return closer();
|
||||
}
|
||||
|
||||
callback(oAuth2Client);
|
||||
res.json({
|
||||
"token": save_token,
|
||||
status: "success"
|
||||
})
|
||||
close_server();
|
||||
closer.close()
|
||||
resolve(oAuth2Client);
|
||||
});
|
||||
});
|
||||
});
|
||||
app.get("*", (req, res)=>{res.redirect("/request")});
|
||||
})
|
||||
const saver = app.listen(6658)
|
||||
function close_server() {saver.close()}
|
||||
return 6658
|
||||
app.all("*", ({res}) => res.redirect("/request"));
|
||||
}));
|
||||
}
|
||||
|
||||
module.exports.authorize = function (callback) {
|
||||
const client_secret = GoogleDriveCredentials.installed.client_secret;
|
||||
const client_id = GoogleDriveCredentials.installed.client_id;
|
||||
const redirect_uris = GoogleDriveCredentials.installed.redirect_uris[0].split("@PORT_REDIRECT").join(6658).split("@URLREDIRECT").join("localhost");
|
||||
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris);
|
||||
fs.readFile(PathToToken, (err, user_cred) => {
|
||||
if (err) {
|
||||
var GetReturn = expressGetGoogleDriveToken(callback);
|
||||
if (process.argv0 === "electron") open("http://localhost:6658/request")
|
||||
console.log("Open one of these links in your browser:");
|
||||
console.log("http://localhost:6658/request");
|
||||
for (let index of Ips.internal_ip) console.log(`http://${index}:6658/request`)
|
||||
return GetReturn
|
||||
}
|
||||
oAuth2Client.setCredentials(JSON.parse(user_cred));
|
||||
callback(oAuth2Client);
|
||||
function RandomPort(){
|
||||
let Port = parseInt(Math.random().toString().replace(/[01]\./, "").slice(0, 4));
|
||||
if (Port > 1024 && Port < 2542) return Port; else return RandomPort();
|
||||
}
|
||||
|
||||
async function authorize() {
|
||||
return new Promise(async resolve => {
|
||||
const GoogleDriveCredentials = (await (await fetch("https://raw.githubusercontent.com/The-Bds-Maneger/external_files/main/Credentials/Google.json")).json())
|
||||
const client_secret = GoogleDriveCredentials.installed.client_secret;
|
||||
const client_id = GoogleDriveCredentials.installed.client_id;
|
||||
const redirect_uris = "http://localhost:1932/SaveToken"
|
||||
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris);
|
||||
fs.readFile(PathToToken, async (err, user_cred) => {
|
||||
if (err) {
|
||||
const app = express();
|
||||
app.use(require("body-parser").json());
|
||||
app.use(require("body-parser").urlencoded({ extended: true }));
|
||||
app.use(require("express-rate-limit")({windowMs: 1 * 60 * 1000, max: 100}));
|
||||
app.use(require("cors")());
|
||||
const port = RandomPort();
|
||||
ip_andress.internal_ip.forEach(ips => {
|
||||
let { ipv4, ipv6 } = ips.Interna_IP;
|
||||
console.log(`Open: http://${ipv4}:${port}/request`);
|
||||
if (ipv6) console.log(`Open: http://[${ipv6}]:${port}/request`);
|
||||
});
|
||||
|
||||
// Return auth
|
||||
const AuthToken = await LoadExpress(GoogleDriveCredentials, app, app.listen(port));
|
||||
resolve(AuthToken);
|
||||
} else {
|
||||
oAuth2Client.setCredentials(JSON.parse(user_cred));
|
||||
resolve(oAuth2Client);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
authorize,
|
||||
}
|
||||
@@ -1,23 +1,28 @@
|
||||
const { resolve } = require("path");
|
||||
const path = require("path");
|
||||
const { BlobServiceClient, StorageSharedKeyCredential } = require("@azure/storage-blob");
|
||||
const NewBdsSettings = require("../../lib/BdsSettings");
|
||||
const Uploadbackups = async function (object = "Backup.zip", fileLocation = "Backup.zip", callback = function (){}) {
|
||||
const { Account, AccountKey, Container } = NewBdsSettings.GetCloudConfig("Azure");
|
||||
const sharedKeyCredential = new StorageSharedKeyCredential(Account, AccountKey);
|
||||
const blobClient = new BlobServiceClient(`https://${Account}.blob.core.windows.net`, sharedKeyCredential).getContainerClient(Container)
|
||||
if (!(blobClient.exists())) await blobClient.create();
|
||||
const containerClient = blobClient.getBlockBlobClient(resolve(object))
|
||||
try {
|
||||
await containerClient.uploadFile(fileLocation, {
|
||||
blockSize: 4 * 1024 * 1024,
|
||||
concurrency: 20,
|
||||
onProgress: (env) => console.log(env)
|
||||
})
|
||||
console.log("Upload Sucess")
|
||||
if (typeof callback === "function") callback()
|
||||
} catch (err) {
|
||||
console.log(`uploadFile failed, requestId - ${err.details.requestId}, statusCode - ${err.statusCode}, errorCode - ${err.details.errorCode}`);
|
||||
}
|
||||
|
||||
// Upload Function
|
||||
async function Uploadbackups(object = "Backup.zip", fileLocation = "Backup.zip", callback = function (){}) {
|
||||
return new Promise(async function(resolve, reject){
|
||||
try {
|
||||
const { Account, AccountKey, Container } = NewBdsSettings.GetCloudConfig("Azure");
|
||||
const sharedKeyCredential = new StorageSharedKeyCredential(Account, AccountKey);
|
||||
const blobClient = new BlobServiceClient(`https://${Account}.blob.core.windows.net`, sharedKeyCredential).getContainerClient(Container)
|
||||
if (!(blobClient.exists())) await blobClient.create();
|
||||
const containerClient = blobClient.getBlockBlobClient(path.resolve(object));
|
||||
const Reponse = await containerClient.uploadFile(fileLocation, {
|
||||
blockSize: 4 * 1024 * 1024,
|
||||
concurrency: 20,
|
||||
onProgress: (env) => console.log(env)
|
||||
})
|
||||
if (typeof callback === "function") callback(Reponse);
|
||||
resolve(Reponse);
|
||||
} catch (err) {
|
||||
console.log(`uploadFile failed, requestId - ${err.details.requestId}, statusCode - ${err.statusCode}, errorCode - ${err.details.errorCode}`);
|
||||
reject(err);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -3,10 +3,9 @@ const { google } = require("googleapis");
|
||||
const { authorize } = require("./Auth/Google");
|
||||
const { GetCloudConfig } = require("../../lib/BdsSettings");
|
||||
|
||||
module.exports.Uploadbackups = function (file_name = "Backup.zip", fileLocation = "Backup.zip", BackupCallback){
|
||||
const parent_id = GetCloudConfig("Driver").RootID
|
||||
return authorize(function (auth) {
|
||||
const drive = google.drive({version: "v3", auth});
|
||||
module.exports.Uploadbackups = async function (file_name = "Backup.zip", fileLocation = "Backup.zip", BackupCallback){
|
||||
return new Promise(async function (resolve, reject){
|
||||
const parent_id = GetCloudConfig("Driver").RootID
|
||||
const UploadFile = {
|
||||
resource: {
|
||||
name: file_name
|
||||
@@ -20,14 +19,16 @@ module.exports.Uploadbackups = function (file_name = "Backup.zip", fileLocation
|
||||
// Driver Root ID Backups
|
||||
if (parent_id) UploadFile.resource.parents = [parent_id];
|
||||
|
||||
// Request
|
||||
const auth = await authorize();
|
||||
const drive = google.drive({version: "v3", auth});
|
||||
drive.files.create(UploadFile, (err, file) => {
|
||||
if (err) throw Error(err)
|
||||
if (err) reject(err)
|
||||
else {
|
||||
console.log(`File URL: https://drive.google.com/file/d/${file.data.id}/`);
|
||||
if (typeof BackupCallback === "function") BackupCallback(file);
|
||||
resolve(`https://drive.google.com/file/d/${file.data.id}/`);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
// End Upload Backup
|
||||
};
|
||||
@@ -4,38 +4,36 @@ const fs = require("fs");
|
||||
const { resolve } = require("path");
|
||||
const { CloudConfig } = require("../../lib/BdsSettings");
|
||||
|
||||
const Uploadbackups = async function (
|
||||
object = "Backup.zip",
|
||||
fileLocation = resolve(__dirname, "../Backup.zip"),
|
||||
callback = function (data){console.log(data)}
|
||||
){
|
||||
const bucket = CloudConfig.Oracle().Bucket;
|
||||
const provider = new oci_common.ConfigFileAuthenticationDetailsProvider();
|
||||
const client = new oci_storage.ObjectStorageClient({
|
||||
authenticationDetailsProvider: provider
|
||||
async function Uploadbackups(object = "Backup.zip", fileLocation = resolve(__dirname, "../Backup.zip"), callback = function (data){console.log(data)}){
|
||||
return new Promise(async function (resolve, reject){
|
||||
try {
|
||||
const bucket = CloudConfig.Oracle().Bucket;
|
||||
const provider = new oci_common.ConfigFileAuthenticationDetailsProvider();
|
||||
const client = new oci_storage.ObjectStorageClient({
|
||||
authenticationDetailsProvider: provider
|
||||
});
|
||||
const request = {};
|
||||
const response = await client.getNamespace(request);
|
||||
const namespace = response.value;
|
||||
const stats = fs.statSync(fileLocation);
|
||||
const nodeFsBlob = new oci_storage.NodeFSBlob(fileLocation, stats.size);
|
||||
const objectData = await nodeFsBlob.getData();
|
||||
const putObjectRequest = {
|
||||
namespaceName: namespace,
|
||||
bucketName: bucket,
|
||||
putObjectBody: objectData,
|
||||
objectName: object,
|
||||
contentLength: stats.size
|
||||
};
|
||||
const putObjectResponse = await client.putObject(putObjectRequest);
|
||||
console.log("File upload successful");
|
||||
if (typeof callback === "function") return callback(putObjectResponse);
|
||||
resolve(putObjectResponse);
|
||||
} catch (error) {
|
||||
console.log("Error ", error);
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
const request = {};
|
||||
const response = await client.getNamespace(request);
|
||||
const namespace = response.value;
|
||||
const stats = fs.statSync(fileLocation);
|
||||
const nodeFsBlob = new oci_storage.NodeFSBlob(fileLocation, stats.size);
|
||||
const objectData = await nodeFsBlob.getData();
|
||||
const putObjectRequest = {
|
||||
namespaceName: namespace,
|
||||
bucketName: bucket,
|
||||
putObjectBody: objectData,
|
||||
objectName: object,
|
||||
contentLength: stats.size
|
||||
};
|
||||
const putObjectResponse = await client.putObject(putObjectRequest);
|
||||
console.log("File upload successful");
|
||||
if (typeof callback === "function") return callback(putObjectResponse);
|
||||
return putObjectResponse;
|
||||
} catch (error) {
|
||||
console.log("Error ", error);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -62,7 +62,7 @@ function api(port_api = 1932, callback = function (port){console.log("Bds Manege
|
||||
}
|
||||
module.exports = function (apiConfig = {api_port: 1932}, callback = function (port){console.log("Bds Maneger Core REST API, http port", port)}){
|
||||
var port_rest = 1932;
|
||||
if (typeof apiConfig == "object" && apiConfig.api_port !== undefined) port_rest = apiConfig.api_port;
|
||||
if (typeof apiConfig === "object" && apiConfig.api_port !== undefined) port_rest = apiConfig.api_port;
|
||||
else if (typeof apiConfig === "number") port_rest = apiConfig;
|
||||
return api(port_rest, callback);
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@ const express = require("express");
|
||||
const app = express.Router();
|
||||
const { GetKernel } = require("../../../lib/BdsSystemInfo");
|
||||
const commandExist = require("../../../lib/commandExist");
|
||||
const { GetPlatform, GetServerVersion, UpdatePlatform, bds_dir } = require("../../../lib/BdsSettings")
|
||||
const { GetPlatform, GetServerVersion, UpdatePlatform, bds_dir } = require("../../../lib/BdsSettings");
|
||||
const admzip = require("adm-zip");
|
||||
const bds = require("../../../index");
|
||||
const { token_verify } = require("../../Scripts/check");
|
||||
const { token_verify } = require("../../UsersAndtokenChecks");
|
||||
|
||||
// Backup
|
||||
app.get("/backup", (req, res) => {
|
||||
|
||||
@@ -2,7 +2,7 @@ const express = require("express");
|
||||
const app = express.Router();
|
||||
const { GetPlatform } = require("../../../lib/BdsSettings")
|
||||
const bds = require("../../../index");
|
||||
const { token_verify, CheckPlayer } = require("../../Scripts/check");
|
||||
const { token_verify, CheckPlayer } = require("../../UsersAndtokenChecks");
|
||||
const { readFileSync } = require("fs");
|
||||
const docs = require("../../../BdsManegerInfo.json").docs;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user