ztavern/node-server-manager/Plugins/Global/AutoMessages.js
2024-10-18 00:19:19 +00:00

84 lines
No EOL
2.9 KiB
JavaScript

const path = require('path')
const fs = require('fs')
const Utils = new (require(path.join(__dirname, '../../Utils/Utils.js')))()
const configName = path.join(__dirname, `../../Configuration/NSMConfiguration.json`)
var config = require(configName)
fs.watch(path.join(__dirname, `../../Configuration/NSMConfiguration.json`), async (filename) => {
if (filename) {
try { var newData = require(configName) }
catch (e) {
console.log(`Failed to reload config file ${configName}: ${e.toString()}`); return }
config = newData
console.log(`Reloaded config file ${configName}`)
}
})
class Plugin {
constructor(Managers) {
this.Managers = Managers
this.autoMessages()
}
autoMessages() {
setInterval(async () => {
var index = Utils.getRandomInt(0, config.autoMessages.length)
var Message = await this.replacePlaceholders(config.autoMessages[index])
this.Managers.forEach(Manager => {
Manager.Server.Broadcast(Message)
})
}, config.autoMessagesInterval * 1000)
}
async replacePlaceholders(text) {
var placeholders = {
'TOTALCLIENTS' : {
async get() {
return (await placeholders.Managers[0].Server.DB.getAllClients())
}
},
'PLAYERCOUNT': {
async get() {
var count = 0;
var Managers = placeholders.Managers.concat()
Managers.forEach(Manager => {
count += Manager.Server.Clients.filter((x) => { return x }).length
})
return count
}
},
'SERVERCOUNT': {
async get() {
var Managers = placeholders.Managers.concat()
return Managers.filter((Manager) => { return Manager.Server.Mapname} ).length
}
},
'TOTALKILLS': {
async get() {
return (await placeholders.Managers[0].Server.DB.getGlobalStats()).totalKills
}
},
'TOTALPLAYEDTIME': {
async get() {
return parseInt(((await placeholders.Managers[0].Server.DB.getGlobalStats()).totalPlayedTime) / 60)
}
}
}
placeholders.Managers = this.Managers
var entries = Object.entries(placeholders)
text = text.split(/\s+/g)
for (var i = 0; i < text.length; i++) {
for (var o = 0; o < entries.length; o++) {
if (text[i].includes(`{${entries[o][0]}}`)) {
text[i] = text[i].replace(`{${entries[o][0]}}`, (await entries[o][1].get()))
}
}
}
return text.join(' ')
}
}
module.exports = Plugin