Merge pull request #45 from SowinskiBraeden/update/support-discord-sharding

Update/support discord sharding
This commit is contained in:
SowinskiBraeden authored and GitHub committed 2024-11-08 12:21:28 -08:00
commit 3c6faf7f75
4 files changed
+54 -37

No files matched your search

+33
View File
@@ -0,0 +1,33 @@
const DayzR = require('./src/DayzRBot');
const config = require('./config/config');
const { GatewayIntentBits } = require('discord.js');
const path = require("path");
const fs = require('fs');
const { HandleActivePlayersList } = require('./util/LogsHandler');
// Log all uncaught exceptions before killing process.
process.on('uncaughtException', async (error) => {
console.trace(error);
let d = new Date();
// Asynchronously write the error message to a log file using Promises
await new Promise((resolve, reject) => {
if (HandleActivePlayersList.lastSendMessage) HandleActivePlayersList.lastSendMessage.delete().catch(error => client.sendError(channel, `HandleActivePlayersList Error: \n${error}`)); // Remove previous embed message before closing
fs.appendFile(path.join(__dirname, "./logs/Logs.log"),
`{"level":"error","message":"${d.getHours()}:${d.getMinutes()} - ${d.getMonth()+1}:${d.getDate()}:${d.getFullYear()} | uncaughtException: ${error.stack}"}`, (logErr) => {
if (logErr) {
console.error('Error writing uncaughtException to log file:', logErr);
reject(logErr);
process.exit()
} else {
resolve();
}
});
});
// Now gracefully close the program
process.exit()
});
let client = new DayzR({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMembers] }, config);
client.build()
+16 -7
View File
@@ -133,17 +133,26 @@ module.exports = {
return interaction.send({ embeds: [creditsEmbed] })
} else if (args[0].name == 'stats') {
const end = new Date().getTime();
const totalGuilds = await client.shard.fetchClientValues("guilds.cache.size").then(results => {
return results.reduce((acc, guildCount) => acc + guildCount, 0);
});
const totalUsers = await client.shard.broadcastEval(c => {
c.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0);
}).then(data => data.reduce((acc, memberCount) => acc + memberCount, 0));
const stats = new EmbedBuilder()
.setColor(client.config.Colors.Default)
.setTitle('DayZ Reforger Bot Statistics')
.addFields(
{ name: 'Guilds', value: `${client.guilds.cache.size}`, inline: true },
{ name: 'Users', value: `${client.users.cache.size}`, inline: true },
{ name: 'Latency', value: `${end - start}ms`, inline: true },
{ name: 'Uptime', value: `${client.secondsToDhms(process.uptime().toFixed(2))}`, inline: true },
{ name: 'Bot Version', value: `${client.config.Dev} v${client.config.Version}`, inline: true },
{ name: 'Discord Version', value: `Discord.js ${package.dependencies["discord.js"]}`, inline: true },
{ name: 'MongoDB Version', value: `MongoDB ${package.dependencies.mongodb}`, inline: true},
{ name: 'Guilds', value: `${totalGuilds}`, inline: false },
{ name: 'Users', value: `${totalUsers}`, inline: false },
{ name: 'Latency', value: `${end - start}ms`, inline: false },
{ name: 'Uptime', value: `${client.secondsToDhms(process.uptime().toFixed(2))}`, inline: false },
{ name: 'Bot Version', value: `${client.config.Dev} v${client.config.Version}`, inline: false },
{ name: 'Discord Version', value: `Discord.js ${package.dependencies["discord.js"]}`, inline: false },
{ name: 'MongoDB Version', value: `MongoDB ${package.dependencies.mongodb}`, inline: false },
);
return interaction.send({ embeds: [stats] })
+4 -29
View File
@@ -1,33 +1,8 @@
const DayzR = require('./src/DayzRBot');
const { ShardingManager } = require('discord.js');
const config = require('./config/config');
const { GatewayIntentBits } = require('discord.js');
const path = require("path");
const fs = require('fs');
const { HandleActivePlayersList } = require('./util/LogsHandler');
const manager = new ShardingManager('./bot.js', { token: config.Token });
// Log all uncaught exceptions before killing process.
process.on('uncaughtException', async (error) => {
console.trace(error);
let d = new Date();
// Asynchronously write the error message to a log file using Promises
await new Promise((resolve, reject) => {
if (HandleActivePlayersList.lastSendMessage) HandleActivePlayersList.lastSendMessage.delete().catch(error => client.sendError(channel, `HandleActivePlayersList Error: \n${error}`)); // Remove previous embed message before closing
fs.appendFile(path.join(__dirname, "./logs/Logs.log"),
`{"level":"error","message":"${d.getHours()}:${d.getMinutes()} - ${d.getMonth()+1}:${d.getDate()}:${d.getFullYear()} | uncaughtException: ${error.stack}"}`, (logErr) => {
if (logErr) {
console.error('Error writing uncaughtException to log file:', logErr);
reject(logErr);
process.exit()
} else {
resolve();
}
});
});
manager.on('shardCreate', shard => console.log(`Launched shard ${shard.id}`));
// Now gracefully close the program
process.exit()
});
let client = new DayzR({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMembers] }, config);
client.build()
manager.spawn();
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "dayzr-bot",
"version": "13.2.0",
"version": "13.3.1",
"description": "A General Purpose Discord Bot for DayZ Nitrado Servers.",
"main": "index.js",
"nodemonConfig": {