-
-
Save simonmeusel/1de7166288b12c04518c59158a85f5ef to your computer and use it in GitHub Desktop.
var spawn = require('child_process').spawn; | |
var discord = require("discord.js"); | |
var bot = new discord.Client(); | |
var mcserver; | |
// The start.bat has to include a 'cd "C:/Users/_____/Desktop/Server/"' command (See start.bat for more details) | |
var MC_SERVER_START_SCRIPT = "C:/Users/_____/Desktop/Server/start.bat"; | |
bot.on("message", function(message){ | |
if (message.content == "start") { | |
// Only start if not running | |
if (mcserver == null) { | |
bot.sendMessage(message, "Starting server..."); | |
// Start the server | |
mcserver = spawn(MC_SERVER_START_SCRIPT); | |
mcserver.stdout.on('data', (data) => { | |
console.log("stdout: " + data); | |
// Not everything is send (because i think there is a send limit per time) | |
// bot.sendMessage(message, "stdout: " + data); | |
}); | |
mcserver.stderr.on('data', (data) => { | |
console.log("stderr: " + data); | |
bot.sendMessage(message, "stdout: " + data); | |
}); | |
mcserver.on('close', (code) => { | |
console.log("child process exited with code " + code); | |
bot.sendMessage(message, "child process exited with code " + code); | |
}); | |
} | |
} else if (message.content == "stop") { | |
// Only stop if running | |
if (message.content == "start") { | |
bot.sendMessage(message, "Stopping server..."); | |
// Stop the server | |
mcserver.kill(); | |
mcserver = null; | |
} | |
} | |
}); | |
bot.login("email", "pass") |
cd C:\Users\_____\Desktop\Server | |
java -jar spigot.jar |
Made a GitHub repository that showed how to do this
Changed some things to make it (hopefully) better! Some stuff was out-of-date but should work correctly now.
var kill = require('tree-kill');
var spawn = require('child_process').spawn;
var discord = require("discord.js");
var bot = new discord.Client({ intents: ["GUILDS","GUILD_MESSAGES"]});
var mcserver;
var lastMsgTime = 0;
// IMPORTANT: Change the path below to the start.sh file.
// After that, you're done editing this script.
var MC_SERVER_START_SCRIPT = "C:/path/to/start.bat";
bot.on("ready", () =>{
console.log('Bot online!');
});
bot.on("messageCreate", function(message){
var msgContent = message.content.toLowerCase();
if (msgContent == "start") {
console.log('Attempting to start server.');
// Only start if not running
if (mcserver == null) {
if ((bot.uptime - lastMsgTime) < 0)
{
console.log("Potential command spamming by " + message.author.username);
message.channel.send("Last command was less than 60 seconds ago. Try again in a minute, " + message.author.username + ".");
}
else
{
lastMsgTime = bot.uptime;
message.channel.send("Starting Minecraft server. This will take a minute or so.");
// Start the server
mcserver = spawn(MC_SERVER_START_SCRIPT);
mcserver.stdout.on('data', function (data) {
console.log("stdout: " + data);
message.channel.send("stdout: " + data);
if (data.includes("Closing Server")) {
kill(mcserver.pid);
mcserver = null;
}
});
mcserver.on('close', function (code) {
console.log("child process exited with code " + code);
message.channel.send("Minecraft server has been closed. (Code: " + code + ")");
// Stop the server
if (mcserver != null) {
kill(mcserver.pid);
}
mcserver = null;
});
}
}
else
{
message.channel.send("Minecraft server is already running.");
}
} else if (msgContent == "stop") {
if ((bot.uptime - lastMsgTime) < 0)
{
console.log("Potential command spamming by " + message.author.username);
message.channel.send("Last command was less than 60 seconds ago. Try again in a minute, " + message.author.username + ".");
}
else
{
lastMsgTime = bot.uptime;
// Only stop if running
if (mcserver != null) {
message.channel.send("Force-stopping Minecraft server...");
// Stop the server
kill(mcserver.pid);
mcserver = null;
}
}
}
});
bot.login("BOT_TOKEN");
@Stonley890 I tried your code and got the following error
Bot online!
Attempting to start server.
node:events:368
throw er; // Unhandled 'error' event
^
Error: spawn C:UsersHasnain JavedDocumentsMCServerDiscordBot-masterServersServerBStart.bat ENOENT
at Process.ChildProcess._handle.onexit (node:internal/child_process:282:19)
at onErrorNT (node:internal/child_process:477:16)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (node:internal/child_process:288:12)
at onErrorNT (node:internal/child_process:477:16) {
errno: -2,
code: 'ENOENT',
syscall: 'spawn C:UsersHasnain JavedDocumentsMCServerDiscordBot-masterServersServerBStart.bat',
path: 'C:UsersHasnain JavedDocumentsMCServerDiscordBot-masterServersServerBStart.bat',
spawnargs: []
}
I used your code but put in the .bat location ("C:\Users\Hasnain Javed\Documents\MCServerDiscordBot-master\Servers\ServerB\Start.bat") and the Bot Token.
Can you help?
(I'm on Windows if that means anything)
@TeddySenpai I've reworked the script in this repository: Stonley890/mc-console-bot
Try using this one.
@Stonley890 or @Whitelisted1 is the code currently up to date because i tried it a few months back and couldn't get it to work
@JonnyKartofa I know this is late, but show me your code and I might be able to help
sorry I can't help any more than that