2022-07-25 13:27:42 -04:00
|
|
|
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"),
|
2022-07-24 21:59:46 -04:00
|
|
|
app = express(),
|
2022-07-26 16:14:53 -04:00
|
|
|
db = new sqlite3.Database("./servers.db"),
|
|
|
|
offline = new sqlite3.Database("./offline.db");
|
2022-07-25 13:27:42 -04:00
|
|
|
|
|
|
|
const createWebhook = url => new Discord.Webhook(url).setUsername("TaxenHeimer").setAvatar("https://cdn.discordapp.com/attachments/999167321631363126/999495738943868928/nn.png")
|
2022-07-25 16:19:45 -04:00
|
|
|
const countrify = e => require("./countrycode.json")[e]
|
2022-07-25 13:27:42 -04:00
|
|
|
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)}\``)
|
2022-07-25 16:19:45 -04:00
|
|
|
.addField("**Version**", `\`${mc.version.name}\``, true)
|
2022-07-25 13:27:42 -04:00
|
|
|
.addField("**Players**", `\`${mc.players.online}/${mc.players.max}\``, true)
|
|
|
|
.addField("**Ping**", `\`${mc.roundTripLatency}ms\``, true)
|
|
|
|
.addField("**Motd**", "```\n" + mc.motd.clean + "\n```")
|
2022-07-29 13:31:17 -04:00
|
|
|
.addField("**Playerlist Sample**", "```fix\n" + mc.PlayerList + "\n```")
|
2022-07-25 13:27:42 -04:00
|
|
|
.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
|
|
|
|
}))
|
|
|
|
|
2022-07-24 21:59:46 -04:00
|
|
|
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
|
|
|
|
)`)
|
2022-07-26 16:14:53 -04:00
|
|
|
offline.exec(`CREATE TABLE IF NOT EXISTS servers (
|
|
|
|
host text not null,
|
|
|
|
timestamp text not null
|
|
|
|
)`)
|
2022-07-25 13:27:42 -04:00
|
|
|
app.post("/server", async (req, res) => {
|
|
|
|
var Server = req.body.server
|
|
|
|
if (!Server) return res.send("specify a server")
|
2022-07-24 21:59:46 -04:00
|
|
|
res.send("allah")
|
2022-07-25 13:27:42 -04:00
|
|
|
if (fs.readFileSync(`${__dirname}/ip.txt`).toString().includes(Server)) return
|
|
|
|
var Minecraft = await mc.status(Server, 25565, {
|
|
|
|
enableSRV: true
|
2022-07-26 16:14:53 -04:00
|
|
|
}).catch(e => {
|
|
|
|
offline.exec(`INSERT INTO servers VALUES (
|
|
|
|
'${Server}',
|
|
|
|
'${new Date().toLocaleDateString("en-US")}'
|
|
|
|
)`)
|
2022-07-25 13:27:42 -04:00
|
|
|
})
|
2022-07-25 16:19:45 -04:00
|
|
|
fs.appendFileSync(`${__dirname}/ip.txt`, `${Server}\n`)
|
2022-07-25 13:27:42 -04:00
|
|
|
Minecraft.ip = geoIP.lookup(Server)
|
|
|
|
Minecraft.Server = `${Server}:25565`
|
|
|
|
var cleanMOTD = replaceMOTD(Minecraft.motd.clean)
|
|
|
|
Minecraft.PlayerList = ""
|
2022-07-29 13:31:17 -04:00
|
|
|
Minecraft.players.sample ? Minecraft.players.sample.forEach(e => Minecraft.PlayerList += `${e.name} : ${e.id}\n`) : Minecraft.PlayerList = "No Players"
|
2022-07-25 13:27:42 -04:00
|
|
|
db.exec(`INSERT INTO servers VALUES (
|
|
|
|
'${Minecraft.Server}',
|
|
|
|
'${Minecraft.version.name}',
|
|
|
|
'${Minecraft.players.online}/${Minecraft.players.max}',
|
2022-07-26 01:05:12 -04:00
|
|
|
'${Minecraft.PlayerList.replace(/\n/g, "\\n")}',
|
2022-07-25 13:27:42 -04:00
|
|
|
'${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) {
|
2022-07-25 16:19:45 -04:00
|
|
|
case Minecraft.version.name === "1.17":
|
2022-07-25 13:27:42 -04:00
|
|
|
webhooks[2].send(makeEmbed(Minecraft, "neit"))
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
webhooks[0].send(makeEmbed(Minecraft))
|
|
|
|
break
|
|
|
|
}
|
2022-07-24 21:59:46 -04:00
|
|
|
})
|
|
|
|
app.listen(9000, () => {
|
|
|
|
console.clear()
|
|
|
|
console.log("server ready")
|
|
|
|
})
|
2022-07-29 13:31:17 -04:00
|
|
|
app.use(express.static(`${__dirname}/css`))
|
|
|
|
app.get('/', async(req, res) => {
|
|
|
|
db.all(`SELECT host, version FROM servers`, async(err, servers) => {
|
|
|
|
var table = ""
|
|
|
|
for (var srv of servers) {
|
|
|
|
var proto = srv.version.split(" ")
|
|
|
|
proto.length >= 2 ? software = proto[0] : software = "Vanilla"
|
|
|
|
proto.length <= 1 ? version = proto[0] : version = proto[1]
|
|
|
|
table += `<tr><td class="😳">${srv.host}</td><td class="😳">${version}</td><td class="😳">${software}</td></tr>`
|
|
|
|
}
|
|
|
|
let content = `
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>TaxenHeimer</title>
|
|
|
|
<link rel="stylesheet" href="index.css">
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<center>
|
|
|
|
<table class="👽" id="allah">
|
|
|
|
<tr><td class="💀">Host</td><td class="💀">Version</td><td class="💀">Software</td></tr>
|
|
|
|
${table}
|
|
|
|
</table>
|
|
|
|
</center>
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|
|
`
|
|
|
|
res.send(content)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
async function updatedb() {
|
|
|
|
db.all(`SELECT host FROM servers`, async(err, serv) => {
|
|
|
|
for (var servs of serv) {
|
|
|
|
var srv = servs.host
|
|
|
|
mc.status(srv.split(":")[0], parseInt(srv.split(":")[1]), {
|
|
|
|
enableSRV: true
|
|
|
|
}).then(minecraft => {
|
|
|
|
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(`UPDATE servers SET
|
|
|
|
version='${minecraft.version.name}',
|
|
|
|
players='${minecraft.players.online}/${minecraft.players.max}',
|
|
|
|
playerlist='${minecraft.PlayerList.replace(/\n/g, "\\n")}',
|
|
|
|
ping='${minecraft.roundTripLatency}ms',
|
|
|
|
motd='${cleanMOTD}',
|
|
|
|
timestamp='Last updated ${new Date().toLocaleDateString('en-US')}'
|
|
|
|
WHERE host='${srv}'`)
|
|
|
|
}).catch(e => {
|
|
|
|
db.exec(`DELETE FROM servers WHERE host='${srv}'`)
|
|
|
|
offline.exec(`INSERT INTO servers VALUES (
|
|
|
|
'${srv}',
|
|
|
|
'${new Date().toLocaleDateString("en-US")}'
|
|
|
|
)`)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
return "Update finished"
|
|
|
|
}
|
2022-07-26 03:22:13 -04:00
|
|
|
process.on("unhandledRejection", callback => console.log(callback.message))
|
|
|
|
process.on("uncaughtException", callback => console.log(callback.message))
|