2023-06-04 02:48:42 +00:00
|
|
|
import { Guild } from "discord.js";
|
2023-06-04 21:13:15 +00:00
|
|
|
import RadioClient from "../../Client";
|
2023-06-06 05:05:54 +00:00
|
|
|
import { radio } from "./Radio";
|
2023-06-04 02:48:42 +00:00
|
|
|
|
2023-06-07 03:41:58 +00:00
|
|
|
export interface statistics {
|
|
|
|
[key: string]: statistic
|
|
|
|
}
|
|
|
|
|
|
|
|
interface statistic {
|
|
|
|
"time": number,
|
|
|
|
"used": number
|
|
|
|
}
|
|
|
|
|
2023-06-04 01:29:42 +00:00
|
|
|
export default class Statistics {
|
2023-06-07 03:41:58 +00:00
|
|
|
map: Map<string, statistics>;
|
2023-06-04 02:48:42 +00:00
|
|
|
|
2021-09-16 01:46:54 +00:00
|
|
|
constructor() {
|
|
|
|
this.map = new Map();
|
|
|
|
}
|
|
|
|
|
2023-06-06 05:05:54 +00:00
|
|
|
update(client: RadioClient, guild: Guild | null, radio: radio) {
|
2023-06-05 22:39:35 +00:00
|
|
|
if(!guild) return;
|
2021-09-16 01:46:54 +00:00
|
|
|
|
2023-06-04 21:13:15 +00:00
|
|
|
client.datastore?.checkEntry(guild.id);
|
2021-09-16 01:46:54 +00:00
|
|
|
|
2023-06-04 21:13:15 +00:00
|
|
|
radio.datastore = client.datastore?.getEntry(guild.id);
|
2021-09-16 01:46:54 +00:00
|
|
|
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
2021-09-16 01:46:54 +00:00
|
|
|
if(!radio.datastore.statistics[radio.station.name]){
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
|
|
|
radio.datastore.statistics[radio.station.name] = {
|
|
|
|
time: 0,
|
|
|
|
used: 0
|
|
|
|
};
|
|
|
|
//@ts-ignore
|
2023-06-04 21:13:15 +00:00
|
|
|
client.datastore?.updateEntry(guild, radio.datastore);
|
2021-09-16 01:46:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
let date = new Date();
|
|
|
|
radio.currentTime = date.getTime();
|
2023-06-06 05:05:54 +00:00
|
|
|
radio.playTime = radio.currentTime - radio.startTime;
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
2023-06-06 05:05:54 +00:00
|
|
|
radio.datastore.statistics[radio.station.name].time = parseInt(radio.datastore.statistics[radio.station.name].time) + radio.playTime;
|
2021-09-16 01:46:54 +00:00
|
|
|
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
2021-09-16 01:46:54 +00:00
|
|
|
radio.datastore.statistics[radio.station.name].used = parseInt(radio.datastore.statistics[radio.station.name].used)+1;
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
2023-06-04 21:13:15 +00:00
|
|
|
client.datastore?.updateEntry(guild, radio.datastore);
|
2021-09-16 01:46:54 +00:00
|
|
|
this.calculateGlobal(client);
|
|
|
|
}
|
|
|
|
|
2023-06-04 21:13:15 +00:00
|
|
|
calculateGlobal(client: RadioClient){
|
2021-09-16 02:35:12 +00:00
|
|
|
if(!client.stations) return;
|
2023-06-04 21:13:15 +00:00
|
|
|
if(!client.datastore?.map) return;
|
2021-09-16 01:46:54 +00:00
|
|
|
|
|
|
|
let guilds = client.datastore.map.keys();
|
2021-09-16 02:35:12 +00:00
|
|
|
let stations = client.stations;
|
2023-06-07 03:41:58 +00:00
|
|
|
let statistics : statistics = {};
|
2021-09-16 01:46:54 +00:00
|
|
|
|
2021-09-16 02:35:12 +00:00
|
|
|
if(!client.stations) return;
|
2021-09-16 01:46:54 +00:00
|
|
|
|
|
|
|
let calculation = guilds.next();
|
|
|
|
|
|
|
|
while (!calculation.done) {
|
|
|
|
let currentGuild = client.datastore.getEntry(calculation.value);
|
|
|
|
if(calculation.value != 'global'){
|
|
|
|
if(stations){
|
2023-06-05 22:39:35 +00:00
|
|
|
for(const station of stations) {
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
|
|
|
if(currentGuild.statistics[station.name] && currentGuild.statistics[station.name]?.time && parseInt(currentGuild.statistics[station.name].time) != 0 && currentGuild.statistics[station.name].used && parseInt(currentGuild.statistics[station.name].used) != 0){
|
2023-06-05 22:39:35 +00:00
|
|
|
if(!statistics[station.name]){
|
2023-06-07 03:41:58 +00:00
|
|
|
statistics[station.name] = {
|
|
|
|
time: 0,
|
|
|
|
used: 0
|
|
|
|
};
|
2021-09-16 01:46:54 +00:00
|
|
|
}
|
|
|
|
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
2023-06-05 22:39:35 +00:00
|
|
|
statistics[station.name].time = parseInt(statistics[station.name].time)+parseInt(currentGuild.statistics[station.name].time);
|
2023-06-07 03:41:58 +00:00
|
|
|
//@ts-ignore
|
2023-06-05 22:39:35 +00:00
|
|
|
statistics[station.name].used = parseInt(statistics[station.name].used)+parseInt(currentGuild.statistics[station.name].used);
|
2021-09-16 01:46:54 +00:00
|
|
|
}
|
2023-06-05 22:39:35 +00:00
|
|
|
}
|
2021-09-16 01:46:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
calculation = guilds.next();
|
|
|
|
}
|
|
|
|
|
2023-06-07 03:41:58 +00:00
|
|
|
let newData = {
|
|
|
|
guild: {
|
|
|
|
id: "global",
|
|
|
|
name: "global"
|
|
|
|
},
|
|
|
|
statistics: statistics
|
|
|
|
};
|
2021-09-16 01:46:54 +00:00
|
|
|
client.datastore.updateEntry(newData.guild, newData);
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|