const express = require('express'), sqlite3 = require('sqlite3'), bodyParser = require('body-parser'), app = express(), mc = require('minecraft-server-util'), discord = require('discord-webhook-node'), geoip = require('geoip-lite'), fs = require('fs'), config = require('./config.json') var webhook = new discord.Webhook(config.main) .setUsername("TaxenHeimer") .setAvatar("https://cdn.discordapp.com/attachments/999167321631363126/999495738943868928/nn.png") var webhookfronce = new discord.Webhook(config.fronce) .setAvatar("https://cdn.discordapp.com/attachments/999167321631363126/999495738943868928/nn.png") .setUsername("TaxenHeimer") var neithook = new discord.Webhook(config.neit) .setAvatar("https://cdn.discordapp.com/attachments/999167321631363126/999495738943868928/nn.png") .setUsername("TaxenHeimer") app.use(bodyParser.json()) app.use(bodyParser.urlencoded({extended: true})) db = new sqlite3.Database('./servers.db') 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 )`) function countrify(code) { var config = require('./countrycode.json') return config[code] } app.post('/server', async(req, res) => { var server = req.body.server if (!server) return res.send("specify a server") var ipfile = fs.readFileSync(`${__dirname}/ip.txt`, 'utf8') if (ipfile.includes(server)) return; res.send("allah") mc.status(server, 25565, {enableSRV: true}).then(res => { var playerlist = "" if (res.players.sample != null) { res.players.sample.forEach(e => playerlist += `${e.name}::${e.id}\n`) } else { playerlist += "No players" } var ip = geoip.lookup(server) if (res.motd.clean.includes("'")) var cleanmotd = res.motd.clean.replace(/'/g, "\\'") else cleanmotd = res.motd.clean if (res.motd.clean.includes('-')) var cleanmotd = res.motd.clean.replace(/-/g, '\\-') else cleanmotd = res.motd.clean db.exec(`INSERT INTO servers VALUES ( '${server}:25565', '${res.version.name}', '${res.players.online}/${res.players.max}', '${playerlist}', '${res.roundTripLatency}ms', '${cleanmotd}', '${(new Date()).toLocaleDateString('en-US')}' )`) if (ip.country === "FR") { const embed = new discord.MessageBuilder() .setTitle("TaxenHeimer") .setColor("#00ff00") .addField("**Host**", `\`${server}:25565\``, true) .addField("**Country**", `\`${countrify(ip.country)}\``) .addField("**Version**", `\`${res.version.name} (${res.version.protocol})\``, true) .addField("**Players**", `\`${res.players.online}/${res.players.max}\``, true) .addField("**Ping**", `\`${res.roundTripLatency}ms\``, true) .addField("**Motd**", "```\n"+res.motd.clean+"\n```") .addField("**Playerlist Sample**", "```\n"+playerlist+"\n```") .addField("**IP Range**", "```\n" + geoip.pretty(ip.range[0]) + " - " + geoip.pretty(ip.range[1]) + "```") .setTimestamp() webhookfronce.send(embed) } if (res.version.name.includes("1.17")) { const embed = new discord.MessageBuilder() .setText("<@390491795655622657>") .setTitle("TaxenHeimer") .setColor("#00ff00") .addField("**Host**", `\`${server}:25565\``, true) .addField("**Country**", `\`${countrify(ip.country)}\``) .addField("**Version**", `\`${res.version.name} (${res.version.protocol})\``, true) .addField("**Players**", `\`${res.players.online}/${res.players.max}\``, true) .addField("**Ping**", `\`${res.roundTripLatency}ms\``, true) .addField("**Motd**", "```\n"+res.motd.clean+"\n```") .addField("**Playerlist Sample**", "```\n"+playerlist+"\n```") .addField("**IP Range**", "```\n" + geoip.pretty(ip.range[0]) + " - " + geoip.pretty(ip.range[1]) + "```") .setTimestamp() neithook.send(embed) } const embed = new discord.MessageBuilder() .setTitle("TaxenHeimer") .setColor("#00ff00") .addField("**Host**", `\`${server}:25565\``, true) .addField("**Country**", `\`${countrify(ip.country)}\``) .addField("**Version**", `\`${res.version.name} (${res.version.protocol})\``, true) .addField("**Players**", `\`${res.players.online}/${res.players.max}\``, true) .addField("**Ping**", `\`${res.roundTripLatency}ms\``, true) .addField("**Motd**", "```\n"+res.motd.clean+"\n```") .addField("**Playerlist Sample**", "```\n"+playerlist+"\n```") .addField("**IP Range**", "```\n" + geoip.pretty(ip.range[0]) + " - " + geoip.pretty(ip.range[1]) + "```") .setTimestamp() webhook.send(embed) fs.appendFileSync(`${server}\n`) }).catch(e => {}) }) app.listen(9000, () => { console.clear() console.log("server ready") }) process.on("unhandledRejection", callback => {}) process.on("uncaughtException", callback => {})