139 lines
4.1 KiB
JavaScript
139 lines
4.1 KiB
JavaScript
require("dotenv").config()
|
|
const Discord = require('discord.js');
|
|
const { connect } = require("http2");
|
|
const mysql = require('mysql');
|
|
const fs = require('fs').promises;
|
|
|
|
const hook = new Discord.WebhookClient({ url: process.env.DISCORD_WEBHOOK_URL })
|
|
|
|
const JSON_FILE = process.env.JSON_FILE || "records.json";
|
|
|
|
async function loadRecords() {
|
|
try {
|
|
const data = await fs.readFile(JSON_FILE, 'utf-8');
|
|
return JSON.parse(data);
|
|
} catch (error) {
|
|
if (error.code === 'ENOENT') {
|
|
return { records: {} }; // Return empty records if file doesn't exist
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async function saveRecords(root) {
|
|
const json = JSON.stringify(root, null, 2);
|
|
await fs.writeFile(JSON_FILE, json);
|
|
}
|
|
|
|
async function getPreviousDayData() {
|
|
const previousDay = new Date(Date.now() - 86400000); // 24 hours ago
|
|
const startTime = new Date(previousDay.setHours(0, 0, 0, 0));
|
|
const endTime = new Date(previousDay.setHours(23, 59, 59, 999));
|
|
const connection = await mysql.createConnection({
|
|
host: process.env.DATABASE_HOST,
|
|
user: process.env.DATABASE_USER,
|
|
password: process.env.DATABASE_PASSWORD,
|
|
database: process.env.DATABASE_NAME,
|
|
});
|
|
await connection.connect();
|
|
|
|
const [callsMade] = await connection.query(`
|
|
SELECT COUNT(*) AS call_count
|
|
FROM cdr
|
|
WHERE calldate BETWEEN ? AND ?
|
|
`, [startTime, endTime]);
|
|
|
|
const [recordForToday] = await connection.query(`
|
|
SELECT COUNT(*) AS call_count
|
|
FROM cdr
|
|
WHERE DATE(calldate) = DATE(?)
|
|
`, [previousDay]);
|
|
|
|
const [monthlyTotal] = await connection.query(`
|
|
SELECT COUNT(*) AS call_count
|
|
FROM cdr
|
|
WHERE MONTH(calldate) = MONTH(?) AND YEAR(calldate) = YEAR(?)
|
|
`, [previousDay, previousDay]);
|
|
|
|
const [totalCalls] = await connection.query(`
|
|
SELECT COUNT(*) AS call_count
|
|
FROM cdr
|
|
`);
|
|
|
|
await connection.end();
|
|
|
|
return {
|
|
"Calls Made": callsMade[0].call_count,
|
|
"Record for Today of the Year": recordForToday[0].call_count,
|
|
"Monthly Total": monthlyTotal[0].call_count,
|
|
"Total Calls Ever Placed": totalCalls[0].call_count,
|
|
"System Uptime": getSystemUptime(),
|
|
"All Time Record": null, // Placeholder
|
|
};
|
|
}
|
|
|
|
function getSystemUptime() {
|
|
const uptime = os.uptime();
|
|
const days = Math.floor(uptime / 86400);
|
|
const hours = Math.floor((uptime % 86400) / 3600);
|
|
const minutes = Math.floor((uptime % 3600) / 60);
|
|
const seconds = Math.floor(uptime % 60);
|
|
return `${days} days, ${hours} hours, ${minutes} minutes, ${seconds} seconds`;
|
|
}
|
|
|
|
function updateRecords(data, root) {
|
|
const currentDate = new Date(Date.now() - 86400000).toISOString().split('T')[0];
|
|
const month = currentDate.slice(0, 7);
|
|
let isNewRecord = false;
|
|
|
|
// Update all-time record
|
|
const allTimeRecord = root.records.record_calls || { date: currentDate, count: 0 };
|
|
if (!root.records.record_calls) {
|
|
root.records.record_calls = { date: currentDate, count: data["Calls Made"] };
|
|
isNewRecord = true;
|
|
} else if (parseInt(allTimeRecord.count) < data["Calls Made"]) {
|
|
allTimeRecord.count = data["Calls Made"];
|
|
isNewRecord = true;
|
|
}
|
|
data["All Time Record"] = `${allTimeRecord.count} calls on ${allTimeRecord.date}`;
|
|
|
|
// Update total calls ever placed
|
|
root.records.total_calls_ever_placed = data["Total Calls Ever Placed"];
|
|
|
|
// Update monthly total
|
|
root.records[`monthly_total_${month}`] = data["Monthly Total"];
|
|
|
|
if (isNewRecord) {
|
|
data["NEW RECORD"] = true;
|
|
}
|
|
return data;
|
|
}
|
|
|
|
async function sendSummary() {
|
|
const data = await getPreviousDayData();
|
|
const root = await loadRecords();
|
|
const updatedData = await updateRecords(data, root);
|
|
await saveRecords(root);
|
|
|
|
const previousDayStart = new Date(Date.now() - 86400000);
|
|
const previousDayEnd = new Date(previousDayStart);
|
|
previousDayEnd.setHours(23, 59, 59, 999);
|
|
|
|
let embed = {
|
|
title: `Summary from <t:${Math.floor(previousDayStart/1000)}:f> to <t:${Math.floor(previousDayEnd/1000)}:f>`,
|
|
color: 0x1E90FF,
|
|
fields: []
|
|
|
|
}
|
|
for (const [key, value] of Object.entries(updatedData)) {
|
|
if (key === "NEW RECORD") {
|
|
embed.fields.push({ name: "NEW RECORD!", value: "A new record has been set!", inline: false });
|
|
} else {
|
|
embed.fields.push({ name: key, value: value, inline: false });
|
|
}
|
|
}
|
|
|
|
await hook.send({ embeds: [embed] });
|
|
}
|
|
console.log("Initializing...")
|
|
sendSummary() |