cloudstorm 0.11.4 → 0.11.6
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 +50 -110
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import * as snowtransfer from 'snowtransfer';
|
|
2
|
-
import { LocalBucket } from 'snowtransfer';
|
|
3
|
-
import { GatewayReceivePayload, GatewayDispatchPayload, GatewayPresenceUpdateData, GatewayVoiceStateUpdateData, GatewayRequestGuildMembersData, GatewaySendPayload, APIGatewayBotInfo } from 'discord-api-types/v10';
|
|
4
|
-
import * as events from 'events';
|
|
5
1
|
import { EventEmitter } from 'events';
|
|
6
|
-
import
|
|
2
|
+
import { Inflate } from 'zlib';
|
|
3
|
+
import { SnowTransfer, LocalBucket } from 'snowtransfer';
|
|
4
|
+
import { GatewaySendPayload, GatewayReceivePayload, GatewayDispatchPayload, GatewayPresenceUpdateData, GatewayVoiceStateUpdateData, GatewayRequestGuildMembersData, APIGatewayBotInfo } from 'discord-api-types/v10';
|
|
7
5
|
|
|
8
6
|
type IntentFlags = typeof flags;
|
|
9
7
|
type IntentResolvable = number | Array<number> | keyof IntentFlags | Array<keyof IntentFlags>;
|
|
@@ -75,7 +73,7 @@ type IGatewayMessage = GatewayReceivePayload & {
|
|
|
75
73
|
type IGatewayDispatch = GatewayDispatchPayload & {
|
|
76
74
|
shard_id: number;
|
|
77
75
|
};
|
|
78
|
-
|
|
76
|
+
type IClientOptions = {
|
|
79
77
|
largeGuildThreshold?: number;
|
|
80
78
|
/**
|
|
81
79
|
* A note on "auto" sharding:
|
|
@@ -91,43 +89,53 @@ interface IClientOptions {
|
|
|
91
89
|
reconnect?: boolean;
|
|
92
90
|
initialPresence?: GatewayPresenceUpdateData;
|
|
93
91
|
intents?: IntentResolvable;
|
|
94
|
-
snowtransferInstance?:
|
|
92
|
+
snowtransferInstance?: SnowTransfer;
|
|
95
93
|
ws?: IClientWSOptions;
|
|
96
|
-
}
|
|
97
|
-
|
|
94
|
+
};
|
|
95
|
+
type IClientWSOptions = {
|
|
98
96
|
compress?: boolean;
|
|
99
97
|
encoding?: "etf" | "json";
|
|
100
98
|
headers?: Record<string, any>;
|
|
101
99
|
bypassBuckets?: boolean;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
interface BWSEvents {
|
|
100
|
+
};
|
|
101
|
+
type BWSEvents = {
|
|
105
102
|
ws_open: [];
|
|
106
103
|
ws_close: [number, string];
|
|
107
104
|
ws_receive: [any];
|
|
108
105
|
ws_send: [any];
|
|
109
106
|
debug: [string];
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
107
|
+
};
|
|
108
|
+
type ClientEvents = {
|
|
109
|
+
debug: [string];
|
|
110
|
+
rawSend: [GatewaySendPayload];
|
|
111
|
+
rawReceive: [GatewayReceivePayload];
|
|
112
|
+
error: [string];
|
|
113
|
+
event: [IGatewayMessage];
|
|
114
|
+
dispatch: [IGatewayDispatch];
|
|
115
|
+
shardReady: [{
|
|
116
|
+
id: number;
|
|
117
|
+
ready: boolean;
|
|
118
|
+
}];
|
|
119
|
+
ready: [];
|
|
120
|
+
disconnected: [];
|
|
121
|
+
};
|
|
122
|
+
type ConnectorEvents = {
|
|
123
|
+
queueIdentify: [number];
|
|
124
|
+
ready: [boolean];
|
|
125
|
+
disconnect: [number, string, boolean];
|
|
126
|
+
stateChange: ["connecting" | "identifying" | "resuming" | "ready" | "disconnected"];
|
|
127
|
+
};
|
|
128
|
+
type ShardEvents = {
|
|
129
|
+
disconnect: [number, string, boolean];
|
|
130
|
+
ready: [boolean];
|
|
131
|
+
queueIdentify: [number];
|
|
132
|
+
};
|
|
133
|
+
|
|
126
134
|
/**
|
|
127
135
|
* Helper Class for simplifying the websocket connection to Discord.
|
|
128
136
|
* @since 0.1.4
|
|
129
137
|
*/
|
|
130
|
-
declare class BetterWs extends EventEmitter {
|
|
138
|
+
declare class BetterWs extends EventEmitter<BWSEvents> {
|
|
131
139
|
address: string;
|
|
132
140
|
options: Omit<IClientWSOptions, "encoding"> & {
|
|
133
141
|
encoding?: IClientWSOptions["encoding"] | "other";
|
|
@@ -147,8 +155,10 @@ declare class BetterWs extends EventEmitter {
|
|
|
147
155
|
openRejector: ((reason?: any) => void) | null;
|
|
148
156
|
/** A promise that resolves when the connection is fully closed or null if not closing the connection if any. */
|
|
149
157
|
closePromise: Promise<void> | null;
|
|
158
|
+
/** A timer when the socket is half closing where the server MUST close it OR ELSE */
|
|
159
|
+
closeTimer: NodeJS.Timeout | null;
|
|
150
160
|
/** A zlib Inflate instance if messages sent/received are going to be compressed. Auto created on connect. */
|
|
151
|
-
zlib:
|
|
161
|
+
zlib: Inflate | null;
|
|
152
162
|
};
|
|
153
163
|
/** If a request is going through to initiate a WebSocket connection and hasn't been upgraded by the server yet. */
|
|
154
164
|
private _connecting;
|
|
@@ -230,36 +240,15 @@ declare class BetterWs extends EventEmitter {
|
|
|
230
240
|
private _processFrame;
|
|
231
241
|
}
|
|
232
242
|
|
|
233
|
-
interface ConnectorEvents {
|
|
234
|
-
queueIdentify: [number];
|
|
235
|
-
ready: [boolean];
|
|
236
|
-
disconnect: [number, string, boolean];
|
|
237
|
-
stateChange: ["connecting" | "identifying" | "resuming" | "ready" | "disconnected"];
|
|
238
|
-
}
|
|
239
|
-
interface DiscordConnector {
|
|
240
|
-
addListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;
|
|
241
|
-
emit<E extends keyof ConnectorEvents>(event: E, ...args: ConnectorEvents[E]): boolean;
|
|
242
|
-
eventNames(): Array<keyof ConnectorEvents>;
|
|
243
|
-
listenerCount(event: keyof ConnectorEvents): number;
|
|
244
|
-
listeners(event: keyof ConnectorEvents): Array<(...args: Array<any>) => any>;
|
|
245
|
-
off<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;
|
|
246
|
-
on<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;
|
|
247
|
-
once<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;
|
|
248
|
-
prependListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;
|
|
249
|
-
prependOnceListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;
|
|
250
|
-
rawListeners(event: keyof ConnectorEvents): Array<(...args: Array<any>) => any>;
|
|
251
|
-
removeAllListeners(event?: keyof ConnectorEvents): this;
|
|
252
|
-
removeListener<E extends keyof ConnectorEvents>(event: E, listener: (...args: ConnectorEvents[E]) => any): this;
|
|
253
|
-
}
|
|
254
243
|
/**
|
|
255
244
|
* Class used for acting based on received events.
|
|
256
245
|
*
|
|
257
246
|
* This class is automatically instantiated by the library and is documented for reference.
|
|
258
247
|
* @since 0.1.4
|
|
259
248
|
*/
|
|
260
|
-
declare class DiscordConnector extends EventEmitter {
|
|
249
|
+
declare class DiscordConnector extends EventEmitter<ConnectorEvents> {
|
|
261
250
|
id: number;
|
|
262
|
-
client: EventEmitter & {
|
|
251
|
+
client: EventEmitter<ClientEvents> & {
|
|
263
252
|
options: Omit<IClientOptions, "snowtransferInstance"> & {
|
|
264
253
|
token: string;
|
|
265
254
|
endpoint?: string;
|
|
@@ -308,7 +297,7 @@ declare class DiscordConnector extends EventEmitter {
|
|
|
308
297
|
* @param id id of the shard that created this class.
|
|
309
298
|
* @param client Main client instance.
|
|
310
299
|
*/
|
|
311
|
-
constructor(id: number, client: EventEmitter & {
|
|
300
|
+
constructor(id: number, client: EventEmitter<ClientEvents> & {
|
|
312
301
|
options: Omit<IClientOptions, "snowtransferInstance"> & {
|
|
313
302
|
token: string;
|
|
314
303
|
endpoint?: string;
|
|
@@ -429,35 +418,15 @@ declare class DiscordConnector extends EventEmitter {
|
|
|
429
418
|
private _checkRequestGuildMembersData;
|
|
430
419
|
}
|
|
431
420
|
|
|
432
|
-
interface ShardEvents {
|
|
433
|
-
disconnect: [number, string, boolean];
|
|
434
|
-
ready: [boolean];
|
|
435
|
-
queueIdentify: [number];
|
|
436
|
-
}
|
|
437
|
-
interface Shard {
|
|
438
|
-
addListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;
|
|
439
|
-
emit<E extends keyof ShardEvents>(event: E, ...args: ShardEvents[E]): boolean;
|
|
440
|
-
eventNames(): Array<keyof ShardEvents>;
|
|
441
|
-
listenerCount(event: keyof ShardEvents): number;
|
|
442
|
-
listeners(event: keyof ShardEvents): Array<(...args: Array<any>) => any>;
|
|
443
|
-
off<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;
|
|
444
|
-
on<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;
|
|
445
|
-
once<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;
|
|
446
|
-
prependListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;
|
|
447
|
-
prependOnceListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;
|
|
448
|
-
rawListeners(event: keyof ShardEvents): Array<(...args: Array<any>) => any>;
|
|
449
|
-
removeAllListeners(event?: keyof ShardEvents): this;
|
|
450
|
-
removeListener<E extends keyof ShardEvents>(event: E, listener: (...args: ShardEvents[E]) => any): this;
|
|
451
|
-
}
|
|
452
421
|
/**
|
|
453
422
|
* Shard class, which provides a wrapper around the DiscordConnector with metadata like the id of the shard.
|
|
454
423
|
*
|
|
455
424
|
* This class is automatically instantiated by the library and is documented for reference.
|
|
456
425
|
* @since 0.1.4
|
|
457
426
|
*/
|
|
458
|
-
declare class Shard extends EventEmitter {
|
|
427
|
+
declare class Shard extends EventEmitter<ShardEvents> {
|
|
459
428
|
id: number;
|
|
460
|
-
client: EventEmitter & {
|
|
429
|
+
client: EventEmitter<ClientEvents> & {
|
|
461
430
|
options: Omit<IClientOptions, "snowtransferInstance"> & {
|
|
462
431
|
token: string;
|
|
463
432
|
endpoint?: string;
|
|
@@ -472,7 +441,7 @@ declare class Shard extends EventEmitter {
|
|
|
472
441
|
* @param id id of the shard.
|
|
473
442
|
* @param client Main class used for forwarding events.
|
|
474
443
|
*/
|
|
475
|
-
constructor(id: number, client: EventEmitter & {
|
|
444
|
+
constructor(id: number, client: EventEmitter<ClientEvents> & {
|
|
476
445
|
options: Omit<IClientOptions, "snowtransferInstance"> & {
|
|
477
446
|
token: string;
|
|
478
447
|
endpoint?: string;
|
|
@@ -519,7 +488,7 @@ declare class Shard extends EventEmitter {
|
|
|
519
488
|
* @since 0.1.4
|
|
520
489
|
*/
|
|
521
490
|
declare class ShardManager {
|
|
522
|
-
client:
|
|
491
|
+
client: EventEmitter<ClientEvents> & {
|
|
523
492
|
options: Omit<IClientOptions, "snowtransferInstance"> & {
|
|
524
493
|
token: string;
|
|
525
494
|
endpoint?: string;
|
|
@@ -538,7 +507,7 @@ declare class ShardManager {
|
|
|
538
507
|
/**
|
|
539
508
|
* Create a new ShardManager.
|
|
540
509
|
*/
|
|
541
|
-
constructor(client:
|
|
510
|
+
constructor(client: EventEmitter<ClientEvents> & {
|
|
542
511
|
options: Omit<IClientOptions, "snowtransferInstance"> & {
|
|
543
512
|
token: string;
|
|
544
513
|
endpoint?: string;
|
|
@@ -599,40 +568,11 @@ declare class ShardManager {
|
|
|
599
568
|
requestGuildMembers(shardId: number, data: Parameters<Shard["requestGuildMembers"]>["0"]): Promise<void>;
|
|
600
569
|
}
|
|
601
570
|
|
|
602
|
-
interface ClientEvents {
|
|
603
|
-
debug: [string];
|
|
604
|
-
rawSend: [GatewaySendPayload];
|
|
605
|
-
rawReceive: [GatewayReceivePayload];
|
|
606
|
-
error: [string];
|
|
607
|
-
event: [IGatewayMessage];
|
|
608
|
-
dispatch: [IGatewayDispatch];
|
|
609
|
-
shardReady: [{
|
|
610
|
-
id: number;
|
|
611
|
-
ready: boolean;
|
|
612
|
-
}];
|
|
613
|
-
ready: [];
|
|
614
|
-
disconnected: [];
|
|
615
|
-
}
|
|
616
|
-
interface Client {
|
|
617
|
-
addListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;
|
|
618
|
-
emit<E extends keyof ClientEvents>(event: E, ...args: ClientEvents[E]): boolean;
|
|
619
|
-
eventNames(): Array<keyof ClientEvents>;
|
|
620
|
-
listenerCount(event: keyof ClientEvents): number;
|
|
621
|
-
listeners(event: keyof ClientEvents): Array<(...args: Array<any>) => any>;
|
|
622
|
-
off<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;
|
|
623
|
-
on<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;
|
|
624
|
-
once<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;
|
|
625
|
-
prependListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;
|
|
626
|
-
prependOnceListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;
|
|
627
|
-
rawListeners(event: keyof ClientEvents): Array<(...args: Array<any>) => any>;
|
|
628
|
-
removeAllListeners(event?: keyof ClientEvents): this;
|
|
629
|
-
removeListener<E extends keyof ClientEvents>(event: E, listener: (...args: ClientEvents[E]) => any): this;
|
|
630
|
-
}
|
|
631
571
|
/**
|
|
632
572
|
* Main class used for receiving events and interacting with the Discord gateway.
|
|
633
573
|
* @since 0.1.4
|
|
634
574
|
*/
|
|
635
|
-
declare class Client extends EventEmitter {
|
|
575
|
+
declare class Client extends EventEmitter<ClientEvents> {
|
|
636
576
|
/** The Discord auth token to connect with. */
|
|
637
577
|
token: string;
|
|
638
578
|
/** User specific options filled in with defaults if not specified. */
|
|
@@ -819,4 +759,4 @@ declare const Constants: {
|
|
|
819
759
|
GATEWAY_VERSION: 10;
|
|
820
760
|
};
|
|
821
761
|
|
|
822
|
-
export { BetterWs, Client, Constants, type IClientOptions, type IClientWSOptions, type IGatewayDispatch, type IGatewayMessage, _default as Intents, Shard, ShardManager };
|
|
762
|
+
export { type BWSEvents, BetterWs, Client, type ClientEvents, type ConnectorEvents, Constants, DiscordConnector, type IClientOptions, type IClientWSOptions, type IGatewayDispatch, type IGatewayMessage, _default as Intents, Shard, type ShardEvents, ShardManager };
|
package/dist/index.js
CHANGED
|
@@ -6,11 +6,12 @@ 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:true});},__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:true}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),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=false;this._lastCloseCode=null;this._lastCloseReason=null;this.encoding=options.encoding??"other",this.compress=options.compress??false;}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=true;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=false;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=true,this._connecting=false,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.enqueue(fn);};presence&&!this.options.bypassBuckets?this.presenceBucket.enqueue(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=false,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=false,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,true,1,false)),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"?true:atom==="false"?false: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),true)):left>=4?(num<<=BigInt(32),num+=BigInt(view.getUint32(x+(left-=4)),true)):left>=2?(num<<=BigInt(16),num+=BigInt(view.getUint16(x+(left-=2)),true)):(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,GUILD_MESSAGE_POLLS:16777216,DIRECT_MESSAGE_POLLS:33554432},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=false;this._closing=false;this._closeCalled=false;this._openToHeartbeatTimeout=null;this._initialHeartbeatTimeout=null;this.options=client.options,this.reconnect=this.options.reconnect??true,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=false,this._openToHeartbeatTimeout=setTimeout(()=>{this.client.emit("debug",`Shard ${this.id} didn't receive a HELLO after the ws was opened in time`),this._reconnect(true);},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=false,this._closeCalled=false,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=true,this._closeCalled=true,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(true):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=false){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(true):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(true);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(true)):(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(true);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=false;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=true),this._closing=false,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??false,data.since=data.since??Date.now(),data}_checkVoiceStateUpdateData(data){return data.channel_id=data.channel_id??null,data.self_mute=data.self_mute??false,data.self_deaf=data.self_deaf??false,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=false;this.connector=new DC(id,client),this.connector.on("disconnect",(...args)=>{this.ready=false,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=true,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.enqueue(()=>{this.identifyBucket.enqueue(()=>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:true,intents:0,token:"",ws:{compress:true,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.queue.calls.length&&(oldQueueConcurrency.push(...this.shardManager.concurrencyBucket.queue.calls),this.shardManager.concurrencyBucket.dropQueue()),this.shardManager.identifyBucket.queue.calls.length&&oldQueueIdentify.push(...this.shardManager.identifyBucket.queue.calls),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.enqueue(fn);for(let fn of oldQueueIdentify)this.shardManager.identifyBucket.enqueue(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();
|
|
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:true});},__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:true}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),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,closeTimer:null,zlib:null};this._connecting=false;this._lastCloseCode=null;this._lastCloseReason=null;this.encoding=options.encoding??"other",this.compress=options.compress??false;}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=true;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=false;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=true,this._connecting=false,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,internal.closeTimer&&clearTimeout(internal.closeTimer),internal.closeTimer=setTimeout(()=>this._onClose(),5e3),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.enqueue(fn);};presence&&!this.options.bypassBuckets?this.presenceBucket.enqueue(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=false,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=false,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,true,1,false)),this._write(Buffer.allocUnsafe(0),8));}_onClose(){this._internal.closeTimer&&clearTimeout(this._internal.closeTimer),this._internal.closeTimer=null;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"?true:atom==="false"?false: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),true)):left>=4?(num<<=BigInt(32),num+=BigInt(view.getUint32(x+(left-=4)),true)):left>=2?(num<<=BigInt(16),num+=BigInt(view.getUint16(x+(left-=2)),true)):(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,GUILD_MESSAGE_POLLS:16777216,DIRECT_MESSAGE_POLLS:33554432},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=false;this._closing=false;this._closeCalled=false;this._openToHeartbeatTimeout=null;this._initialHeartbeatTimeout=null;this.options=client.options,this.reconnect=this.options.reconnect??true,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=false,this._openToHeartbeatTimeout=setTimeout(()=>{this.client.emit("debug",`Shard ${this.id} didn't receive a HELLO after the ws was opened in time`),this._reconnect(true);},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=false,this._closeCalled=false,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=true,this._closeCalled=true,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(true):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=false){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(true):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(true);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(true)):(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(true);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=false;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=true),this._closing=false,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??false,data.since=data.since??Date.now(),data}_checkVoiceStateUpdateData(data){return data.channel_id=data.channel_id??null,data.self_mute=data.self_mute??false,data.self_deaf=data.self_deaf??false,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=false;this.connector=new DC(id,client),this.connector.on("disconnect",(...args)=>{this.ready=false,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=true,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.enqueue(()=>{this.identifyBucket.enqueue(()=>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:true,intents:0,token:"",ws:{compress:true,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.queue.calls.length&&(oldQueueConcurrency.push(...this.shardManager.concurrencyBucket.queue.calls),this.shardManager.concurrencyBucket.dropQueue()),this.shardManager.identifyBucket.queue.calls.length&&oldQueueIdentify.push(...this.shardManager.identifyBucket.queue.calls),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.enqueue(fn);for(let fn of oldQueueIdentify)this.shardManager.identifyBucket.enqueue(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(),DiscordConnector2=require_DiscordConnector();
|
|
10
10
|
|
|
11
11
|
exports.BetterWs = BetterWs2;
|
|
12
12
|
exports.Client = Client2;
|
|
13
13
|
exports.Constants = Constants;
|
|
14
|
+
exports.DiscordConnector = DiscordConnector2;
|
|
14
15
|
exports.Intents = Intents;
|
|
15
16
|
exports.Shard = Shard2;
|
|
16
17
|
exports.ShardManager = ShardManager2;
|
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\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.enqueue(fn);\r\n\t\t\t};\r\n\t\t\tif (presence && !this.options.bypassBuckets) this.presenceBucket.enqueue(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\tGUILD_MESSAGE_POLLS: 1 << 24,\r\n\tDIRECT_MESSAGE_POLLS: 1 << 25\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?.enqueue(() => {\r\n\t\t\t\tthis.identifyBucket.enqueue(() => 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?.queue.calls.length) {\r\n\t\t\toldQueueConcurrency.push(...this.shardManager.concurrencyBucket.queue.calls);\r\n\t\t\tthis.shardManager.concurrencyBucket.dropQueue();\r\n\t\t}\r\n\t\tif (this.shardManager.identifyBucket.queue.calls.length) oldQueueIdentify.push(...this.shardManager.identifyBucket.queue.calls);\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.enqueue(fn);\r\n\t\t}\r\n\t\tfor (const fn of oldQueueIdentify) {\r\n\t\t\tthis.shardManager.identifyBucket.enqueue(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"]}
|
|
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, type Inflate } 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\nimport type {\r\n\tBWSEvents,\r\n\tIClientWSOptions\r\n} from \"./Types\";\r\n\r\n\r\n\r\n\r\n\r\nclass BetterWs extends EventEmitter<BWSEvents> {\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\tcloseTimer: NodeJS.Timeout | null,\r\n\r\n\t\tzlib: Inflate | null;\r\n\t} = {\r\n\t\t\topenRejector: null,\r\n\t\t\tclosePromise: null,\r\n\t\t\tcloseTimer: 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<IClientWSOptions, \"encoding\"> & { encoding?: 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\tif (internal.closeTimer) clearTimeout(internal.closeTimer);\r\n\t\tinternal.closeTimer = setTimeout(() => this._onClose(), 5000);\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.enqueue(fn);\r\n\t\t\t};\r\n\t\t\tif (presence && !this.options.bypassBuckets) this.presenceBucket.enqueue(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\tif (this._internal.closeTimer) clearTimeout(this._internal.closeTimer);\r\n\t\tthis._internal.closeTimer = null;\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: 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\tGUILD_MESSAGE_POLLS: 1 << 24,\r\n\tDIRECT_MESSAGE_POLLS: 1 << 25\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 {\r\n\ttype GatewayReceivePayload,\r\n\ttype GatewayIdentify,\r\n\ttype GatewayPresenceUpdateData,\r\n\ttype GatewayVoiceStateUpdateData,\r\n\ttype GatewayRequestGuildMembersData,\r\n\ttype GatewayRequestGuildMembersDataWithQuery,\r\n\ttype GatewayRequestGuildMembersDataWithUserIds,\r\n\r\n\tPresenceUpdateStatus\r\n} from \"discord-api-types/v10\";\r\n\r\nimport type {\r\n\tConnectorEvents,\r\n\tClientEvents,\r\n\tIClientOptions,\r\n\tIGatewayMessage,\r\n\tIGatewayDispatch\r\n} from \"./Types\";\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<ConnectorEvents> {\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<ClientEvents> & { options: Omit<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: 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: 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\nimport type {\r\n\tShardEvents,\r\n\tClientEvents,\r\n\tIClientOptions\r\n} from \"./Types\"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass Shard extends EventEmitter<ShardEvents> {\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<ClientEvents> & { options: Omit<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 type { EventEmitter } from \"events\";\r\n\r\nimport Shard = require(\"./Shard\");\r\nimport { LocalBucket } from \"snowtransfer\";\r\n\r\nimport {\r\n\tIClientOptions,\r\n\tClientEvents\r\n} from \"./Types\";\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: EventEmitter<ClientEvents> & { options: Omit<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?.enqueue(() => {\r\n\t\t\t\tthis.identifyBucket.enqueue(() => 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 { APIGatewayBotInfo } from \"discord-api-types/v10\";\r\n\r\nimport type {\r\n\tClientEvents,\r\n\tIClientOptions\r\n} from \"./Types\";\r\n\r\n\r\n\r\n\r\n\r\nclass Client extends EventEmitter<ClientEvents> {\r\n\r\n\tpublic token: string;\r\n\r\n\tpublic options: Omit<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: 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?.queue.calls.length) {\r\n\t\t\toldQueueConcurrency.push(...this.shardManager.concurrencyBucket.queue.calls);\r\n\t\t\tthis.shardManager.concurrencyBucket.dropQueue();\r\n\t\t}\r\n\t\tif (this.shardManager.identifyBucket.queue.calls.length) oldQueueIdentify.push(...this.shardManager.identifyBucket.queue.calls);\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.enqueue(fn);\r\n\t\t}\r\n\t\tfor (const fn of oldQueueIdentify) {\r\n\t\t\tthis.shardManager.identifyBucket.enqueue(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\nimport DiscordConnector2 = require(\"./DiscordConnector\");\r\n\r\nexport { BetterWs2 as BetterWs, DiscordConnector2 as DiscordConnector, 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.11.
|
|
3
|
+
"version": "0.11.6",
|
|
4
4
|
"description": "Minimalistic Discord Gateway library",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"engines": {
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"discord-api-types": "^0.37.119",
|
|
18
|
-
"snowtransfer": "^0.
|
|
18
|
+
"snowtransfer": "^0.13.1"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@types/node": "22.13.
|
|
22
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
23
|
-
"@typescript-eslint/parser": "^8.
|
|
24
|
-
"eslint": "^9.
|
|
25
|
-
"tsup": "^8.
|
|
26
|
-
"typedoc": "^0.27.
|
|
27
|
-
"typedoc-plugin-mdn-links": "^
|
|
28
|
-
"typescript": "^5.
|
|
21
|
+
"@types/node": "22.13.9",
|
|
22
|
+
"@typescript-eslint/eslint-plugin": "^8.26.0",
|
|
23
|
+
"@typescript-eslint/parser": "^8.26.0",
|
|
24
|
+
"eslint": "^9.21.0",
|
|
25
|
+
"tsup": "^8.4.0",
|
|
26
|
+
"typedoc": "^0.27.9",
|
|
27
|
+
"typedoc-plugin-mdn-links": "^5.0.1",
|
|
28
|
+
"typescript": "^5.8.2"
|
|
29
29
|
},
|
|
30
30
|
"files": [
|
|
31
31
|
"dist",
|