diff --git a/.replit b/.replit deleted file mode 100644 index 8b21162..0000000 --- a/.replit +++ /dev/null @@ -1,5 +0,0 @@ -language = "nodejs-npm" -entrypoint = "index.js" -onBoot = "npm install" -run = "npm start" -hidden = ".gitignore" \ No newline at end of file diff --git a/README.md b/README.md index 7eae8d0..05ba142 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ - Working **commands** with **custom prefix** + their **[slash commands]((https://support.discord.com/hc/en-us/articles/1500000368501-Slash-Commands-FAQ))** - `help` command for getting the help menu (list of all user-available commands) - `ip` command for getting the IP address of the server - - `list` command for getting an actual list of online players now + - `list` command for getting list of players online right now (available only for JAVA servers) - `status` command for getting a simple and clear overview of the server - `version` command for getting the Minecraft version of the server - `vote` command for getting vote link for voting for server on Minecraft server list @@ -50,15 +50,6 @@ ![minecraft-bot console](https://imgur.com/IqtzdM1.png) -## MORE INFO - -### Go to our [documentation](https://petyxbron.gitbook.io/minecraft-bot/installation/install) and see. -Run on Repl.it: - -[![Run on Repl.it](https://repl.it/badge/github/MrMazzone/dotreplit-example)](https://repl.it/github/PetyXbron/minecraft-bot) - -*Repl probably won't be updated for the latest Node.js version. Please check if you can install Node.js v16.9.0 or higher to support Discord.js v14* - ## TO DO - [ ] Send custom embed message command diff --git a/commands/list.js b/commands/list.js index 29c5736..4ba50e8 100644 --- a/commands/list.js +++ b/commands/list.js @@ -23,6 +23,7 @@ module.exports.run = async (bot, message) => { if (server.type === 'java') { util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); if (text.title === "" || text.description === "" || text.listFormat === "") { const trueList = response.data.players.list ? "\n\`\`\`" + response.data.players.list.map(p => ` ${p.name_clean} `).join('\r\n') + "\`\`\`" : ""; diff --git a/commands/status.js b/commands/status.js index 023de9e..9db8f71 100644 --- a/commands/status.js +++ b/commands/status.js @@ -25,6 +25,7 @@ module.exports.run = async (bot, message) => { if (server.type === 'java') { util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); let versionOriginal = response.data.version.name_clean, versionAdvanced = false; @@ -99,6 +100,7 @@ module.exports.run = async (bot, message) => { } else { util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); const versionOriginal = response.data.version.name_clean; let versionAdvanced = false; diff --git a/commands/version.js b/commands/version.js index b65590e..f9cf03e 100644 --- a/commands/version.js +++ b/commands/version.js @@ -23,6 +23,7 @@ module.exports.run = async (bot, message, args) => { if (server.type === 'java') { try { const response = await util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); var versionOriginal = response.data.version.name_clean; } catch (e) { if (warns) console.log(`${bot.emotes.warn} ` + warn(`Couldn't get version from server! Getting it from config..`)); @@ -67,6 +68,7 @@ module.exports.run = async (bot, message, args) => { } else { try { const response = await util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); var versionOriginal = response.data.version.name_clean; } catch (e) { if (warns) console.log(`${bot.emotes.warn} ` + warn(`Couldn't get version from server! Getting it from config..`)); diff --git a/events/ready.js b/events/ready.js index 0740095..49a29d4 100644 --- a/events/ready.js +++ b/events/ready.js @@ -32,6 +32,7 @@ module.exports = async (bot) => { if (server.type === 'java') { try { response = await util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); } catch (err) { if (debug) console.log(`${bot.emotes.debug} Could not receive server status data! Error:\n` + err); errored = true; @@ -39,6 +40,7 @@ module.exports = async (bot) => { } else { try { response = await util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); } catch (err) { if (debug) console.log(`${bot.emotes.debug} Could not receive server status data! Error:\n` + err); errored = true; @@ -92,6 +94,7 @@ module.exports = async (bot) => { if (server.type === 'java') { try { response = await util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); } catch (err) { if (debug) console.log(`${bot.emotes.debug} Could not receive server status data! Error:\n` + err); errored = true; @@ -99,6 +102,7 @@ module.exports = async (bot) => { } else { try { response = await util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); } catch (err) { if (debug) console.log(`${bot.emotes.debug} Could not receive server status data! Error:\n` + err); errored = true; @@ -112,10 +116,11 @@ module.exports = async (bot) => { try { channel = await bot.channels.cache.get(config.countingCH.channelID); + if (!channel) throw new Error(`Discord channel doesn't exist. Did you enter a valid channel ID?`); await channel.setName(name); //Sets channel name if (debug) console.log(`${bot.emotes.debug} Successfully set the countingCH channel name to ` + ma(name)); } catch (e) { - if (warns) console.log(bot.emotes.warn + warn('Could not set the countingCH channel name! Error:\n') + e); + if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not set the countingCH channel name! Error:\n') + e); } } else { name = config.countingCH.offline; @@ -124,7 +129,7 @@ module.exports = async (bot) => { await channel.setName(name); //Sets channel name if (debug) console.log(`${bot.emotes.debug} ` + warn('Could not get the server data information! Channel name has been set to ') + ma(name)); } catch (e) { - if (warns) console.log(bot.emotes.warn + warn('Could not set the countingCH channel name! Error:\n') + e); + if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not set the countingCH channel name! Error:\n') + e); } } setTimeout(countingCH, ms(config.countingCH.time)); @@ -138,208 +143,226 @@ module.exports = async (bot) => { } if (config.settings.statusCH && server.work) { - const channel = bot.channels.cache.get(info.channelID); - const icon = server.icon ? server.icon : guild.iconURL(); - const dataJSON = bot.dataJSON; + const channel = await bot.channels.cache.get(info.channelID); + if (channel) { + const icon = server.icon ? server.icon : guild.iconURL(); + const dataJSON = bot.dataJSON; - if (!dataJSON["StatusCHMsgID"]) { - let msg; - try { - const serverEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(`🔄 **SETTING...**`) - .addFields([ - { name: "PLAYERS", value: `�/�`, inline: false }, - { name: "INFO", value: `${config.server.type.charAt(0).toUpperCase() + config.server.type.slice(1)} �\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } - ]) - .setColor(config.embeds.color); + if (!dataJSON["StatusCHMsgID"]) { + let msg; try { - msg = await channel.send({ embeds: [serverEmbed] }); - } catch (err) { - console.log("Could not send the statusCH message! Error:\n" + err); - } - } catch (err) { - if (warns) console.log(bot.emotes.warn + warn('Could not send the statusCH message! Error:\n') + err); - } - - data = dataJSON; - data["StatusCHMsgID"] = msg.id; - fs.writeFile(bot.dev ? "./dev-data.json" : "./data.json", JSON.stringify(data, null, 4), err => { - if (warns) console.log(bot.emotes.warn + warn('Could not edit the data.json content! Error:\n') + err); - }); - } - - msg = await channel.messages.fetch(dataJSON["StatusCHMsgID"]); - - if (server.type === 'java') { - util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) - .then((response) => { - const versionOriginal = response.data.version.name_clean; - let versionAdvanced = false; - - let maintenceStatus = false, - lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); - if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; - - if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); - - const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; - - const trueList = response.data.players.list ? "\n\`\`\`" + response.data.players.list.map(p => ` ${p.name_clean} `).join('\r\n') + "\`\`\`" : ""; - const serverEmbed = new Discord.EmbedBuilder() .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") - .addFields( - { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}` + trueList, inline: false }, - { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } - ) - .setColor(config.embeds.color) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [serverEmbed] }); } - catch (err) { if (warns) console.log(bot.emotes.warn + warn('Could not edit the statusCH message! Error:\n') + err); } + .setDescription(`🔄 **SETTING...**`) + .addFields([ + { name: "PLAYERS", value: `�/�`, inline: false }, + { name: "INFO", value: `${config.server.type.charAt(0).toUpperCase() + config.server.type.slice(1)} �\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } + ]) + .setColor(config.embeds.color); + try { + msg = await channel.send({ embeds: [serverEmbed] }); + } catch (err) { + console.log("Could not send the statusCH message! Error:\n" + err); + } + } catch (err) { + if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not send the statusCH message! Error:\n') + err); + } - }) - .catch((error) => { - const errorEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(':x: **OFFLINE**') - .setColor(config.embeds.error) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [errorEmbed] }); } - catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } - - if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending statusCH message! Error:\n`) + error); + data = dataJSON; + data["StatusCHMsgID"] = msg.id; + fs.writeFile(bot.dev ? "./dev-data.json" : "./data.json", JSON.stringify(data, null, 4), err => { + if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not edit the data.json content! Error:\n') + err); }); - } else { - util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`) - .then((response) => { - const versionOriginal = response.data.version.name_clean; - let versionAdvanced = false; - - let maintenceStatus = false, - lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); - if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; - - if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); + } - const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; + let errored; + try { + msg = await channel.messages.fetch(dataJSON["StatusCHMsgID"]); + errored = false; + } catch (err) { + if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not fetch the statusCH message! Error:\n') + err); + if (warns) console.log(`${bot.emotes.warn} ` + warn('Possible fix: remove "StatusCHMsgID" log from data.json')) + errored = true; + } - const serverEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") - .addFields( - { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}`, inline: false }, - { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } - ) - .setColor(config.embeds.color) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [serverEmbed] }); } - catch (err) { if (warns) console.log(bot.emotes.warn + warn('Could not edit the statusCH message! Error:\n') + err); } - }) - .catch((error) => { - const errorEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(':x: **OFFLINE**') - .setColor(config.embeds.error) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [errorEmbed] }); } - catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } - - if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending statusCH message! Error:\n`) + error); - }); - } + if (!errored) { + if (server.type === 'java') { + util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) + .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); + const versionOriginal = response.data.version.name_clean; + let versionAdvanced = false; + + let maintenceStatus = false, + lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); + if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; + + if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); + + const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; + + const trueList = response.data.players.list ? "\n\`\`\`" + response.data.players.list.map(p => ` ${p.name_clean} `).join('\r\n') + "\`\`\`" : ""; + + const serverEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") + .addFields( + { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}` + trueList, inline: false }, + { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } + ) + .setColor(config.embeds.color) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [serverEmbed] }); } + catch (err) { if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not edit the statusCH message! Error:\n') + err); } + + }) + .catch((error) => { + const errorEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(':x: **OFFLINE**') + .setColor(config.embeds.error) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [errorEmbed] }); } + catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } + + if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending statusCH message! Error:\n`) + error); + }); + } else { + util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`) + .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); + const versionOriginal = response.data.version.name_clean; + let versionAdvanced = false; + + let maintenceStatus = false, + lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); + if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; + + if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); + + const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; + + const serverEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") + .addFields( + { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}`, inline: false }, + { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } + ) + .setColor(config.embeds.color) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [serverEmbed] }); } + catch (err) { if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not edit the statusCH message! Error:\n') + err); } + }) + .catch((error) => { + const errorEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(':x: **OFFLINE**') + .setColor(config.embeds.error) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [errorEmbed] }); } + catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } + + if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending statusCH message! Error:\n`) + error); + }); + } - if (debug) console.log(`${bot.emotes.debug} Successfully updated status message in ${ma(channel.name)}!`); + if (debug) console.log(`${bot.emotes.debug} Successfully updated status message in ${ma(channel.name)}!`); - if (server.type === 'java') { - setInterval(() => - util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) - .then((response) => { - const versionOriginal = response.data.version.name_clean; - let versionAdvanced = false; - - let maintenceStatus = false, - lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); - if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; - - if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); - - const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; - - const trueList = response.data.players.list ? "\n\`\`\`" + response.data.players.list.map(p => ` ${p.name_clean} `).join('\r\n') + "\`\`\`" : ""; - - const serverEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") - .addFields( - { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}` + trueList, inline: false }, - { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } - ) - .setColor(config.embeds.color) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [serverEmbed] }); } - catch (err) { if (warns) console.log(bot.emotes.warn + warn('Could not edit the statusCH message! Error:\n') + err); } - }) - .catch((error) => { - const errorEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(':x: **OFFLINE**') - .setColor(config.embeds.error) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [errorEmbed] }); } - catch (err) { if (warns) console.log(bot.emotes.warn + warn('Could not edit the statusCH message! Error:\n') + err); } - - if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending statusCH message! Error:\n`) + error); - }), ms(info.time)); + if (server.type === 'java') { + setInterval(() => + util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) + .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); + const versionOriginal = response.data.version.name_clean; + let versionAdvanced = false; + + let maintenceStatus = false, + lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); + if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; + + if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); + + const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; + + const trueList = response.data.players.list ? "\n\`\`\`" + response.data.players.list.map(p => ` ${p.name_clean} `).join('\r\n') + "\`\`\`" : ""; + + const serverEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") + .addFields( + { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}` + trueList, inline: false }, + { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } + ) + .setColor(config.embeds.color) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [serverEmbed] }); } + catch (err) { if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not edit the statusCH message! Error:\n') + err); } + }) + .catch((error) => { + const errorEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(':x: **OFFLINE**') + .setColor(config.embeds.error) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [errorEmbed] }); } + catch (err) { if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not edit the statusCH message! Error:\n') + err); } + + if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending statusCH message! Error:\n`) + error); + }), ms(info.time)); + } else { + setInterval(() => + util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`) + .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); + const versionOriginal = response.data.version.name_clean; + let versionAdvanced = false; + + let maintenceStatus = false, + lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); + if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; + + if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); + + const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; + + const serverEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") + .addFields( + { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}`, inline: false }, + { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } + ) + .setColor(config.embeds.color) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [serverEmbed] }); } + catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } + }) + .catch((error) => { + const errorEmbed = new Discord.EmbedBuilder() + .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) + .setDescription(':x: **OFFLINE**') + .setColor(config.embeds.error) + .setFooter({ text: 'Updated' }) + .setTimestamp(); + try { msg.edit({ embeds: [errorEmbed] }); } + catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } + + if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending status message! Error:\n`) + error); + }), ms(info.time)); + } + } } else { - setInterval(() => - util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`) - .then((response) => { - const versionOriginal = response.data.version.name_clean; - let versionAdvanced = false; - - let maintenceStatus = false, - lowCaseMotdClean = response.data.motd.clean.toLocaleLowerCase(); - if (lowCaseMotdClean.includes("maintenance")) maintenceStatus = true; - - if (settings.removeServerType) versionAdvanced = removeVersion(versionOriginal); - - const version = versionAdvanced ? versionAdvanced.charAt(0).toUpperCase() + versionAdvanced.slice(1) : versionOriginal; - - const serverEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(maintenceStatus ? ":construction_worker: **MAINTENANCE**" : ":white_check_mark: **ONLINE**") - .addFields( - { name: "PLAYERS", value: `${response.data.players.online}/${response.data.players.max}`, inline: false }, - { name: "INFO", value: `${server.type.toUpperCase()} ${version}\n\`${server.ip}\`${!defPort && server.port === 25565 || !defPort && server.port === 19132 ? "" : `:\`${server.port}\``}`, inline: true } - ) - .setColor(config.embeds.color) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [serverEmbed] }); } - catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } - }) - .catch((error) => { - const errorEmbed = new Discord.EmbedBuilder() - .setAuthor({ name: config.server.name ? config.server.name : guild.name, iconURL: icon }) - .setDescription(':x: **OFFLINE**') - .setColor(config.embeds.error) - .setFooter({ text: 'Updated' }) - .setTimestamp(); - try { msg.edit({ embeds: [errorEmbed] }); } - catch (err) { console.log("Could not edit the statusCH message! Error:\n" + err); } - - if (warns) console.log(`${bot.emotes.warn} ` + warn(`Something went wrong with sending status message! Error:\n`) + error); - }), ms(info.time)); + err = "Discord channel doesn't exist. Did you enter a valid channel ID?"; + if (warns) console.log(`${bot.emotes.warn} ` + warn('Could not send the statusCH message! Error:\n') + err); } - } console.log(`${bot.emotes.success} ` + gr(bot.user.username) + " is now working with prefix " + gr(bot.prefix)); @@ -349,6 +372,7 @@ module.exports = async (bot) => { if (server.type === 'java') { util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); console.log(`${bot.emotes.success} Successfully located ${gr(server.type.toUpperCase())} server ${gr(server.ip)}!\n` + " " + gr('Server info:\n') + " " + bold('IP: ') + bl(`${server.ip}:${response.data.port ? response.data.port : server.port}\n`) + " " + bold('VERSION: ') + bl(`${response.data.version.name_clean ? response.data.version.name_clean : 'unknown'}\n`) @@ -363,6 +387,7 @@ module.exports = async (bot) => { } else if (server.type === 'bedrock') { util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); console.log(`${bot.emotes.success} Successfully located ${gr(server.type.toUpperCase())} server ${gr(server.ip)}!\n` + " " + gr('| Server info:\n') + " " + gr('| ') + bold('IP: ') + bl(`${server.ip}:${response.data.port ? response.data.port : server.port}\n`) + " " + gr('| ') + bold('VERSION: ') + bl(`${response.data.version.name_clean ? response.data.version.name_clean : 'unknown'}\n`) diff --git a/package.json b/package.json index d49ed75..97d6aa1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "minecraft-bot", - "version": "1.7.0", + "version": "1.7.0.1", "description": "Discord Minecraft bot, with which you can check your Minecraft server status (player list, version, online state, etc.)", "main": "index.js", "scripts": { @@ -31,11 +31,11 @@ "node": ">=16.9.0" }, "dependencies": { - "@discordjs/rest": "^1.7.0", - "axios": "^1.3.5", + "@discordjs/rest": "^1.7.1", + "axios": "^1.4.0", "chalk": "4.1.2", - "discord-api-types": "^0.37.37", - "discord.js": "^14.9.0", + "discord-api-types": "^0.37.41", + "discord.js": "^14.10.2", "fs": "^0.0.1-security", "ms": "^2.1.3" }, diff --git a/slashes/list.js b/slashes/list.js index d62ab60..2c5ecfc 100644 --- a/slashes/list.js +++ b/slashes/list.js @@ -24,6 +24,7 @@ module.exports.run = async (bot, interaction) => { if (server.type === 'java') { util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); if (text.title === "" || text.description === "" || text.listFormat === "") { const trueList = response.data.players.list ? "\n\`\`\`" + response.data.players.list.map(p => ` ${p.name_clean} `).join('\r\n') + "\`\`\`" : ""; diff --git a/slashes/status.js b/slashes/status.js index 648dfa6..72adfd8 100644 --- a/slashes/status.js +++ b/slashes/status.js @@ -26,6 +26,7 @@ module.exports.run = async (bot, interaction) => { if (server.type === 'java') { util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); const versionOriginal = response.data.version.name_clean; let versionAdvanced = false; @@ -100,6 +101,7 @@ module.exports.run = async (bot, interaction) => { } else { util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`) .then((response) => { + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); const versionOriginal = response.data.version.name_clean; let versionAdvanced = false; diff --git a/slashes/version.js b/slashes/version.js index 66bd584..66db20c 100644 --- a/slashes/version.js +++ b/slashes/version.js @@ -24,6 +24,7 @@ module.exports.run = async (bot, interaction) => { if (server.type === 'java') { try { const response = await util.get(`https://api.mcstatus.io/v2/status/java/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); var versionOriginal = response.data.version.name_clean; } catch (e) { if (warns) console.log(`${bot.emotes.warn} ` + warn(`Couldn't get version from server! Getting it from config..`)); @@ -94,6 +95,7 @@ module.exports.run = async (bot, interaction) => { } else { try { const response = await util.get(`https://api.mcstatus.io/v2/status/bedrock/${server.ip}:${server.port}`); + if (!response.data.online) throw new Error(`Server ${server.ip}:${server.port} was not found!`); var versionOriginal = response.data.version.name_clean; } catch (e) { if (warns) console.log(`${bot.emotes.warn} ` + warn(`Couldn't get version from server! Getting it from config..`));