const express = require("express"), sqlite3 = require("sqlite3"), bodyParser = require("body-parser"), mc = require("minecraft-server-util"), Discord = require("discord-webhook-node"), geoIP = require("geoip-lite"), fs = require("fs"), config = require("./config.json"), app = express(), db = new sqlite3.Database("./servers.db"); const createWebhook = url => new Discord.Webhook(url).setUsername("TaxenHeimer").setAvatar("https://cdn.discordapp.com/attachments/999167321631363126/999495738943868928/nn.png") const countrify = e => require("./countrycode.json")[e] const replaceMOTD = e => e.replace(/'/g, "\\'").replace(/-/g, '\\-') const makeEmbed = (mc, neit) => { var Embed = new Discord.MessageBuilder() .setTitle("TaxenHeimer") .setColor("#00ff00") .addField("**Host**", `\`${mc.Server}\``, true) .addField("**Country**", `\`${countrify(mc.ip.country)}\``) .addField("**Version**", `\`${mc.version.name}\``, true) .addField("**Players**", `\`${mc.players.online}/${mc.players.max}\``, true) .addField("**Ping**", `\`${mc.roundTripLatency}ms\``, true) .addField("**Motd**", "```\n" + mc.motd.clean + "\n```") .addField("**Playerlist Sample**", "```\n" + mc.PlayerList + "\n```") .addField("**IP Range**", "```\n" + geoIP.pretty(mc.ip.range[0]) + " - " + geoIP.pretty(mc.ip.range[1]) + "```") .setTimestamp() if (neit) Embed.setText("<@390491795655622657>") return Embed } var webhooks = [ createWebhook(config.main), createWebhook(config.fronce), createWebhook(config.neit) ] app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true })) db.exec(`CREATE TABLE IF NOT EXISTS servers ( host text not null, version text not null, players text not null, playerlist text not null, ping text not null, motd text not null, timestamp text not null )`) app.post("/server", async (req, res) => { var Server = req.body.server if (!Server) return res.send("specify a server") res.send("allah") if (fs.readFileSync(`${__dirname}/ip.txt`).toString().includes(Server)) return var Minecraft = await mc.status(Server, 25565, { enableSRV: true }) fs.appendFileSync(`${__dirname}/ip.txt`, `${Server}\n`) Minecraft.ip = geoIP.lookup(Server) Minecraft.Server = `${Server}:25565` var cleanMOTD = replaceMOTD(Minecraft.motd.clean) Minecraft.PlayerList = "" Minecraft.players.sample ? Minecraft.players.sample.forEach(e => Minecraft.PlayerList += `${e.name}::${e.id}\n`) : Minecraft.PlayerList = "No Players" db.exec(`INSERT INTO servers VALUES ( '${Minecraft.Server}', '${Minecraft.version.name}', '${Minecraft.players.online}/${Minecraft.players.max}', '${Minecraft.PlayerList}', '${Minecraft.roundTripLatency}ms', '${cleanMOTD}', '${new Date().toLocaleDateString('en-US')}' )`) switch (Minecraft.ip.country) { default: break; case "FR": webhooks[1].send(makeEmbed(Minecraft)) break } switch(true) { case Minecraft.version.name === "1.17": webhooks[2].send(makeEmbed(Minecraft, "neit")) break; default: webhooks[0].send(makeEmbed(Minecraft)) break } }) app.listen(9000, () => { console.clear() console.log("server ready") }) process.on("unhandledRejection", callback => console.log(callback)) process.on("uncaughtException", callback => console.log(callback))