1
0
mirror of https://github.com/toast-ts/Daggerbot-TS.git synced 2024-09-29 16:30:59 -04:00
Daggerbot-TS/src/index.ts

63 lines
3.6 KiB
TypeScript
Raw Normal View History

import Discord from 'discord.js';
2023-04-14 06:47:58 -04:00
import TClient from './client.js';
2022-11-11 19:58:11 -05:00
const client = new TClient;
client.init();
import Logger from './helpers/Logger.js';
2023-12-24 10:21:40 -05:00
import YTModule from './modules/YTModule.js';
import MPModule, {refreshTimerSecs} from './modules/MPModule.js';
2023-10-08 18:03:17 -04:00
import UsernameHelper from './helpers/UsernameHelper.js';
2023-12-24 10:21:40 -05:00
import {Punishment} from './interfaces';
import {readFileSync} from 'node:fs';
2022-11-11 19:58:11 -05:00
2023-06-24 13:47:42 -04:00
// Error handler
2023-12-24 10:21:40 -05:00
function _(error:Error, type:string) {
2023-10-08 18:03:17 -04:00
if (JSON.parse(readFileSync('src/errorBlocklist.json', 'utf8')).includes(error.message)) return;
2023-08-11 08:19:13 -04:00
console.error(error);
2023-12-24 10:21:40 -05:00
(client.channels.resolve(client.config.dcServer.channels.errors) as Discord.TextChannel | null)?.send({embeds: [new client.embed().setColor('#560000').setTitle('Error caught!').setFooter({text: 'Error type: ' + type}).setDescription(`**Error:**\n\`\`\`${error.message}\`\`\`**Stack:**\n\`\`\`${`${UsernameHelper(error.stack)}`.slice(0, 2500)}\`\`\``)]})
2023-01-11 03:33:38 -05:00
}
2023-12-24 10:21:40 -05:00
process.on('unhandledRejection', (error: Error)=>_(error, 'unhandledRejection'));
process.on('uncaughtException', (error: Error)=>_(error, 'uncaughtException'));
process.on('error', (error: Error)=>_(error, 'processError'));
client.on('error', (error: Error)=>_(error, 'clientError'));
2022-11-11 19:58:11 -05:00
2023-12-24 10:21:40 -05:00
// Interval timers for modules
setInterval(async()=>await MPModule(client), refreshTimerSecs); // Second param got moved to inside MPModule function to reduce the amount of failure rates.
setInterval(()=>YTModule(client), 180000); // 3 minutes
2022-11-11 19:58:11 -05:00
// Event loop for punishments and daily msgs
setInterval(async()=>{
2023-03-05 05:04:10 -05:00
const now = Date.now();
2023-05-23 01:14:17 -04:00
2023-10-02 18:40:03 -04:00
const punishments = await client.punishments.findInCache();
2023-12-24 10:21:40 -05:00
punishments.filter((x:Punishment)=>x.endTime && x.endTime <= now && !x.expired).forEach(async (punishment:Punishment)=>{
Logger.console('log', 'Punishment', `${punishment.member}\'s ${punishment.type} should expire now`);
Logger.console('log', 'Punishment', await client.punishments.punishmentRemove(punishment.case_id, client.user.id, 'Time\'s up!'));
2023-03-05 05:04:10 -05:00
});
2023-05-23 01:14:17 -04:00
const formattedDate = Math.floor((now - client.config.LRSstart)/1000/60/60/24);
2023-12-24 10:21:40 -05:00
const dailyMsgs = await client.dailyMsgs.fetchDays();
if (client.config.botSwitches.dailyMsgsBackup && !dailyMsgs.some(x=>x[0] === formattedDate)) {
if (!dailyMsgs.find(x=>x.dataValues.day === formattedDate)) {
let total = (await client.userLevels.fetchEveryone()).reduce((a,b)=>a + b.messages, 0); // Sum of all users
const yesterday = dailyMsgs.find(x=>x.day === formattedDate - 1)
if (total < yesterday?.total) total = yesterday.total; // Messages went down.
await client.dailyMsgs.newDay(formattedDate, total);
Logger.console('log', 'DailyMsgs', `Pushed [${formattedDate}, ${total}]`)
2023-10-05 07:56:29 -04:00
2023-12-24 10:21:40 -05:00
// Send notification to #bot-logs that the data has been pushed to database.
const commands = await client.guilds.cache.get(client.config.dcServer.id)?.commands.fetch();
if (commands) (client.channels.resolve(client.config.dcServer.channels.logs) as Discord.TextChannel).send({embeds: [
new client.embed().setDescription(`Pushed the following\ndata to </rank leaderboard:${commands.find(x=>x.name === 'rank').id}>`).setFields(
{name: 'Day', value: formattedDate.toString(), inline: true},
{name: 'Messages', value: Intl.NumberFormat('en-us').format(total).toString(), inline: true}
).setColor(client.config.embedColor)
]});
else Logger.console('log', 'DailyMsgs', 'Rank command not found, cannot send notification in channel')
}
2023-03-05 05:04:10 -05:00
}
2022-11-22 16:29:02 -05:00
}, 5000)
2023-12-24 10:21:40 -05:00
if (client.config.botSwitches.dailyMsgsBackup) client.userLevels.initSelfdestruct()
// Initiate the nuke on userLevels and dailyMsgs tables
// Also don't ask why it's outside the interval