fixed issue, and added startbot.sh
This commit is contained in:
@@ -1,61 +1,36 @@
|
|||||||
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
|
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');
|
||||||
const dgram = require('dgram');
|
const axios = require('axios');
|
||||||
const { server_ip, server_port } = require('../../config.json');
|
const { server_ip, server_port } = require('../../config.json');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('server-status')
|
.setName('server-status')
|
||||||
.setDescription('shows you some information about the minecraft server'),
|
.setDescription('Get the current server status and players'),
|
||||||
async execute(interaction) {
|
|
||||||
try {
|
|
||||||
const serverInfo = await getServerInfo('your_server_ip', your_server_port);
|
|
||||||
|
|
||||||
const embed = {
|
async execute(interaction) {
|
||||||
color: 0x0099ff,
|
const SERVER_IP = `${server_ip}:${server_port}`;
|
||||||
title: 'Minecraft Server Status',
|
|
||||||
|
axios.get(`https://api.mcsrvstat.us/3/${SERVER_IP}`).then((resp) => {
|
||||||
|
const data = resp.data;
|
||||||
|
|
||||||
|
const embedData = {
|
||||||
|
title: SERVER_IP,
|
||||||
|
description: data.online ? 'Server is online' : 'Server is offline',
|
||||||
|
color: data.online ? 0x00FF00 : 0xFF0000,
|
||||||
fields: [
|
fields: [
|
||||||
{ name: 'Description', value: serverInfo.description.text },
|
{ name: 'Version', value: `${data.version} (Protocol ${data.protocol.version})`, inline: false },
|
||||||
{ name: 'Players', value: `${serverInfo.players.online}/${serverInfo.players.max}`, inline: true },
|
|
||||||
{ name: 'Version', value: serverInfo.version.name, inline: true },
|
|
||||||
{ name: 'Online Players', value: serverInfo.players.sample.map(player => player.name).join(', ') },
|
|
||||||
],
|
],
|
||||||
|
footer: { text: `${data.players.online}/${data.players.max} players` },
|
||||||
};
|
};
|
||||||
|
|
||||||
await interaction.reply({ embeds: [embed], content: '```json\n' + JSON.stringify(serverInfo, null, 2) + '```' });
|
if (data.players && data.players.list && data.players.list.length > 0) {
|
||||||
} catch (error) {
|
embedData.fields.push({ name: 'Player List', value: data.players.list.map(player => player.name).join('\n'), inline: false });
|
||||||
console.error(error.message || 'Failed to retrieve Minecraft server info.');
|
|
||||||
await interaction.reply('Failed to retrieve Minecraft server info.');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
async function getServerInfo(ip, port) {
|
|
||||||
const client = dgram.createSocket('udp4');
|
|
||||||
|
|
||||||
// Send an empty payload for a status request
|
|
||||||
const handshakePacket = Buffer.from([0xFE, 0xFD, 0x00]);
|
|
||||||
client.send(handshakePacket, port, ip);
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
client.on('message', (response) => {
|
|
||||||
if (response.slice(0, 2).equals(Buffer.from([0xFF, 0xFD])) && response.length > 35) {
|
|
||||||
const jsonResponse = response.toString('utf8', 35);
|
|
||||||
try {
|
|
||||||
const parsedResponse = JSON.parse(jsonResponse);
|
|
||||||
resolve(parsedResponse);
|
|
||||||
} catch (error) {
|
|
||||||
reject(new Error('Failed to parse server info.'));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
reject(new Error('Failed to retrieve server info.'));
|
embedData.fields.push({ name: 'Player List', value: 'No players online :(', inline: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
client.close();
|
const embed = new EmbedBuilder(embedData);
|
||||||
|
interaction.reply({ content: 'Server status:', embeds: [embed] });
|
||||||
});
|
});
|
||||||
|
},
|
||||||
client.on('error', (err) => {
|
};
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
96
package-lock.json
generated
96
package-lock.json
generated
@@ -5,7 +5,7 @@
|
|||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dgram": "^1.0.1",
|
"axios": "^1.6.4",
|
||||||
"discord.js": "^14.14.1"
|
"discord.js": "^14.14.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -171,11 +171,39 @@
|
|||||||
"npm": ">=7.0.0"
|
"npm": ">=7.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/dgram": {
|
"node_modules/asynckit": {
|
||||||
"version": "1.0.1",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/dgram/-/dgram-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
"integrity": "sha512-zJVFL1EWfKtE0z2VN6qfpn/a+qG1viEzcwJA0EjtzS76ONSE3sEyWBwEbo32hS4IFw/EWVuWN+8b89aPW6It2A==",
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||||
"deprecated": "npm is holding this package for security reasons. As it's a core Node module, we will not transfer it over to other users. You may safely remove the package from your dependencies."
|
},
|
||||||
|
"node_modules/axios": {
|
||||||
|
"version": "1.6.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.4.tgz",
|
||||||
|
"integrity": "sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A==",
|
||||||
|
"dependencies": {
|
||||||
|
"follow-redirects": "^1.15.4",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
|
"proxy-from-env": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/combined-stream": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
|
"dependencies": {
|
||||||
|
"delayed-stream": "~1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/delayed-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/discord-api-types": {
|
"node_modules/discord-api-types": {
|
||||||
"version": "0.37.61",
|
"version": "0.37.61",
|
||||||
@@ -211,6 +239,38 @@
|
|||||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||||
},
|
},
|
||||||
|
"node_modules/follow-redirects": {
|
||||||
|
"version": "1.15.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
|
||||||
|
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"debug": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/form-data": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||||
|
"dependencies": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/lodash": {
|
"node_modules/lodash": {
|
||||||
"version": "4.17.21",
|
"version": "4.17.21",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
@@ -226,6 +286,30 @@
|
|||||||
"resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.5.0.tgz",
|
||||||
"integrity": "sha512-wJkXvutRbNWcc37tt5j1HyOK1nosspdh3dj6LUYYAvF6JYNqs53IfRvK9oEpcwiDA1NdoIi64yAMfdivPeVAyw=="
|
"integrity": "sha512-wJkXvutRbNWcc37tt5j1HyOK1nosspdh3dj6LUYYAvF6JYNqs53IfRvK9oEpcwiDA1NdoIi64yAMfdivPeVAyw=="
|
||||||
},
|
},
|
||||||
|
"node_modules/mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/proxy-from-env": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||||
|
},
|
||||||
"node_modules/ts-mixer": {
|
"node_modules/ts-mixer": {
|
||||||
"version": "6.0.3",
|
"version": "6.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dgram": "^1.0.1",
|
"axios": "^1.6.4",
|
||||||
"discord.js": "^14.14.1"
|
"discord.js": "^14.14.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2
startBot.sh
Normal file
2
startBot.sh
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
node bot.js
|
||||||
Reference in New Issue
Block a user