Compare commits
4 Commits
a309997899
...
bba074bafb
Author | SHA1 | Date | |
---|---|---|---|
bba074bafb | |||
fd812da425 | |||
27ccfb467c | |||
44f563533e |
|
@ -2,7 +2,8 @@ const config = {
|
||||||
BOT_TOKEN: 'YOUR_BOT_TOKEN_GOES_HERE',
|
BOT_TOKEN: 'YOUR_BOT_TOKEN_GOES_HERE',
|
||||||
CHANNELS_ALLOW: ['123456789012345678', '123456789012345678'],
|
CHANNELS_ALLOW: ['123456789012345678', '123456789012345678'],
|
||||||
MOD_ROLE: '123456789012345678',
|
MOD_ROLE: '123456789012345678',
|
||||||
STAFF_ROLE: '123456789012345678'
|
STAFF_ROLE: '123456789012345678',
|
||||||
|
RESTART_ROLE: '123456789012345678'
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = config;
|
module.exports = config;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const Ping = require('net-ping');
|
const ChildProcess = require('child_process');
|
||||||
const Discord = require('discord.js');
|
const Discord = require('discord.js');
|
||||||
|
|
||||||
class Server {
|
class Server {
|
||||||
|
@ -37,20 +37,13 @@ class Server {
|
||||||
if ( serverObj.active ) this.active = serverObj.active;
|
if ( serverObj.active ) this.active = serverObj.active;
|
||||||
}
|
}
|
||||||
|
|
||||||
async hostIsAlive() {
|
hostIsAlive() {
|
||||||
|
if ( !this.active || (this.rconAddress == "") ) return false;
|
||||||
try {
|
try {
|
||||||
if ( !this.active || (this.rconAddress == "") ) return false;
|
let res = ChildProcess.execSync('ping -c 1 -W 0.25 -q ' + this.rconAddress);
|
||||||
let session = Ping.createSession({retries: 1, timeout: 250});
|
return true;
|
||||||
let result = await session.pingHost(this.rconAddress, function(error, target) {
|
|
||||||
if ( error ) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log("Host for " + this.name + " at " + this.rconAddress + " not available");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,4 +69,4 @@ class Server {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Server;
|
module.exports = Server;
|
||||||
|
|
31
index.js
31
index.js
|
@ -4,6 +4,7 @@ const Discord = require('discord.js');
|
||||||
const Rcon = require('rcon');
|
const Rcon = require('rcon');
|
||||||
const Query = require("minecraft-query");
|
const Query = require("minecraft-query");
|
||||||
const Server = require('./includes/class_server');
|
const Server = require('./includes/class_server');
|
||||||
|
const FS = require('fs');
|
||||||
|
|
||||||
const client = new Discord.Client();
|
const client = new Discord.Client();
|
||||||
|
|
||||||
|
@ -96,19 +97,33 @@ client.on('message', async msg => {
|
||||||
msg.channel.send("**Usage:** >>server *slug*");
|
msg.channel.send("**Usage:** >>server *slug*");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( msg.content.startsWith(">>restart") && Config.CHANNELS_ALLOW.includes(msg.channel.id) ) {
|
||||||
|
if ( msg.member.roles.cache.has(Config.RESTART_ROLE) ) {
|
||||||
|
let cmdParts = msg.content.split(" ");
|
||||||
|
let server = Servers.find(element => element.slug == cmdParts[1]);
|
||||||
|
let restartFile = '/automation/mcrestart/' + server.slug + '.restart';
|
||||||
|
FS.stat(restartFile, function(err, stat) {
|
||||||
|
if ( err == null ) {
|
||||||
|
msg.channel.send("**Warning:** " + server.name + " is already queued for a restart");
|
||||||
|
} else if ( err.code === 'ENOENT' ) {
|
||||||
|
FS.closeSync(FS.openSync(restartFile, 'w'));
|
||||||
|
msg.channel.send("**Notice:** " + server.name + " queued for restart by " + msg.author.username);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
msg.channel.send("**Error:** You do not have permission to restart servers");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( msg.content.startsWith(">>server ") && Config.CHANNELS_ALLOW.includes(msg.channel.id) ) {
|
if ( msg.content.startsWith(">>server ") && Config.CHANNELS_ALLOW.includes(msg.channel.id) ) {
|
||||||
let cmdParts = msg.content.split(" ");
|
let cmdParts = msg.content.split(" ");
|
||||||
let server = Servers.find(element => element.slug == cmdParts[1]);
|
let server = Servers.find(element => element.slug == cmdParts[1]);
|
||||||
if ( server ) {
|
if ( server ) {
|
||||||
let hostStatus = "Offline";
|
let hostStatus = "Offline";
|
||||||
try {
|
if (server.hostIsAlive()) hostStatus = "Online";
|
||||||
if (server.hostIsAlive()) hostStatus = "Online";
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
}
|
|
||||||
let serverStatus = "Stopped";
|
let serverStatus = "Stopped";
|
||||||
let serverTPS = "---";
|
let serverTPS = "---";
|
||||||
if ( server.rconPort != 0 ) {
|
if ( (hostStatus == "Online") && (server.rconPort != 0) ) {
|
||||||
var rcon = new Rcon(server.rconAddress, server.rconPort, server.rconPassword);
|
var rcon = new Rcon(server.rconAddress, server.rconPort, server.rconPassword);
|
||||||
rcon.on('auth', function() {
|
rcon.on('auth', function() {
|
||||||
serverStatus = "Running";
|
serverStatus = "Running";
|
||||||
|
@ -145,7 +160,9 @@ client.on('message', async msg => {
|
||||||
});
|
});
|
||||||
rcon.connect();
|
rcon.connect();
|
||||||
} else {
|
} else {
|
||||||
console.log("No rcon settings for: " + server.name);
|
if ( server.rconPort != 0 ) {
|
||||||
|
console.log("No rcon settings for: " + server.name);
|
||||||
|
}
|
||||||
server.sendDetails(msg.channel, hostStatus, serverStatus, serverTPS);
|
server.sendDetails(msg.channel, hostStatus, serverStatus, serverTPS);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user