Compare commits
9 commits
1de446aede
...
0a8df28a94
Author | SHA1 | Date | |
---|---|---|---|
0a8df28a94 |
|||
|
f78f4648d0 |
||
|
7f0029d9f9 |
||
|
681eca87e0 |
||
|
914aceeb44 |
||
|
dc7b49d255 |
||
|
c1d942e204 |
||
|
c53b707163 |
||
|
9dcc7adab4 |
3 changed files with 552 additions and 462 deletions
104
commands/info/mc.js
Normal file
104
commands/info/mc.js
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
// Code is taken from https://github.com/stphnduvall/mcstatus/blob/master/src/index.ts
|
||||||
|
// and converted to pure js.
|
||||||
|
|
||||||
|
const net = require('net')
|
||||||
|
const { EmbedBuilder } = require('discord.js');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'mc', // Keep it to one word
|
||||||
|
description: 'get mc server info from lazy duchess server',
|
||||||
|
hidden: true,
|
||||||
|
whitelist: true,
|
||||||
|
async execute({ message, args }) {
|
||||||
|
let host = "";
|
||||||
|
let port = 25565;
|
||||||
|
if (args[0]) host = args[0];
|
||||||
|
|
||||||
|
if (host.includes(":")) {
|
||||||
|
port = host.replace(/.+(?:\:)/g, "");
|
||||||
|
host = host.match(/.+(?:\:)/g, "")[0].replace(":", "");
|
||||||
|
}
|
||||||
|
if(host === "") return message.channel.send("No host provided")
|
||||||
|
let info = await getMinecraftServerInfo(host, port);
|
||||||
|
if (info) {
|
||||||
|
console.log(info)
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
embed.setColor("#ee7939")
|
||||||
|
embed.setTimestamp()
|
||||||
|
embed.addFields([
|
||||||
|
{ name: "ping", value: info.ping.toString(), inline: false },
|
||||||
|
{ name: "Player Count", value: info.playercount, inline: false },
|
||||||
|
{ name: "Max Players", value: info.maxPlayers, inline: false },
|
||||||
|
{ name: "MOTD", value: info.motd, inline: false },
|
||||||
|
])
|
||||||
|
|
||||||
|
message.channel.send({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
message.channel.send("Something went wrong\nThe minecraft server is likely not reachable from the discord bot")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async function getMinecraftServerInfo(host, port = 25565) {
|
||||||
|
let serverInfo = {
|
||||||
|
ping: undefined,
|
||||||
|
maxPlayers: undefined,
|
||||||
|
version: undefined,
|
||||||
|
playercount: undefined,
|
||||||
|
motd: undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
let startTime = new Date();
|
||||||
|
let data;
|
||||||
|
let ping;
|
||||||
|
serverInfo = await new Promise((resolve) => {
|
||||||
|
const client = net.connect({ host, port }, () => {
|
||||||
|
ping = Math.round(new Date().getMilliseconds() - startTime.getMilliseconds());
|
||||||
|
|
||||||
|
let buff = Buffer.from([0xFE, 0x01]);
|
||||||
|
client.write(buff);
|
||||||
|
|
||||||
|
})
|
||||||
|
let error = false;
|
||||||
|
client.on('data', (d) => {
|
||||||
|
data = d.toString()
|
||||||
|
client.destroy();
|
||||||
|
|
||||||
|
})
|
||||||
|
client.once('error', (error) => {
|
||||||
|
console.error(error)
|
||||||
|
error = true;
|
||||||
|
})
|
||||||
|
client.once('connectionAttemptFailed', (ip) => {
|
||||||
|
console.error("in attempt failed")
|
||||||
|
error = true;
|
||||||
|
})
|
||||||
|
|
||||||
|
client.once('connectionAttemptTimeout', (ip) => {
|
||||||
|
console.error("in attempt timeout")
|
||||||
|
error = true;
|
||||||
|
})
|
||||||
|
client.on('close', () => {
|
||||||
|
if (!error) {
|
||||||
|
let _serverInfo = data?.split('\x00\x00\x00');
|
||||||
|
|
||||||
|
if (!_serverInfo) {
|
||||||
|
console.log("Something went wrong.")
|
||||||
|
resolve(serverInfo)
|
||||||
|
}
|
||||||
|
serverInfo.version = _serverInfo[2].replace(/\u0000/g, '')
|
||||||
|
serverInfo.motd = _serverInfo[3].replace(/\u0000/g, '')
|
||||||
|
serverInfo.playercount = Number(_serverInfo[4].replace(/\u0000/g, ''))
|
||||||
|
serverInfo.maxPlayers = Number(_serverInfo[5].replace(/\u0000/g, ''))
|
||||||
|
serverInfo.ping = Number(ping)
|
||||||
|
resolve(serverInfo)
|
||||||
|
} else {
|
||||||
|
resolve(0)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return serverInfo
|
||||||
|
}
|
906
package-lock.json
generated
906
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -6,7 +6,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@zuzak/owo": "^1.14.1",
|
"@zuzak/owo": "^1.14.1",
|
||||||
"discord.js": "^14.21.0",
|
"discord.js": "^14.21.0",
|
||||||
"dotenv": "^16.5.0",
|
"dotenv": "^17.2.1",
|
||||||
"seedrandom": "^3.0.5",
|
"seedrandom": "^3.0.5",
|
||||||
"sqlite3": "^5.1.6"
|
"sqlite3": "^5.1.6"
|
||||||
},
|
},
|
||||||
|
@ -21,6 +21,6 @@
|
||||||
"license": "UNLICENSE",
|
"license": "UNLICENSE",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^30.0.0",
|
"@types/jest": "^30.0.0",
|
||||||
"jest": "^30.0.3"
|
"jest": "^30.0.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue