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
|
2021-10-31 20:46:43 +01:00
|
|
|
console.log(`${servers.num_clients}/63 Server full: ${servers.ip}:${servers.port}`)
|
2021-10-30 20:26:37 +02:00
|
|
|
}
|
2021-10-31 20:46:43 +01:00
|
|
|
/* A bit hacky way of killing ddnss */
|
|
|
|
exec(`pkill -9 -f ddnss`)
|
2021-10-30 20:26:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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()
|
|
|
|
})
|
|
|
|
})
|
2021-10-31 20:46:43 +01:00
|
|
|
}
|