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, multipleStatements: true }); await connection.connect(); let callsMade; let recordForToday; let monthlyTotal; let totalCalls; await connection.query(` SELECT COUNT(*) AS call_count FROM cdr WHERE calldate BETWEEN ? AND ?; SELECT COUNT(*) AS call_count FROM cdr WHERE DATE(calldate) = DATE(?); SELECT COUNT(*) AS call_count FROM cdr WHERE MONTH(calldate) = MONTH(?) AND YEAR(calldate) = YEAR(?); SELECT COUNT(*) AS call_count FROM cdr; `, [startTime, endTime, previousDay, previousDay, previousDay], (err, res) => { if (err) { console.error(err) process.exit(1) } callsMade = res[0] recordForToday = res[1] monthlyTotal = res[2] totalCalls = res[3] 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 to `, 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()