ddstats-server/ddnss/handler.js

103 lines
3.0 KiB
JavaScript
Raw Normal View History

2021-10-30 20:26:37 +02:00
import fetch from 'node-fetch'
import { exec } from 'child_process'
import { skinDB } from "../db/init.js"
export async function ddnssStart() {
const response = await fetch('https://ddnet.tw/status/index.json');
const data = await response.json();
console.log(data)
for (const servers of data) {
/* Check if server isn't empty and not full */
if (servers.num_clients > 0 && servers.num_clients < 59) {
let server = `${servers.ip}:${servers.port}`
console.log(`Connecting: ${servers.ip}:${servers.port}`)
/* exec ddnss */
await scrapeServer(`${server}`)
}
else
console.log(`Server full: ${servers.ip}:${servers.port}`)
}
}
export function scrapeServer(server) {
let command = `./ddnss/build/DDNet "ui_server_address ${server}" -f ddnss/build/config.conf`
let skinData
return new Promise((done, failed) => {
exec(command, { encoding: 'utf8', timeout: 10000 }, (err, stdout, stderr) => {
if (err) {
err.stdout = stdout
err.stderr = stderr
}
/* Handle error from parsing of JSON */
try {
skinData = JSON.parse(stdout)
} catch (e) {
done()
return
}
if (skinData === null) {
done()
return
}
/* Get timestamp */
let ts = (Date.now())
/* Insert skindata */
for (const entry of skinData) {
skinDB.prepare(`INSERT INTO "skindata"
(
timestamp,
player,
clan,
flag,
skin,
useColor,
colorBodyRaw,
colorBodyHex,
colorFeetRaw,
ColorFeetHex
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).
run(
ts,
entry.player,
entry.clan,
entry.flag,
entry.skindata.skin,
entry.skindata.useColor,
entry.skindata.colorBody.raw,
entry.skindata.colorBody.hex,
entry.skindata.colorFeet.raw,
entry.skindata.colorFeet.hex,
)
}
done()
/* A bit hacky way of killing ddnss */
//exec(`pkill -9 -f ddnss`)
})
})
}
/*
CREATE TABLE IF NOT EXISTS "skindata"
(
"timestamp" INTEGER NOT NULL,
"player" varchar(16) NOT NULL,
"clan" varchar(12) NOT NULL,
"flag" INTEGER NOT NULL,
"skin" varchar(16) NOT NULL,
"useColor" INTEGER NOT NULL,
"colorBodyRaw" INTEGER NOT NULL,
"colorBodyHex" varchar(8) NOT NULL,
"colorFeetRaw" INTEGER NOT NULL,
"colorFeetHex" varchar(8) NOT NULL);
*/