12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- require('dotenv').config();
- const {ShardingManager} = require('discord.js');
- const manager = new ShardingManager( './bot.js', {
- execArgv: ['--icu-data-dir=node_modules/full-icu'],
- shardArgs: ( process.argv[2] === 'debug' ? ['debug'] : [] ),
- token: process.env.token
- } );
- var diedShards = 0;
- manager.on( 'shardCreate', shard => {
- console.log( `\n- Shard[${shard.id}]: Launched` );
-
- shard.on( 'spawn', message => {
- console.log( `- Shard[${shard.id}]: Spawned` );
- shard.send( {
- shard: {
- id: shard.id
- }
- } );
- } );
-
- shard.on( 'message', message => {
- if ( message === 'SIGKILL' ) {
- console.log( '\n- Killing all shards!\n\n' );
- manager.shards.forEach( shard => shard.kill() );
- }
- } );
-
- shard.on( 'death', message => {
- if ( message.exitCode === 1 ) {
- if ( manager.respawn === true ) {
- console.log( `\n\n- Shard[${shard.id}]: Died due to fatal error, disable respawn!\n\n` );
- manager.respawn = false;
- }
- else diedShards++;
- }
- } );
- } );
- manager.spawn().catch( error => {
- console.error( '- ' + error.name + ': ' + error.message );
- manager.respawnAll();
- } );
- async function graceful(signal) {
- console.log( '- ' + signal + ': Disabling respawn...' );
- manager.respawn = false;
- }
- process.once( 'SIGINT', graceful );
- process.once( 'SIGTERM', graceful );
- process.on( 'exit', code => {
- if ( diedShards >= manager.totalShards ) process.exit(1);
- } );
|