Files
blitzkit/src/models/manager.ts
T
2023-04-17 19:02:53 -05:00

51 lines
1.6 KiB
TypeScript

import { Shard, ShardingManager } from 'discord.js';
import { createRequire } from 'node:module';
import { JobService, Logger } from '../services/index.js';
const require = createRequire(import.meta.url);
let Config = require('../../config/config.json');
let Debug = require('../../config/debug.json');
let Logs = require('../../lang/logs.json');
export class Manager {
constructor(private shardManager: ShardingManager, private jobService: JobService) {}
public async start(): Promise<void> {
this.registerListeners();
let shardList = this.shardManager.shardList as number[];
try {
Logger.info(
Logs.info.managerSpawningShards
.replaceAll('{SHARD_COUNT}', shardList.length.toLocaleString())
.replaceAll('{SHARD_LIST}', shardList.join(', '))
);
await this.shardManager.spawn({
amount: this.shardManager.totalShards,
delay: Config.sharding.spawnDelay * 1000,
timeout: Config.sharding.spawnTimeout * 1000,
});
Logger.info(Logs.info.managerAllShardsSpawned);
} catch (error) {
Logger.error(Logs.error.managerSpawningShards, error);
return;
}
if (Debug.dummyMode.enabled) {
return;
}
this.jobService.start();
}
private registerListeners(): void {
this.shardManager.on('shardCreate', shard => this.onShardCreate(shard));
}
private onShardCreate(shard: Shard): void {
Logger.info(Logs.info.managerLaunchedShard.replaceAll('{SHARD_ID}', shard.id.toString()));
}
}