Add ability to restart MC servers from discord for properly roled users

This commit is contained in:
Junior 2024-09-25 16:05:02 +00:00
parent fd812da425
commit bba074bafb

View File

@ -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 {