diff --git a/packages/bot/src/core/discord/manager.ts b/packages/bot/src/core/discord/manager.ts deleted file mode 100644 index 1e42f4ae7..000000000 --- a/packages/bot/src/core/discord/manager.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { assertSecret } from '@blitzkit/core'; -import { ShardingManager } from 'discord.js'; - -export const manager = new ShardingManager('dist/bot/workers/bot.js', { - token: assertSecret(import.meta.env.DISCORD_TOKEN), -}); diff --git a/packages/bot/src/main.ts b/packages/bot/src/main.ts index c6ccd605b..713f5795a 100644 --- a/packages/bot/src/main.ts +++ b/packages/bot/src/main.ts @@ -1,67 +1,81 @@ -import { ActivityType } from 'discord.js'; +import { assertSecret, EventManager } from '@blitzkit/core'; +import { ActivityType, ShardingManager } from 'discord.js'; import { discoveredIdsDefinitions, tankDefinitions, } from './core/blitzkit/nonBlockingPromises'; -import { manager } from './core/discord/manager'; -console.log('pre manager event listeners and spawn'); +const somethingEvent = new EventManager(); -const shards = await manager - .on('shardCreate', (shard) => { - console.log(`🟡 Launching shard ${shard.id}`); - shard.on('ready', () => console.log(`🟢 Launched shard ${shard.id}`)); - }) - .spawn(); +somethingEvent.on(async () => { + const manager = new ShardingManager('dist/bot/workers/bot.js', { + token: assertSecret(import.meta.env.DISCORD_TOKEN), + }); -console.log('post manager event listeners and spawn'); + const timeout = setTimeout(() => { + console.warn(`Shards didn't launch in 5 seconds; trying again...`); + somethingEvent.emit(undefined); -try { - let servers = 0; - let channels = 0; - let users = 0; + shards.forEach((shard) => shard.kill()); + }, 5000); - for (const [, shard] of shards) { - // wtf is this typing bro??? - const guilds = (await shard.fetchClientValue('guilds.cache')) as any; + const shards = await manager + .on('shardCreate', (shard) => { + clearTimeout(timeout); + console.log(`🟡 Launching shard ${shard.id}`); + shard.on('ready', () => console.log(`🟢 Launched shard ${shard.id}`)); + }) + .spawn(); - servers += guilds.length; + try { + let servers = 0; + let channels = 0; + let users = 0; - for (const guild of guilds) { - channels += guild.channels.length; - users += guild.memberCount; + for (const [, shard] of shards) { + // wtf is this typing bro??? + const guilds = (await shard.fetchClientValue('guilds.cache')) as any; + + servers += guilds.length; + + for (const guild of guilds) { + channels += guild.channels.length; + users += guild.memberCount; + } } + + const awaitedTankDefinitions = await tankDefinitions; + const tanks = Object.values(awaitedTankDefinitions.tanks).length; + const awaitedDiscoveredIdsDefinitions = await discoveredIdsDefinitions; + const usernames = awaitedDiscoveredIdsDefinitions.count; + + manager.broadcastEval( + (client, { servers, users, channels, tanks, usernames }) => { + const bios = [ + `Living in ${servers.toLocaleString()} servers`, + `Serving ${users.toLocaleString()} users`, + `Observing ${channels.toLocaleString()} channels`, + `Tinkering with ${tanks.toLocaleString()} tanks`, + `Memorizing ${usernames.toLocaleString()} usernames`, + ]; + + client.user?.setPresence({ + activities: [ + { + type: ActivityType.Custom, + name: bios[Math.floor(Math.random() * bios.length)], + }, + ], + }); + }, + { context: { servers, channels, users, tanks, usernames } }, + ); + } catch (error) { + console.warn( + 'An error occurred when setting up presence, ignoring to keep the process alive', + error, + ); } +}); - const awaitedTankDefinitions = await tankDefinitions; - const tanks = Object.values(awaitedTankDefinitions.tanks).length; - const awaitedDiscoveredIdsDefinitions = await discoveredIdsDefinitions; - const usernames = awaitedDiscoveredIdsDefinitions.count; - - manager.broadcastEval( - (client, { servers, users, channels, tanks, usernames }) => { - const bios = [ - `Living in ${servers.toLocaleString()} servers`, - `Serving ${users.toLocaleString()} users`, - `Observing ${channels.toLocaleString()} channels`, - `Tinkering with ${tanks.toLocaleString()} tanks`, - `Memorizing ${usernames.toLocaleString()} usernames`, - ]; - - client.user?.setPresence({ - activities: [ - { - type: ActivityType.Custom, - name: bios[Math.floor(Math.random() * bios.length)], - }, - ], - }); - }, - { context: { servers, channels, users, tanks, usernames } }, - ); -} catch (error) { - console.warn( - 'An error occurred when setting up presence, ignoring to keep the process alive', - error, - ); -} +somethingEvent.emit(undefined);