Added statistics to VoiceStateUpdate to save playtime when disconnected manually. Moved statistics updating to statisticsUpdate function.

This commit is contained in:
Christer Warén 2020-04-01 16:58:08 +03:00
parent 94344bbecd
commit 5b5217e651
3 changed files with 64 additions and 27 deletions

View File

@ -43,16 +43,7 @@ module.exports = {
if (radio) { if (radio) {
if(!radio.currentGuild.statistics[radio.station.name]){ statisticsUpdate(client, msg.guild, radio);
radio.currentGuild.statistics[radio.station.name] = {};
radio.currentGuild.statistics[radio.station.name].time = 0;
radio.currentGuild.statistics[radio.station.name].used = 0;
client.datastore.updateEntry(msg.guild, radio.currentGuild);
}
radio.currentGuild.statistics[radio.station.name].time = parseInt(radio.currentGuild.statistics[radio.station.name].time)+parseInt(radio.connection.dispatcher.streamTime.toFixed(0));
radio.currentGuild.statistics[radio.station.name].used = parseInt(radio.currentGuild.statistics[radio.station.name].used)+1;
client.datastore.updateEntry(msg.guild, radio.currentGuild);
radio.connection.dispatcher.destroy(); radio.connection.dispatcher.destroy();
radio.station = station; radio.station = station;
@ -74,6 +65,8 @@ module.exports = {
try { try {
const connection = await voiceChannel.join(); const connection = await voiceChannel.join();
construct.connection = connection; construct.connection = connection;
let date = new Date();
construct.startTime = date.getTime();
play(msg.guild, client, url); play(msg.guild, client, url);
client.datastore.checkEntry(msg.guild.id); client.datastore.checkEntry(msg.guild.id);
@ -117,6 +110,19 @@ function play(guild, client, url) {
radio.textChannel.send(client.messageEmojis["play"] + message.play); radio.textChannel.send(client.messageEmojis["play"] + message.play);
}; };
function statisticsUpdate(client, guild, radio) {
if(!radio.currentGuild.statistics[radio.station.name]){
radio.currentGuild.statistics[radio.station.name] = {};
radio.currentGuild.statistics[radio.station.name].time = 0;
radio.currentGuild.statistics[radio.station.name].used = 0;
client.datastore.updateEntry(guild, radio.currentGuild);
}
radio.currentGuild.statistics[radio.station.name].time = parseInt(radio.currentGuild.statistics[radio.station.name].time)+parseInt(radio.connection.dispatcher.streamTime.toFixed(0));
radio.currentGuild.statistics[radio.station.name].used = parseInt(radio.currentGuild.statistics[radio.station.name].used)+1;
client.datastore.updateEntry(guild, radio.currentGuild);
};
function searchStation(key, client) { function searchStation(key, client) {
if (client.stations === null) return false; if (client.stations === null) return false;
let foundStations = []; let foundStations = [];

View File

@ -8,25 +8,26 @@ module.exports = {
execute(msg, args, client, Discord, command) { execute(msg, args, client, Discord, command) {
const radio = client.radio.get(msg.guild.id); const radio = client.radio.get(msg.guild.id);
if (client.funcs.check(client, msg, command)) { if (client.funcs.check(client, msg, command)) {
statisticsUpdate(client, msg.guild, radio);
client.datastore.checkEntry(msg.guild.id);
radio.currentGuild = client.datastore.getEntry(msg.guild.id);
if(!radio.currentGuild.statistics[radio.station.name]){
radio.currentGuild.statistics[radio.station.name] = {};
radio.currentGuild.statistics[radio.station.name].time = 0;
radio.currentGuild.statistics[radio.station.name].used = 0;
client.datastore.updateEntry(msg.guild, radio.currentGuild);
}
radio.currentGuild.statistics[radio.station.name].time = parseInt(radio.currentGuild.statistics[radio.station.name].time)+parseInt(radio.connection.dispatcher.streamTime.toFixed(0));
radio.currentGuild.statistics[radio.station.name].used = parseInt(radio.currentGuild.statistics[radio.station.name].used)+1;
client.datastore.updateEntry(msg.guild, radio.currentGuild);
radio.connection.dispatcher.destroy(); radio.connection.dispatcher.destroy();
radio.voiceChannel.leave(); radio.voiceChannel.leave();
client.radio.delete(msg.guild.id); client.radio.delete(msg.guild.id);
msg.channel.send(client.messageEmojis["stop"] + client.messages.stop); msg.channel.send(client.messageEmojis["stop"] + client.messages.stop);
} }
} }
}; };
function statisticsUpdate(client, guild, radio) {
client.datastore.checkEntry(guild.id);
radio.currentGuild = client.datastore.getEntry(guild.id);
if(!radio.currentGuild.statistics[radio.station.name]){
radio.currentGuild.statistics[radio.station.name] = {};
radio.currentGuild.statistics[radio.station.name].time = 0;
radio.currentGuild.statistics[radio.station.name].used = 0;
client.datastore.updateEntry(guild, radio.currentGuild);
}
radio.currentGuild.statistics[radio.station.name].time = parseInt(radio.currentGuild.statistics[radio.station.name].time)+parseInt(radio.connection.dispatcher.streamTime.toFixed(0));
radio.currentGuild.statistics[radio.station.name].used = parseInt(radio.currentGuild.statistics[radio.station.name].used)+1;
client.datastore.updateEntry(guild, radio.currentGuild);
}

View File

@ -7,6 +7,7 @@ module.exports = {
if (!radio) return; if (!radio) return;
if (newState.member.id === client.user.id && oldState.member.id === client.user.id) { if (newState.member.id === client.user.id && oldState.member.id === client.user.id) {
if (newState.channel === null) { if (newState.channel === null) {
statisticsUpdate(client, newState, radio);
return client.radio.delete(newState.guild.id); return client.radio.delete(newState.guild.id);
} }
@ -16,9 +17,10 @@ module.exports = {
const connection = await oldState.channel.join(); const connection = await oldState.channel.join();
return radio.connection = connection; return radio.connection = connection;
} catch (error) { } catch (error) {
statisticsUpdate(client, newState, radio);
radio.connection.dispatcher.destroy(); radio.connection.dispatcher.destroy();
radio.voiceChannel.leave(); radio.voiceChannel.leave();
client.radio.delete(msg.guild.id); client.radio.delete(oldState.guild.id);
return; return;
} }
} }
@ -32,6 +34,7 @@ module.exports = {
setTimeout(() => { setTimeout(() => {
if (!radio) return; if (!radio) return;
if (radio.voiceChannel.members.size === 1) { if (radio.voiceChannel.members.size === 1) {
statisticsUpdate(client, newState, radio);
radio.connection.dispatcher.destroy(); radio.connection.dispatcher.destroy();
radio.voiceChannel.leave(); radio.voiceChannel.leave();
client.radio.delete(newState.guild.id); client.radio.delete(newState.guild.id);
@ -39,4 +42,31 @@ module.exports = {
}, 120000); }, 120000);
} }
} }
};
function statisticsUpdate(client, currentState, radio) {
client.datastore.checkEntry(currentState.guild.id);
radio.currentGuild = client.datastore.getEntry(currentState.guild.id);
if(!radio.currentGuild.statistics[radio.station.name]){
radio.currentGuild.statistics[radio.station.name] = {};
radio.currentGuild.statistics[radio.station.name].time = 0;
radio.currentGuild.statistics[radio.station.name].used = 0;
client.datastore.updateEntry(currentState.guild, radio.currentGuild);
}
if(!radio.connection.dispatcher){
let date = new Date();
radio.currentTime = date.getTime();
radio.playTime = parseInt(radio.currentTime)-parseInt(radio.startTime);
radio.currentGuild.statistics[radio.station.name].time = parseInt(radio.currentGuild.statistics[radio.station.name].time)+parseInt(radio.playTime);
} else {
radio.currentGuild.statistics[radio.station.name].time = parseInt(radio.currentGuild.statistics[radio.station.name].time)+parseInt(radio.connection.dispatcher.streamTime.toFixed(0));
}
radio.currentGuild.statistics[radio.station.name].used = parseInt(radio.currentGuild.statistics[radio.station.name].used)+1;
client.datastore.updateEntry(currentState.guild, radio.currentGuild);
} }