main.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. require('dotenv').config();
  2. const {ShardingManager} = require('discord.js');
  3. const manager = new ShardingManager( './bot.js', {
  4. execArgv: ['--icu-data-dir=node_modules/full-icu'],
  5. shardArgs: ( process.argv[2] === 'debug' ? ['debug'] : [] ),
  6. token: process.env.token
  7. } );
  8. manager.on( 'shardCreate', shard => {
  9. console.log( `\n- Shard[${shard.id}]: Launched` );
  10. shard.on( 'spawn', message => {
  11. console.log( `- Shard[${shard.id}]: Spawned` );
  12. shard.send( {
  13. shard: {
  14. id: shard.id
  15. }
  16. } );
  17. } );
  18. shard.on( 'message', message => {
  19. if ( message === 'SIGKILL' ) {
  20. console.log( '\n- Killing all shards!\n\n' );
  21. manager.shards.forEach( shard => shard.kill() );
  22. }
  23. } );
  24. shard.on( 'death', message => {
  25. if ( message.exitCode === 1 ) {
  26. console.log( `\n\n- Shard[${shard.id}]: Died due to fatal error, disable respawn!\n\n` );
  27. manager.respawn = false;
  28. }
  29. } );
  30. } );
  31. manager.spawn().catch( error => console.error( '- ' + error.name + ': ' + error.message ) );
  32. async function graceful(signal) {
  33. console.log( '- ' + signal + ': Disabling respawn...' );
  34. manager.respawn = false;
  35. }
  36. process.once( 'SIGINT', graceful );
  37. process.once( 'SIGTERM', graceful );