TaxenHeimer/server/index.js

95 lines
3.5 KiB
JavaScript

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("./contrycode.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} (${mc.version.protocol})\``, 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>")
console.log(Embed)
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
})
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.includes("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))