cloudstorm 0.10.11 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -121,6 +121,7 @@ interface BetterWs {
121
121
  }
122
122
  /**
123
123
  * Helper Class for simplifying the websocket connection to Discord.
124
+ * @since 0.1.4
124
125
  */
125
126
  declare class BetterWs extends EventEmitter {
126
127
  address: string;
@@ -165,10 +166,12 @@ declare class BetterWs extends EventEmitter {
165
166
  get status(): 1 | 2 | 3 | 4;
166
167
  /**
167
168
  * Initiates a WebSocket connection to the server.
169
+ * @since 0.4.1
168
170
  */
169
171
  connect(): Promise<void>;
170
172
  /**
171
173
  * Disconnects from the server.
174
+ * @since 0.1.4
172
175
  * @param code The close code.
173
176
  * @param reason The reason for closing if any.
174
177
  * @returns A Promise that resolves when the connection is fully closed.
@@ -176,12 +179,14 @@ declare class BetterWs extends EventEmitter {
176
179
  close(code: number, reason?: string): Promise<void>;
177
180
  /**
178
181
  * Sends a message to the server in the format of { op: number, d: any } (before any encoding/compression).
182
+ * @since 0.1.4
179
183
  * @param data What to send to the server.
180
184
  * @returns A Promise that resolves when the message passes the bucket queue(s) and is written to the socket's Buffer to send.
181
185
  */
182
186
  sendMessage(data: any): Promise<void>;
183
187
  /**
184
188
  * Method to raw write messages to the server.
189
+ * @since 0.4.1
185
190
  * @param packet Buffer containing the message to send.
186
191
  * @param opcode WebSocket spec op code.
187
192
  */
@@ -198,19 +203,23 @@ declare class BetterWs extends EventEmitter {
198
203
  private _onUpgrade;
199
204
  /**
200
205
  * Handler for when the raw socket to the server encounters an error.
206
+ * @since 0.4.1
201
207
  * @param error What happened.
202
208
  */
203
209
  private _onError;
204
210
  /**
205
211
  * Handler for when the raw socket is fully closed and cleans up this WebSocket.
212
+ * @since 0.4.1
206
213
  */
207
214
  private _onClose;
208
215
  /**
209
216
  * Handler for when there is data in the socket's Buffer to read.
217
+ * @since 0.4.1
210
218
  */
211
219
  private _onReadable;
212
220
  /**
213
221
  * Transforms/reads raw messages from the server and emits the appropriate event.
222
+ * @since 0.4.1
214
223
  * @param opcode WebSocket spec op code.
215
224
  * @param message Buffer of data to transform/read.
216
225
  */
@@ -242,6 +251,7 @@ interface DiscordConnector {
242
251
  * Class used for acting based on received events.
243
252
  *
244
253
  * This class is automatically instantiated by the library and is documented for reference.
254
+ * @since 0.1.4
245
255
  */
246
256
  declare class DiscordConnector extends EventEmitter {
247
257
  id: number;
@@ -302,65 +312,82 @@ declare class DiscordConnector extends EventEmitter {
302
312
  });
303
313
  /**
304
314
  * Connect to Discord.
315
+ * @since 0.1.4
305
316
  */
306
317
  connect(): Promise<void>;
307
318
  /**
308
319
  * Close the websocket connection and disconnect.
320
+ * @since 0.1.4
309
321
  */
310
322
  disconnect(): Promise<void>;
311
323
  /**
312
324
  * Called with a parsed Websocket message to execute further actions.
325
+ * @since 0.1.4
313
326
  * @param message Message that was received.
314
327
  */
315
328
  private messageAction;
316
329
  /**
317
330
  * Reset this connector to be ready to resume or hard reconnect, then connect.
331
+ * @since 0.3.0
318
332
  * @param resume Whether or not the client intends to send an OP 6 RESUME later.
319
333
  */
320
334
  private _reconnect;
321
335
  /**
322
336
  * Hard reset this connector.
337
+ * @since 0.1.4
323
338
  */
324
339
  private reset;
325
340
  /**
326
341
  * Sets the this.heartbeatTimeout Interval.
342
+ * @since 0.8.5
327
343
  */
328
344
  private setHeartBeat;
329
345
  /**
330
346
  * Clear the heart beat interval, set it to null and set the cached heartbeat_interval as 0.
347
+ * @since 0.3.0
331
348
  */
332
349
  private clearHeartBeat;
350
+ /**
351
+ * @since 0.10.0
352
+ */
333
353
  private _onHello;
334
354
  /**
335
355
  * Send an OP 2 IDENTIFY to the gateway.
356
+ * @since 0.1.4
336
357
  */
337
358
  identify(): Promise<void>;
338
359
  /**
339
360
  * Send an OP 6 RESUME to the gateway.
361
+ * @since 0.1.4
340
362
  */
341
363
  resume(): Promise<void>;
342
364
  /**
343
365
  * Send an OP 1 HEARTBEAT to the gateway.
366
+ * @since 0.1.4
344
367
  */
345
368
  private heartbeat;
346
369
  /**
347
370
  * Handle dispatch events.
371
+ * @since 0.1.4
348
372
  * @param message Message received from the websocket.
349
373
  */
350
374
  private handleDispatch;
351
375
  /**
352
376
  * Handle a close from the underlying websocket.
377
+ * @since 0.1.4
353
378
  * @param code Websocket close code.
354
379
  * @param reason Close reason if any.
355
380
  */
356
381
  private handleWsClose;
357
382
  /**
358
383
  * Send an OP 3 PRESENCE_UPDATE to the gateway.
384
+ * @since 0.3.0
359
385
  * @param data Presence data to send.
360
386
  */
361
387
  presenceUpdate(data: Partial<GatewayPresenceUpdateData>): Promise<void>;
362
388
  /**
363
389
  * Send an OP 4 VOICE_STATE_UPDATE to the gateway.
390
+ * @since 0.1.4
364
391
  * @param data Voice state update data to send.
365
392
  */
366
393
  voiceStateUpdate(data: GatewayVoiceStateUpdateData & {
@@ -369,6 +396,7 @@ declare class DiscordConnector extends EventEmitter {
369
396
  }): Promise<void>;
370
397
  /**
371
398
  * Send an OP 8 REQUEST_GUILD_MEMBERS to the gateway.
399
+ * @since 0.1.4
372
400
  * @param data Data to send.
373
401
  */
374
402
  requestGuildMembers(data: GatewayRequestGuildMembersData & {
@@ -376,18 +404,21 @@ declare class DiscordConnector extends EventEmitter {
376
404
  }): Promise<void>;
377
405
  /**
378
406
  * Checks presence data and fills in missing elements.
407
+ * @since 0.1.4
379
408
  * @param data Data to send.
380
409
  * @returns Data after it's fixed/checked.
381
410
  */
382
411
  private _checkPresenceData;
383
412
  /**
384
413
  * Checks voice state update data and fills in missing elements.
414
+ * @since 0.1.4
385
415
  * @param data Data to send.
386
416
  * @returns Data after it's fixed/checked.
387
417
  */
388
418
  private _checkVoiceStateUpdateData;
389
419
  /**
390
420
  * Checks request guild members data and fills in missing elements.
421
+ * @since 0.1.4
391
422
  * @param data Data to send.
392
423
  * @returns Data after it's fixed/checked.
393
424
  */
@@ -418,6 +449,7 @@ interface Shard {
418
449
  * Shard class, which provides a wrapper around the DiscordConnector with metadata like the id of the shard.
419
450
  *
420
451
  * This class is automatically instantiated by the library and is documented for reference.
452
+ * @since 0.1.4
421
453
  */
422
454
  declare class Shard extends EventEmitter {
423
455
  id: number;
@@ -448,24 +480,29 @@ declare class Shard extends EventEmitter {
448
480
  get latency(): number;
449
481
  /**
450
482
  * Create a new connection to Discord.
483
+ * @since 0.1.4
451
484
  */
452
485
  connect(): void;
453
486
  /**
454
487
  * Close the current connection to Discord.
488
+ * @since 0.1.4
455
489
  */
456
490
  disconnect(): Promise<void>;
457
491
  /**
458
492
  * Send an OP 3 PRESENCE_UPDATE to Discord.
493
+ * @since 0.3.0
459
494
  * @param data Data to send.
460
495
  */
461
496
  presenceUpdate(data: Parameters<Shard["connector"]["presenceUpdate"]>["0"]): Promise<void>;
462
497
  /**
463
498
  * Send an OP 4 VOICE_STATE_UPDATE to Discord.
499
+ * @since 0.1.4
464
500
  * @param data Data to send
465
501
  */
466
502
  voiceStateUpdate(data: Parameters<Shard["connector"]["voiceStateUpdate"]>["0"]): Promise<void>;
467
503
  /**
468
504
  * Send an OP 8 REQUEST_GUILD_MEMBERS to Discord.
505
+ * @since 0.1.4
469
506
  * @param data Data to send.
470
507
  */
471
508
  requestGuildMembers(data: Parameters<Shard["connector"]["requestGuildMembers"]>["0"]): Promise<void>;
@@ -475,6 +512,7 @@ declare class Shard extends EventEmitter {
475
512
  * Class used for managing shards for the user.
476
513
  *
477
514
  * This class is automatically instantiated by the library and is documented for reference.
515
+ * @since 0.1.4
478
516
  */
479
517
  declare class ShardManager {
480
518
  client: events.EventEmitter & {
@@ -504,44 +542,53 @@ declare class ShardManager {
504
542
  });
505
543
  /**
506
544
  * Create shard instances and add them to the connection queue.
545
+ * @since 0.1.4
507
546
  */
508
547
  spawn(): void;
509
548
  /**
510
549
  * Disconnect all shards facilitated by this manager.
550
+ * @since 0.1.4
511
551
  */
512
552
  disconnect(): void;
513
553
  /**
514
554
  * Add event listeners to a shard to that the manager can act on received events.
555
+ * @since 0.1.4
515
556
  * @param shard Shard to add the event listeners to.
516
557
  */
517
558
  private _addListener;
518
559
  /**
519
560
  * Checks if all shards spawned by this manager are ready.
561
+ * @since 0.1.4
520
562
  */
521
563
  private _checkReady;
522
564
  /**
523
565
  * Checks if all shards spawned by this manager are disconnected.
566
+ * @since 0.1.4
524
567
  */
525
568
  private _checkDisconnect;
526
569
  /**
527
570
  * Update the status of all currently connected shards which have been spawned by this manager.
571
+ * @since 0.3.0
528
572
  * @param data Data to send.
529
573
  */
530
574
  presenceUpdate(data: Parameters<Shard["presenceUpdate"]>["0"]): Promise<void>;
531
575
  /**
532
576
  * Update the status of a single connected shard which has been spawned by this manager.
577
+ * @since 0.3.0
533
578
  * @param shardId id of the shard.
534
579
  * @param data Data to send.
535
580
  */
536
581
  shardPresenceUpdate(shardId: number, data: Parameters<Shard["presenceUpdate"]>["0"]): Promise<void>;
537
582
  /**
538
583
  * Send an OP 4 VOICE_STATE_UPDATE with a certain shard.
584
+ * @since 0.1.4
539
585
  * @param shardId id of the shard.
540
586
  * @param data Data to send.
541
587
  */
542
588
  voiceStateUpdate(shardId: number, data: Parameters<Shard["voiceStateUpdate"]>["0"]): Promise<void>;
543
589
  /**
544
590
  * Send an OP 8 REQUEST_GUILD_MEMBERS with a certain shard.
591
+ * @since 0.1.4
545
592
  * @param shardId id of the shard.
546
593
  * @param data Data to send.
547
594
  */
@@ -579,6 +626,7 @@ interface Client {
579
626
  }
580
627
  /**
581
628
  * Main class used for receiving events and interacting with the Discord gateway.
629
+ * @since 0.1.4
582
630
  */
583
631
  declare class Client extends EventEmitter {
584
632
  /** The Discord auth token to connect with. */
@@ -593,7 +641,7 @@ declare class Client extends EventEmitter {
593
641
  /** The version string of CloudStorm. */
594
642
  version: string;
595
643
  /** The SnowTransfer instance to use to make some requests to get connect info. */
596
- private _restClient;
644
+ private readonly _restClient;
597
645
  /**
598
646
  * Create a new Client to connect to the Discord gateway.
599
647
  * @param token Token received from creating a discord bot user, which will be used to connect to the gateway.
@@ -602,6 +650,7 @@ declare class Client extends EventEmitter {
602
650
  constructor(token: string, options?: IClientOptions);
603
651
  /**
604
652
  * Create one or more connections (depending on the selected amount of shards) to the Discord gateway.
653
+ * @since 0.1.4
605
654
  * @returns This function returns a promise which is solely used for awaiting the getGateway() method's return value.
606
655
  */
607
656
  connect(): Promise<void>;
@@ -609,26 +658,31 @@ declare class Client extends EventEmitter {
609
658
  * Method to grab initial connection info from Discord.
610
659
  * Should only be called automatically by the lib unless you are a large bot with a max_concurrency not equal to 1.
611
660
  * If you are a large bot, you should call this method at a rate of your own discretion to update your max_concurrency cached value to have up to date bucket info.
661
+ * @since 0.5.0
612
662
  * @returns The amount of shards the bot should spawn if set to auto.
613
663
  */
614
664
  fetchConnectInfo(): Promise<number>;
615
665
  /**
616
666
  * Get the gateway endpoint to connect to.
667
+ * @since 0.1.4
617
668
  * @returns String url with the Gateway Endpoint to connect to.
618
669
  */
619
670
  getGateway(): Promise<string>;
620
671
  /**
621
672
  * Get the GatewayData including recommended amount of shards and other helpful info.
673
+ * @since 0.1.4
622
674
  * @returns Object with url and shards to use to connect to discord.
623
675
  */
624
676
  getGatewayBot(): Promise<APIGatewayBotInfo>;
625
677
  /**
626
678
  * Disconnect the bot gracefully,
627
679
  * you will receive a 'disconnected' event once the ShardManager successfully closes all shard websocket connections.
680
+ * @since 0.1.4
628
681
  */
629
682
  disconnect(): void;
630
683
  /**
631
684
  * Send an OP 3 PRESENCE_UPDATE to Discord, which updates the status of all shards facilitated by this client's ShardManager.
685
+ * @since 0.3.0
632
686
  * @returns Promise that's resolved once all shards have sent the websocket payload.
633
687
  *
634
688
  * @example
@@ -645,6 +699,7 @@ declare class Client extends EventEmitter {
645
699
  presenceUpdate(data: Parameters<Client["shardManager"]["presenceUpdate"]>["0"]): Promise<void>;
646
700
  /**
647
701
  * Send an OP 3 PRESENCE_UPDATE to Discord, which updates the status of a single shard facilitated by this client's ShardManager.
702
+ * @since 0.11.0
648
703
  * @param shardId id of the shard that should update it's status.
649
704
  * @param data Presence data to send.
650
705
  * @returns Promise that's resolved once the shard has sent the websocket payload.
@@ -660,10 +715,11 @@ declare class Client extends EventEmitter {
660
715
  * client.shardPresenceUpdate(0, { status: "dnd", activities: [{ name: "Im shard 0", type: 0 }] });
661
716
  * });
662
717
  */
663
- shardStatusUpdate(shardId: number, data: Parameters<Client["shardManager"]["shardPresenceUpdate"]>["1"]): Promise<void>;
718
+ shardPresenceUpdate(shardId: number, data: Parameters<Client["shardManager"]["shardPresenceUpdate"]>["1"]): Promise<void>;
664
719
  /**
665
720
  * Send an OP 4 VOICE_STATE_UPDATE to Discord. this does **not** allow you to send audio with CloudStorm itself,
666
721
  * it just provides the necessary data for another application to send audio data to Discord.
722
+ * @since 0.1.4
667
723
  * @param shardId id of the shard that should send the payload.
668
724
  * @param data Voice state update data to send.
669
725
  * @returns Promise that's resolved once the payload was sent to Discord.
@@ -683,6 +739,7 @@ declare class Client extends EventEmitter {
683
739
  voiceStateUpdate(shardId: number, data: Parameters<Client["shardManager"]["voiceStateUpdate"]>["1"]): Promise<void>;
684
740
  /**
685
741
  * Send an OP 8 REQUEST_GUILD_MEMBERS to Discord.
742
+ * @since 0.1.4
686
743
  * @param shardId id of the shard that should send the payload.
687
744
  * @param data Request guild members data to send.
688
745
  * @returns Promise that's resolved once the payload was send to Discord.
@@ -702,6 +759,7 @@ declare class Client extends EventEmitter {
702
759
  requestGuildMembers(shardId: number, data: Parameters<Client["shardManager"]["requestGuildMembers"]>["1"]): Promise<void>;
703
760
  /**
704
761
  * Update the endpoint shard websockets will connect to.
762
+ * @since 0.1.4
705
763
  * @param gatewayUrl Base gateway wss url to update the cached endpoint to.
706
764
  */
707
765
  private _updateEndpoint;
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ var zlib = require('zlib');
6
6
  var snowtransfer = require('snowtransfer');
7
7
  var v10 = require('discord-api-types/v10');
8
8
 
9
- var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var __esm=(fn,res)=>function(){return fn&&(res=(0, fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __commonJS=(cb,mod)=>function(){return mod||(0, cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var __export=(target,all2)=>{for(var name in all2)__defProp(target,name,{get:all2[name],enumerable:!0});},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var require_Constants=__commonJS({"src/Constants.ts"(exports,module){var Constants2={GATEWAY_OP_CODES:{DISPATCH:0,HEARTBEAT:1,IDENTIFY:2,PRESENCE_UPDATE:3,VOICE_STATE_UPDATE:4,RESUME:6,RECONNECT:7,REQUEST_GUILD_MEMBERS:8,INVALID_SESSION:9,HELLO:10,HEARTBEAT_ACK:11},GATEWAY_VERSION:10};module.exports=Constants2;}});var require_BetterWs=__commonJS({"src/BetterWs.ts"(exports,module){var import_Constants=__toESM(require_Constants()),https=__require("https"),http=__require("http"),util=__require("util"),BetterWs=class extends events.EventEmitter{constructor(address,options){super();this.address=address;this.options=options;this.wsBucket=new snowtransfer.LocalBucket(120,6e4);this.presenceBucket=new snowtransfer.LocalBucket(5,6e4);this._socket=null;this._internal={openRejector:null,closePromise:null,zlib:null};this._connecting=!1;this._lastCloseCode=null;this._lastCloseReason=null;this.encoding=options.encoding??"other",this.compress=options.compress??!1;}get status(){let internal=this._internal;return this._connecting?2:internal.closePromise?3:this._socket?1:4}connect(){if(this._socket||this._connecting)return Promise.resolve(void 0);this._connecting=!0;let key=crypto.randomBytes(16).toString("base64"),url=new URL(this.address),useHTTPS=url.protocol==="https:"||url.protocol==="wss:"||url.port==="443",port=url.port||(useHTTPS?"443":"80"),req=(useHTTPS?https:http).request({hostname:url.hostname,path:`${url.pathname}${url.search}`,port,headers:{Connection:"Upgrade",Upgrade:"websocket","Sec-WebSocket-Key":key,"Sec-WebSocket-Version":"13",...this.options.headers}}),onErrorRef,cameFromOnError=!1;return new Promise((resolve2,reject)=>{this._internal.openRejector=reject;let upgrade=this._onUpgrade.bind(this,key,req,resolve2,reject);onErrorRef=e=>{this._internal.openRejector=null,cameFromOnError=!0,this._connecting=!1,req.removeListener("upgrade",upgrade),reject(e);},req.once("upgrade",upgrade),req.once("error",onErrorRef),req.end();}).catch(reason=>(onErrorRef&&!cameFromOnError&&(req.destroy(),req.removeListener("error",onErrorRef),onErrorRef(reason)),Promise.reject(reason)))}async close(code,reason){let internal=this._internal;if(internal.closePromise)return internal.closePromise;if(!this._socket)return Promise.resolve(void 0);let resolver,promise=new Promise(resolve2=>{resolver=resolve2;let from=Buffer.from([code>>8,code&255]);this._write(reason?Buffer.concat([from,Buffer.from(reason)]):from,8);}).then(()=>{internal.closePromise=null;});return promise.resolve=resolver,internal.closePromise=promise,promise}sendMessage(data){return new Promise(res=>{let presence=(data==null?void 0:data.op)===import_Constants.GATEWAY_OP_CODES.PRESENCE_UPDATE,sendMsg=()=>{let fn=()=>{this.emit("ws_send",data),this.encoding==="json"?this._write(Buffer.from(JSON.stringify(data)),1):this.encoding==="etf"?this._write(writeETF(data),2):this.encoding==="other"&&this._write(Buffer.from(data),2),res(void 0);};this.options.bypassBuckets?fn():this.wsBucket.queue(fn);};presence&&!this.options.bypassBuckets?this.presenceBucket.queue(sendMsg):sendMsg();})}_write(packet,opcode){let socket=this._socket;if(!(socket!=null&&socket.writable))return;let length=packet.length,frame;length<126?(frame=Buffer.allocUnsafe(6+length),frame[1]=128+length):length<65536?(frame=Buffer.allocUnsafe(8+length),frame[1]=254,frame[2]=length>>8,frame[3]=length&255):(frame=Buffer.allocUnsafe(14+length),frame[1]=255,frame.writeBigUInt64BE(BigInt(length),2)),frame[0]=128+opcode,frame.writeUInt32BE(0,frame.length-length-4),frame.set(packet,frame.length-length),socket.write(frame);}_onUpgrade(key,req,resolve2,reject,res,socket){this._internal.openRejector=null;let hash=crypto.createHash("sha1").update(key+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11").digest("base64"),accept=res.headers["sec-websocket-accept"];if(hash!==accept){socket.end(()=>{this.emit("debug","Failed websocket-key validation"),this._connecting=!1,reject(new Error(`Invalid Sec-Websocket-Accept | expected: ${hash} | received: ${accept}`));});return}if(socket.once("error",this._onError.bind(this)),socket.once("close",this._onClose.bind(this)),socket.on("readable",this._onReadable.bind(this)),this._socket=socket,this._connecting=!1,this.compress){let z=zlib.createInflate();z._c=z.close,z._h=z._handle,z._hc=z._handle.close,z._v=()=>{},this._internal.zlib=z;}this.emit("ws_open"),resolve2(void 0),req.removeAllListeners("error");}_onError(error){this._socket&&(this.emit("debug",util.inspect(error,!0,1,!1)),this._write(Buffer.allocUnsafe(0),8));}_onClose(){let socket=this._socket,internal=this._internal;socket&&(socket.removeListener("data",this._onReadable),socket.removeListener("error",this._onError),this.wsBucket.dropQueue(),this.presenceBucket.dropQueue(),this._socket=null,this.emit("ws_close",this._lastCloseCode??1006,this._lastCloseReason??"Abnormal Closure"),this._lastCloseCode=null,this._lastCloseReason=null,internal.zlib&&(internal.zlib.close(),internal.zlib=null),internal.closePromise&&internal.closePromise.resolve(void 0));}_onReadable(){let socket=this._socket;for(;((socket==null?void 0:socket.readableLength)||0)>1;){let length=readRange(socket,1,1)&127,bytes=0;if(length>125){if(bytes=length===126?2:8,socket.readableLength<2+bytes)return;length=readRange(socket,2,bytes);}let frame=socket.read(2+bytes+length);if(!frame)return;let fin=frame[0]>>7,opcode=frame[0]&15;(fin!==1||opcode===0)&&this.emit("debug","discord actually does send messages with fin=0. if you see this error let me know");let payload=frame.subarray(2+bytes);this._processFrame(opcode,payload);}}_processFrame(opcode,message){let internal=this._internal;switch(opcode){case 1:{let packet;this.encoding==="json"?packet=JSON.parse(message.toString()):this.encoding==="other"&&(packet=message),this.emit("ws_receive",packet);break}case 2:{let packet;if(this.compress){let z=internal.zlib,error=null,data=null;z.close=z._handle.close=z._v;try{data=z._processChunk(message,zlib.constants.Z_SYNC_FLUSH);}catch(e){error=e;}let l=message.length;if((message[l-4]!==0||message[l-3]!==0||message[l-2]!==255||message[l-1]!==255)&&this.emit("debug","discord actually does send fragmented zlib messages. If you see this error let me know"),z.close=z._c,z._handle=z._h,z._handle.close=z._hc,z._events.error=void 0,z._eventCount--,z.removeAllListeners("error"),error){this.emit("debug","Zlib error processing chunk"),this._write(Buffer.allocUnsafe(0),8);return}if(!data){this.emit("debug","Data from zlib processing was null. If you see this error let me know");return}this.encoding==="json"?packet=JSON.parse(String(data)):this.encoding==="etf"?packet=readETF(data,1):this.encoding==="other"&&(packet=data);}else this.encoding==="json"?packet=JSON.parse(zlib.inflateSync(message).toString()):this.encoding==="etf"?packet=readETF(message,1):this.encoding==="other"&&(packet=message);this.emit("ws_receive",packet);break}case 8:{this._lastCloseCode=message.length>1?(message[0]<<8)+message[1]:0,this._lastCloseReason=message.length>2?message.subarray(2).toString():"",this._write(Buffer.from([this._lastCloseCode>>8,this._lastCloseCode&255]),8);break}case 9:{this._write(message,10);break}}}};function readRange(socket,index,bytes){let cursor=0,read=0,num=0,readable=socket._readableState,currentBufferIndex=readable.bufferIndex,currentBuffer=readable.buffer.head??readable.buffer[currentBufferIndex];do{let data=currentBuffer.data??currentBuffer;for(let element of data)if(++cursor>index&&(num*=256,num+=element,++read===bytes))return num}while(currentBuffer=currentBuffer.next??readable.buffer[++currentBufferIndex]);throw new Error("readRange failed?")}function readETF(data,start){let view,x=start,loop=()=>{let type=data[x++];switch(type){case 70:{let float=data.readDoubleBE(x);return x+=8,float}case 97:return data[x++];case 98:{let int=data.readInt32BE(x);return x+=4,int}case 100:{let length=data.readUInt16BE(x),atom="";if(length>30)atom=data.latin1Slice(x+=2,x+length);else for(let i=x+=2;i<x+length;i++)atom+=String.fromCharCode(data[i]);return x+=length,atom?atom==="nil"||atom==="null"?null:atom==="true"?!0:atom==="false"?!1:atom:void 0}case 108:case 106:{let array=[];if(type===108){let length=data.readUInt32BE(x);x+=4;for(let i=0;i<length;i++)array.push(loop());x++;}return array}case 107:{let array=[],length=data.readUInt16BE(x);x+=2;for(let i=0;i<length;i++)array.push(data[x++]);return array}case 109:{let length=data.readUInt32BE(x),str="";if(length>30)str=data.utf8Slice(x+=4,x+length);else {let i=x+=4,l=x+length;for(;i<l;){let byte=data[i++];byte<128?str+=String.fromCharCode(byte):byte<224?str+=String.fromCharCode(((byte&31)<<6)+(data[i++]&63)):byte<240?str+=String.fromCharCode(((byte&15)<<12)+((data[i++]&63)<<6)+(data[i++]&63)):str+=String.fromCodePoint(((byte&7)<<18)+((data[i++]&63)<<12)+((data[i++]&63)<<6)+(data[i++]&63));}}return x+=length,str}case 110:{view||(view=new DataView(data.buffer,data.offset,data.byteLength));let length=data[x++],sign=data[x++],left=length,num=BigInt(0);for(;left>0;)left>=8?(num<<=BigInt(64),num+=view.getBigUint64(x+(left-=8),!0)):left>=4?(num<<=BigInt(32),num+=BigInt(view.getUint32(x+(left-=4)),!0)):left>=2?(num<<=BigInt(16),num+=BigInt(view.getUint16(x+(left-=2)),!0)):(num<<=BigInt(8),num+=BigInt(data[x]),left--);return x+=length,(sign?-num:num).toString()}case 116:{let obj={},length=data.readUInt32BE(x);x+=4;for(let i=0;i<length;i++){let key=loop();obj[key]=loop();}return obj}}throw new Error(`Missing etf type: ${type}`)};return loop()}function writeETF(data){let b=Buffer.allocUnsafe(4096);b[0]=131;let i=1,loop=obj=>{switch(typeof obj){case"boolean":{b[i++]=100,obj?(b.writeUInt16BE(4,i),b.latin1Write("true",i+=2),i+=4):(b.writeUInt16BE(5,i),b.latin1Write("false",i+=2),i+=5);break}case"string":{let length=Buffer.byteLength(obj);b[i++]=109,b.writeUInt32BE(length,i),b.utf8Write(obj,i+=4),i+=length;break}case"number":{if(Number.isInteger(obj)){let abs=Math.abs(obj);if(abs<2147483648)b[i++]=98,b.writeInt32BE(obj,i),i+=4;else if(abs<Number.MAX_SAFE_INTEGER){b[i++]=110,b[i++]=8,b[i++]=+(obj<0),b.writeBigUInt64LE(BigInt(abs),i),i+=8;break}else b[i++]=70,b.writeDoubleBE(obj,i),i+=8;}else b[i++]=70,b.writeDoubleBE(obj,i),i+=8;break}case"bigint":{b[i++]=110,b[i++]=8,b[i++]=+(obj<0),b.writeBigUInt64LE(obj,i),i+=8;break}case"object":{if(obj===null)b[i++]=100,b.writeUInt16BE(3,i),b.latin1Write("nil",i+=2),i+=3;else if(Array.isArray(obj)){if(obj.length){b[i++]=108,b.writeUInt32BE(obj.length,i),i+=4;for(let item of obj)loop(item);}b[i++]=106;}else {let entries=Object.entries(obj).filter(x=>typeof x[1]<"u");b[i++]=116,b.writeUInt32BE(entries.length,i),i+=4;for(let[key,value]of entries)loop(key),loop(value);}break}}};return loop(data),Buffer.from(b.subarray(0,i))}module.exports=BetterWs;}});var Intents_exports={};__export(Intents_exports,{all:()=>all,default:()=>Intents_default,flags:()=>flags,non_privileged:()=>non_privileged,privileged:()=>privileged,resolve:()=>resolve});function resolve(bit=0){if(typeof bit=="number"&&bit>=0)return bit;if(typeof bit=="string"&&flags[bit])return flags[bit]|0;if(Array.isArray(bit))return bit.map(p=>resolve(p)).reduce((prev,p)=>prev|p,0);throw new RangeError("BITFIELD_INVALID")}var flags,privileged,all,non_privileged,Intents_default,init_Intents=__esm({"src/Intents.ts"(){flags={GUILDS:1,GUILD_MEMBERS:2,GUILD_MODERATION:4,GUILD_EMOJIS_AND_STICKERS:8,GUILD_INTEGRATIONS:16,GUILD_WEBHOOKS:32,GUILD_INVITES:64,GUILD_VOICE_STATES:128,GUILD_PRESENCES:256,GUILD_MESSAGES:512,GUILD_MESSAGE_REACTIONS:1024,GUILD_MESSAGE_TYPING:2048,DIRECT_MESSAGES:4096,DIRECT_MESSAGE_REACTIONS:8192,DIRECT_MESSAGE_TYPING:16384,MESSAGE_CONTENT:32768,GUILD_SCHEDULED_EVENTS:65536,AUTO_MODERATION_CONFIGURATION:1048576,AUTO_MODERATION_EXECUTION:2097152},privileged=flags.GUILD_MEMBERS|flags.GUILD_PRESENCES|flags.MESSAGE_CONTENT,all=Object.values(flags).reduce((acc,p)=>acc|p,0),non_privileged=all&~privileged;Intents_default={flags,privileged,all,non_privileged,resolve};}});var require_DiscordConnector=__commonJS({"src/DiscordConnector.ts"(exports,module){var import_Constants=__toESM(require_Constants()),BetterWs=require_BetterWs(),Intents2=(init_Intents(),__toCommonJS(Intents_exports)),resumableCodes=[4008,4005,4003,4002,4001,4e3,1006,1001],shouldntAttemptReconnectCodes=[4014,4013,4012,4011,4010,4004],disconnectMessages={4014:"Disallowed Intents, check your client options and application page.",4013:"Invalid Intents data, check your client options.",4012:"Invalid API version.",4011:"Shard would be on over 2500 guilds. Add more shards.",4010:"Invalid sharding data, check your client options.",4009:"Session timed out.",4008:"You are being rate limited. Wait before sending more packets.",4007:"Invalid sequence. Reconnecting and starting a new session.",4005:"You sent more than one OP 2 IDENTIFY payload while the websocket was open.",4004:"Tried to connect with an invalid token.",4003:"You tried to send a packet before sending an OP 2 IDENTIFY or OP 6 RESUME.",4002:"You sent an invalid payload.",4001:"You sent an invalid opcode or invalid payload for an opcode."},connectionError=new Error("WS took too long to connect. Is your internet okay?"),wsStatusTypes=["Whatever 0 is. Report if you see this","connected","connecting","closing","closed"],DiscordConnector=class extends events.EventEmitter{constructor(id,client){super();this.id=id;this.client=client;this.heartbeatTimeout=null;this.heartbeatInterval=0;this._trace=null;this.seq=0;this.status="disconnected";this.sessionId=null;this.lastACKAt=0;this.lastHeartbeatSend=0;this.latency=0;this.resumeAddress=null;this.reconnecting=!1;this._closing=!1;this._closeCalled=!1;this._openToHeartbeatTimeout=null;this._initialHeartbeatTimeout=null;this.options=client.options,this.reconnect=this.options.reconnect??!0,this.identifyAddress=this.options.endpoint,this.betterWs=new BetterWs(this.identifyAddress,this.options.ws),this.betterWs.on("ws_open",()=>{this.status="connecting",this.emit("stateChange","connecting"),this.reconnecting=!1,this._openToHeartbeatTimeout=setTimeout(()=>{this.client.emit("debug",`Shard ${this.id} didn't receive a HELLO after the ws was opened in time`),this._reconnect(!0);},1e4);}),this.betterWs.on("ws_receive",msg=>this.messageAction(msg)),this.betterWs.on("ws_close",(code,reason)=>this.handleWsClose(code,reason)),this.betterWs.on("debug",event=>this.client.emit("error",event)),this.betterWs.on("ws_send",data=>this.client.emit("rawSend",data));}async connect(){return this._closing=!1,this._closeCalled=!1,this.client.emit("debug",`Shard ${this.id} connecting to gateway`),this.betterWs.connect().catch(e=>{e!==connectionError&&setTimeout(()=>{this._closeCalled||this.connect();},5e3);})}async disconnect(){return this._closing=!0,this._closeCalled=!0,this.betterWs.close(1e3,"Disconnected by User")}async messageAction(message){this.client.emit("rawReceive",message);let withShardID=Object.assign(message,{shard_id:this.id});switch(this.client.emit("event",withShardID),withShardID.op){case import_Constants.GATEWAY_OP_CODES.DISPATCH:this.handleDispatch(withShardID);break;case import_Constants.GATEWAY_OP_CODES.HEARTBEAT:this.heartbeat();break;case import_Constants.GATEWAY_OP_CODES.RECONNECT:this.client.emit("debug",`Gateway asked shard ${this.id} to reconnect`),this.reconnect?this._reconnect(!0):this.disconnect();break;case import_Constants.GATEWAY_OP_CODES.INVALID_SESSION:this.client.emit("debug",`Shard ${this.id}'s session was invalidated`),withShardID.d&&this.sessionId?this.resume():(this.seq=0,this.sessionId="",this.emit("queueIdentify",this.id));break;case import_Constants.GATEWAY_OP_CODES.HELLO:this._openToHeartbeatTimeout&&clearTimeout(this._openToHeartbeatTimeout),this.client.emit("debug",`Shard ${this.id} received HELLO`),this.lastACKAt=Date.now(),this.heartbeatInterval=withShardID.d.heartbeat_interval,this._initialHeartbeatTimeout=setTimeout(()=>this.heartbeat(),this.heartbeatInterval*Math.random()),this._trace=withShardID.d._trace,this._onHello();break;case import_Constants.GATEWAY_OP_CODES.HEARTBEAT_ACK:this.lastACKAt=Date.now(),this.latency=this.lastACKAt-this.lastHeartbeatSend;break;}}async _reconnect(resume=!1){var _a,_b;(_b=(_a=this.betterWs._internal).openRejector)==null||_b.call(_a,connectionError),this.reconnecting=resume,await this.betterWs.close(resume?4e3:1012,"reconnecting"),resume?(this.clearHeartBeat(),this.resumeAddress?this.betterWs.address=this.resumeAddress:this.betterWs.address=this.identifyAddress):(this.reset(),this.betterWs.address=this.identifyAddress),this.connect();}reset(){this.sessionId=null,this.seq=0,this.lastACKAt=0,this._trace=null,this.clearHeartBeat();}setHeartBeat(){this.heartbeatTimeout=setInterval(()=>{this.lastACKAt<=Date.now()-(this.heartbeatInterval+5e3)?(this.client.emit("debug",`Shard ${this.id} has not received a heartbeat ACK in ${this.heartbeatInterval+5e3}ms.`),this.reconnect?this._reconnect(!0):this.disconnect()):this.heartbeat();},this.heartbeatInterval);}clearHeartBeat(){this.heartbeatTimeout&&clearInterval(this.heartbeatTimeout),this._initialHeartbeatTimeout&&clearTimeout(this._initialHeartbeatTimeout),this.heartbeatTimeout=null,this._initialHeartbeatTimeout=null,this.heartbeatInterval=0;}_onHello(){if(this.sessionId)return void this.resume();this.emit("queueIdentify",this.id);}async identify(){if(this.betterWs.status!==1)return this.client.emit("error",`Shard ${this.id} was attempting to identify when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`),this._reconnect(!0);this.client.emit("debug",`Shard ${this.id} is identifying`),this.status="identifying",this.emit("stateChange","identifying");let data={op:import_Constants.GATEWAY_OP_CODES.IDENTIFY,d:{token:this.options.token,properties:{os:process.platform,browser:"CloudStorm",device:"CloudStorm"},large_threshold:this.options.largeGuildThreshold,shard:[this.id,this.options.totalShards??1],intents:this.options.intents?Intents2.resolve(this.options.intents):0}};return this.options.initialPresence&&(data.d.presence=this._checkPresenceData(this.options.initialPresence)),this.betterWs.sendMessage(data)}async resume(){return this.betterWs.status!==1?(this.client.emit("error",`Shard ${this.id} was attempting to resume when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`),this._reconnect(!0)):(this.client.emit("debug",`Shard ${this.id} is resuming`),this.status="resuming",this.emit("stateChange","resuming"),this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.RESUME,d:{seq:this.seq,token:this.options.token,session_id:this.sessionId}}))}heartbeat(){if(this.betterWs.status!==1)return this.client.emit("error",`Shard ${this.id} was attempting to heartbeat when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`),void this._reconnect(!0);this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.HEARTBEAT,d:this.seq===0?null:this.seq}),this.lastHeartbeatSend=Date.now(),this._initialHeartbeatTimeout&&(clearTimeout(this._initialHeartbeatTimeout),this._initialHeartbeatTimeout=null),this.heartbeatTimeout||this.setHeartBeat();}handleDispatch(message){var _a,_b;switch(this.client.emit("dispatch",message),message.s&&(message.s>this.seq+1&&(this.client.emit("debug",`Shard ${this.id} invalid sequence: { current: ${this.seq} message: ${message.s} }`),this.seq=message.s,this.resume()),this.seq=message.s),message.t){case"READY":case"RESUMED":message.t==="READY"&&(message.d.resume_gateway_url&&(this.resumeAddress=`${message.d.resume_gateway_url}?v=${import_Constants.GATEWAY_VERSION}&encoding=${((_a=this.options.ws)==null?void 0:_a.encoding)==="etf"?"etf":"json"}${(_b=this.options.ws)!=null&&_b.compress?"&compress=zlib-stream":""}`),this.sessionId=message.d.session_id),this.status="ready",this.emit("stateChange","ready"),this._trace=message.d._trace,this.emit("ready",message.t==="RESUMED");break;}}handleWsClose(code,reason){let gracefulClose=!1;this.status="disconnected",this.emit("stateChange","disconnected"),this.clearHeartBeat();let isManualClose=code===1e3&&this._closing,message=disconnectMessages[code],isRecoverable=resumableCodes.includes(code),shouldntReconnect=shouldntAttemptReconnectCodes.includes(code)||isManualClose;isRecoverable&&this.resumeAddress?this.betterWs.address=this.resumeAddress:this.betterWs.address=this.identifyAddress,message&&this.client.emit("error",message),(isManualClose||this.reconnecting)&&(gracefulClose=!0),this._closing=!1,this.emit("disconnect",code,reason,gracefulClose),!shouldntReconnect&&this.reconnect&&this.connect();}async presenceUpdate(data){return this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.PRESENCE_UPDATE,d:this._checkPresenceData(data)})}async voiceStateUpdate(data){return data?this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.VOICE_STATE_UPDATE,d:this._checkVoiceStateUpdateData(data)}):Promise.resolve()}async requestGuildMembers(data){return this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.REQUEST_GUILD_MEMBERS,d:this._checkRequestGuildMembersData(data)})}_checkPresenceData(data){if(data.status=data.status??v10.PresenceUpdateStatus.Online,data.activities=data.activities&&Array.isArray(data.activities)?data.activities:[],data.activities)for(let activity of data.activities){let index=data.activities.indexOf(activity);activity.type===void 0&&(activity.type=activity.url?1:0),activity.name||(activity.state&&activity.type===4?activity.name="Custom Status":data.activities.splice(index,1));}return data.afk=data.afk??!1,data.since=data.since??Date.now(),data}_checkVoiceStateUpdateData(data){return data.channel_id=data.channel_id??null,data.self_mute=data.self_mute??!1,data.self_deaf=data.self_deaf??!1,data}_checkRequestGuildMembersData(data){let withQuery=data,withUserIDs=data;return !withQuery.query&&!withUserIDs.user_ids&&(withQuery.query=""),withQuery.query&&withUserIDs.user_ids&&delete data.query,data.limit=data.limit??10,data}};module.exports=DiscordConnector;}});var require_Shard=__commonJS({"src/Shard.ts"(exports,module){var DC=require_DiscordConnector(),Shard=class extends events.EventEmitter{constructor(id,client){super();this.id=id;this.client=client;this.ready=!1;this.connector=new DC(id,client),this.connector.on("disconnect",(...args)=>{this.ready=!1,this.emit("disconnect",...args);}),this.connector.on("ready",resume=>this.emit("ready",resume)),this.connector.on("queueIdentify",()=>this.emit("queueIdentify",this.id));}get latency(){return this.connector.latency}connect(){this.connector.connect();}disconnect(){return this.connector.disconnect()}presenceUpdate(data){return this.connector.presenceUpdate(data)}voiceStateUpdate(data){return this.connector.voiceStateUpdate(data)}requestGuildMembers(data){return this.connector.requestGuildMembers(data)}};module.exports=Shard;}});var require_ShardManager=__commonJS({"src/ShardManager.ts"(exports,module){var Shard=require_Shard(),ShardManager=class{constructor(client){this.client=client;this.shards={};this.identifyBucket=new snowtransfer.LocalBucket(1e3,1e3*60*60*24);this.concurrencyBucket=null;this.options=client.options;}spawn(){if(!this.concurrencyBucket)throw new Error("Trying to spawn shards without calling Client.connect()");for(let id of this.options.shards==="auto"?Array(this.options.totalShards).fill(0).map((_,index)=>index):this.options.shards??[0])this.client.emit("debug",`Spawned shard ${id}`),this.shards[id]=new Shard(id,this.client),this._addListener(this.shards[id]),this.shards[id].connector.connect();}disconnect(){for(let shardKey in this.shards)this.shards[shardKey].disconnect();}_addListener(shard){shard.on("ready",resume=>{shard.ready=!0,this.client.emit("debug",`Shard ${shard.id} ${resume?"has resumed":"is ready"}`),this.client.emit("shardReady",{id:shard.id,ready:!resume}),this._checkReady();}),shard.on("queueIdentify",shardId=>{var _a;if(!this.shards[shardId])return this.client.emit("debug",`Received a queueIdentify event for shard ${shardId} but it does not exist. Was it removed?`);if(this.client.emit("debug",`Shard ${shardId} is ready to identify`),shard.connector.reconnecting)return shard.connector.resume();(_a=this.concurrencyBucket)==null||_a.queue(()=>{this.identifyBucket.queue(()=>this.shards[shardId].connector.identify());});}),shard.on("disconnect",(code,reason,gracefulClose)=>{if(this.client.emit("debug",`Websocket of shard ${shard.id} closed with code ${code} and reason: ${reason??"None"}`),code===1e3&&gracefulClose)return this._checkDisconnect()});}_checkReady(){for(let shardId in this.shards)if(this.shards[shardId]&&!this.shards[shardId].ready)return;this.client.emit("ready");}_checkDisconnect(){for(let shardId in this.shards)if(this.shards[shardId]&&this.shards[shardId].connector.status!=="disconnected")return;this.client.emit("disconnected");}async presenceUpdate(data){for(let shardKey in this.shards)if(this.shards[shardKey]){let shard=this.shards[shardKey];this.shardPresenceUpdate(shard.id,data);}}shardPresenceUpdate(shardId,data){return new Promise((res,rej)=>{let shard=this.shards[shardId];shard||rej(new Error(`Shard ${shardId} does not exist`)),shard.ready&&shard.presenceUpdate(data).then(result=>res(result)).catch(e=>rej(e));})}voiceStateUpdate(shardId,data){return new Promise((res,rej)=>{let shard=this.shards[shardId];shard||rej(new Error(`Shard ${shardId} does not exist`)),shard.ready&&shard.voiceStateUpdate(data).then(result=>res(result)).catch(e=>rej(e));})}requestGuildMembers(shardId,data){return new Promise((res,rej)=>{let shard=this.shards[shardId];shard||rej(new Error(`Shard ${shardId} does not exist`)),shard.ready&&shard.requestGuildMembers(data).then(result=>res(result)).catch(e=>rej(e));})}};module.exports=ShardManager;}});var require_Client=__commonJS({"src/Client.ts"(exports,module){var fs=__require("fs"),path=__require("path"),version=JSON.parse(fs.readFileSync(path.join(__dirname,"../package.json"),{encoding:"utf8"})).version,Constants2=require_Constants(),ShardManager=require_ShardManager(),Client=class extends events.EventEmitter{constructor(token,options={}){super();this.version=version;if(!token)throw new Error("Missing token!");this.options={largeGuildThreshold:250,shards:"auto",reconnect:!0,intents:0,token:"",ws:{compress:!0,encoding:"json"}},this._restClient=options.snowtransferInstance?options.snowtransferInstance:new snowtransfer.SnowTransfer(token),delete options.snowtransferInstance,this.token=token.startsWith("Bot ")?token.substring(4):token,Object.assign(this.options,options),this.options.token=token,this.shardManager=new ShardManager(this);}async connect(){let initial=await this.fetchConnectInfo();this.options.shards==="auto"&&(this.options.totalShards=initial),this.shardManager.spawn();}async fetchConnectInfo(){var _a;let gateway=await this.getGatewayBot();this._updateEndpoint(gateway.url);let oldQueueConcurrency=[],oldQueueIdentify=[];(_a=this.shardManager.concurrencyBucket)!=null&&_a.fnQueue.length&&(oldQueueConcurrency.push(...this.shardManager.concurrencyBucket.fnQueue),this.shardManager.concurrencyBucket.dropQueue()),this.shardManager.identifyBucket.fnQueue.length&&oldQueueIdentify.push(...this.shardManager.identifyBucket.fnQueue),this.shardManager.identifyBucket.dropQueue(),this.shardManager.concurrencyBucket=new snowtransfer.LocalBucket(gateway.session_start_limit.max_concurrency,5e3),this.shardManager.identifyBucket.remaining=gateway.session_start_limit.remaining,this.shardManager.identifyBucket.reset=gateway.session_start_limit.reset_after;for(let fn of oldQueueConcurrency)this.shardManager.concurrencyBucket.queue(fn);for(let fn of oldQueueIdentify)this.shardManager.identifyBucket.queue(fn);return gateway.shards}async getGateway(){return (await this._restClient.bot.getGateway()).url}async getGatewayBot(){return this._restClient.bot.getGatewayBot()}disconnect(){return this.shardManager.disconnect()}async presenceUpdate(data){return this.shardManager.presenceUpdate(data)}shardStatusUpdate(shardId,data){return this.shardManager.shardPresenceUpdate(shardId,data)}voiceStateUpdate(shardId,data){return this.shardManager.voiceStateUpdate(shardId,data)}requestGuildMembers(shardId,data){if(!data.guild_id)throw new Error("You need to pass a guild_id");return this.shardManager.requestGuildMembers(shardId,data)}_updateEndpoint(gatewayUrl){var _a,_b;this.options.endpoint=`${gatewayUrl}?v=${Constants2.GATEWAY_VERSION}&encoding=${((_a=this.options.ws)==null?void 0:_a.encoding)==="etf"?"etf":"json"}${(_b=this.options.ws)!=null&&_b.compress?"&compress=zlib-stream":""}`;}};module.exports=Client;}});var Client2=require_Client(),Constants=require_Constants(),Intents=(init_Intents(),__toCommonJS(Intents_exports)),Shard2=require_Shard(),ShardManager2=require_ShardManager(),BetterWs2=require_BetterWs();
9
+ var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var __esm=(fn,res)=>function(){return fn&&(res=(0, fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __commonJS=(cb,mod)=>function(){return mod||(0, cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var __export=(target,all2)=>{for(var name in all2)__defProp(target,name,{get:all2[name],enumerable:!0});},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var require_Constants=__commonJS({"src/Constants.ts"(exports,module){var Constants2={GATEWAY_OP_CODES:{DISPATCH:0,HEARTBEAT:1,IDENTIFY:2,PRESENCE_UPDATE:3,VOICE_STATE_UPDATE:4,RESUME:6,RECONNECT:7,REQUEST_GUILD_MEMBERS:8,INVALID_SESSION:9,HELLO:10,HEARTBEAT_ACK:11},GATEWAY_VERSION:10};module.exports=Constants2;}});var require_BetterWs=__commonJS({"src/BetterWs.ts"(exports,module){var import_Constants=__toESM(require_Constants()),https=__require("https"),http=__require("http"),util=__require("util"),BetterWs=class extends events.EventEmitter{constructor(address,options){super();this.address=address;this.options=options;this.wsBucket=new snowtransfer.LocalBucket(120,6e4);this.presenceBucket=new snowtransfer.LocalBucket(5,6e4);this._socket=null;this._internal={openRejector:null,closePromise:null,zlib:null};this._connecting=!1;this._lastCloseCode=null;this._lastCloseReason=null;this.encoding=options.encoding??"other",this.compress=options.compress??!1;}get status(){let internal=this._internal;return this._connecting?2:internal.closePromise?3:this._socket?1:4}connect(){if(this._socket||this._connecting)return Promise.resolve(void 0);this._connecting=!0;let key=crypto.randomBytes(16).toString("base64"),url=new URL(this.address),useHTTPS=url.protocol==="https:"||url.protocol==="wss:"||url.port==="443",port=url.port||(useHTTPS?"443":"80"),req=(useHTTPS?https:http).request({hostname:url.hostname,path:`${url.pathname}${url.search}`,port,headers:{Connection:"Upgrade",Upgrade:"websocket","Sec-WebSocket-Key":key,"Sec-WebSocket-Version":"13",...this.options.headers}}),onErrorRef,cameFromOnError=!1;return new Promise((resolve2,reject)=>{this._internal.openRejector=reject;let upgrade=this._onUpgrade.bind(this,key,req,resolve2,reject);onErrorRef=e=>{this._internal.openRejector=null,cameFromOnError=!0,this._connecting=!1,req.removeListener("upgrade",upgrade),reject(e);},req.once("upgrade",upgrade),req.once("error",onErrorRef),req.end();}).catch(reason=>(onErrorRef&&!cameFromOnError&&(req.destroy(),req.removeListener("error",onErrorRef),onErrorRef(reason)),Promise.reject(reason)))}async close(code,reason){let internal=this._internal;if(internal.closePromise)return internal.closePromise;if(!this._socket)return Promise.resolve(void 0);let resolver,promise=new Promise(resolve2=>{resolver=resolve2;let from=Buffer.from([code>>8,code&255]);this._write(reason?Buffer.concat([from,Buffer.from(reason)]):from,8);}).then(()=>{internal.closePromise=null;});return promise.resolve=resolver,internal.closePromise=promise,promise}sendMessage(data){return new Promise(res=>{let presence=(data==null?void 0:data.op)===import_Constants.GATEWAY_OP_CODES.PRESENCE_UPDATE,sendMsg=()=>{let fn=()=>{this.emit("ws_send",data),this.encoding==="json"?this._write(Buffer.from(JSON.stringify(data)),1):this.encoding==="etf"?this._write(writeETF(data),2):this.encoding==="other"&&this._write(Buffer.from(data),2),res(void 0);};this.options.bypassBuckets?fn():this.wsBucket.queue(fn);};presence&&!this.options.bypassBuckets?this.presenceBucket.queue(sendMsg):sendMsg();})}_write(packet,opcode){let socket=this._socket;if(!(socket!=null&&socket.writable))return;let length=packet.length,frame;length<126?(frame=Buffer.allocUnsafe(6+length),frame[1]=128+length):length<65536?(frame=Buffer.allocUnsafe(8+length),frame[1]=254,frame[2]=length>>8,frame[3]=length&255):(frame=Buffer.allocUnsafe(14+length),frame[1]=255,frame.writeBigUInt64BE(BigInt(length),2)),frame[0]=128+opcode,frame.writeUInt32BE(0,frame.length-length-4),frame.set(packet,frame.length-length),socket.write(frame);}_onUpgrade(key,req,resolve2,reject,res,socket){this._internal.openRejector=null;let hash=crypto.createHash("sha1").update(key+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11").digest("base64"),accept=res.headers["sec-websocket-accept"];if(hash!==accept){socket.end(()=>{this.emit("debug","Failed websocket-key validation"),this._connecting=!1,reject(new Error(`Invalid Sec-Websocket-Accept | expected: ${hash} | received: ${accept}`));});return}if(socket.once("error",this._onError.bind(this)),socket.once("close",this._onClose.bind(this)),socket.on("readable",this._onReadable.bind(this)),this._socket=socket,this._connecting=!1,this.compress){let z=zlib.createInflate();z._c=z.close,z._h=z._handle,z._hc=z._handle.close,z._v=()=>{},this._internal.zlib=z;}this.emit("ws_open"),resolve2(void 0),req.removeAllListeners("error");}_onError(error){this._socket&&(this.emit("debug",util.inspect(error,!0,1,!1)),this._write(Buffer.allocUnsafe(0),8));}_onClose(){let socket=this._socket,internal=this._internal;socket&&(socket.removeListener("data",this._onReadable),socket.removeListener("error",this._onError),this.wsBucket.dropQueue(),this.presenceBucket.dropQueue(),this._socket=null,this.emit("ws_close",this._lastCloseCode??1006,this._lastCloseReason??"Abnormal Closure"),this._lastCloseCode=null,this._lastCloseReason=null,internal.zlib&&(internal.zlib.close(),internal.zlib=null),internal.closePromise&&internal.closePromise.resolve(void 0));}_onReadable(){let socket=this._socket;for(;((socket==null?void 0:socket.readableLength)||0)>1;){let length=readRange(socket,1,1)&127,bytes=0;if(length>125){if(bytes=length===126?2:8,socket.readableLength<2+bytes)return;length=readRange(socket,2,bytes);}let frame=socket.read(2+bytes+length);if(!frame)return;let fin=frame[0]>>7,opcode=frame[0]&15;(fin!==1||opcode===0)&&this.emit("debug","discord actually does send messages with fin=0. if you see this error let me know");let payload=frame.subarray(2+bytes);this._processFrame(opcode,payload);}}_processFrame(opcode,message){let internal=this._internal;switch(opcode){case 1:{let packet;this.encoding==="json"?packet=JSON.parse(message.toString()):this.encoding==="other"&&(packet=message),this.emit("ws_receive",packet);break}case 2:{let packet;if(this.compress){let z=internal.zlib,error=null,data=null;z.close=z._handle.close=z._v;try{data=z._processChunk(message,zlib.constants.Z_SYNC_FLUSH);}catch(e){error=e;}let l=message.length;if((message[l-4]!==0||message[l-3]!==0||message[l-2]!==255||message[l-1]!==255)&&this.emit("debug","discord actually does send fragmented zlib messages. If you see this error let me know"),z.close=z._c,z._handle=z._h,z._handle.close=z._hc,z._events.error=void 0,z._eventCount--,z.removeAllListeners("error"),error){this.emit("debug","Zlib error processing chunk"),this._write(Buffer.allocUnsafe(0),8);return}if(!data){this.emit("debug","Data from zlib processing was null. If you see this error let me know");return}this.encoding==="json"?packet=JSON.parse(String(data)):this.encoding==="etf"?packet=readETF(data,1):this.encoding==="other"&&(packet=data);}else this.encoding==="json"?packet=JSON.parse(zlib.inflateSync(message).toString()):this.encoding==="etf"?packet=readETF(message,1):this.encoding==="other"&&(packet=message);this.emit("ws_receive",packet);break}case 8:{this._lastCloseCode=message.length>1?(message[0]<<8)+message[1]:0,this._lastCloseReason=message.length>2?message.subarray(2).toString():"",this._write(Buffer.from([this._lastCloseCode>>8,this._lastCloseCode&255]),8);break}case 9:{this._write(message,10);break}}}};function readRange(socket,index,bytes){let cursor=0,read=0,num=0,readable=socket._readableState,currentBufferIndex=readable.bufferIndex,currentBuffer=readable.buffer.head??readable.buffer[currentBufferIndex];do{let data=currentBuffer.data??currentBuffer;for(let element of data)if(++cursor>index&&(num*=256,num+=element,++read===bytes))return num}while(currentBuffer=currentBuffer.next??readable.buffer[++currentBufferIndex]);throw new Error("readRange failed?")}function readETF(data,start){let view,x=start,loop=()=>{let type=data[x++];switch(type){case 70:{let float=data.readDoubleBE(x);return x+=8,float}case 97:return data[x++];case 98:{let int=data.readInt32BE(x);return x+=4,int}case 100:{let length=data.readUInt16BE(x),atom="";if(length>30)atom=data.latin1Slice(x+=2,x+length);else for(let i=x+=2;i<x+length;i++)atom+=String.fromCharCode(data[i]);return x+=length,atom?atom==="nil"||atom==="null"?null:atom==="true"?!0:atom==="false"?!1:atom:void 0}case 108:case 106:{let array=[];if(type===108){let length=data.readUInt32BE(x);x+=4;for(let i=0;i<length;i++)array.push(loop());x++;}return array}case 107:{let array=[],length=data.readUInt16BE(x);x+=2;for(let i=0;i<length;i++)array.push(data[x++]);return array}case 109:{let length=data.readUInt32BE(x),str="";if(length>30)str=data.utf8Slice(x+=4,x+length);else {let i=x+=4,l=x+length;for(;i<l;){let byte=data[i++];byte<128?str+=String.fromCharCode(byte):byte<224?str+=String.fromCharCode(((byte&31)<<6)+(data[i++]&63)):byte<240?str+=String.fromCharCode(((byte&15)<<12)+((data[i++]&63)<<6)+(data[i++]&63)):str+=String.fromCodePoint(((byte&7)<<18)+((data[i++]&63)<<12)+((data[i++]&63)<<6)+(data[i++]&63));}}return x+=length,str}case 110:{view||(view=new DataView(data.buffer,data.offset,data.byteLength));let length=data[x++],sign=data[x++],left=length,num=BigInt(0);for(;left>0;)left>=8?(num<<=BigInt(64),num+=view.getBigUint64(x+(left-=8),!0)):left>=4?(num<<=BigInt(32),num+=BigInt(view.getUint32(x+(left-=4)),!0)):left>=2?(num<<=BigInt(16),num+=BigInt(view.getUint16(x+(left-=2)),!0)):(num<<=BigInt(8),num+=BigInt(data[x]),left--);return x+=length,(sign?-num:num).toString()}case 116:{let obj={},length=data.readUInt32BE(x);x+=4;for(let i=0;i<length;i++){let key=loop();obj[key]=loop();}return obj}}throw new Error(`Missing etf type: ${type}`)};return loop()}function writeETF(data){let b=Buffer.allocUnsafe(4096);b[0]=131;let i=1,loop=obj=>{switch(typeof obj){case"boolean":{b[i++]=100,obj?(b.writeUInt16BE(4,i),b.latin1Write("true",i+=2),i+=4):(b.writeUInt16BE(5,i),b.latin1Write("false",i+=2),i+=5);break}case"string":{let length=Buffer.byteLength(obj);b[i++]=109,b.writeUInt32BE(length,i),b.utf8Write(obj,i+=4),i+=length;break}case"number":{if(Number.isInteger(obj)){let abs=Math.abs(obj);if(abs<2147483648)b[i++]=98,b.writeInt32BE(obj,i),i+=4;else if(abs<Number.MAX_SAFE_INTEGER){b[i++]=110,b[i++]=8,b[i++]=+(obj<0),b.writeBigUInt64LE(BigInt(abs),i),i+=8;break}else b[i++]=70,b.writeDoubleBE(obj,i),i+=8;}else b[i++]=70,b.writeDoubleBE(obj,i),i+=8;break}case"bigint":{b[i++]=110,b[i++]=8,b[i++]=+(obj<0),b.writeBigUInt64LE(obj,i),i+=8;break}case"object":{if(obj===null)b[i++]=100,b.writeUInt16BE(3,i),b.latin1Write("nil",i+=2),i+=3;else if(Array.isArray(obj)){if(obj.length){b[i++]=108,b.writeUInt32BE(obj.length,i),i+=4;for(let item of obj)loop(item);}b[i++]=106;}else {let entries=Object.entries(obj).filter(x=>typeof x[1]<"u");b[i++]=116,b.writeUInt32BE(entries.length,i),i+=4;for(let[key,value]of entries)loop(key),loop(value);}break}}};return loop(data),Buffer.from(b.subarray(0,i))}module.exports=BetterWs;}});var Intents_exports={};__export(Intents_exports,{all:()=>all,default:()=>Intents_default,flags:()=>flags,non_privileged:()=>non_privileged,privileged:()=>privileged,resolve:()=>resolve});function resolve(bit=0){if(typeof bit=="number"&&bit>=0)return bit;if(typeof bit=="string"&&flags[bit])return flags[bit]|0;if(Array.isArray(bit))return bit.map(p=>resolve(p)).reduce((prev,p)=>prev|p,0);throw new RangeError("BITFIELD_INVALID")}var flags,privileged,all,non_privileged,Intents_default,init_Intents=__esm({"src/Intents.ts"(){flags={GUILDS:1,GUILD_MEMBERS:2,GUILD_MODERATION:4,GUILD_EMOJIS_AND_STICKERS:8,GUILD_INTEGRATIONS:16,GUILD_WEBHOOKS:32,GUILD_INVITES:64,GUILD_VOICE_STATES:128,GUILD_PRESENCES:256,GUILD_MESSAGES:512,GUILD_MESSAGE_REACTIONS:1024,GUILD_MESSAGE_TYPING:2048,DIRECT_MESSAGES:4096,DIRECT_MESSAGE_REACTIONS:8192,DIRECT_MESSAGE_TYPING:16384,MESSAGE_CONTENT:32768,GUILD_SCHEDULED_EVENTS:65536,AUTO_MODERATION_CONFIGURATION:1048576,AUTO_MODERATION_EXECUTION:2097152},privileged=flags.GUILD_MEMBERS|flags.GUILD_PRESENCES|flags.MESSAGE_CONTENT,all=Object.values(flags).reduce((acc,p)=>acc|p,0),non_privileged=all&~privileged;Intents_default={flags,privileged,all,non_privileged,resolve};}});var require_DiscordConnector=__commonJS({"src/DiscordConnector.ts"(exports,module){var import_Constants=__toESM(require_Constants()),BetterWs=require_BetterWs(),Intents2=(init_Intents(),__toCommonJS(Intents_exports)),resumableCodes=[4008,4005,4003,4002,4001,4e3,1006,1001],shouldntAttemptReconnectCodes=[4014,4013,4012,4011,4010,4004],disconnectMessages={4014:"Disallowed Intents, check your client options and application page.",4013:"Invalid Intents data, check your client options.",4012:"Invalid API version.",4011:"Shard would be on over 2500 guilds. Add more shards.",4010:"Invalid sharding data, check your client options.",4009:"Session timed out.",4008:"You are being rate limited. Wait before sending more packets.",4007:"Invalid sequence. Reconnecting and starting a new session.",4005:"You sent more than one OP 2 IDENTIFY payload while the websocket was open.",4004:"Tried to connect with an invalid token.",4003:"You tried to send a packet before sending an OP 2 IDENTIFY or OP 6 RESUME.",4002:"You sent an invalid payload.",4001:"You sent an invalid opcode or invalid payload for an opcode."},connectionError=new Error("WS took too long to connect. Is your internet okay?"),wsStatusTypes=["Whatever 0 is. Report if you see this","connected","connecting","closing","closed"],DiscordConnector=class extends events.EventEmitter{constructor(id,client){super();this.id=id;this.client=client;this.heartbeatTimeout=null;this.heartbeatInterval=0;this._trace=null;this.seq=0;this.status="disconnected";this.sessionId=null;this.lastACKAt=0;this.lastHeartbeatSend=0;this.latency=0;this.resumeAddress=null;this.reconnecting=!1;this._closing=!1;this._closeCalled=!1;this._openToHeartbeatTimeout=null;this._initialHeartbeatTimeout=null;this.options=client.options,this.reconnect=this.options.reconnect??!0,this.identifyAddress=this.options.endpoint,this.betterWs=new BetterWs(this.identifyAddress,this.options.ws),this.betterWs.on("ws_open",()=>{this.status="connecting",this.emit("stateChange","connecting"),this.reconnecting=!1,this._openToHeartbeatTimeout=setTimeout(()=>{this.client.emit("debug",`Shard ${this.id} didn't receive a HELLO after the ws was opened in time`),this._reconnect(!0);},1e4);}),this.betterWs.on("ws_receive",msg=>this.messageAction(msg)),this.betterWs.on("ws_close",(code,reason)=>this.handleWsClose(code,reason)),this.betterWs.on("debug",event=>this.client.emit("error",event)),this.betterWs.on("ws_send",data=>this.client.emit("rawSend",data));}async connect(){return this._closing=!1,this._closeCalled=!1,this.client.emit("debug",`Shard ${this.id} connecting to gateway`),this.betterWs.connect().catch(e=>{e!==connectionError&&setTimeout(()=>{this._closeCalled||this.connect();},5e3);})}async disconnect(){return this._closing=!0,this._closeCalled=!0,this.betterWs.close(1e3,"Disconnected by User")}async messageAction(message){this.client.emit("rawReceive",message);let withShardID=Object.assign(message,{shard_id:this.id});switch(this.client.emit("event",withShardID),withShardID.op){case import_Constants.GATEWAY_OP_CODES.DISPATCH:this.handleDispatch(withShardID);break;case import_Constants.GATEWAY_OP_CODES.HEARTBEAT:this.heartbeat();break;case import_Constants.GATEWAY_OP_CODES.RECONNECT:this.client.emit("debug",`Gateway asked shard ${this.id} to reconnect`),this.reconnect?this._reconnect(!0):this.disconnect();break;case import_Constants.GATEWAY_OP_CODES.INVALID_SESSION:this.client.emit("debug",`Shard ${this.id}'s session was invalidated`),withShardID.d&&this.sessionId?this.resume():(this.seq=0,this.sessionId="",this.emit("queueIdentify",this.id));break;case import_Constants.GATEWAY_OP_CODES.HELLO:this._openToHeartbeatTimeout&&clearTimeout(this._openToHeartbeatTimeout),this.client.emit("debug",`Shard ${this.id} received HELLO`),this.lastACKAt=Date.now(),this.heartbeatInterval=withShardID.d.heartbeat_interval,this._initialHeartbeatTimeout=setTimeout(()=>this.heartbeat(),this.heartbeatInterval*Math.random()),this._trace=withShardID.d._trace,this._onHello();break;case import_Constants.GATEWAY_OP_CODES.HEARTBEAT_ACK:this.lastACKAt=Date.now(),this.latency=this.lastACKAt-this.lastHeartbeatSend;break;}}async _reconnect(resume=!1){var _a,_b;(_b=(_a=this.betterWs._internal).openRejector)==null||_b.call(_a,connectionError),this.reconnecting=resume,await this.betterWs.close(resume?4e3:1012,"reconnecting"),resume?(this.clearHeartBeat(),this.resumeAddress?this.betterWs.address=this.resumeAddress:this.betterWs.address=this.identifyAddress):(this.reset(),this.betterWs.address=this.identifyAddress),this.connect();}reset(){this.sessionId=null,this.seq=0,this.lastACKAt=0,this._trace=null,this.clearHeartBeat();}setHeartBeat(){this.heartbeatTimeout=setInterval(()=>{this.lastACKAt<=Date.now()-(this.heartbeatInterval+5e3)?(this.client.emit("debug",`Shard ${this.id} has not received a heartbeat ACK in ${this.heartbeatInterval+5e3}ms.`),this.reconnect?this._reconnect(!0):this.disconnect()):this.heartbeat();},this.heartbeatInterval);}clearHeartBeat(){this.heartbeatTimeout&&clearInterval(this.heartbeatTimeout),this._initialHeartbeatTimeout&&clearTimeout(this._initialHeartbeatTimeout),this.heartbeatTimeout=null,this._initialHeartbeatTimeout=null,this.heartbeatInterval=0;}_onHello(){if(this.sessionId)return void this.resume();this.emit("queueIdentify",this.id);}async identify(){if(this.betterWs.status!==1)return this.client.emit("error",`Shard ${this.id} was attempting to identify when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`),this._reconnect(!0);this.client.emit("debug",`Shard ${this.id} is identifying`),this.status="identifying",this.emit("stateChange","identifying");let data={op:import_Constants.GATEWAY_OP_CODES.IDENTIFY,d:{token:this.options.token,properties:{os:process.platform,browser:"CloudStorm",device:"CloudStorm"},large_threshold:this.options.largeGuildThreshold,shard:[this.id,this.options.totalShards??1],intents:this.options.intents?Intents2.resolve(this.options.intents):0}};return this.options.initialPresence&&(data.d.presence=this._checkPresenceData(this.options.initialPresence)),this.betterWs.sendMessage(data)}async resume(){return this.betterWs.status!==1?(this.client.emit("error",`Shard ${this.id} was attempting to resume when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`),this._reconnect(!0)):(this.client.emit("debug",`Shard ${this.id} is resuming`),this.status="resuming",this.emit("stateChange","resuming"),this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.RESUME,d:{seq:this.seq,token:this.options.token,session_id:this.sessionId}}))}heartbeat(){if(this.betterWs.status!==1)return this.client.emit("error",`Shard ${this.id} was attempting to heartbeat when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`),void this._reconnect(!0);this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.HEARTBEAT,d:this.seq===0?null:this.seq}),this.lastHeartbeatSend=Date.now(),this._initialHeartbeatTimeout&&(clearTimeout(this._initialHeartbeatTimeout),this._initialHeartbeatTimeout=null),this.heartbeatTimeout||this.setHeartBeat();}handleDispatch(message){var _a,_b;switch(this.client.emit("dispatch",message),message.s&&(message.s>this.seq+1&&(this.client.emit("debug",`Shard ${this.id} invalid sequence: { current: ${this.seq} message: ${message.s} }`),this.seq=message.s,this.resume()),this.seq=message.s),message.t){case"READY":case"RESUMED":message.t==="READY"&&(message.d.resume_gateway_url&&(this.resumeAddress=`${message.d.resume_gateway_url}?v=${import_Constants.GATEWAY_VERSION}&encoding=${((_a=this.options.ws)==null?void 0:_a.encoding)==="etf"?"etf":"json"}${(_b=this.options.ws)!=null&&_b.compress?"&compress=zlib-stream":""}`),this.sessionId=message.d.session_id),this.status="ready",this.emit("stateChange","ready"),this._trace=message.d._trace,this.emit("ready",message.t==="RESUMED");break;}}handleWsClose(code,reason){let gracefulClose=!1;this.status="disconnected",this.emit("stateChange","disconnected"),this.clearHeartBeat();let isManualClose=code===1e3&&this._closing,message=disconnectMessages[code],isRecoverable=resumableCodes.includes(code),shouldntReconnect=shouldntAttemptReconnectCodes.includes(code)||isManualClose;isRecoverable&&this.resumeAddress?this.betterWs.address=this.resumeAddress:this.betterWs.address=this.identifyAddress,message&&this.client.emit("error",message),(isManualClose||this.reconnecting)&&(gracefulClose=!0),this._closing=!1,this.emit("disconnect",code,reason,gracefulClose),!shouldntReconnect&&this.reconnect&&this.connect();}async presenceUpdate(data){return this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.PRESENCE_UPDATE,d:this._checkPresenceData(data)})}async voiceStateUpdate(data){return data?this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.VOICE_STATE_UPDATE,d:this._checkVoiceStateUpdateData(data)}):Promise.resolve()}async requestGuildMembers(data){return this.betterWs.sendMessage({op:import_Constants.GATEWAY_OP_CODES.REQUEST_GUILD_MEMBERS,d:this._checkRequestGuildMembersData(data)})}_checkPresenceData(data){if(data.status=data.status??v10.PresenceUpdateStatus.Online,data.activities=data.activities&&Array.isArray(data.activities)?data.activities:[],data.activities)for(let activity of data.activities){let index=data.activities.indexOf(activity);activity.type===void 0&&(activity.type=activity.url?1:0),activity.name||(activity.state&&activity.type===4?activity.name="Custom Status":data.activities.splice(index,1));}return data.afk=data.afk??!1,data.since=data.since??Date.now(),data}_checkVoiceStateUpdateData(data){return data.channel_id=data.channel_id??null,data.self_mute=data.self_mute??!1,data.self_deaf=data.self_deaf??!1,data}_checkRequestGuildMembersData(data){let withQuery=data,withUserIDs=data;return !withQuery.query&&!withUserIDs.user_ids&&(withQuery.query=""),withQuery.query&&withUserIDs.user_ids&&delete data.query,data.limit=data.limit??10,data}};module.exports=DiscordConnector;}});var require_Shard=__commonJS({"src/Shard.ts"(exports,module){var DC=require_DiscordConnector(),Shard=class extends events.EventEmitter{constructor(id,client){super();this.id=id;this.client=client;this.ready=!1;this.connector=new DC(id,client),this.connector.on("disconnect",(...args)=>{this.ready=!1,this.emit("disconnect",...args);}),this.connector.on("ready",resume=>this.emit("ready",resume)),this.connector.on("queueIdentify",()=>this.emit("queueIdentify",this.id));}get latency(){return this.connector.latency}connect(){this.connector.connect();}disconnect(){return this.connector.disconnect()}presenceUpdate(data){return this.connector.presenceUpdate(data)}voiceStateUpdate(data){return this.connector.voiceStateUpdate(data)}requestGuildMembers(data){return this.connector.requestGuildMembers(data)}};module.exports=Shard;}});var require_ShardManager=__commonJS({"src/ShardManager.ts"(exports,module){var Shard=require_Shard(),ShardManager=class{constructor(client){this.client=client;this.shards={};this.identifyBucket=new snowtransfer.LocalBucket(1e3,1e3*60*60*24);this.concurrencyBucket=null;this.options=client.options;}spawn(){if(!this.concurrencyBucket)throw new Error("Trying to spawn shards without calling Client.connect()");for(let id of this.options.shards==="auto"?Array(this.options.totalShards).fill(0).map((_,index)=>index):this.options.shards??[0])this.client.emit("debug",`Spawned shard ${id}`),this.shards[id]=new Shard(id,this.client),this._addListener(this.shards[id]),this.shards[id].connector.connect();}disconnect(){for(let shardKey in this.shards)this.shards[shardKey].disconnect();}_addListener(shard){shard.on("ready",resume=>{shard.ready=!0,this.client.emit("debug",`Shard ${shard.id} ${resume?"has resumed":"is ready"}`),this.client.emit("shardReady",{id:shard.id,ready:!resume}),this._checkReady();}),shard.on("queueIdentify",shardId=>{var _a;if(!this.shards[shardId])return this.client.emit("debug",`Received a queueIdentify event for shard ${shardId} but it does not exist. Was it removed?`);if(this.client.emit("debug",`Shard ${shardId} is ready to identify`),shard.connector.reconnecting)return shard.connector.resume();(_a=this.concurrencyBucket)==null||_a.queue(()=>{this.identifyBucket.queue(()=>this.shards[shardId].connector.identify());});}),shard.on("disconnect",(code,reason,gracefulClose)=>{if(this.client.emit("debug",`Websocket of shard ${shard.id} closed with code ${code} and reason: ${reason??"None"}`),code===1e3&&gracefulClose)return this._checkDisconnect()});}_checkReady(){for(let shardId in this.shards)if(this.shards[shardId]&&!this.shards[shardId].ready)return;this.client.emit("ready");}_checkDisconnect(){for(let shardId in this.shards)if(this.shards[shardId]&&this.shards[shardId].connector.status!=="disconnected")return;this.client.emit("disconnected");}async presenceUpdate(data){for(let shardKey in this.shards)if(this.shards[shardKey]){let shard=this.shards[shardKey];this.shardPresenceUpdate(shard.id,data);}}shardPresenceUpdate(shardId,data){return new Promise((res,rej)=>{let shard=this.shards[shardId];shard||rej(new Error(`Shard ${shardId} does not exist`)),shard.ready&&shard.presenceUpdate(data).then(result=>res(result)).catch(e=>rej(e));})}voiceStateUpdate(shardId,data){return new Promise((res,rej)=>{let shard=this.shards[shardId];shard||rej(new Error(`Shard ${shardId} does not exist`)),shard.ready&&shard.voiceStateUpdate(data).then(result=>res(result)).catch(e=>rej(e));})}requestGuildMembers(shardId,data){return new Promise((res,rej)=>{let shard=this.shards[shardId];shard||rej(new Error(`Shard ${shardId} does not exist`)),shard.ready&&shard.requestGuildMembers(data).then(result=>res(result)).catch(e=>rej(e));})}};module.exports=ShardManager;}});var require_Client=__commonJS({"src/Client.ts"(exports,module){var fs=__require("fs"),path=__require("path"),version=JSON.parse(fs.readFileSync(path.join(__dirname,"../package.json"),{encoding:"utf8"})).version,Constants2=require_Constants(),ShardManager=require_ShardManager(),Client=class extends events.EventEmitter{constructor(token,options={}){super();this.version=version;if(!token)throw new Error("Missing token!");this.options={largeGuildThreshold:250,shards:"auto",reconnect:!0,intents:0,token:"",ws:{compress:!0,encoding:"json"}},this._restClient=options.snowtransferInstance?options.snowtransferInstance:new snowtransfer.SnowTransfer(token),delete options.snowtransferInstance,this.token=token.startsWith("Bot ")?token.substring(4):token,Object.assign(this.options,options),this.options.token=token,this.shardManager=new ShardManager(this);}async connect(){let initial=await this.fetchConnectInfo();this.options.shards==="auto"&&(this.options.totalShards=initial),this.shardManager.spawn();}async fetchConnectInfo(){var _a;let gateway=await this.getGatewayBot();this._updateEndpoint(gateway.url);let oldQueueConcurrency=[],oldQueueIdentify=[];(_a=this.shardManager.concurrencyBucket)!=null&&_a.fnQueue.length&&(oldQueueConcurrency.push(...this.shardManager.concurrencyBucket.fnQueue),this.shardManager.concurrencyBucket.dropQueue()),this.shardManager.identifyBucket.fnQueue.length&&oldQueueIdentify.push(...this.shardManager.identifyBucket.fnQueue),this.shardManager.identifyBucket.dropQueue(),this.shardManager.concurrencyBucket=new snowtransfer.LocalBucket(gateway.session_start_limit.max_concurrency,5e3),this.shardManager.identifyBucket.remaining=gateway.session_start_limit.remaining,this.shardManager.identifyBucket.reset=gateway.session_start_limit.reset_after;for(let fn of oldQueueConcurrency)this.shardManager.concurrencyBucket.queue(fn);for(let fn of oldQueueIdentify)this.shardManager.identifyBucket.queue(fn);return gateway.shards}async getGateway(){return (await this._restClient.bot.getGateway()).url}async getGatewayBot(){return this._restClient.bot.getGatewayBot()}disconnect(){return this.shardManager.disconnect()}async presenceUpdate(data){return this.shardManager.presenceUpdate(data)}shardPresenceUpdate(shardId,data){return this.shardManager.shardPresenceUpdate(shardId,data)}voiceStateUpdate(shardId,data){return this.shardManager.voiceStateUpdate(shardId,data)}requestGuildMembers(shardId,data){if(!data.guild_id)throw new Error("You need to pass a guild_id");return this.shardManager.requestGuildMembers(shardId,data)}_updateEndpoint(gatewayUrl){var _a,_b;this.options.endpoint=`${gatewayUrl}?v=${Constants2.GATEWAY_VERSION}&encoding=${((_a=this.options.ws)==null?void 0:_a.encoding)==="etf"?"etf":"json"}${(_b=this.options.ws)!=null&&_b.compress?"&compress=zlib-stream":""}`;}};module.exports=Client;}});var Client2=require_Client(),Constants=require_Constants(),Intents=(init_Intents(),__toCommonJS(Intents_exports)),Shard2=require_Shard(),ShardManager2=require_ShardManager(),BetterWs2=require_BetterWs();
10
10
 
11
11
  exports.BetterWs = BetterWs2;
12
12
  exports.Client = Client2;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Constants.ts","../src/BetterWs.ts","../src/Intents.ts","../src/DiscordConnector.ts","../src/Shard.ts","../src/ShardManager.ts","../src/Client.ts","../src/index.ts"],"names":["Constants","EventEmitter","LocalBucket","randomBytes","resolve","createHash","createInflate","constants","inflateSync","Intents","OP","PresenceUpdateStatus","SnowTransfer"],"mappings":"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","file":"index.js","sourcesContent":["\"use strict\";\r\n\r\nconst Constants = {\r\n\tGATEWAY_OP_CODES: {\r\n\r\n\r\n\r\n\t\tDISPATCH: 0 as const,\r\n\r\n\r\n\r\n\t\tHEARTBEAT: 1 as const,\r\n\r\n\r\n\r\n\t\tIDENTIFY: 2 as const,\r\n\r\n\r\n\r\n\t\tPRESENCE_UPDATE: 3 as const,\r\n\r\n\r\n\r\n\t\tVOICE_STATE_UPDATE: 4 as const,\r\n\r\n\r\n\r\n\t\tRESUME: 6 as const,\r\n\r\n\r\n\r\n\t\tRECONNECT: 7 as const,\r\n\r\n\r\n\r\n\t\tREQUEST_GUILD_MEMBERS: 8 as const,\r\n\r\n\r\n\r\n\t\tINVALID_SESSION: 9 as const,\r\n\r\n\r\n\r\n\t\tHELLO: 10 as const,\r\n\r\n\r\n\r\n\t\tHEARTBEAT_ACK: 11 as const\r\n\t},\r\n\tGATEWAY_VERSION: 10 as const\r\n};\r\n\r\nexport = Constants;\r\n","\"use strict\";\r\n\r\n\r\n\r\n\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport { randomBytes, createHash } from \"crypto\";\r\nimport { createInflate, inflateSync, constants } from \"zlib\";\r\nimport https = require(\"https\");\r\nimport http = require(\"http\");\r\nimport util = require(\"util\");\r\nimport { GATEWAY_OP_CODES } from \"./Constants\";\r\n\r\nimport { LocalBucket } from \"snowtransfer\";\r\n\r\nimport type { Socket } from \"net\";\r\n\r\ninterface BWSEvents {\r\n\tws_open: [];\r\n\tws_close: [number, string];\r\n\tws_receive: [any];\r\n\tws_send: [any];\r\n\tdebug: [string];\r\n}\r\n\r\ninterface BetterWs {\r\n\taddListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\temit<E extends keyof BWSEvents>(event: E, ...args: BWSEvents[E]): boolean;\r\n\teventNames(): Array<keyof BWSEvents>;\r\n\tlistenerCount(event: keyof BWSEvents): number;\r\n\tlisteners(event: keyof BWSEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\ton<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\tonce<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\tprependListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\trawListeners(event: keyof BWSEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof BWSEvents): this;\r\n\tremoveListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n}\r\n\r\n\r\n\r\n\r\nclass BetterWs extends EventEmitter {\r\n\r\n\tpublic encoding: \"etf\" | \"json\" | \"other\";\r\n\r\n\tpublic compress: boolean;\r\n\r\n\tpublic wsBucket = new LocalBucket(120, 60000);\r\n\r\n\tpublic presenceBucket = new LocalBucket(5, 60000);\r\n\r\n\r\n\tprivate _socket: Socket | null = null;\r\n\r\n\tpublic _internal: {\r\n\t\topenRejector: ((reason?: any) => void) | null;\r\n\r\n\t\tclosePromise: Promise<void> | null;\r\n\r\n\t\tzlib: import(\"zlib\").Inflate | null;\r\n\t} = {\r\n\t\t\topenRejector: null,\r\n\t\t\tclosePromise: null,\r\n\t\t\tzlib: null\r\n\t\t};\r\n\r\n\tprivate _connecting = false;\r\n\r\n\tprivate _lastCloseCode: number | null = null;\r\n\r\n\tprivate _lastCloseReason: string | null = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public address: string, public options: Omit<import(\"./Types\").IClientWSOptions, \"encoding\"> & { encoding?: import(\"./Types\").IClientWSOptions[\"encoding\"] | \"other\" }) {\r\n\t\tsuper();\r\n\r\n\t\tthis.encoding = options.encoding ?? \"other\";\r\n\t\tthis.compress = options.compress ?? false;\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic get status(): 1 | 2 | 3 | 4 {\r\n\t\tconst internal = this._internal;\r\n\t\tif (this._connecting) return 2;\r\n\t\tif (internal.closePromise) return 3;\r\n\t\tif (!this._socket) return 4;\r\n\t\treturn 1;\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic connect(): Promise<void> {\r\n\t\tif (this._socket || this._connecting) return Promise.resolve(void 0);\r\n\t\tthis._connecting = true;\r\n\t\tconst key = randomBytes(16).toString(\"base64\");\r\n\t\tconst url = new URL(this.address);\r\n\t\tconst useHTTPS = (url.protocol === \"https:\" || url.protocol === \"wss:\") || url.port === \"443\";\r\n\t\tconst port = url.port || (useHTTPS ? \"443\" : \"80\");\r\n\t\tconst req = (useHTTPS ? https : http).request({\r\n\t\t\thostname: url.hostname,\r\n\t\t\tpath: `${url.pathname}${url.search}`,\r\n\t\t\tport: port,\r\n\t\t\theaders: {\r\n\t\t\t\t\"Connection\": \"Upgrade\",\r\n\t\t\t\t\"Upgrade\": \"websocket\",\r\n\t\t\t\t\"Sec-WebSocket-Key\": key,\r\n\t\t\t\t\"Sec-WebSocket-Version\": \"13\",\r\n\t\t\t\t...this.options.headers\r\n\t\t\t}\r\n\t\t});\r\n\t\tlet onErrorRef: ((e: Error) => void) | undefined;\r\n\t\tlet cameFromOnError = false;\r\n\t\treturn new Promise<void>((resolve, reject) => {\r\n\t\t\tthis._internal.openRejector = reject;\r\n\t\t\tconst upgrade = this._onUpgrade.bind(this, key, req, resolve, reject);\r\n\t\t\tonErrorRef = e => {\r\n\t\t\t\tthis._internal.openRejector = null;\r\n\t\t\t\tcameFromOnError = true;\r\n\t\t\t\tthis._connecting = false;\r\n\t\t\t\treq.removeListener(\"upgrade\", upgrade);\r\n\t\t\t\treject(e);\r\n\t\t\t};\r\n\t\t\treq.once(\"upgrade\", upgrade);\r\n\t\t\treq.once(\"error\", onErrorRef);\r\n\t\t\treq.end();\r\n\t\t}).catch(reason => {\r\n\t\t\tif (onErrorRef && !cameFromOnError) {\r\n\t\t\t\treq.destroy();\r\n\t\t\t\treq.removeListener(\"error\", onErrorRef);\r\n\t\t\t\tonErrorRef(reason);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject(reason as Error);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async close(code: number, reason?: string): Promise<void> {\r\n\t\tconst internal = this._internal;\r\n\t\tif (internal.closePromise) return internal.closePromise;\r\n\t\tif (!this._socket) return Promise.resolve(void 0);\r\n\t\tlet resolver: ((value: unknown) => void) | undefined;\r\n\t\tconst promise = new Promise(resolve => {\r\n\t\t\tresolver = resolve;\r\n\t\t\tconst from = Buffer.from([code >> 8, code & 255]);\r\n\t\t\tthis._write(reason ? Buffer.concat([from, Buffer.from(reason)]) : from, 8);\r\n\t\t}).then(() => {\r\n\t\t\tinternal.closePromise = null;\r\n\t\t});\r\n\r\n\t\tpromise.resolve = resolver;\r\n\t\tinternal.closePromise = promise;\r\n\t\treturn promise;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic sendMessage(data: any): Promise<void> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst presence = data?.op === GATEWAY_OP_CODES.PRESENCE_UPDATE;\r\n\t\t\tconst sendMsg = () => {\r\n\t\t\t\tconst fn = () => {\r\n\t\t\t\t\tthis.emit(\"ws_send\", data);\r\n\t\t\t\t\tif (this.encoding === \"json\") this._write(Buffer.from(JSON.stringify(data)), 1);\r\n\t\t\t\t\telse if (this.encoding === \"etf\") this._write(writeETF(data), 2);\r\n\t\t\t\t\telse if (this.encoding === \"other\") this._write(Buffer.from(data), 2);\r\n\t\t\t\t\tres(void 0);\r\n\t\t\t\t};\r\n\t\t\t\tif (this.options.bypassBuckets) fn();\r\n\t\t\t\telse this.wsBucket.queue(fn);\r\n\t\t\t};\r\n\t\t\tif (presence && !this.options.bypassBuckets) this.presenceBucket.queue(sendMsg);\r\n\t\t\telse sendMsg();\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _write(packet: Buffer, opcode: number): void {\r\n\t\tconst socket = this._socket;\r\n\t\tif (!socket?.writable) return;\r\n\t\tconst length = packet.length;\r\n\t\tlet frame: Buffer | undefined;\r\n\t\tif (length < 126) {\r\n\t\t\tframe = Buffer.allocUnsafe(6 + length);\r\n\t\t\tframe[1] = 128 + length;\r\n\t\t} else if (length < (1 << 16)) {\r\n\t\t\tframe = Buffer.allocUnsafe(8 + length);\r\n\t\t\tframe[1] = 254;\r\n\t\t\tframe[2] = length >> 8;\r\n\t\t\tframe[3] = length & 255;\r\n\t\t} else {\r\n\t\t\tframe = Buffer.allocUnsafe(14 + length);\r\n\t\t\tframe[1] = 255;\r\n\t\t\tframe.writeBigUInt64BE(BigInt(length), 2);\r\n\t\t}\r\n\t\tframe[0] = 128 + opcode;\r\n\t\tframe.writeUInt32BE(0, frame.length - length - 4);\r\n\t\tframe.set(packet, frame.length - length);\r\n\t\tsocket.write(frame);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _onUpgrade(key: string, req: http.ClientRequest, resolve: (value: void | PromiseLike<void>) => void, reject: (reason?: any) => void, res: http.IncomingMessage, socket: Socket): void {\r\n\t\tthis._internal.openRejector = null;\r\n\t\tconst hash = createHash(\"sha1\").update(key + \"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\").digest(\"base64\");\r\n\t\tconst accept = res.headers[\"sec-websocket-accept\"];\r\n\t\tif (hash !== accept) {\r\n\t\t\tsocket.end(() => {\r\n\t\t\t\tthis.emit(\"debug\", \"Failed websocket-key validation\");\r\n\t\t\t\tthis._connecting = false;\r\n\t\t\t\treject(new Error(`Invalid Sec-Websocket-Accept | expected: ${hash} | received: ${accept}`));\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsocket.once(\"error\", this._onError.bind(this));\r\n\t\tsocket.once(\"close\", this._onClose.bind(this));\r\n\t\tsocket.on(\"readable\", this._onReadable.bind(this));\r\n\t\tthis._socket = socket;\r\n\t\tthis._connecting = false;\r\n\t\tif (this.compress) {\r\n\t\t\tconst z = createInflate();\r\n\r\n\t\t\tz._c = z.close; z._h = z._handle; z._hc = z._handle.close; z._v = () => void 0;\r\n\t\t\tthis._internal.zlib = z;\r\n\t\t}\r\n\t\tthis.emit(\"ws_open\");\r\n\t\tresolve(void 0);\r\n\t\treq.removeAllListeners(\"error\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _onError(error: Error): void {\r\n\t\tif (!this._socket) return;\r\n\t\tthis.emit(\"debug\", util.inspect(error, true, 1, false));\r\n\t\tthis._write(Buffer.allocUnsafe(0), 8);\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate _onClose(): void {\r\n\t\tconst socket = this._socket;\r\n\t\tconst internal = this._internal;\r\n\t\tif (!socket) return;\r\n\t\tsocket.removeListener(\"data\", this._onReadable);\r\n\t\tsocket.removeListener(\"error\", this._onError);\r\n\t\tthis.wsBucket.dropQueue();\r\n\t\tthis.presenceBucket.dropQueue();\r\n\t\tthis._socket = null;\r\n\t\tthis.emit(\"ws_close\", this._lastCloseCode ?? 1006, this._lastCloseReason ?? \"Abnormal Closure\");\r\n\t\tthis._lastCloseCode = null;\r\n\t\tthis._lastCloseReason = null;\r\n\t\tif (internal.zlib) {\r\n\t\t\tinternal.zlib.close();\r\n\t\t\tinternal.zlib = null;\r\n\t\t}\r\n\r\n\t\tif (internal.closePromise) internal.closePromise.resolve(void 0);\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate _onReadable(): void {\r\n\t\tconst socket = this._socket;\r\n\t\twhile((socket?.readableLength || 0) > 1) {\r\n\t\t\tlet length = readRange(socket!, 1, 1) & 127;\r\n\t\t\tlet bytes = 0;\r\n\t\t\tif (length > 125) {\r\n\t\t\t\tbytes = length === 126 ? 2 : 8;\r\n\t\t\t\tif (socket!.readableLength < 2 + bytes) return;\r\n\t\t\t\tlength = readRange(socket!, 2, bytes);\r\n\t\t\t}\r\n\t\t\tconst frame = socket!.read(2 + bytes + length) as Buffer;\r\n\t\t\tif (!frame) return;\r\n\t\t\tconst fin = frame[0] >> 7;\r\n\t\t\tconst opcode = frame[0] & 15;\r\n\t\t\tif (fin !== 1 || opcode === 0) this.emit(\"debug\", \"discord actually does send messages with fin=0. if you see this error let me know\");\r\n\t\t\tconst payload = frame.subarray(2 + bytes);\r\n\t\t\tthis._processFrame(opcode, payload);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _processFrame(opcode: number, message: Buffer): void {\r\n\t\tconst internal = this._internal;\r\n\t\tswitch (opcode) {\r\n\t\tcase 1: {\r\n\t\t\tlet packet: any;\r\n\t\t\tif (this.encoding === \"json\") packet = JSON.parse(message.toString());\r\n\t\t\telse if (this.encoding === \"other\") packet = message;\r\n\t\t\tthis.emit(\"ws_receive\", packet);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase 2: {\r\n\t\t\tlet packet;\r\n\t\t\tif (this.compress) {\r\n\t\t\t\tconst z = internal.zlib;\r\n\t\t\t\tlet error = null;\r\n\t\t\t\tlet data = null;\r\n\r\n\t\t\t\tz.close = z._handle.close = z._v;\r\n\t\t\t\ttry {\r\n\r\n\t\t\t\t\tdata = z._processChunk(message, constants.Z_SYNC_FLUSH);\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\terror = e;\r\n\t\t\t\t}\r\n\t\t\t\tconst l = message.length;\r\n\t\t\t\tif (message[l - 4] !== 0 || message[l - 3] !== 0 || message[l - 2] !== 255 || message[l - 1] !== 255) this.emit(\"debug\", \"discord actually does send fragmented zlib messages. If you see this error let me know\");\r\n\r\n\t\t\t\tz.close = z._c;\r\n\r\n\t\t\t\tz._handle = z._h;\r\n\r\n\t\t\t\tz._handle.close = z._hc;\r\n\r\n\t\t\t\tz._events.error = void 0;\r\n\r\n\t\t\t\tz._eventCount--;\r\n\t\t\t\tz!.removeAllListeners(\"error\");\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\tthis.emit(\"debug\", \"Zlib error processing chunk\");\r\n\t\t\t\t\tthis._write(Buffer.allocUnsafe(0), 8);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (!data) {\r\n\t\t\t\t\tthis.emit(\"debug\", \"Data from zlib processing was null. If you see this error let me know\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.encoding === \"json\") packet = JSON.parse(String(data));\r\n\t\t\t\telse if (this.encoding === \"etf\") packet = readETF(data, 1);\r\n\t\t\t\telse if (this.encoding === \"other\") packet = data;\r\n\t\t\t} else if (this.encoding === \"json\") packet = JSON.parse(inflateSync(message).toString());\r\n\t\t\telse if (this.encoding === \"etf\") packet = readETF(message, 1);\r\n\t\t\telse if (this.encoding === \"other\") packet = message;\r\n\t\t\tthis.emit(\"ws_receive\", packet);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase 8: {\r\n\t\t\tthis._lastCloseCode = message.length > 1 ? (message[0] << 8) + message[1] : 0;\r\n\t\t\tthis._lastCloseReason = message.length > 2 ? message.subarray(2).toString() : \"\";\r\n\t\t\tthis._write(Buffer.from([this._lastCloseCode >> 8, this._lastCloseCode & 255]), 8);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase 9: {\r\n\t\t\tthis._write(message, 10);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction readRange(socket: import(\"net\").Socket, index: number, bytes: number): number {\r\n\tlet cursor = 0;\r\n\tlet read = 0;\r\n\tlet num = 0;\r\n\r\n\r\n\tconst readable = socket._readableState;\r\n\tlet currentBufferIndex = readable.bufferIndex;\r\n\tlet currentBuffer = readable.buffer.head ?? readable.buffer[currentBufferIndex];\r\n\r\n\tdo {\r\n\t\tconst data = currentBuffer.data ?? currentBuffer;\r\n\t\tfor (const element of data) {\r\n\t\t\tif (++cursor > index) {\r\n\t\t\t\tnum *= 256;\r\n\t\t\t\tnum += element;\r\n\t\t\t\tif (++read === bytes) return num;\r\n\t\t\t}\r\n\t\t}\r\n\t} while((currentBuffer = (currentBuffer.next ?? readable.buffer[++currentBufferIndex])));\r\n\tthrow new Error(\"readRange failed?\");\r\n}\r\n\r\nfunction readETF(data: Buffer, start: number): Record<any, any> | null | undefined {\r\n\tlet view: DataView | undefined;\r\n\tlet x = start;\r\n\tconst loop = () => {\r\n\t\tconst type = data[x++];\r\n\t\tswitch(type) {\r\n\t\tcase 70: {\r\n\t\t\tconst float = data.readDoubleBE(x);\r\n\t\t\tx += 8;\r\n\t\t\treturn float;\r\n\t\t}\r\n\t\tcase 97: {\r\n\t\t\treturn data[x++];\r\n\t\t}\r\n\t\tcase 98: {\r\n\t\t\tconst int = data.readInt32BE(x);\r\n\t\t\tx += 4;\r\n\t\t\treturn int;\r\n\t\t}\r\n\t\tcase 100: {\r\n\t\t\tconst length = data.readUInt16BE(x);\r\n\t\t\tlet atom = \"\";\r\n\t\t\tif (length > 30) {\r\n\r\n\t\t\t\tatom = data.latin1Slice(x += 2, x + length);\r\n\t\t\t} else {\r\n\t\t\t\tfor (let i = x += 2; i < x + length; i++) {\r\n\t\t\t\t\tatom += String.fromCharCode(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tx += length;\r\n\t\t\tif (!atom) return undefined;\r\n\t\t\tif (atom === \"nil\" || atom === \"null\") return null;\r\n\t\t\tif (atom === \"true\") return true;\r\n\t\t\tif (atom === \"false\") return false;\r\n\t\t\treturn atom;\r\n\t\t}\r\n\t\tcase 108: case 106: {\r\n\t\t\tconst array = [] as Array<any>;\r\n\t\t\tif (type === 108) {\r\n\t\t\t\tconst length = data.readUInt32BE(x);\r\n\t\t\t\tx += 4;\r\n\t\t\t\tfor (let i = 0; i < length; i++) {\r\n\t\t\t\t\tarray.push(loop());\r\n\t\t\t\t}\r\n\t\t\t\tx++;\r\n\t\t\t}\r\n\t\t\treturn array;\r\n\t\t}\r\n\t\tcase 107: {\r\n\t\t\tconst array = [] as Array<number>;\r\n\t\t\tconst length = data.readUInt16BE(x);\r\n\t\t\tx += 2;\r\n\t\t\tfor (let i = 0; i < length; i++) {\r\n\t\t\t\tarray.push(data[x++]);\r\n\t\t\t}\r\n\t\t\treturn array;\r\n\t\t}\r\n\t\tcase 109: {\r\n\t\t\tconst length = data.readUInt32BE(x);\r\n\t\t\tlet str = \"\";\r\n\t\t\tif (length > 30) {\r\n\r\n\t\t\t\tstr = data.utf8Slice(x += 4, x + length);\r\n\t\t\t} else {\r\n\t\t\t\tlet i = x += 4;\r\n\t\t\t\tconst l = x + length;\r\n\t\t\t\twhile(i < l) {\r\n\t\t\t\t\tconst byte = data[i++];\r\n\t\t\t\t\tif (byte < 128) str += String.fromCharCode(byte);\r\n\t\t\t\t\telse if (byte < 224) str += String.fromCharCode(((byte & 31) << 6) + (data[i++] & 63));\r\n\t\t\t\t\telse if (byte < 240) str += String.fromCharCode(((byte & 15) << 12) + ((data[i++] & 63) << 6) + (data[i++] & 63));\r\n\t\t\t\t\telse str += String.fromCodePoint(((byte & 7) << 18) + ((data[i++] & 63) << 12) + ((data[i++] & 63) << 6) + (data[i++] & 63));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tx += length;\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tcase 110: {\r\n\r\n\t\t\tif (!view) view = new DataView(data.buffer, data.offset, data.byteLength);\r\n\t\t\tconst length = data[x++];\r\n\t\t\tconst sign = data[x++];\r\n\t\t\tlet left = length;\r\n\t\t\tlet num = BigInt(0);\r\n\t\t\twhile(left > 0) {\r\n\t\t\t\tif (left >= 8) {\r\n\t\t\t\t\tnum <<= BigInt(64);\r\n\t\t\t\t\tnum += view.getBigUint64(x + (left -= 8), true);\r\n\t\t\t\t} else if (left >= 4) {\r\n\t\t\t\t\tnum <<= BigInt(32);\r\n\r\n\t\t\t\t\tnum += BigInt(view.getUint32(x + (left -= 4)), true);\r\n\t\t\t\t} else if (left >= 2) {\r\n\t\t\t\t\tnum <<= BigInt(16);\r\n\r\n\t\t\t\t\tnum += BigInt(view.getUint16(x + (left -= 2)), true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnum <<= BigInt(8);\r\n\t\t\t\t\tnum += BigInt(data[x]);\r\n\t\t\t\t\tleft--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tx += length;\r\n\t\t\treturn (sign ? -num : num).toString();\r\n\t\t}\r\n\t\tcase 116: {\r\n\t\t\tconst obj = {};\r\n\t\t\tconst length = data.readUInt32BE(x);\r\n\t\t\tx += 4;\r\n\t\t\tfor(let i = 0; i < length; i++) {\r\n\t\t\t\tconst key = loop();\r\n\r\n\t\t\t\tobj[key] = loop();\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t}\r\n\t\t}\r\n\t\tthrow new Error(`Missing etf type: ${type}`);\r\n\t};\r\n\treturn loop();\r\n}\r\n\r\nfunction writeETF(data: any): Buffer {\r\n\tconst b = Buffer.allocUnsafe(1 << 12);\r\n\tb[0] = 131;\r\n\tlet i = 1;\r\n\tconst loop = (obj: any) => {\r\n\t\tconst type = typeof obj;\r\n\t\tswitch(type) {\r\n\t\tcase \"boolean\": {\r\n\t\t\tb[i++] = 100;\r\n\t\t\tif (obj) {\r\n\t\t\t\tb.writeUInt16BE(4, i);\r\n\r\n\t\t\t\tb.latin1Write(\"true\", i += 2);\r\n\t\t\t\ti += 4;\r\n\t\t\t} else {\r\n\t\t\t\tb.writeUInt16BE(5, i);\r\n\r\n\t\t\t\tb.latin1Write(\"false\", i += 2);\r\n\t\t\t\ti += 5;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"string\": {\r\n\t\t\tconst length = Buffer.byteLength(obj);\r\n\t\t\tb[i++] = 109;\r\n\t\t\tb.writeUInt32BE(length, i);\r\n\r\n\t\t\tb.utf8Write(obj, i += 4);\r\n\t\t\ti += length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"number\": {\r\n\t\t\tif (Number.isInteger(obj)) {\r\n\t\t\t\tconst abs = Math.abs(obj);\r\n\t\t\t\tif (abs < 2147483648) {\r\n\t\t\t\t\tb[i++] = 98;\r\n\t\t\t\t\tb.writeInt32BE(obj, i);\r\n\t\t\t\t\ti += 4;\r\n\t\t\t\t} else if (abs < Number.MAX_SAFE_INTEGER) {\r\n\t\t\t\t\tb[i++] = 110;\r\n\t\t\t\t\tb[i++] = 8;\r\n\t\t\t\t\tb[i++] = Number(obj < 0);\r\n\t\t\t\t\tb.writeBigUInt64LE(BigInt(abs), i);\r\n\t\t\t\t\ti += 8;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tb[i++] = 70;\r\n\t\t\t\t\tb.writeDoubleBE(obj, i);\r\n\t\t\t\t\ti += 8;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tb[i++] = 70;\r\n\t\t\t\tb.writeDoubleBE(obj, i);\r\n\t\t\t\ti += 8;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"bigint\": {\r\n\t\t\tb[i++] = 110;\r\n\t\t\tb[i++] = 8;\r\n\t\t\tb[i++] = Number(obj < 0);\r\n\t\t\tb.writeBigUInt64LE(obj, i);\r\n\t\t\ti += 8;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"object\": {\r\n\t\t\tif (obj === null) {\r\n\t\t\t\tb[i++] = 100;\r\n\t\t\t\tb.writeUInt16BE(3, i);\r\n\r\n\t\t\t\tb.latin1Write(\"nil\", i += 2);\r\n\t\t\t\ti += 3;\r\n\t\t\t} else if (Array.isArray(obj)) {\r\n\t\t\t\tif (obj.length) {\r\n\t\t\t\t\tb[i++] = 108;\r\n\t\t\t\t\tb.writeUInt32BE(obj.length, i);\r\n\t\t\t\t\ti += 4;\r\n\t\t\t\t\tfor (const item of obj) {\r\n\t\t\t\t\t\tloop(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tb[i++] = 106;\r\n\t\t\t} else {\r\n\t\t\t\tconst entries = Object.entries(obj).filter(x => typeof x[1] !== \"undefined\");\r\n\t\t\t\tb[i++] = 116;\r\n\t\t\t\tb.writeUInt32BE(entries.length, i);\r\n\t\t\t\ti += 4;\r\n\t\t\t\tfor(const [key, value] of entries) {\r\n\t\t\t\t\tloop(key);\r\n\t\t\t\t\tloop(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t}\r\n\t};\r\n\tloop(data);\r\n\treturn Buffer.from(b.subarray(0, i));\r\n}\r\n\r\n\r\nexport = BetterWs;\r\n","\"use strict\";\r\n\r\nexport type IntentFlags = typeof flags;\r\nexport type IntentResolvable = number | Array<number> | keyof IntentFlags | Array<keyof IntentFlags>;\r\n\r\n\r\n\r\n\r\nexport const flags = {\r\n\tGUILDS: 1 << 0,\r\n\tGUILD_MEMBERS: 1 << 1,\r\n\tGUILD_MODERATION: 1 << 2,\r\n\tGUILD_EMOJIS_AND_STICKERS: 1 << 3,\r\n\tGUILD_INTEGRATIONS: 1 << 4,\r\n\tGUILD_WEBHOOKS: 1 << 5,\r\n\tGUILD_INVITES: 1 << 6,\r\n\tGUILD_VOICE_STATES: 1 << 7,\r\n\tGUILD_PRESENCES: 1 << 8,\r\n\tGUILD_MESSAGES: 1 << 9,\r\n\tGUILD_MESSAGE_REACTIONS: 1 << 10,\r\n\tGUILD_MESSAGE_TYPING: 1 << 11,\r\n\tDIRECT_MESSAGES: 1 << 12,\r\n\tDIRECT_MESSAGE_REACTIONS: 1 << 13,\r\n\tDIRECT_MESSAGE_TYPING: 1 << 14,\r\n\tMESSAGE_CONTENT: 1 << 15,\r\n\tGUILD_SCHEDULED_EVENTS: 1 << 16,\r\n\tAUTO_MODERATION_CONFIGURATION: 1 << 20,\r\n\tAUTO_MODERATION_EXECUTION: 1 << 21\r\n};\r\n\r\n\r\nexport const privileged = flags.GUILD_MEMBERS | flags.GUILD_PRESENCES | flags.MESSAGE_CONTENT;\r\n\r\nexport const all = Object.values(flags).reduce((acc, p) => acc | p, 0);\r\n\r\nexport const non_privileged = all & ~privileged;\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function resolve(bit: IntentResolvable = 0): number {\r\n\tif (typeof bit === \"number\" && bit >= 0) return bit;\r\n\tif (typeof bit === \"string\" && flags[bit]) return flags[bit] | 0;\r\n\tif (Array.isArray(bit)) return bit.map((p: IntentResolvable) => resolve(p)).reduce((prev, p) => prev | p, 0);\r\n\tthrow new RangeError(\"BITFIELD_INVALID\");\r\n}\r\n\r\nexport default { flags, privileged, all, non_privileged, resolve };\r\n","\"use strict\";\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport BetterWs = require(\"./BetterWs\");\r\nimport { GATEWAY_OP_CODES as OP, GATEWAY_VERSION } from \"./Constants\";\r\nimport Intents = require(\"./Intents\");\r\n\r\nimport type {\r\n\tGatewayReceivePayload,\r\n\tGatewayIdentify,\r\n\tGatewayPresenceUpdateData,\r\n\tGatewayVoiceStateUpdateData,\r\n\tGatewayRequestGuildMembersData,\r\n\tGatewayRequestGuildMembersDataWithQuery,\r\n\tGatewayRequestGuildMembersDataWithUserIds\r\n} from \"discord-api-types/v10\";\r\n\r\nimport { PresenceUpdateStatus } from \"discord-api-types/v10\";\r\n\r\ninterface ConnectorEvents {\r\n\tqueueIdentify: [number];\r\n\tready: [boolean];\r\n\tdisconnect: [number, string, boolean];\r\n\tstateChange: [\"connecting\" | \"identifying\" | \"resuming\" | \"ready\" | \"disconnected\"]\r\n}\r\n\r\ninterface DiscordConnector {\r\n\taddListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\temit<E extends keyof ConnectorEvents>(event: E, ...args: ConnectorEvents[E]): boolean;\r\n\teventNames(): Array<keyof ConnectorEvents>;\r\n\tlistenerCount(event: keyof ConnectorEvents): number;\r\n\tlisteners(event: keyof ConnectorEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\ton<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\tonce<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\tprependListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\trawListeners(event: keyof ConnectorEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof ConnectorEvents): this;\r\n\tremoveListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n}\r\n\r\nconst resumableCodes = [4008, 4005, 4003, 4002, 4001, 4000, 1006, 1001];\r\nconst shouldntAttemptReconnectCodes = [4014, 4013, 4012, 4011, 4010, 4004];\r\nconst disconnectMessages = {\r\n\t4014: \"Disallowed Intents, check your client options and application page.\",\r\n\t4013: \"Invalid Intents data, check your client options.\",\r\n\t4012: \"Invalid API version.\",\r\n\t4011: \"Shard would be on over 2500 guilds. Add more shards.\",\r\n\t4010: \"Invalid sharding data, check your client options.\",\r\n\t4009: \"Session timed out.\",\r\n\t4008: \"You are being rate limited. Wait before sending more packets.\",\r\n\t4007: \"Invalid sequence. Reconnecting and starting a new session.\",\r\n\t4005: \"You sent more than one OP 2 IDENTIFY payload while the websocket was open.\",\r\n\t4004: \"Tried to connect with an invalid token.\",\r\n\t4003: \"You tried to send a packet before sending an OP 2 IDENTIFY or OP 6 RESUME.\",\r\n\t4002: \"You sent an invalid payload.\",\r\n\t4001: \"You sent an invalid opcode or invalid payload for an opcode.\"\r\n};\r\n\r\nconst connectionError = new Error(\"WS took too long to connect. Is your internet okay?\");\r\n\r\nconst wsStatusTypes = [\"Whatever 0 is. Report if you see this\", \"connected\", \"connecting\", \"closing\", \"closed\"];\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass DiscordConnector extends EventEmitter {\r\n\r\n\tpublic options: DiscordConnector[\"client\"][\"options\"];\r\n\r\n\tpublic reconnect: boolean;\r\n\r\n\tpublic betterWs: BetterWs;\r\n\r\n\tpublic heartbeatTimeout: NodeJS.Timeout | null = null;\r\n\r\n\tpublic heartbeatInterval = 0;\r\n\r\n\tpublic _trace: string | null = null;\r\n\r\n\tpublic seq = 0;\r\n\r\n\tpublic status: \"connecting\" | \"identifying\" | \"resuming\" | \"ready\" | \"disconnected\" = \"disconnected\";\r\n\r\n\tpublic sessionId: string | null = null;\r\n\r\n\tpublic lastACKAt = 0;\r\n\r\n\tpublic lastHeartbeatSend = 0;\r\n\r\n\tpublic latency = 0;\r\n\r\n\tpublic identifyAddress: string;\r\n\r\n\tpublic resumeAddress: string | null = null;\r\n\r\n\tpublic reconnecting = false;\r\n\r\n\r\n\tprivate _closing = false;\r\n\r\n\tprivate _closeCalled = false;\r\n\r\n\tprivate _openToHeartbeatTimeout: NodeJS.Timeout | null = null;\r\n\r\n\tprivate _initialHeartbeatTimeout: NodeJS.Timeout | null = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public id: number, public client: EventEmitter & { options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; } }) {\r\n\t\tsuper();\r\n\r\n\t\tthis.options = client.options;\r\n\t\tthis.reconnect = this.options.reconnect ?? true;\r\n\t\tthis.identifyAddress = this.options.endpoint!;\r\n\r\n\t\tthis.betterWs = new BetterWs(this.identifyAddress, this.options.ws!);\r\n\r\n\t\tthis.betterWs.on(\"ws_open\", () => {\r\n\t\t\tthis.status = \"connecting\";\r\n\t\t\tthis.emit(\"stateChange\", \"connecting\");\r\n\t\t\tthis.reconnecting = false;\r\n\t\t\tthis._openToHeartbeatTimeout = setTimeout(() => {\r\n\t\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} didn't receive a HELLO after the ws was opened in time`);\r\n\t\t\t\tthis._reconnect(true);\r\n\t\t\t}, 10000);\r\n\t\t});\r\n\t\tthis.betterWs.on(\"ws_receive\", msg => this.messageAction(msg));\r\n\t\tthis.betterWs.on<\"ws_close\">(\"ws_close\", (code, reason) => this.handleWsClose(code, reason));\r\n\t\tthis.betterWs.on(\"debug\", event => this.client.emit(\"error\", event));\r\n\t\tthis.betterWs.on(\"ws_send\", data => this.client.emit(\"rawSend\", data));\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic async connect(): Promise<void> {\r\n\t\tthis._closing = false;\r\n\t\tthis._closeCalled = false;\r\n\t\tthis.client.emit(\"debug\", `Shard ${this.id} connecting to gateway`);\r\n\r\n\t\treturn this.betterWs.connect()\r\n\t\t\t.catch(e => {\r\n\t\t\t\tif (e === connectionError) return;\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tif (!this._closeCalled) this.connect();\r\n\t\t\t\t}, 5000);\r\n\t\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic async disconnect(): Promise<void> {\r\n\t\tthis._closing = true;\r\n\t\tthis._closeCalled = true;\r\n\t\treturn this.betterWs.close(1000, \"Disconnected by User\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate async messageAction(message: GatewayReceivePayload): Promise<void> {\r\n\t\tthis.client.emit(\"rawReceive\", message);\r\n\t\tconst withShardID: import(\"./Types\").IGatewayMessage = Object.assign(message, { shard_id: this.id });\r\n\t\tthis.client.emit(\"event\", withShardID);\r\n\r\n\t\tswitch (withShardID.op) {\r\n\t\tcase OP.DISPATCH:\r\n\t\t\tthis.handleDispatch(withShardID);\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.HEARTBEAT:\r\n\t\t\tthis.heartbeat();\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.RECONNECT:\r\n\t\t\tthis.client.emit(\"debug\", `Gateway asked shard ${this.id} to reconnect`);\r\n\t\t\tif (this.reconnect) this._reconnect(true);\r\n\t\t\telse this.disconnect();\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.INVALID_SESSION:\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${this.id}'s session was invalidated`);\r\n\t\t\tif (withShardID.d && this.sessionId) this.resume();\r\n\t\t\telse {\r\n\t\t\t\tthis.seq = 0;\r\n\t\t\t\tthis.sessionId = \"\";\r\n\t\t\t\tthis.emit(\"queueIdentify\", this.id);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.HELLO:\r\n\t\t\tif (this._openToHeartbeatTimeout) clearTimeout(this._openToHeartbeatTimeout);\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} received HELLO`);\r\n\t\t\tthis.lastACKAt = Date.now();\r\n\t\t\tthis.heartbeatInterval = withShardID.d.heartbeat_interval;\r\n\t\t\tthis._initialHeartbeatTimeout = setTimeout(() => this.heartbeat(), this.heartbeatInterval * Math.random());\r\n\t\t\tthis._trace = (withShardID.d as unknown as { _trace: string })._trace;\r\n\t\t\tthis._onHello();\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.HEARTBEAT_ACK:\r\n\t\t\tthis.lastACKAt = Date.now();\r\n\t\t\tthis.latency = this.lastACKAt - this.lastHeartbeatSend;\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate async _reconnect(resume = false): Promise<void> {\r\n\t\tthis.betterWs._internal.openRejector?.(connectionError);\r\n\t\tthis.reconnecting = resume;\r\n\t\tawait this.betterWs.close(resume ? 4000 : 1012, \"reconnecting\");\r\n\t\tif (resume) {\r\n\t\t\tthis.clearHeartBeat();\r\n\t\t\tif (this.resumeAddress) this.betterWs.address = this.resumeAddress;\r\n\t\t\telse this.betterWs.address = this.identifyAddress;\r\n\t\t} else {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.betterWs.address = this.identifyAddress;\r\n\t\t}\r\n\t\tthis.connect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate reset(): void {\r\n\t\tthis.sessionId = null;\r\n\t\tthis.seq = 0;\r\n\t\tthis.lastACKAt = 0;\r\n\t\tthis._trace = null;\r\n\t\tthis.clearHeartBeat();\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate setHeartBeat(): void {\r\n\t\tthis.heartbeatTimeout = setInterval(() => {\r\n\t\t\tif (this.lastACKAt <= Date.now() - (this.heartbeatInterval + 5000)) {\r\n\t\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} has not received a heartbeat ACK in ${this.heartbeatInterval + 5000}ms.`);\r\n\t\t\t\tif (this.reconnect) this._reconnect(true);\r\n\t\t\t\telse this.disconnect();\r\n\t\t\t} else this.heartbeat();\r\n\t\t}, this.heartbeatInterval);\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate clearHeartBeat(): void {\r\n\t\tif (this.heartbeatTimeout) clearInterval(this.heartbeatTimeout);\r\n\t\tif (this._initialHeartbeatTimeout) clearTimeout(this._initialHeartbeatTimeout);\r\n\t\tthis.heartbeatTimeout = null;\r\n\t\tthis._initialHeartbeatTimeout = null;\r\n\t\tthis.heartbeatInterval = 0;\r\n\t}\r\n\r\n\tprivate _onHello(): void {\r\n\t\tif (this.sessionId) return void this.resume();\r\n\t\telse this.emit(\"queueIdentify\", this.id);\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic async identify(): Promise<void> {\r\n\t\tif (this.betterWs.status !== 1) {\r\n\t\t\tthis.client.emit(\"error\", `Shard ${this.id} was attempting to identify when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`);\r\n\t\t\treturn this._reconnect(true);\r\n\t\t}\r\n\t\tthis.client.emit(\"debug\", `Shard ${this.id} is identifying`);\r\n\r\n\t\tthis.status = \"identifying\";\r\n\t\tthis.emit(\"stateChange\", \"identifying\");\r\n\r\n\t\tconst data = {\r\n\t\t\top: OP.IDENTIFY,\r\n\t\t\td: {\r\n\t\t\t\ttoken: this.options.token,\r\n\t\t\t\tproperties: {\r\n\t\t\t\t\tos: process.platform,\r\n\t\t\t\t\tbrowser: \"CloudStorm\",\r\n\t\t\t\t\tdevice: \"CloudStorm\"\r\n\t\t\t\t},\r\n\t\t\t\tlarge_threshold: this.options.largeGuildThreshold,\r\n\t\t\t\tshard: [this.id, this.options.totalShards ?? 1],\r\n\t\t\t\tintents: this.options.intents ? Intents.resolve(this.options.intents) : 0\r\n\t\t\t}\r\n\t\t} as GatewayIdentify;\r\n\r\n\t\tif (this.options.initialPresence) data.d.presence = this._checkPresenceData(this.options.initialPresence);\r\n\t\treturn this.betterWs.sendMessage(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic async resume(): Promise<void> {\r\n\t\tif (this.betterWs.status !== 1) {\r\n\t\t\tthis.client.emit(\"error\", `Shard ${this.id} was attempting to resume when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`);\r\n\t\t\treturn this._reconnect(true);\r\n\t\t}\r\n\t\tthis.client.emit(\"debug\", `Shard ${this.id} is resuming`);\r\n\r\n\t\tthis.status = \"resuming\";\r\n\t\tthis.emit(\"stateChange\", \"resuming\");\r\n\r\n\t\treturn this.betterWs.sendMessage({\r\n\t\t\top: OP.RESUME,\r\n\t\t\td: { seq: this.seq, token: this.options.token, session_id: this.sessionId! }\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate heartbeat(): void {\r\n\t\tif (this.betterWs.status !== 1) {\r\n\t\t\tthis.client.emit(\"error\", `Shard ${this.id} was attempting to heartbeat when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`);\r\n\t\t\treturn void this._reconnect(true);\r\n\t\t}\r\n\t\tthis.betterWs.sendMessage({ op: OP.HEARTBEAT, d: this.seq === 0 ? null : this.seq });\r\n\t\tthis.lastHeartbeatSend = Date.now();\r\n\t\tif (this._initialHeartbeatTimeout) {\r\n\t\t\tclearTimeout(this._initialHeartbeatTimeout);\r\n\t\t\tthis._initialHeartbeatTimeout = null;\r\n\t\t}\r\n\t\tif (!this.heartbeatTimeout) this.setHeartBeat();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate handleDispatch(message: import(\"./Types\").IGatewayDispatch): void {\r\n\t\tthis.client.emit(\"dispatch\", message);\r\n\r\n\t\tif (message.s) {\r\n\t\t\tif (message.s > this.seq + 1) {\r\n\t\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} invalid sequence: { current: ${this.seq} message: ${message.s} }`);\r\n\t\t\t\tthis.seq = message.s;\r\n\t\t\t\tthis.resume();\r\n\t\t\t}\r\n\t\t\tthis.seq = message.s;\r\n\t\t}\r\n\t\tswitch (message.t) {\r\n\t\tcase \"READY\":\r\n\t\tcase \"RESUMED\":\r\n\t\t\tif (message.t === \"READY\") {\r\n\t\t\t\tif (message.d.resume_gateway_url) this.resumeAddress = `${message.d.resume_gateway_url}?v=${GATEWAY_VERSION}&encoding=${this.options.ws?.encoding === \"etf\" ? \"etf\" : \"json\"}${this.options.ws?.compress ? \"&compress=zlib-stream\" : \"\"}`;\r\n\t\t\t\tthis.sessionId = message.d.session_id;\r\n\t\t\t}\r\n\t\t\tthis.status = \"ready\";\r\n\t\t\tthis.emit(\"stateChange\", \"ready\");\r\n\t\t\tthis._trace = (message.d as unknown as { _trace: string })._trace;\r\n\t\t\tthis.emit(\"ready\", message.t === \"RESUMED\");\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate handleWsClose(code: number, reason: string): void {\r\n\t\tlet gracefulClose = false;\r\n\t\tthis.status = \"disconnected\";\r\n\t\tthis.emit(\"stateChange\", \"disconnected\");\r\n\t\tthis.clearHeartBeat();\r\n\r\n\t\tconst isManualClose = code === 1000 && this._closing;\r\n\r\n\t\tconst message = disconnectMessages[code as keyof typeof disconnectMessages];\r\n\t\tconst isRecoverable = resumableCodes.includes(code);\r\n\t\tconst shouldntReconnect = shouldntAttemptReconnectCodes.includes(code) || isManualClose;\r\n\r\n\t\tif (isRecoverable && this.resumeAddress) this.betterWs.address = this.resumeAddress;\r\n\t\telse this.betterWs.address = this.identifyAddress;\r\n\r\n\t\tif (message) this.client.emit(\"error\", message);\r\n\r\n\t\tif (isManualClose || this.reconnecting) gracefulClose = true;\r\n\r\n\t\tthis._closing = false;\r\n\r\n\t\tthis.emit(\"disconnect\", code, reason, gracefulClose);\r\n\r\n\t\tif (!shouldntReconnect && this.reconnect) this.connect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async presenceUpdate(data: Partial<GatewayPresenceUpdateData>): Promise<void> {\r\n\t\treturn this.betterWs.sendMessage({ op: OP.PRESENCE_UPDATE, d: this._checkPresenceData(data) });\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async voiceStateUpdate(data: GatewayVoiceStateUpdateData & { self_deaf?: boolean; self_mute?: boolean; }): Promise<void> {\r\n\t\tif (!data) return Promise.resolve();\r\n\t\treturn this.betterWs.sendMessage({ op: OP.VOICE_STATE_UPDATE, d: this._checkVoiceStateUpdateData(data) });\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async requestGuildMembers(data: GatewayRequestGuildMembersData & { limit?: number; }): Promise<void> {\r\n\t\treturn this.betterWs.sendMessage({ op: OP.REQUEST_GUILD_MEMBERS, d: this._checkRequestGuildMembersData(data) });\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkPresenceData(data: Parameters<DiscordConnector[\"presenceUpdate\"]>[\"0\"]): GatewayPresenceUpdateData {\r\n\t\tdata.status = data.status ?? PresenceUpdateStatus.Online;\r\n\t\tdata.activities = data.activities && Array.isArray(data.activities) ? data.activities : [];\r\n\r\n\t\tif (data.activities) {\r\n\t\t\tfor (const activity of data.activities) {\r\n\t\t\t\tconst index = data.activities.indexOf(activity);\r\n\t\t\t\tif (activity.type === undefined) activity.type = activity.url ? 1 : 0;\r\n\t\t\t\tif (!activity.name) {\r\n\t\t\t\t\tif (activity.state && activity.type === 4) activity.name = \"Custom Status\";\r\n\t\t\t\t\telse data.activities.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdata.afk = data.afk ?? false;\r\n\t\tdata.since = data.since ?? Date.now();\r\n\t\treturn data as GatewayPresenceUpdateData;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkVoiceStateUpdateData(data: Parameters<DiscordConnector[\"voiceStateUpdate\"]>[\"0\"]): GatewayVoiceStateUpdateData {\r\n\t\tdata.channel_id = data.channel_id ?? null;\r\n\t\tdata.self_mute = data.self_mute ?? false;\r\n\t\tdata.self_deaf = data.self_deaf ?? false;\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkRequestGuildMembersData(data: Parameters<DiscordConnector[\"requestGuildMembers\"]>[\"0\"]): GatewayRequestGuildMembersData {\r\n\t\tconst withQuery = data as GatewayRequestGuildMembersDataWithQuery;\r\n\t\tconst withUserIDs = data as GatewayRequestGuildMembersDataWithUserIds;\r\n\t\tif (!withQuery.query && !withUserIDs.user_ids) withQuery.query = \"\";\r\n\t\tif (withQuery.query && withUserIDs.user_ids) delete (data as { query?: string; }).query;\r\n\t\tdata.limit = data.limit ?? 10;\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nexport = DiscordConnector;\r\n","\"use strict\";\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport DC = require(\"./DiscordConnector\");\r\n\r\ninterface ShardEvents {\r\n\tdisconnect: [number, string, boolean];\r\n\tready: [boolean];\r\n\tqueueIdentify: [number];\r\n}\r\n\r\ninterface Shard {\r\n\taddListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\temit<E extends keyof ShardEvents>(event: E, ...args: ShardEvents[E]): boolean;\r\n\teventNames(): Array<keyof ShardEvents>;\r\n\tlistenerCount(event: keyof ShardEvents): number;\r\n\tlisteners(event: keyof ShardEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\ton<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\tonce<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\tprependListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\trawListeners(event: keyof ShardEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof ShardEvents): this;\r\n\tremoveListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass Shard extends EventEmitter {\r\n\r\n\tpublic ready = false;\r\n\r\n\tpublic connector: DC;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public id: number, public client: EventEmitter & { options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; } }) {\r\n\t\tsuper();\r\n\r\n\t\tthis.connector = new DC(id, client);\r\n\t\tthis.connector.on(\"disconnect\", (...args) => {\r\n\t\t\tthis.ready = false;\r\n\t\t\tthis.emit(\"disconnect\", ...args);\r\n\t\t});\r\n\t\tthis.connector.on(\"ready\", resume => this.emit(\"ready\", resume));\r\n\t\tthis.connector.on(\"queueIdentify\", () => this.emit(\"queueIdentify\", this.id));\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic get latency(): number {\r\n\t\treturn this.connector.latency;\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic connect(): void {\r\n\t\tthis.connector.connect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic disconnect(): Promise<void> {\r\n\t\treturn this.connector.disconnect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic presenceUpdate(data: Parameters<Shard[\"connector\"][\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.connector.presenceUpdate(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic voiceStateUpdate(data: Parameters<Shard[\"connector\"][\"voiceStateUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.connector.voiceStateUpdate(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic requestGuildMembers(data: Parameters<Shard[\"connector\"][\"requestGuildMembers\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.connector.requestGuildMembers(data);\r\n\t}\r\n}\r\n\r\nexport = Shard;\r\n","\"use strict\";\r\n\r\nimport Shard = require(\"./Shard\");\r\nimport { LocalBucket } from \"snowtransfer\";\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ShardManager {\r\n\r\n\tpublic options: ShardManager[\"client\"][\"options\"];\r\n\r\n\tpublic shards: { [id: number]: Shard } = {};\r\n\r\n\tpublic identifyBucket = new LocalBucket(1000, 1000 * 60 * 60 * 24);\r\n\r\n\tpublic concurrencyBucket: LocalBucket | null = null;\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public client: import(\"events\").EventEmitter & { options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; } }) {\r\n\t\tthis.options = client.options;\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic spawn(): void {\r\n\t\tif (!this.concurrencyBucket) throw new Error(\"Trying to spawn shards without calling Client.connect()\");\r\n\t\tfor (const id of (this.options.shards === \"auto\" ? Array(this.options.totalShards).fill(0).map((_, index) => index) : this.options.shards ?? [0])) {\r\n\t\t\tthis.client.emit(\"debug\", `Spawned shard ${id}`);\r\n\t\t\tthis.shards[id] = new Shard(id, this.client);\r\n\t\t\tthis._addListener(this.shards[id]);\r\n\t\t\tthis.shards[id].connector.connect();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic disconnect(): void {\r\n\t\tfor (const shardKey in this.shards) {\r\n\t\t\tthis.shards[shardKey].disconnect();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _addListener(shard: Shard): void {\r\n\t\tshard.on(\"ready\", (resume) => {\r\n\t\t\tshard.ready = true;\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${shard.id} ${resume ? \"has resumed\" : \"is ready\"}`);\r\n\t\t\tthis.client.emit(\"shardReady\", { id: shard.id, ready: !resume });\r\n\t\t\tthis._checkReady();\r\n\t\t});\r\n\t\tshard.on(\"queueIdentify\", (shardId) => {\r\n\t\t\tif (!this.shards[shardId]) return this.client.emit(\"debug\", `Received a queueIdentify event for shard ${shardId} but it does not exist. Was it removed?`);\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${shardId} is ready to identify`);\r\n\t\t\tif (shard.connector.reconnecting) return shard.connector.resume();\r\n\t\t\tthis.concurrencyBucket?.queue(() => {\r\n\t\t\t\tthis.identifyBucket.queue(() => this.shards[shardId].connector.identify());\r\n\t\t\t});\r\n\t\t});\r\n\t\tshard.on(\"disconnect\", (code, reason, gracefulClose) => {\r\n\t\t\tthis.client.emit(\"debug\", `Websocket of shard ${shard.id} closed with code ${code} and reason: ${reason ?? \"None\"}`);\r\n\t\t\tif (code === 1000 && gracefulClose) return this._checkDisconnect();\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate _checkReady(): void {\r\n\t\tfor (const shardId in this.shards) {\r\n\t\t\tif (this.shards[shardId]) {\r\n\t\t\t\tif (!this.shards[shardId].ready) return;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.client.emit(\"ready\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate _checkDisconnect(): void {\r\n\t\tfor (const shardId in this.shards) {\r\n\t\t\tif (this.shards[shardId]) {\r\n\t\t\t\tif (this.shards[shardId].connector.status !== \"disconnected\") return;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.client.emit(\"disconnected\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async presenceUpdate(data: Parameters<Shard[\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\tfor (const shardKey in this.shards) {\r\n\t\t\tif (this.shards[shardKey]) {\r\n\t\t\t\tconst shard = this.shards[shardKey];\r\n\t\t\t\tthis.shardPresenceUpdate(shard.id, data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic shardPresenceUpdate(shardId: number, data: Parameters<Shard[\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn new Promise((res, rej) => {\r\n\t\t\tconst shard = this.shards[shardId];\r\n\t\t\tif (!shard) rej(new Error(`Shard ${shardId} does not exist`));\r\n\t\t\tif (!shard.ready) return;\r\n\t\t\tshard.presenceUpdate(data).then(result => res(result)).catch(e => rej(e as Error));\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic voiceStateUpdate(shardId: number, data: Parameters<Shard[\"voiceStateUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn new Promise((res, rej) => {\r\n\t\t\tconst shard = this.shards[shardId];\r\n\t\t\tif (!shard) rej(new Error(`Shard ${shardId} does not exist`));\r\n\t\t\tif (!shard.ready) return;\r\n\t\t\tshard.voiceStateUpdate(data).then(result => res(result)).catch(e => rej(e as Error));\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic requestGuildMembers(shardId: number, data: Parameters<Shard[\"requestGuildMembers\"]>[\"0\"]): Promise<void> {\r\n\t\treturn new Promise((res, rej) => {\r\n\t\t\tconst shard = this.shards[shardId];\r\n\t\t\tif (!shard) rej(new Error(`Shard ${shardId} does not exist`));\r\n\t\t\tif (!shard.ready) return;\r\n\t\t\tshard.requestGuildMembers(data).then(result => res(result)).catch(e => rej(e as Error));\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport = ShardManager;\r\n","\"use strict\";\r\n\r\nimport fs = require(\"fs\");\r\nimport path = require(\"path\");\r\n\r\nconst version = JSON.parse(fs.readFileSync(path.join(__dirname, \"../package.json\"), { encoding: \"utf8\" })).version as string;\r\nimport { EventEmitter } from \"events\";\r\nimport Constants = require(\"./Constants\");\r\nimport { SnowTransfer, LocalBucket } from \"snowtransfer\";\r\nimport ShardManager = require(\"./ShardManager\");\r\nimport type {\r\n\tGatewaySendPayload,\r\n\tGatewayReceivePayload,\r\n\tAPIGatewayBotInfo\r\n} from \"discord-api-types/v10\";\r\n\r\ninterface ClientEvents {\r\n\tdebug: [string];\r\n\trawSend: [GatewaySendPayload];\r\n\trawReceive: [GatewayReceivePayload];\r\n\terror: [string];\r\n\r\n\tevent: [import(\"./Types\").IGatewayMessage];\r\n\tdispatch: [import(\"./Types\").IGatewayDispatch];\r\n\tshardReady: [{ id: number; ready: boolean; }];\r\n\tready: [];\r\n\tdisconnected: [];\r\n}\r\n\r\ninterface Client {\r\n\taddListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\temit<E extends keyof ClientEvents>(event: E, ...args: ClientEvents[E]): boolean;\r\n\teventNames(): Array<keyof ClientEvents>;\r\n\tlistenerCount(event: keyof ClientEvents): number;\r\n\tlisteners(event: keyof ClientEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\ton<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\tonce<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\tprependListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\trawListeners(event: keyof ClientEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof ClientEvents): this;\r\n\tremoveListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n}\r\n\r\n\r\n\r\n\r\nclass Client extends EventEmitter {\r\n\r\n\tpublic token: string;\r\n\r\n\tpublic options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; };\r\n\r\n\tpublic shardManager: ShardManager;\r\n\r\n\tpublic version = version;\r\n\r\n\tprivate _restClient: SnowTransfer;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(token: string, options: import(\"./Types\").IClientOptions = {}) {\r\n\t\tsuper();\r\n\t\tif (!token) throw new Error(\"Missing token!\");\r\n\t\tthis.options = {\r\n\t\t\tlargeGuildThreshold: 250,\r\n\t\t\tshards: \"auto\",\r\n\t\t\treconnect: true,\r\n\t\t\tintents: 0,\r\n\t\t\ttoken: \"\",\r\n\t\t\tws: {\r\n\t\t\t\tcompress: true,\r\n\t\t\t\tencoding: \"json\"\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis._restClient = options.snowtransferInstance ? options.snowtransferInstance : new SnowTransfer(token);\r\n\t\tdelete options.snowtransferInstance;\r\n\t\tthis.token = token.startsWith(\"Bot \") ? token.substring(4) : token;\r\n\t\tObject.assign(this.options, options);\r\n\t\tthis.options.token = token;\r\n\t\tthis.shardManager = new ShardManager(this);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async connect(): Promise<void> {\r\n\t\tconst initial = await this.fetchConnectInfo();\r\n\t\tif (this.options.shards === \"auto\") this.options.totalShards = initial;\r\n\t\tthis.shardManager.spawn();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async fetchConnectInfo(): Promise<number> {\r\n\t\tconst gateway = await this.getGatewayBot();\r\n\t\tthis._updateEndpoint(gateway.url);\r\n\t\tconst oldQueueConcurrency = [] as Array<() => unknown>;\r\n\t\tconst oldQueueIdentify = [] as Array<() => unknown>;\r\n\t\tif (this.shardManager.concurrencyBucket?.fnQueue.length) {\r\n\t\t\toldQueueConcurrency.push(...this.shardManager.concurrencyBucket.fnQueue);\r\n\t\t\tthis.shardManager.concurrencyBucket.dropQueue();\r\n\t\t}\r\n\t\tif (this.shardManager.identifyBucket.fnQueue.length) oldQueueIdentify.push(...this.shardManager.identifyBucket.fnQueue);\r\n\t\tthis.shardManager.identifyBucket.dropQueue();\r\n\t\tthis.shardManager.concurrencyBucket = new LocalBucket(gateway.session_start_limit.max_concurrency, 5000);\r\n\t\tthis.shardManager.identifyBucket.remaining = gateway.session_start_limit.remaining;\r\n\t\tthis.shardManager.identifyBucket.reset = gateway.session_start_limit.reset_after;\r\n\t\tfor (const fn of oldQueueConcurrency) {\r\n\t\t\tthis.shardManager.concurrencyBucket.queue(fn);\r\n\t\t}\r\n\t\tfor (const fn of oldQueueIdentify) {\r\n\t\t\tthis.shardManager.identifyBucket.queue(fn);\r\n\t\t}\r\n\t\treturn gateway.shards;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async getGateway(): Promise<string> {\r\n\t\tconst gatewayData = await this._restClient.bot.getGateway();\r\n\t\treturn gatewayData.url;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async getGatewayBot(): Promise<APIGatewayBotInfo> {\r\n\t\treturn this._restClient.bot.getGatewayBot();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic disconnect(): void {\r\n\t\treturn this.shardManager.disconnect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async presenceUpdate(data: Parameters<Client[\"shardManager\"][\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.shardManager.presenceUpdate(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic shardStatusUpdate(shardId: number, data: Parameters<Client[\"shardManager\"][\"shardPresenceUpdate\"]>[\"1\"]): Promise<void> {\r\n\t\treturn this.shardManager.shardPresenceUpdate(shardId, data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic voiceStateUpdate(shardId: number, data: Parameters<Client[\"shardManager\"][\"voiceStateUpdate\"]>[\"1\"]): Promise<void> {\r\n\t\treturn this.shardManager.voiceStateUpdate(shardId, data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic requestGuildMembers(shardId: number, data: Parameters<Client[\"shardManager\"][\"requestGuildMembers\"]>[\"1\"]): Promise<void> {\r\n\t\tif (!data.guild_id) throw new Error(\"You need to pass a guild_id\");\r\n\t\treturn this.shardManager.requestGuildMembers(shardId, data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _updateEndpoint(gatewayUrl: string): void {\r\n\t\tthis.options.endpoint = `${gatewayUrl}?v=${Constants.GATEWAY_VERSION}&encoding=${this.options.ws?.encoding === \"etf\" ? \"etf\" : \"json\"}${this.options.ws?.compress ? \"&compress=zlib-stream\" : \"\"}`;\r\n\t}\r\n}\r\n\r\nexport = Client;\r\n","import Client2 = require(\"./Client\");\r\nimport Constants = require(\"./Constants\");\r\nimport Intents = require(\"./Intents\");\r\n\r\nimport Shard2 = require(\"./Shard\");\r\nimport ShardManager2 = require(\"./ShardManager\");\r\n\r\nimport BetterWs2 = require(\"./BetterWs\");\r\n\r\nexport { BetterWs2 as BetterWs, Client2 as Client, Constants, Intents, Shard2 as Shard, ShardManager2 as ShardManager };\r\nexport * from \"./Types\";\r\n"]}
1
+ {"version":3,"sources":["../src/Constants.ts","../src/BetterWs.ts","../src/Intents.ts","../src/DiscordConnector.ts","../src/Shard.ts","../src/ShardManager.ts","../src/Client.ts","../src/index.ts"],"names":["Constants","EventEmitter","LocalBucket","randomBytes","resolve","createHash","createInflate","constants","inflateSync","Intents","OP","PresenceUpdateStatus","SnowTransfer"],"mappings":"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","file":"index.js","sourcesContent":["\"use strict\";\r\n\r\nconst Constants = {\r\n\tGATEWAY_OP_CODES: {\r\n\r\n\r\n\r\n\t\tDISPATCH: 0 as const,\r\n\r\n\r\n\r\n\t\tHEARTBEAT: 1 as const,\r\n\r\n\r\n\r\n\t\tIDENTIFY: 2 as const,\r\n\r\n\r\n\r\n\t\tPRESENCE_UPDATE: 3 as const,\r\n\r\n\r\n\r\n\t\tVOICE_STATE_UPDATE: 4 as const,\r\n\r\n\r\n\r\n\t\tRESUME: 6 as const,\r\n\r\n\r\n\r\n\t\tRECONNECT: 7 as const,\r\n\r\n\r\n\r\n\t\tREQUEST_GUILD_MEMBERS: 8 as const,\r\n\r\n\r\n\r\n\t\tINVALID_SESSION: 9 as const,\r\n\r\n\r\n\r\n\t\tHELLO: 10 as const,\r\n\r\n\r\n\r\n\t\tHEARTBEAT_ACK: 11 as const\r\n\t},\r\n\tGATEWAY_VERSION: 10 as const\r\n};\r\n\r\nexport = Constants;\r\n","\"use strict\";\r\n\r\n\r\n\r\n\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport { randomBytes, createHash } from \"crypto\";\r\nimport { createInflate, inflateSync, constants } from \"zlib\";\r\nimport https = require(\"https\");\r\nimport http = require(\"http\");\r\nimport util = require(\"util\");\r\nimport { GATEWAY_OP_CODES } from \"./Constants\";\r\n\r\nimport { LocalBucket } from \"snowtransfer\";\r\n\r\nimport type { Socket } from \"net\";\r\n\r\ninterface BWSEvents {\r\n\tws_open: [];\r\n\tws_close: [number, string];\r\n\tws_receive: [any];\r\n\tws_send: [any];\r\n\tdebug: [string];\r\n}\r\n\r\ninterface BetterWs {\r\n\taddListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\temit<E extends keyof BWSEvents>(event: E, ...args: BWSEvents[E]): boolean;\r\n\teventNames(): Array<keyof BWSEvents>;\r\n\tlistenerCount(event: keyof BWSEvents): number;\r\n\tlisteners(event: keyof BWSEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\ton<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\tonce<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\tprependListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n\trawListeners(event: keyof BWSEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof BWSEvents): this;\r\n\tremoveListener<E extends keyof BWSEvents>(event: E, listener: (...args: BWSEvents[E]) => any): this;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nclass BetterWs extends EventEmitter {\r\n\r\n\tpublic encoding: \"etf\" | \"json\" | \"other\";\r\n\r\n\tpublic compress: boolean;\r\n\r\n\tpublic wsBucket = new LocalBucket(120, 60000);\r\n\r\n\tpublic presenceBucket = new LocalBucket(5, 60000);\r\n\r\n\r\n\tprivate _socket: Socket | null = null;\r\n\r\n\tpublic _internal: {\r\n\t\topenRejector: ((reason?: any) => void) | null;\r\n\r\n\t\tclosePromise: Promise<void> | null;\r\n\r\n\t\tzlib: import(\"zlib\").Inflate | null;\r\n\t} = {\r\n\t\t\topenRejector: null,\r\n\t\t\tclosePromise: null,\r\n\t\t\tzlib: null\r\n\t\t};\r\n\r\n\tprivate _connecting = false;\r\n\r\n\tprivate _lastCloseCode: number | null = null;\r\n\r\n\tprivate _lastCloseReason: string | null = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public address: string, public options: Omit<import(\"./Types\").IClientWSOptions, \"encoding\"> & { encoding?: import(\"./Types\").IClientWSOptions[\"encoding\"] | \"other\" }) {\r\n\t\tsuper();\r\n\r\n\t\tthis.encoding = options.encoding ?? \"other\";\r\n\t\tthis.compress = options.compress ?? false;\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic get status(): 1 | 2 | 3 | 4 {\r\n\t\tconst internal = this._internal;\r\n\t\tif (this._connecting) return 2;\r\n\t\tif (internal.closePromise) return 3;\r\n\t\tif (!this._socket) return 4;\r\n\t\treturn 1;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic connect(): Promise<void> {\r\n\t\tif (this._socket || this._connecting) return Promise.resolve(void 0);\r\n\t\tthis._connecting = true;\r\n\t\tconst key = randomBytes(16).toString(\"base64\");\r\n\t\tconst url = new URL(this.address);\r\n\t\tconst useHTTPS = (url.protocol === \"https:\" || url.protocol === \"wss:\") || url.port === \"443\";\r\n\t\tconst port = url.port || (useHTTPS ? \"443\" : \"80\");\r\n\t\tconst req = (useHTTPS ? https : http).request({\r\n\t\t\thostname: url.hostname,\r\n\t\t\tpath: `${url.pathname}${url.search}`,\r\n\t\t\tport: port,\r\n\t\t\theaders: {\r\n\t\t\t\t\"Connection\": \"Upgrade\",\r\n\t\t\t\t\"Upgrade\": \"websocket\",\r\n\t\t\t\t\"Sec-WebSocket-Key\": key,\r\n\t\t\t\t\"Sec-WebSocket-Version\": \"13\",\r\n\t\t\t\t...this.options.headers\r\n\t\t\t}\r\n\t\t});\r\n\t\tlet onErrorRef: ((e: Error) => void) | undefined;\r\n\t\tlet cameFromOnError = false;\r\n\t\treturn new Promise<void>((resolve, reject) => {\r\n\t\t\tthis._internal.openRejector = reject;\r\n\t\t\tconst upgrade = this._onUpgrade.bind(this, key, req, resolve, reject);\r\n\t\t\tonErrorRef = e => {\r\n\t\t\t\tthis._internal.openRejector = null;\r\n\t\t\t\tcameFromOnError = true;\r\n\t\t\t\tthis._connecting = false;\r\n\t\t\t\treq.removeListener(\"upgrade\", upgrade);\r\n\t\t\t\treject(e);\r\n\t\t\t};\r\n\t\t\treq.once(\"upgrade\", upgrade);\r\n\t\t\treq.once(\"error\", onErrorRef);\r\n\t\t\treq.end();\r\n\t\t}).catch(reason => {\r\n\t\t\tif (onErrorRef && !cameFromOnError) {\r\n\t\t\t\treq.destroy();\r\n\t\t\t\treq.removeListener(\"error\", onErrorRef);\r\n\t\t\t\tonErrorRef(reason);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject(reason as Error);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async close(code: number, reason?: string): Promise<void> {\r\n\t\tconst internal = this._internal;\r\n\t\tif (internal.closePromise) return internal.closePromise;\r\n\t\tif (!this._socket) return Promise.resolve(void 0);\r\n\t\tlet resolver: ((value: unknown) => void) | undefined;\r\n\t\tconst promise = new Promise(resolve => {\r\n\t\t\tresolver = resolve;\r\n\t\t\tconst from = Buffer.from([code >> 8, code & 255]);\r\n\t\t\tthis._write(reason ? Buffer.concat([from, Buffer.from(reason)]) : from, 8);\r\n\t\t}).then(() => {\r\n\t\t\tinternal.closePromise = null;\r\n\t\t});\r\n\r\n\t\tpromise.resolve = resolver;\r\n\t\tinternal.closePromise = promise;\r\n\t\treturn promise;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic sendMessage(data: any): Promise<void> {\r\n\t\treturn new Promise(res => {\r\n\t\t\tconst presence = data?.op === GATEWAY_OP_CODES.PRESENCE_UPDATE;\r\n\t\t\tconst sendMsg = () => {\r\n\t\t\t\tconst fn = () => {\r\n\t\t\t\t\tthis.emit(\"ws_send\", data);\r\n\t\t\t\t\tif (this.encoding === \"json\") this._write(Buffer.from(JSON.stringify(data)), 1);\r\n\t\t\t\t\telse if (this.encoding === \"etf\") this._write(writeETF(data), 2);\r\n\t\t\t\t\telse if (this.encoding === \"other\") this._write(Buffer.from(data), 2);\r\n\t\t\t\t\tres(void 0);\r\n\t\t\t\t};\r\n\t\t\t\tif (this.options.bypassBuckets) fn();\r\n\t\t\t\telse this.wsBucket.queue(fn);\r\n\t\t\t};\r\n\t\t\tif (presence && !this.options.bypassBuckets) this.presenceBucket.queue(sendMsg);\r\n\t\t\telse sendMsg();\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _write(packet: Buffer, opcode: number): void {\r\n\t\tconst socket = this._socket;\r\n\t\tif (!socket?.writable) return;\r\n\t\tconst length = packet.length;\r\n\t\tlet frame: Buffer | undefined;\r\n\t\tif (length < 126) {\r\n\t\t\tframe = Buffer.allocUnsafe(6 + length);\r\n\t\t\tframe[1] = 128 + length;\r\n\t\t} else if (length < (1 << 16)) {\r\n\t\t\tframe = Buffer.allocUnsafe(8 + length);\r\n\t\t\tframe[1] = 254;\r\n\t\t\tframe[2] = length >> 8;\r\n\t\t\tframe[3] = length & 255;\r\n\t\t} else {\r\n\t\t\tframe = Buffer.allocUnsafe(14 + length);\r\n\t\t\tframe[1] = 255;\r\n\t\t\tframe.writeBigUInt64BE(BigInt(length), 2);\r\n\t\t}\r\n\t\tframe[0] = 128 + opcode;\r\n\t\tframe.writeUInt32BE(0, frame.length - length - 4);\r\n\t\tframe.set(packet, frame.length - length);\r\n\t\tsocket.write(frame);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _onUpgrade(key: string, req: http.ClientRequest, resolve: (value: void | PromiseLike<void>) => void, reject: (reason?: any) => void, res: http.IncomingMessage, socket: Socket): void {\r\n\t\tthis._internal.openRejector = null;\r\n\t\tconst hash = createHash(\"sha1\").update(key + \"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\").digest(\"base64\");\r\n\t\tconst accept = res.headers[\"sec-websocket-accept\"];\r\n\t\tif (hash !== accept) {\r\n\t\t\tsocket.end(() => {\r\n\t\t\t\tthis.emit(\"debug\", \"Failed websocket-key validation\");\r\n\t\t\t\tthis._connecting = false;\r\n\t\t\t\treject(new Error(`Invalid Sec-Websocket-Accept | expected: ${hash} | received: ${accept}`));\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsocket.once(\"error\", this._onError.bind(this));\r\n\t\tsocket.once(\"close\", this._onClose.bind(this));\r\n\t\tsocket.on(\"readable\", this._onReadable.bind(this));\r\n\t\tthis._socket = socket;\r\n\t\tthis._connecting = false;\r\n\t\tif (this.compress) {\r\n\t\t\tconst z = createInflate();\r\n\r\n\t\t\tz._c = z.close; z._h = z._handle; z._hc = z._handle.close; z._v = () => void 0;\r\n\t\t\tthis._internal.zlib = z;\r\n\t\t}\r\n\t\tthis.emit(\"ws_open\");\r\n\t\tresolve(void 0);\r\n\t\treq.removeAllListeners(\"error\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _onError(error: Error): void {\r\n\t\tif (!this._socket) return;\r\n\t\tthis.emit(\"debug\", util.inspect(error, true, 1, false));\r\n\t\tthis._write(Buffer.allocUnsafe(0), 8);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _onClose(): void {\r\n\t\tconst socket = this._socket;\r\n\t\tconst internal = this._internal;\r\n\t\tif (!socket) return;\r\n\t\tsocket.removeListener(\"data\", this._onReadable);\r\n\t\tsocket.removeListener(\"error\", this._onError);\r\n\t\tthis.wsBucket.dropQueue();\r\n\t\tthis.presenceBucket.dropQueue();\r\n\t\tthis._socket = null;\r\n\t\tthis.emit(\"ws_close\", this._lastCloseCode ?? 1006, this._lastCloseReason ?? \"Abnormal Closure\");\r\n\t\tthis._lastCloseCode = null;\r\n\t\tthis._lastCloseReason = null;\r\n\t\tif (internal.zlib) {\r\n\t\t\tinternal.zlib.close();\r\n\t\t\tinternal.zlib = null;\r\n\t\t}\r\n\r\n\t\tif (internal.closePromise) internal.closePromise.resolve(void 0);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _onReadable(): void {\r\n\t\tconst socket = this._socket;\r\n\t\twhile((socket?.readableLength || 0) > 1) {\r\n\t\t\tlet length = readRange(socket!, 1, 1) & 127;\r\n\t\t\tlet bytes = 0;\r\n\t\t\tif (length > 125) {\r\n\t\t\t\tbytes = length === 126 ? 2 : 8;\r\n\t\t\t\tif (socket!.readableLength < 2 + bytes) return;\r\n\t\t\t\tlength = readRange(socket!, 2, bytes);\r\n\t\t\t}\r\n\t\t\tconst frame = socket!.read(2 + bytes + length) as Buffer;\r\n\t\t\tif (!frame) return;\r\n\t\t\tconst fin = frame[0] >> 7;\r\n\t\t\tconst opcode = frame[0] & 15;\r\n\t\t\tif (fin !== 1 || opcode === 0) this.emit(\"debug\", \"discord actually does send messages with fin=0. if you see this error let me know\");\r\n\t\t\tconst payload = frame.subarray(2 + bytes);\r\n\t\t\tthis._processFrame(opcode, payload);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _processFrame(opcode: number, message: Buffer): void {\r\n\t\tconst internal = this._internal;\r\n\t\tswitch (opcode) {\r\n\t\tcase 1: {\r\n\t\t\tlet packet: any;\r\n\t\t\tif (this.encoding === \"json\") packet = JSON.parse(message.toString());\r\n\t\t\telse if (this.encoding === \"other\") packet = message;\r\n\t\t\tthis.emit(\"ws_receive\", packet);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase 2: {\r\n\t\t\tlet packet;\r\n\t\t\tif (this.compress) {\r\n\t\t\t\tconst z = internal.zlib;\r\n\t\t\t\tlet error = null;\r\n\t\t\t\tlet data = null;\r\n\r\n\t\t\t\tz.close = z._handle.close = z._v;\r\n\t\t\t\ttry {\r\n\r\n\t\t\t\t\tdata = z._processChunk(message, constants.Z_SYNC_FLUSH);\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\terror = e;\r\n\t\t\t\t}\r\n\t\t\t\tconst l = message.length;\r\n\t\t\t\tif (message[l - 4] !== 0 || message[l - 3] !== 0 || message[l - 2] !== 255 || message[l - 1] !== 255) this.emit(\"debug\", \"discord actually does send fragmented zlib messages. If you see this error let me know\");\r\n\r\n\t\t\t\tz.close = z._c;\r\n\r\n\t\t\t\tz._handle = z._h;\r\n\r\n\t\t\t\tz._handle.close = z._hc;\r\n\r\n\t\t\t\tz._events.error = void 0;\r\n\r\n\t\t\t\tz._eventCount--;\r\n\t\t\t\tz!.removeAllListeners(\"error\");\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\tthis.emit(\"debug\", \"Zlib error processing chunk\");\r\n\t\t\t\t\tthis._write(Buffer.allocUnsafe(0), 8);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (!data) {\r\n\t\t\t\t\tthis.emit(\"debug\", \"Data from zlib processing was null. If you see this error let me know\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.encoding === \"json\") packet = JSON.parse(String(data));\r\n\t\t\t\telse if (this.encoding === \"etf\") packet = readETF(data, 1);\r\n\t\t\t\telse if (this.encoding === \"other\") packet = data;\r\n\t\t\t} else if (this.encoding === \"json\") packet = JSON.parse(inflateSync(message).toString());\r\n\t\t\telse if (this.encoding === \"etf\") packet = readETF(message, 1);\r\n\t\t\telse if (this.encoding === \"other\") packet = message;\r\n\t\t\tthis.emit(\"ws_receive\", packet);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase 8: {\r\n\t\t\tthis._lastCloseCode = message.length > 1 ? (message[0] << 8) + message[1] : 0;\r\n\t\t\tthis._lastCloseReason = message.length > 2 ? message.subarray(2).toString() : \"\";\r\n\t\t\tthis._write(Buffer.from([this._lastCloseCode >> 8, this._lastCloseCode & 255]), 8);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase 9: {\r\n\t\t\tthis._write(message, 10);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction readRange(socket: import(\"net\").Socket, index: number, bytes: number): number {\r\n\tlet cursor = 0;\r\n\tlet read = 0;\r\n\tlet num = 0;\r\n\r\n\r\n\tconst readable = socket._readableState;\r\n\tlet currentBufferIndex = readable.bufferIndex;\r\n\tlet currentBuffer = readable.buffer.head ?? readable.buffer[currentBufferIndex];\r\n\r\n\tdo {\r\n\t\tconst data = currentBuffer.data ?? currentBuffer;\r\n\t\tfor (const element of data) {\r\n\t\t\tif (++cursor > index) {\r\n\t\t\t\tnum *= 256;\r\n\t\t\t\tnum += element;\r\n\t\t\t\tif (++read === bytes) return num;\r\n\t\t\t}\r\n\t\t}\r\n\t} while((currentBuffer = (currentBuffer.next ?? readable.buffer[++currentBufferIndex])));\r\n\tthrow new Error(\"readRange failed?\");\r\n}\r\n\r\nfunction readETF(data: Buffer, start: number): Record<any, any> | null | undefined {\r\n\tlet view: DataView | undefined;\r\n\tlet x = start;\r\n\tconst loop = () => {\r\n\t\tconst type = data[x++];\r\n\t\tswitch(type) {\r\n\t\tcase 70: {\r\n\t\t\tconst float = data.readDoubleBE(x);\r\n\t\t\tx += 8;\r\n\t\t\treturn float;\r\n\t\t}\r\n\t\tcase 97: {\r\n\t\t\treturn data[x++];\r\n\t\t}\r\n\t\tcase 98: {\r\n\t\t\tconst int = data.readInt32BE(x);\r\n\t\t\tx += 4;\r\n\t\t\treturn int;\r\n\t\t}\r\n\t\tcase 100: {\r\n\t\t\tconst length = data.readUInt16BE(x);\r\n\t\t\tlet atom = \"\";\r\n\t\t\tif (length > 30) {\r\n\r\n\t\t\t\tatom = data.latin1Slice(x += 2, x + length);\r\n\t\t\t} else {\r\n\t\t\t\tfor (let i = x += 2; i < x + length; i++) {\r\n\t\t\t\t\tatom += String.fromCharCode(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tx += length;\r\n\t\t\tif (!atom) return undefined;\r\n\t\t\tif (atom === \"nil\" || atom === \"null\") return null;\r\n\t\t\tif (atom === \"true\") return true;\r\n\t\t\tif (atom === \"false\") return false;\r\n\t\t\treturn atom;\r\n\t\t}\r\n\t\tcase 108: case 106: {\r\n\t\t\tconst array = [] as Array<any>;\r\n\t\t\tif (type === 108) {\r\n\t\t\t\tconst length = data.readUInt32BE(x);\r\n\t\t\t\tx += 4;\r\n\t\t\t\tfor (let i = 0; i < length; i++) {\r\n\t\t\t\t\tarray.push(loop());\r\n\t\t\t\t}\r\n\t\t\t\tx++;\r\n\t\t\t}\r\n\t\t\treturn array;\r\n\t\t}\r\n\t\tcase 107: {\r\n\t\t\tconst array = [] as Array<number>;\r\n\t\t\tconst length = data.readUInt16BE(x);\r\n\t\t\tx += 2;\r\n\t\t\tfor (let i = 0; i < length; i++) {\r\n\t\t\t\tarray.push(data[x++]);\r\n\t\t\t}\r\n\t\t\treturn array;\r\n\t\t}\r\n\t\tcase 109: {\r\n\t\t\tconst length = data.readUInt32BE(x);\r\n\t\t\tlet str = \"\";\r\n\t\t\tif (length > 30) {\r\n\r\n\t\t\t\tstr = data.utf8Slice(x += 4, x + length);\r\n\t\t\t} else {\r\n\t\t\t\tlet i = x += 4;\r\n\t\t\t\tconst l = x + length;\r\n\t\t\t\twhile(i < l) {\r\n\t\t\t\t\tconst byte = data[i++];\r\n\t\t\t\t\tif (byte < 128) str += String.fromCharCode(byte);\r\n\t\t\t\t\telse if (byte < 224) str += String.fromCharCode(((byte & 31) << 6) + (data[i++] & 63));\r\n\t\t\t\t\telse if (byte < 240) str += String.fromCharCode(((byte & 15) << 12) + ((data[i++] & 63) << 6) + (data[i++] & 63));\r\n\t\t\t\t\telse str += String.fromCodePoint(((byte & 7) << 18) + ((data[i++] & 63) << 12) + ((data[i++] & 63) << 6) + (data[i++] & 63));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tx += length;\r\n\t\t\treturn str;\r\n\t\t}\r\n\t\tcase 110: {\r\n\r\n\t\t\tif (!view) view = new DataView(data.buffer, data.offset, data.byteLength);\r\n\t\t\tconst length = data[x++];\r\n\t\t\tconst sign = data[x++];\r\n\t\t\tlet left = length;\r\n\t\t\tlet num = BigInt(0);\r\n\t\t\twhile(left > 0) {\r\n\t\t\t\tif (left >= 8) {\r\n\t\t\t\t\tnum <<= BigInt(64);\r\n\t\t\t\t\tnum += view.getBigUint64(x + (left -= 8), true);\r\n\t\t\t\t} else if (left >= 4) {\r\n\t\t\t\t\tnum <<= BigInt(32);\r\n\r\n\t\t\t\t\tnum += BigInt(view.getUint32(x + (left -= 4)), true);\r\n\t\t\t\t} else if (left >= 2) {\r\n\t\t\t\t\tnum <<= BigInt(16);\r\n\r\n\t\t\t\t\tnum += BigInt(view.getUint16(x + (left -= 2)), true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnum <<= BigInt(8);\r\n\t\t\t\t\tnum += BigInt(data[x]);\r\n\t\t\t\t\tleft--;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tx += length;\r\n\t\t\treturn (sign ? -num : num).toString();\r\n\t\t}\r\n\t\tcase 116: {\r\n\t\t\tconst obj = {};\r\n\t\t\tconst length = data.readUInt32BE(x);\r\n\t\t\tx += 4;\r\n\t\t\tfor(let i = 0; i < length; i++) {\r\n\t\t\t\tconst key = loop();\r\n\r\n\t\t\t\tobj[key] = loop();\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t}\r\n\t\t}\r\n\t\tthrow new Error(`Missing etf type: ${type}`);\r\n\t};\r\n\treturn loop();\r\n}\r\n\r\nfunction writeETF(data: any): Buffer {\r\n\tconst b = Buffer.allocUnsafe(1 << 12);\r\n\tb[0] = 131;\r\n\tlet i = 1;\r\n\tconst loop = (obj: any) => {\r\n\t\tconst type = typeof obj;\r\n\t\tswitch(type) {\r\n\t\tcase \"boolean\": {\r\n\t\t\tb[i++] = 100;\r\n\t\t\tif (obj) {\r\n\t\t\t\tb.writeUInt16BE(4, i);\r\n\r\n\t\t\t\tb.latin1Write(\"true\", i += 2);\r\n\t\t\t\ti += 4;\r\n\t\t\t} else {\r\n\t\t\t\tb.writeUInt16BE(5, i);\r\n\r\n\t\t\t\tb.latin1Write(\"false\", i += 2);\r\n\t\t\t\ti += 5;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"string\": {\r\n\t\t\tconst length = Buffer.byteLength(obj);\r\n\t\t\tb[i++] = 109;\r\n\t\t\tb.writeUInt32BE(length, i);\r\n\r\n\t\t\tb.utf8Write(obj, i += 4);\r\n\t\t\ti += length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"number\": {\r\n\t\t\tif (Number.isInteger(obj)) {\r\n\t\t\t\tconst abs = Math.abs(obj);\r\n\t\t\t\tif (abs < 2147483648) {\r\n\t\t\t\t\tb[i++] = 98;\r\n\t\t\t\t\tb.writeInt32BE(obj, i);\r\n\t\t\t\t\ti += 4;\r\n\t\t\t\t} else if (abs < Number.MAX_SAFE_INTEGER) {\r\n\t\t\t\t\tb[i++] = 110;\r\n\t\t\t\t\tb[i++] = 8;\r\n\t\t\t\t\tb[i++] = Number(obj < 0);\r\n\t\t\t\t\tb.writeBigUInt64LE(BigInt(abs), i);\r\n\t\t\t\t\ti += 8;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tb[i++] = 70;\r\n\t\t\t\t\tb.writeDoubleBE(obj, i);\r\n\t\t\t\t\ti += 8;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tb[i++] = 70;\r\n\t\t\t\tb.writeDoubleBE(obj, i);\r\n\t\t\t\ti += 8;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"bigint\": {\r\n\t\t\tb[i++] = 110;\r\n\t\t\tb[i++] = 8;\r\n\t\t\tb[i++] = Number(obj < 0);\r\n\t\t\tb.writeBigUInt64LE(obj, i);\r\n\t\t\ti += 8;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase \"object\": {\r\n\t\t\tif (obj === null) {\r\n\t\t\t\tb[i++] = 100;\r\n\t\t\t\tb.writeUInt16BE(3, i);\r\n\r\n\t\t\t\tb.latin1Write(\"nil\", i += 2);\r\n\t\t\t\ti += 3;\r\n\t\t\t} else if (Array.isArray(obj)) {\r\n\t\t\t\tif (obj.length) {\r\n\t\t\t\t\tb[i++] = 108;\r\n\t\t\t\t\tb.writeUInt32BE(obj.length, i);\r\n\t\t\t\t\ti += 4;\r\n\t\t\t\t\tfor (const item of obj) {\r\n\t\t\t\t\t\tloop(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tb[i++] = 106;\r\n\t\t\t} else {\r\n\t\t\t\tconst entries = Object.entries(obj).filter(x => typeof x[1] !== \"undefined\");\r\n\t\t\t\tb[i++] = 116;\r\n\t\t\t\tb.writeUInt32BE(entries.length, i);\r\n\t\t\t\ti += 4;\r\n\t\t\t\tfor(const [key, value] of entries) {\r\n\t\t\t\t\tloop(key);\r\n\t\t\t\t\tloop(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t}\r\n\t};\r\n\tloop(data);\r\n\treturn Buffer.from(b.subarray(0, i));\r\n}\r\n\r\n\r\nexport = BetterWs;\r\n","\"use strict\";\r\n\r\nexport type IntentFlags = typeof flags;\r\nexport type IntentResolvable = number | Array<number> | keyof IntentFlags | Array<keyof IntentFlags>;\r\n\r\n\r\n\r\n\r\nexport const flags = {\r\n\tGUILDS: 1 << 0,\r\n\tGUILD_MEMBERS: 1 << 1,\r\n\tGUILD_MODERATION: 1 << 2,\r\n\tGUILD_EMOJIS_AND_STICKERS: 1 << 3,\r\n\tGUILD_INTEGRATIONS: 1 << 4,\r\n\tGUILD_WEBHOOKS: 1 << 5,\r\n\tGUILD_INVITES: 1 << 6,\r\n\tGUILD_VOICE_STATES: 1 << 7,\r\n\tGUILD_PRESENCES: 1 << 8,\r\n\tGUILD_MESSAGES: 1 << 9,\r\n\tGUILD_MESSAGE_REACTIONS: 1 << 10,\r\n\tGUILD_MESSAGE_TYPING: 1 << 11,\r\n\tDIRECT_MESSAGES: 1 << 12,\r\n\tDIRECT_MESSAGE_REACTIONS: 1 << 13,\r\n\tDIRECT_MESSAGE_TYPING: 1 << 14,\r\n\tMESSAGE_CONTENT: 1 << 15,\r\n\tGUILD_SCHEDULED_EVENTS: 1 << 16,\r\n\tAUTO_MODERATION_CONFIGURATION: 1 << 20,\r\n\tAUTO_MODERATION_EXECUTION: 1 << 21\r\n};\r\n\r\n\r\nexport const privileged = flags.GUILD_MEMBERS | flags.GUILD_PRESENCES | flags.MESSAGE_CONTENT;\r\n\r\nexport const all = Object.values(flags).reduce((acc, p) => acc | p, 0);\r\n\r\nexport const non_privileged = all & ~privileged;\r\n\r\n\r\n\r\n\r\n\r\n\r\nexport function resolve(bit: IntentResolvable = 0): number {\r\n\tif (typeof bit === \"number\" && bit >= 0) return bit;\r\n\tif (typeof bit === \"string\" && flags[bit]) return flags[bit] | 0;\r\n\tif (Array.isArray(bit)) return bit.map((p: IntentResolvable) => resolve(p)).reduce((prev, p) => prev | p, 0);\r\n\tthrow new RangeError(\"BITFIELD_INVALID\");\r\n}\r\n\r\nexport default { flags, privileged, all, non_privileged, resolve };\r\n","\"use strict\";\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport BetterWs = require(\"./BetterWs\");\r\nimport { GATEWAY_OP_CODES as OP, GATEWAY_VERSION } from \"./Constants\";\r\nimport Intents = require(\"./Intents\");\r\n\r\nimport type {\r\n\tGatewayReceivePayload,\r\n\tGatewayIdentify,\r\n\tGatewayPresenceUpdateData,\r\n\tGatewayVoiceStateUpdateData,\r\n\tGatewayRequestGuildMembersData,\r\n\tGatewayRequestGuildMembersDataWithQuery,\r\n\tGatewayRequestGuildMembersDataWithUserIds\r\n} from \"discord-api-types/v10\";\r\n\r\nimport { PresenceUpdateStatus } from \"discord-api-types/v10\";\r\n\r\ninterface ConnectorEvents {\r\n\tqueueIdentify: [number];\r\n\tready: [boolean];\r\n\tdisconnect: [number, string, boolean];\r\n\tstateChange: [\"connecting\" | \"identifying\" | \"resuming\" | \"ready\" | \"disconnected\"]\r\n}\r\n\r\ninterface DiscordConnector {\r\n\taddListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\temit<E extends keyof ConnectorEvents>(event: E, ...args: ConnectorEvents[E]): boolean;\r\n\teventNames(): Array<keyof ConnectorEvents>;\r\n\tlistenerCount(event: keyof ConnectorEvents): number;\r\n\tlisteners(event: keyof ConnectorEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\ton<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\tonce<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\tprependListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n\trawListeners(event: keyof ConnectorEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof ConnectorEvents): this;\r\n\tremoveListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;\r\n}\r\n\r\nconst resumableCodes = [4008, 4005, 4003, 4002, 4001, 4000, 1006, 1001];\r\nconst shouldntAttemptReconnectCodes = [4014, 4013, 4012, 4011, 4010, 4004];\r\nconst disconnectMessages = {\r\n\t4014: \"Disallowed Intents, check your client options and application page.\",\r\n\t4013: \"Invalid Intents data, check your client options.\",\r\n\t4012: \"Invalid API version.\",\r\n\t4011: \"Shard would be on over 2500 guilds. Add more shards.\",\r\n\t4010: \"Invalid sharding data, check your client options.\",\r\n\t4009: \"Session timed out.\",\r\n\t4008: \"You are being rate limited. Wait before sending more packets.\",\r\n\t4007: \"Invalid sequence. Reconnecting and starting a new session.\",\r\n\t4005: \"You sent more than one OP 2 IDENTIFY payload while the websocket was open.\",\r\n\t4004: \"Tried to connect with an invalid token.\",\r\n\t4003: \"You tried to send a packet before sending an OP 2 IDENTIFY or OP 6 RESUME.\",\r\n\t4002: \"You sent an invalid payload.\",\r\n\t4001: \"You sent an invalid opcode or invalid payload for an opcode.\"\r\n};\r\n\r\nconst connectionError = new Error(\"WS took too long to connect. Is your internet okay?\");\r\n\r\nconst wsStatusTypes = [\"Whatever 0 is. Report if you see this\", \"connected\", \"connecting\", \"closing\", \"closed\"];\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass DiscordConnector extends EventEmitter {\r\n\r\n\tpublic options: DiscordConnector[\"client\"][\"options\"];\r\n\r\n\tpublic reconnect: boolean;\r\n\r\n\tpublic betterWs: BetterWs;\r\n\r\n\tpublic heartbeatTimeout: NodeJS.Timeout | null = null;\r\n\r\n\tpublic heartbeatInterval = 0;\r\n\r\n\tpublic _trace: string | null = null;\r\n\r\n\tpublic seq = 0;\r\n\r\n\tpublic status: \"connecting\" | \"identifying\" | \"resuming\" | \"ready\" | \"disconnected\" = \"disconnected\";\r\n\r\n\tpublic sessionId: string | null = null;\r\n\r\n\tpublic lastACKAt = 0;\r\n\r\n\tpublic lastHeartbeatSend = 0;\r\n\r\n\tpublic latency = 0;\r\n\r\n\tpublic identifyAddress: string;\r\n\r\n\tpublic resumeAddress: string | null = null;\r\n\r\n\tpublic reconnecting = false;\r\n\r\n\r\n\tprivate _closing = false;\r\n\r\n\tprivate _closeCalled = false;\r\n\r\n\tprivate _openToHeartbeatTimeout: NodeJS.Timeout | null = null;\r\n\r\n\tprivate _initialHeartbeatTimeout: NodeJS.Timeout | null = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public id: number, public client: EventEmitter & { options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; } }) {\r\n\t\tsuper();\r\n\r\n\t\tthis.options = client.options;\r\n\t\tthis.reconnect = this.options.reconnect ?? true;\r\n\t\tthis.identifyAddress = this.options.endpoint!;\r\n\r\n\t\tthis.betterWs = new BetterWs(this.identifyAddress, this.options.ws!);\r\n\r\n\t\tthis.betterWs.on(\"ws_open\", () => {\r\n\t\t\tthis.status = \"connecting\";\r\n\t\t\tthis.emit(\"stateChange\", \"connecting\");\r\n\t\t\tthis.reconnecting = false;\r\n\t\t\tthis._openToHeartbeatTimeout = setTimeout(() => {\r\n\t\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} didn't receive a HELLO after the ws was opened in time`);\r\n\t\t\t\tthis._reconnect(true);\r\n\t\t\t}, 10000);\r\n\t\t});\r\n\t\tthis.betterWs.on(\"ws_receive\", msg => this.messageAction(msg));\r\n\t\tthis.betterWs.on<\"ws_close\">(\"ws_close\", (code, reason) => this.handleWsClose(code, reason));\r\n\t\tthis.betterWs.on(\"debug\", event => this.client.emit(\"error\", event));\r\n\t\tthis.betterWs.on(\"ws_send\", data => this.client.emit(\"rawSend\", data));\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async connect(): Promise<void> {\r\n\t\tthis._closing = false;\r\n\t\tthis._closeCalled = false;\r\n\t\tthis.client.emit(\"debug\", `Shard ${this.id} connecting to gateway`);\r\n\r\n\t\treturn this.betterWs.connect()\r\n\t\t\t.catch(e => {\r\n\t\t\t\tif (e === connectionError) return;\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tif (!this._closeCalled) this.connect();\r\n\t\t\t\t}, 5000);\r\n\t\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async disconnect(): Promise<void> {\r\n\t\tthis._closing = true;\r\n\t\tthis._closeCalled = true;\r\n\t\treturn this.betterWs.close(1000, \"Disconnected by User\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate async messageAction(message: GatewayReceivePayload): Promise<void> {\r\n\t\tthis.client.emit(\"rawReceive\", message);\r\n\t\tconst withShardID: import(\"./Types\").IGatewayMessage = Object.assign(message, { shard_id: this.id });\r\n\t\tthis.client.emit(\"event\", withShardID);\r\n\r\n\t\tswitch (withShardID.op) {\r\n\t\tcase OP.DISPATCH:\r\n\t\t\tthis.handleDispatch(withShardID);\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.HEARTBEAT:\r\n\t\t\tthis.heartbeat();\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.RECONNECT:\r\n\t\t\tthis.client.emit(\"debug\", `Gateway asked shard ${this.id} to reconnect`);\r\n\t\t\tif (this.reconnect) this._reconnect(true);\r\n\t\t\telse this.disconnect();\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.INVALID_SESSION:\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${this.id}'s session was invalidated`);\r\n\t\t\tif (withShardID.d && this.sessionId) this.resume();\r\n\t\t\telse {\r\n\t\t\t\tthis.seq = 0;\r\n\t\t\t\tthis.sessionId = \"\";\r\n\t\t\t\tthis.emit(\"queueIdentify\", this.id);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.HELLO:\r\n\t\t\tif (this._openToHeartbeatTimeout) clearTimeout(this._openToHeartbeatTimeout);\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} received HELLO`);\r\n\t\t\tthis.lastACKAt = Date.now();\r\n\t\t\tthis.heartbeatInterval = withShardID.d.heartbeat_interval;\r\n\t\t\tthis._initialHeartbeatTimeout = setTimeout(() => this.heartbeat(), this.heartbeatInterval * Math.random());\r\n\t\t\tthis._trace = (withShardID.d as unknown as { _trace: string })._trace;\r\n\t\t\tthis._onHello();\r\n\t\t\tbreak;\r\n\r\n\t\tcase OP.HEARTBEAT_ACK:\r\n\t\t\tthis.lastACKAt = Date.now();\r\n\t\t\tthis.latency = this.lastACKAt - this.lastHeartbeatSend;\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate async _reconnect(resume = false): Promise<void> {\r\n\t\tthis.betterWs._internal.openRejector?.(connectionError);\r\n\t\tthis.reconnecting = resume;\r\n\t\tawait this.betterWs.close(resume ? 4000 : 1012, \"reconnecting\");\r\n\t\tif (resume) {\r\n\t\t\tthis.clearHeartBeat();\r\n\t\t\tif (this.resumeAddress) this.betterWs.address = this.resumeAddress;\r\n\t\t\telse this.betterWs.address = this.identifyAddress;\r\n\t\t} else {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.betterWs.address = this.identifyAddress;\r\n\t\t}\r\n\t\tthis.connect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate reset(): void {\r\n\t\tthis.sessionId = null;\r\n\t\tthis.seq = 0;\r\n\t\tthis.lastACKAt = 0;\r\n\t\tthis._trace = null;\r\n\t\tthis.clearHeartBeat();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate setHeartBeat(): void {\r\n\t\tthis.heartbeatTimeout = setInterval(() => {\r\n\t\t\tif (this.lastACKAt <= Date.now() - (this.heartbeatInterval + 5000)) {\r\n\t\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} has not received a heartbeat ACK in ${this.heartbeatInterval + 5000}ms.`);\r\n\t\t\t\tif (this.reconnect) this._reconnect(true);\r\n\t\t\t\telse this.disconnect();\r\n\t\t\t} else this.heartbeat();\r\n\t\t}, this.heartbeatInterval);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate clearHeartBeat(): void {\r\n\t\tif (this.heartbeatTimeout) clearInterval(this.heartbeatTimeout);\r\n\t\tif (this._initialHeartbeatTimeout) clearTimeout(this._initialHeartbeatTimeout);\r\n\t\tthis.heartbeatTimeout = null;\r\n\t\tthis._initialHeartbeatTimeout = null;\r\n\t\tthis.heartbeatInterval = 0;\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate _onHello(): void {\r\n\t\tif (this.sessionId) return void this.resume();\r\n\t\telse this.emit(\"queueIdentify\", this.id);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async identify(): Promise<void> {\r\n\t\tif (this.betterWs.status !== 1) {\r\n\t\t\tthis.client.emit(\"error\", `Shard ${this.id} was attempting to identify when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`);\r\n\t\t\treturn this._reconnect(true);\r\n\t\t}\r\n\t\tthis.client.emit(\"debug\", `Shard ${this.id} is identifying`);\r\n\r\n\t\tthis.status = \"identifying\";\r\n\t\tthis.emit(\"stateChange\", \"identifying\");\r\n\r\n\t\tconst data = {\r\n\t\t\top: OP.IDENTIFY,\r\n\t\t\td: {\r\n\t\t\t\ttoken: this.options.token,\r\n\t\t\t\tproperties: {\r\n\t\t\t\t\tos: process.platform,\r\n\t\t\t\t\tbrowser: \"CloudStorm\",\r\n\t\t\t\t\tdevice: \"CloudStorm\"\r\n\t\t\t\t},\r\n\t\t\t\tlarge_threshold: this.options.largeGuildThreshold,\r\n\t\t\t\tshard: [this.id, this.options.totalShards ?? 1],\r\n\t\t\t\tintents: this.options.intents ? Intents.resolve(this.options.intents) : 0\r\n\t\t\t}\r\n\t\t} as GatewayIdentify;\r\n\r\n\t\tif (this.options.initialPresence) data.d.presence = this._checkPresenceData(this.options.initialPresence);\r\n\t\treturn this.betterWs.sendMessage(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async resume(): Promise<void> {\r\n\t\tif (this.betterWs.status !== 1) {\r\n\t\t\tthis.client.emit(\"error\", `Shard ${this.id} was attempting to resume when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`);\r\n\t\t\treturn this._reconnect(true);\r\n\t\t}\r\n\t\tthis.client.emit(\"debug\", `Shard ${this.id} is resuming`);\r\n\r\n\t\tthis.status = \"resuming\";\r\n\t\tthis.emit(\"stateChange\", \"resuming\");\r\n\r\n\t\treturn this.betterWs.sendMessage({\r\n\t\t\top: OP.RESUME,\r\n\t\t\td: { seq: this.seq, token: this.options.token, session_id: this.sessionId! }\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate heartbeat(): void {\r\n\t\tif (this.betterWs.status !== 1) {\r\n\t\t\tthis.client.emit(\"error\", `Shard ${this.id} was attempting to heartbeat when the ws was not open. Was ${wsStatusTypes[this.betterWs.status]}`);\r\n\t\t\treturn void this._reconnect(true);\r\n\t\t}\r\n\t\tthis.betterWs.sendMessage({ op: OP.HEARTBEAT, d: this.seq === 0 ? null : this.seq });\r\n\t\tthis.lastHeartbeatSend = Date.now();\r\n\t\tif (this._initialHeartbeatTimeout) {\r\n\t\t\tclearTimeout(this._initialHeartbeatTimeout);\r\n\t\t\tthis._initialHeartbeatTimeout = null;\r\n\t\t}\r\n\t\tif (!this.heartbeatTimeout) this.setHeartBeat();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate handleDispatch(message: import(\"./Types\").IGatewayDispatch): void {\r\n\t\tthis.client.emit(\"dispatch\", message);\r\n\r\n\t\tif (message.s) {\r\n\t\t\tif (message.s > this.seq + 1) {\r\n\t\t\t\tthis.client.emit(\"debug\", `Shard ${this.id} invalid sequence: { current: ${this.seq} message: ${message.s} }`);\r\n\t\t\t\tthis.seq = message.s;\r\n\t\t\t\tthis.resume();\r\n\t\t\t}\r\n\t\t\tthis.seq = message.s;\r\n\t\t}\r\n\t\tswitch (message.t) {\r\n\t\tcase \"READY\":\r\n\t\tcase \"RESUMED\":\r\n\t\t\tif (message.t === \"READY\") {\r\n\t\t\t\tif (message.d.resume_gateway_url) this.resumeAddress = `${message.d.resume_gateway_url}?v=${GATEWAY_VERSION}&encoding=${this.options.ws?.encoding === \"etf\" ? \"etf\" : \"json\"}${this.options.ws?.compress ? \"&compress=zlib-stream\" : \"\"}`;\r\n\t\t\t\tthis.sessionId = message.d.session_id;\r\n\t\t\t}\r\n\t\t\tthis.status = \"ready\";\r\n\t\t\tthis.emit(\"stateChange\", \"ready\");\r\n\t\t\tthis._trace = (message.d as unknown as { _trace: string })._trace;\r\n\t\t\tthis.emit(\"ready\", message.t === \"RESUMED\");\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tvoid 0;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate handleWsClose(code: number, reason: string): void {\r\n\t\tlet gracefulClose = false;\r\n\t\tthis.status = \"disconnected\";\r\n\t\tthis.emit(\"stateChange\", \"disconnected\");\r\n\t\tthis.clearHeartBeat();\r\n\r\n\t\tconst isManualClose = code === 1000 && this._closing;\r\n\r\n\t\tconst message = disconnectMessages[code as keyof typeof disconnectMessages];\r\n\t\tconst isRecoverable = resumableCodes.includes(code);\r\n\t\tconst shouldntReconnect = shouldntAttemptReconnectCodes.includes(code) || isManualClose;\r\n\r\n\t\tif (isRecoverable && this.resumeAddress) this.betterWs.address = this.resumeAddress;\r\n\t\telse this.betterWs.address = this.identifyAddress;\r\n\r\n\t\tif (message) this.client.emit(\"error\", message);\r\n\r\n\t\tif (isManualClose || this.reconnecting) gracefulClose = true;\r\n\r\n\t\tthis._closing = false;\r\n\r\n\t\tthis.emit(\"disconnect\", code, reason, gracefulClose);\r\n\r\n\t\tif (!shouldntReconnect && this.reconnect) this.connect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async presenceUpdate(data: Partial<GatewayPresenceUpdateData>): Promise<void> {\r\n\t\treturn this.betterWs.sendMessage({ op: OP.PRESENCE_UPDATE, d: this._checkPresenceData(data) });\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async voiceStateUpdate(data: GatewayVoiceStateUpdateData & { self_deaf?: boolean; self_mute?: boolean; }): Promise<void> {\r\n\t\tif (!data) return Promise.resolve();\r\n\t\treturn this.betterWs.sendMessage({ op: OP.VOICE_STATE_UPDATE, d: this._checkVoiceStateUpdateData(data) });\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async requestGuildMembers(data: GatewayRequestGuildMembersData & { limit?: number; }): Promise<void> {\r\n\t\treturn this.betterWs.sendMessage({ op: OP.REQUEST_GUILD_MEMBERS, d: this._checkRequestGuildMembersData(data) });\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkPresenceData(data: Parameters<DiscordConnector[\"presenceUpdate\"]>[\"0\"]): GatewayPresenceUpdateData {\r\n\t\tdata.status = data.status ?? PresenceUpdateStatus.Online;\r\n\t\tdata.activities = data.activities && Array.isArray(data.activities) ? data.activities : [];\r\n\r\n\t\tif (data.activities) {\r\n\t\t\tfor (const activity of data.activities) {\r\n\t\t\t\tconst index = data.activities.indexOf(activity);\r\n\t\t\t\tif (activity.type === undefined) activity.type = activity.url ? 1 : 0;\r\n\t\t\t\tif (!activity.name) {\r\n\t\t\t\t\tif (activity.state && activity.type === 4) activity.name = \"Custom Status\";\r\n\t\t\t\t\telse data.activities.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdata.afk = data.afk ?? false;\r\n\t\tdata.since = data.since ?? Date.now();\r\n\t\treturn data as GatewayPresenceUpdateData;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkVoiceStateUpdateData(data: Parameters<DiscordConnector[\"voiceStateUpdate\"]>[\"0\"]): GatewayVoiceStateUpdateData {\r\n\t\tdata.channel_id = data.channel_id ?? null;\r\n\t\tdata.self_mute = data.self_mute ?? false;\r\n\t\tdata.self_deaf = data.self_deaf ?? false;\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkRequestGuildMembersData(data: Parameters<DiscordConnector[\"requestGuildMembers\"]>[\"0\"]): GatewayRequestGuildMembersData {\r\n\t\tconst withQuery = data as GatewayRequestGuildMembersDataWithQuery;\r\n\t\tconst withUserIDs = data as GatewayRequestGuildMembersDataWithUserIds;\r\n\t\tif (!withQuery.query && !withUserIDs.user_ids) withQuery.query = \"\";\r\n\t\tif (withQuery.query && withUserIDs.user_ids) delete (data as { query?: string; }).query;\r\n\t\tdata.limit = data.limit ?? 10;\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nexport = DiscordConnector;\r\n","\"use strict\";\r\n\r\nimport { EventEmitter } from \"events\";\r\nimport DC = require(\"./DiscordConnector\");\r\n\r\ninterface ShardEvents {\r\n\tdisconnect: [number, string, boolean];\r\n\tready: [boolean];\r\n\tqueueIdentify: [number];\r\n}\r\n\r\ninterface Shard {\r\n\taddListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\temit<E extends keyof ShardEvents>(event: E, ...args: ShardEvents[E]): boolean;\r\n\teventNames(): Array<keyof ShardEvents>;\r\n\tlistenerCount(event: keyof ShardEvents): number;\r\n\tlisteners(event: keyof ShardEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\ton<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\tonce<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\tprependListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n\trawListeners(event: keyof ShardEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof ShardEvents): this;\r\n\tremoveListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass Shard extends EventEmitter {\r\n\r\n\tpublic ready = false;\r\n\r\n\tpublic connector: DC;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public id: number, public client: EventEmitter & { options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; } }) {\r\n\t\tsuper();\r\n\r\n\t\tthis.connector = new DC(id, client);\r\n\t\tthis.connector.on(\"disconnect\", (...args) => {\r\n\t\t\tthis.ready = false;\r\n\t\t\tthis.emit(\"disconnect\", ...args);\r\n\t\t});\r\n\t\tthis.connector.on(\"ready\", resume => this.emit(\"ready\", resume));\r\n\t\tthis.connector.on(\"queueIdentify\", () => this.emit(\"queueIdentify\", this.id));\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic get latency(): number {\r\n\t\treturn this.connector.latency;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic connect(): void {\r\n\t\tthis.connector.connect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic disconnect(): Promise<void> {\r\n\t\treturn this.connector.disconnect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic presenceUpdate(data: Parameters<Shard[\"connector\"][\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.connector.presenceUpdate(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic voiceStateUpdate(data: Parameters<Shard[\"connector\"][\"voiceStateUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.connector.voiceStateUpdate(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic requestGuildMembers(data: Parameters<Shard[\"connector\"][\"requestGuildMembers\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.connector.requestGuildMembers(data);\r\n\t}\r\n}\r\n\r\nexport = Shard;\r\n","\"use strict\";\r\n\r\nimport Shard = require(\"./Shard\");\r\nimport { LocalBucket } from \"snowtransfer\";\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ShardManager {\r\n\r\n\tpublic options: ShardManager[\"client\"][\"options\"];\r\n\r\n\tpublic shards: { [id: number]: Shard } = {};\r\n\r\n\tpublic identifyBucket = new LocalBucket(1000, 1000 * 60 * 60 * 24);\r\n\r\n\tpublic concurrencyBucket: LocalBucket | null = null;\r\n\r\n\r\n\r\n\r\n\tpublic constructor(public client: import(\"events\").EventEmitter & { options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; } }) {\r\n\t\tthis.options = client.options;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic spawn(): void {\r\n\t\tif (!this.concurrencyBucket) throw new Error(\"Trying to spawn shards without calling Client.connect()\");\r\n\t\tfor (const id of (this.options.shards === \"auto\" ? Array(this.options.totalShards).fill(0).map((_, index) => index) : this.options.shards ?? [0])) {\r\n\t\t\tthis.client.emit(\"debug\", `Spawned shard ${id}`);\r\n\t\t\tthis.shards[id] = new Shard(id, this.client);\r\n\t\t\tthis._addListener(this.shards[id]);\r\n\t\t\tthis.shards[id].connector.connect();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tpublic disconnect(): void {\r\n\t\tfor (const shardKey in this.shards) {\r\n\t\t\tthis.shards[shardKey].disconnect();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _addListener(shard: Shard): void {\r\n\t\tshard.on(\"ready\", (resume) => {\r\n\t\t\tshard.ready = true;\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${shard.id} ${resume ? \"has resumed\" : \"is ready\"}`);\r\n\t\t\tthis.client.emit(\"shardReady\", { id: shard.id, ready: !resume });\r\n\t\t\tthis._checkReady();\r\n\t\t});\r\n\t\tshard.on(\"queueIdentify\", (shardId) => {\r\n\t\t\tif (!this.shards[shardId]) return this.client.emit(\"debug\", `Received a queueIdentify event for shard ${shardId} but it does not exist. Was it removed?`);\r\n\t\t\tthis.client.emit(\"debug\", `Shard ${shardId} is ready to identify`);\r\n\t\t\tif (shard.connector.reconnecting) return shard.connector.resume();\r\n\t\t\tthis.concurrencyBucket?.queue(() => {\r\n\t\t\t\tthis.identifyBucket.queue(() => this.shards[shardId].connector.identify());\r\n\t\t\t});\r\n\t\t});\r\n\t\tshard.on(\"disconnect\", (code, reason, gracefulClose) => {\r\n\t\t\tthis.client.emit(\"debug\", `Websocket of shard ${shard.id} closed with code ${code} and reason: ${reason ?? \"None\"}`);\r\n\t\t\tif (code === 1000 && gracefulClose) return this._checkDisconnect();\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkReady(): void {\r\n\t\tfor (const shardId in this.shards) {\r\n\t\t\tif (this.shards[shardId]) {\r\n\t\t\t\tif (!this.shards[shardId].ready) return;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.client.emit(\"ready\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _checkDisconnect(): void {\r\n\t\tfor (const shardId in this.shards) {\r\n\t\t\tif (this.shards[shardId]) {\r\n\t\t\t\tif (this.shards[shardId].connector.status !== \"disconnected\") return;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.client.emit(\"disconnected\");\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async presenceUpdate(data: Parameters<Shard[\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\tfor (const shardKey in this.shards) {\r\n\t\t\tif (this.shards[shardKey]) {\r\n\t\t\t\tconst shard = this.shards[shardKey];\r\n\t\t\t\tthis.shardPresenceUpdate(shard.id, data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic shardPresenceUpdate(shardId: number, data: Parameters<Shard[\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn new Promise((res, rej) => {\r\n\t\t\tconst shard = this.shards[shardId];\r\n\t\t\tif (!shard) rej(new Error(`Shard ${shardId} does not exist`));\r\n\t\t\tif (!shard.ready) return;\r\n\t\t\tshard.presenceUpdate(data).then(result => res(result)).catch(e => rej(e as Error));\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic voiceStateUpdate(shardId: number, data: Parameters<Shard[\"voiceStateUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn new Promise((res, rej) => {\r\n\t\t\tconst shard = this.shards[shardId];\r\n\t\t\tif (!shard) rej(new Error(`Shard ${shardId} does not exist`));\r\n\t\t\tif (!shard.ready) return;\r\n\t\t\tshard.voiceStateUpdate(data).then(result => res(result)).catch(e => rej(e as Error));\r\n\t\t});\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic requestGuildMembers(shardId: number, data: Parameters<Shard[\"requestGuildMembers\"]>[\"0\"]): Promise<void> {\r\n\t\treturn new Promise((res, rej) => {\r\n\t\t\tconst shard = this.shards[shardId];\r\n\t\t\tif (!shard) rej(new Error(`Shard ${shardId} does not exist`));\r\n\t\t\tif (!shard.ready) return;\r\n\t\t\tshard.requestGuildMembers(data).then(result => res(result)).catch(e => rej(e as Error));\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport = ShardManager;\r\n","\"use strict\";\r\n\r\nimport fs = require(\"fs\");\r\nimport path = require(\"path\");\r\n\r\nconst version = JSON.parse(fs.readFileSync(path.join(__dirname, \"../package.json\"), { encoding: \"utf8\" })).version as string;\r\nimport { EventEmitter } from \"events\";\r\nimport Constants = require(\"./Constants\");\r\nimport { SnowTransfer, LocalBucket } from \"snowtransfer\";\r\nimport ShardManager = require(\"./ShardManager\");\r\nimport type {\r\n\tGatewaySendPayload,\r\n\tGatewayReceivePayload,\r\n\tAPIGatewayBotInfo\r\n} from \"discord-api-types/v10\";\r\n\r\ninterface ClientEvents {\r\n\tdebug: [string];\r\n\trawSend: [GatewaySendPayload];\r\n\trawReceive: [GatewayReceivePayload];\r\n\terror: [string];\r\n\r\n\tevent: [import(\"./Types\").IGatewayMessage];\r\n\tdispatch: [import(\"./Types\").IGatewayDispatch];\r\n\tshardReady: [{ id: number; ready: boolean; }];\r\n\tready: [];\r\n\tdisconnected: [];\r\n}\r\n\r\ninterface Client {\r\n\taddListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\temit<E extends keyof ClientEvents>(event: E, ...args: ClientEvents[E]): boolean;\r\n\teventNames(): Array<keyof ClientEvents>;\r\n\tlistenerCount(event: keyof ClientEvents): number;\r\n\tlisteners(event: keyof ClientEvents): Array<(...args: Array<any>) => any>;\r\n\toff<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\ton<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\tonce<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\tprependListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\tprependOnceListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n\trawListeners(event: keyof ClientEvents): Array<(...args: Array<any>) => any>;\r\n\tremoveAllListeners(event?: keyof ClientEvents): this;\r\n\tremoveListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nclass Client extends EventEmitter {\r\n\r\n\tpublic token: string;\r\n\r\n\tpublic options: Omit<import(\"./Types\").IClientOptions, \"snowtransferInstance\"> & { token: string; endpoint?: string; };\r\n\r\n\tpublic shardManager: ShardManager;\r\n\r\n\tpublic version = version;\r\n\r\n\tprivate readonly _restClient: SnowTransfer;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic constructor(token: string, options: import(\"./Types\").IClientOptions = {}) {\r\n\t\tsuper();\r\n\t\tif (!token) throw new Error(\"Missing token!\");\r\n\t\tthis.options = {\r\n\t\t\tlargeGuildThreshold: 250,\r\n\t\t\tshards: \"auto\",\r\n\t\t\treconnect: true,\r\n\t\t\tintents: 0,\r\n\t\t\ttoken: \"\",\r\n\t\t\tws: {\r\n\t\t\t\tcompress: true,\r\n\t\t\t\tencoding: \"json\"\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis._restClient = options.snowtransferInstance ? options.snowtransferInstance : new SnowTransfer(token);\r\n\t\tdelete options.snowtransferInstance;\r\n\t\tthis.token = token.startsWith(\"Bot \") ? token.substring(4) : token;\r\n\t\tObject.assign(this.options, options);\r\n\t\tthis.options.token = token;\r\n\t\tthis.shardManager = new ShardManager(this);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async connect(): Promise<void> {\r\n\t\tconst initial = await this.fetchConnectInfo();\r\n\t\tif (this.options.shards === \"auto\") this.options.totalShards = initial;\r\n\t\tthis.shardManager.spawn();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async fetchConnectInfo(): Promise<number> {\r\n\t\tconst gateway = await this.getGatewayBot();\r\n\t\tthis._updateEndpoint(gateway.url);\r\n\t\tconst oldQueueConcurrency = [] as Array<() => unknown>;\r\n\t\tconst oldQueueIdentify = [] as Array<() => unknown>;\r\n\t\tif (this.shardManager.concurrencyBucket?.fnQueue.length) {\r\n\t\t\toldQueueConcurrency.push(...this.shardManager.concurrencyBucket.fnQueue);\r\n\t\t\tthis.shardManager.concurrencyBucket.dropQueue();\r\n\t\t}\r\n\t\tif (this.shardManager.identifyBucket.fnQueue.length) oldQueueIdentify.push(...this.shardManager.identifyBucket.fnQueue);\r\n\t\tthis.shardManager.identifyBucket.dropQueue();\r\n\t\tthis.shardManager.concurrencyBucket = new LocalBucket(gateway.session_start_limit.max_concurrency, 5000);\r\n\t\tthis.shardManager.identifyBucket.remaining = gateway.session_start_limit.remaining;\r\n\t\tthis.shardManager.identifyBucket.reset = gateway.session_start_limit.reset_after;\r\n\t\tfor (const fn of oldQueueConcurrency) {\r\n\t\t\tthis.shardManager.concurrencyBucket.queue(fn);\r\n\t\t}\r\n\t\tfor (const fn of oldQueueIdentify) {\r\n\t\t\tthis.shardManager.identifyBucket.queue(fn);\r\n\t\t}\r\n\t\treturn gateway.shards;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async getGateway(): Promise<string> {\r\n\t\tconst gatewayData = await this._restClient.bot.getGateway();\r\n\t\treturn gatewayData.url;\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async getGatewayBot(): Promise<APIGatewayBotInfo> {\r\n\t\treturn this._restClient.bot.getGatewayBot();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic disconnect(): void {\r\n\t\treturn this.shardManager.disconnect();\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic async presenceUpdate(data: Parameters<Client[\"shardManager\"][\"presenceUpdate\"]>[\"0\"]): Promise<void> {\r\n\t\treturn this.shardManager.presenceUpdate(data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic shardPresenceUpdate(shardId: number, data: Parameters<Client[\"shardManager\"][\"shardPresenceUpdate\"]>[\"1\"]): Promise<void> {\r\n\t\treturn this.shardManager.shardPresenceUpdate(shardId, data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic voiceStateUpdate(shardId: number, data: Parameters<Client[\"shardManager\"][\"voiceStateUpdate\"]>[\"1\"]): Promise<void> {\r\n\t\treturn this.shardManager.voiceStateUpdate(shardId, data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tpublic requestGuildMembers(shardId: number, data: Parameters<Client[\"shardManager\"][\"requestGuildMembers\"]>[\"1\"]): Promise<void> {\r\n\t\tif (!data.guild_id) throw new Error(\"You need to pass a guild_id\");\r\n\t\treturn this.shardManager.requestGuildMembers(shardId, data);\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tprivate _updateEndpoint(gatewayUrl: string): void {\r\n\t\tthis.options.endpoint = `${gatewayUrl}?v=${Constants.GATEWAY_VERSION}&encoding=${this.options.ws?.encoding === \"etf\" ? \"etf\" : \"json\"}${this.options.ws?.compress ? \"&compress=zlib-stream\" : \"\"}`;\r\n\t}\r\n}\r\n\r\nexport = Client;\r\n","import Client2 = require(\"./Client\");\r\nimport Constants = require(\"./Constants\");\r\nimport Intents = require(\"./Intents\");\r\n\r\nimport Shard2 = require(\"./Shard\");\r\nimport ShardManager2 = require(\"./ShardManager\");\r\n\r\nimport BetterWs2 = require(\"./BetterWs\");\r\n\r\nexport { BetterWs2 as BetterWs, Client2 as Client, Constants, Intents, Shard2 as Shard, ShardManager2 as ShardManager };\r\nexport * from \"./Types\";\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloudstorm",
3
- "version": "0.10.11",
3
+ "version": "0.11.0",
4
4
  "description": "Minimalistic Discord Gateway library",
5
5
  "main": "./dist/index.js",
6
6
  "engines": {
@@ -14,18 +14,18 @@
14
14
  "author": "wolke <wolke@weeb.sh>",
15
15
  "license": "MIT",
16
16
  "dependencies": {
17
- "discord-api-types": "^0.37.98",
18
- "snowtransfer": "^0.10.7"
17
+ "discord-api-types": "^0.37.111",
18
+ "snowtransfer": "^0.10.8"
19
19
  },
20
20
  "devDependencies": {
21
- "@types/node": "22.5.0",
22
- "@typescript-eslint/eslint-plugin": "^8.3.0",
23
- "@typescript-eslint/parser": "^8.3.0",
24
- "eslint": "^9.9.1",
25
- "tsup": "^8.2.4",
26
- "typedoc": "^0.26.6",
27
- "typedoc-plugin-mdn-links": "^3.2.10",
28
- "typescript": "^5.5.4"
21
+ "@types/node": "22.10.2",
22
+ "@typescript-eslint/eslint-plugin": "^8.18.1",
23
+ "@typescript-eslint/parser": "^8.18.1",
24
+ "eslint": "^9.17.0",
25
+ "tsup": "^8.3.5",
26
+ "typedoc": "^0.27.5",
27
+ "typedoc-plugin-mdn-links": "^4.0.5",
28
+ "typescript": "^5.7.2"
29
29
  },
30
30
  "files": [
31
31
  "dist",