56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { ShardingManager } from 'discord.js';
|
|
import path from 'path';
|
|
import { config } from 'dotenv';
|
|
import { existsSync } from 'fs';
|
|
import * as grpc from '@grpc/grpc-js';
|
|
import { kordProto } from '@kord/grpc-contracts';
|
|
|
|
const envPath = path.resolve(process.cwd(), '../../.env');
|
|
if (existsSync(envPath)) {
|
|
config({ path: envPath });
|
|
} else {
|
|
// Fallback for direct execution from root
|
|
config({ path: path.resolve(process.cwd(), '.env') });
|
|
}
|
|
|
|
if (!process.env.DISCORD_TOKEN) {
|
|
console.error('❌ DISCORD_TOKEN is missing in shard manager! Current CWD:', process.cwd());
|
|
}
|
|
|
|
const manager = new ShardingManager(path.resolve(__dirname, 'index.ts'), {
|
|
token: process.env.DISCORD_TOKEN,
|
|
execArgv: ['--import', 'tsx'], // Node.js v22 compatibility
|
|
});
|
|
|
|
manager.on('shardCreate', (shard) => {
|
|
console.log(`Launched shard ${shard.id}`);
|
|
|
|
shard.on('ready', () => {
|
|
console.log(`Shard ${shard.id} is ready`);
|
|
});
|
|
|
|
shard.on('disconnect', () => {
|
|
console.warn(`Shard ${shard.id} disconnected`);
|
|
});
|
|
|
|
shard.on('reconnecting', () => {
|
|
console.warn(`Shard ${shard.id} reconnecting`);
|
|
});
|
|
});
|
|
|
|
import { startGrpcServer } from './utils/grpcServer';
|
|
|
|
// ... (existing env/manager setup)
|
|
|
|
// --- gRPC Proxy Server Setup ---
|
|
// We start the gRPC server early to ensure the dashboard can connect
|
|
// even if Discord sharding takes time to initialize.
|
|
startGrpcServer(manager as any);
|
|
|
|
// Only spawn shards after gRPC server is successfully bound
|
|
console.log('Starting Discord ShardingManager...');
|
|
manager.spawn().catch(err => {
|
|
console.error('Failed to spawn shards:', err);
|
|
});
|
|
|