disgroove 2.2.7-dev.fca4921 → 3.0.0-dev.2cf2b90

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.
Files changed (98) hide show
  1. package/LICENSE +9 -9
  2. package/README.md +48 -48
  3. package/dist/lib/Client.d.ts +332 -301
  4. package/dist/lib/Client.js +562 -462
  5. package/dist/lib/constants.d.ts +35 -24
  6. package/dist/lib/constants.js +39 -27
  7. package/dist/lib/gateway/Dispatcher.d.ts +104 -0
  8. package/dist/lib/gateway/Dispatcher.js +471 -0
  9. package/dist/lib/gateway/Shard.d.ts +12 -21
  10. package/dist/lib/gateway/Shard.js +121 -570
  11. package/dist/lib/gateway/Transmitter.d.ts +22 -0
  12. package/dist/lib/gateway/Transmitter.js +93 -0
  13. package/dist/lib/gateway/WebSocketManager.d.ts +22 -0
  14. package/dist/lib/gateway/WebSocketManager.js +93 -0
  15. package/dist/lib/index.d.ts +5 -1
  16. package/dist/lib/index.js +5 -1
  17. package/dist/lib/rest/Endpoints.d.ts +95 -91
  18. package/dist/lib/rest/Endpoints.js +111 -102
  19. package/dist/lib/rest/RequestManager.d.ts +1 -3
  20. package/dist/lib/rest/RequestManager.js +17 -7
  21. package/dist/lib/rest/index.js +17 -7
  22. package/dist/lib/transformers/ApplicationCommands.js +4 -4
  23. package/dist/lib/transformers/Applications.d.ts +2 -0
  24. package/dist/lib/transformers/Applications.js +110 -4
  25. package/dist/lib/transformers/AuditLogs.js +10 -10
  26. package/dist/lib/transformers/AutoModeration.js +6 -6
  27. package/dist/lib/transformers/Channels.js +16 -16
  28. package/dist/lib/transformers/Components.d.ts +15 -3
  29. package/dist/lib/transformers/Components.js +309 -156
  30. package/dist/lib/transformers/Entitlements.d.ts +2 -2
  31. package/dist/lib/transformers/Entitlements.js +16 -16
  32. package/dist/lib/transformers/GuildScheduledEvents.js +8 -8
  33. package/dist/lib/transformers/GuildTemplates.js +4 -4
  34. package/dist/lib/transformers/Guilds.js +28 -28
  35. package/dist/lib/transformers/Interactions.js +330 -55
  36. package/dist/lib/transformers/Lobbies.d.ts +7 -0
  37. package/dist/lib/transformers/Lobbies.js +38 -0
  38. package/dist/lib/transformers/Messages.d.ts +4 -3
  39. package/dist/lib/transformers/Messages.js +38 -52
  40. package/dist/lib/transformers/Polls.js +2 -2
  41. package/dist/lib/transformers/Presences.d.ts +3 -3
  42. package/dist/lib/transformers/Presences.js +6 -6
  43. package/dist/lib/transformers/Roles.js +8 -8
  44. package/dist/lib/transformers/SKUs.js +2 -2
  45. package/dist/lib/transformers/Soundboards.js +6 -6
  46. package/dist/lib/transformers/StageInstances.js +6 -6
  47. package/dist/lib/transformers/Stickers.js +3 -3
  48. package/dist/lib/transformers/Subscriptions.js +8 -8
  49. package/dist/lib/transformers/Teams.js +4 -4
  50. package/dist/lib/transformers/Users.js +6 -6
  51. package/dist/lib/transformers/Voice.js +8 -8
  52. package/dist/lib/transformers/Webhooks.js +6 -6
  53. package/dist/lib/transformers/index.d.ts +2 -1
  54. package/dist/lib/transformers/index.js +2 -1
  55. package/dist/lib/types/application-command.d.ts +9 -4
  56. package/dist/lib/types/application-role-connection-metadata.d.ts +1 -0
  57. package/dist/lib/types/application.d.ts +12 -7
  58. package/dist/lib/types/audit-log.d.ts +9 -5
  59. package/dist/lib/types/auto-moderation.d.ts +7 -3
  60. package/dist/lib/types/channel.d.ts +17 -23
  61. package/dist/lib/types/common.d.ts +2 -0
  62. package/dist/lib/types/components.d.ts +510 -0
  63. package/dist/lib/types/emoji.d.ts +1 -0
  64. package/dist/lib/types/entitlements.d.ts +5 -4
  65. package/dist/lib/types/gateway-events.d.ts +406 -207
  66. package/dist/lib/types/guild-scheduled-event.d.ts +10 -5
  67. package/dist/lib/types/guild-template.d.ts +3 -2
  68. package/dist/lib/types/guild.d.ts +40 -22
  69. package/dist/lib/types/interaction.d.ts +35 -18
  70. package/dist/lib/types/invite.d.ts +5 -2
  71. package/dist/lib/types/lobby.d.ts +31 -0
  72. package/dist/lib/types/lobby.js +2 -0
  73. package/dist/lib/types/message.d.ts +32 -20
  74. package/dist/lib/types/poll.d.ts +7 -1
  75. package/dist/lib/types/role.d.ts +8 -5
  76. package/dist/lib/types/sku.d.ts +2 -1
  77. package/dist/lib/types/soundboard.d.ts +4 -3
  78. package/dist/lib/types/stage-instance.d.ts +4 -3
  79. package/dist/lib/types/sticker.d.ts +8 -5
  80. package/dist/lib/types/subscription.d.ts +6 -5
  81. package/dist/lib/types/team.d.ts +4 -2
  82. package/dist/lib/types/user.d.ts +10 -3
  83. package/dist/lib/types/voice.d.ts +6 -4
  84. package/dist/lib/types/webhook.d.ts +4 -3
  85. package/dist/lib/utils/CDN.d.ts +22 -22
  86. package/dist/lib/utils/CDN.js +22 -22
  87. package/dist/lib/utils/errors.d.ts +3 -1
  88. package/dist/lib/utils/errors.js +4 -0
  89. package/dist/lib/utils/formatters.d.ts +7 -7
  90. package/dist/lib/utils/formatters.js +28 -29
  91. package/dist/lib/utils/index.d.ts +1 -0
  92. package/dist/lib/utils/index.js +18 -7
  93. package/dist/lib/utils/permissions.d.ts +2 -0
  94. package/dist/lib/utils/permissions.js +7 -0
  95. package/dist/package.json +4 -4
  96. package/package.json +5 -5
  97. package/dist/lib/types/message-components.d.ts +0 -234
  98. /package/dist/lib/types/{message-components.js → components.js} +0 -0
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
@@ -31,518 +41,76 @@ const ws_1 = __importDefault(require("ws"));
31
41
  const constants_1 = require("../constants");
32
42
  const utils_1 = require("../utils");
33
43
  const pkg = __importStar(require("../../package.json"));
34
- const transformers_1 = require("../transformers");
44
+ const Transmitter_1 = require("./Transmitter");
45
+ const Dispatcher_1 = require("./Dispatcher");
35
46
  class Shard {
36
47
  id;
37
- heartbeatInterval;
38
48
  client;
39
- ws;
40
- sessionID;
49
+ heartbeatInterval;
50
+ sessionId;
41
51
  resumeGatewayURL;
52
+ sequence;
53
+ ws;
54
+ transmitter;
55
+ dispatcher;
42
56
  constructor(id, client) {
43
57
  this.id = id;
44
- this.heartbeatInterval = null;
45
58
  this.client = client;
46
- this.ws = new ws_1.default("wss://gateway.discord.gg/?v=10&encoding=json", client.ws);
47
- this.sessionID = null;
59
+ this.heartbeatInterval = null;
60
+ this.sessionId = null;
48
61
  this.resumeGatewayURL = null;
62
+ this.sequence = null;
63
+ this.ws = new ws_1.default("wss://gateway.discord.gg/?v=10&encoding=json", this.client.ws);
64
+ this.transmitter = new Transmitter_1.Transmitter(this.ws);
65
+ this.dispatcher = new Dispatcher_1.Dispatcher(this);
49
66
  }
50
67
  /** https://discord.com/developers/docs/topics/gateway#connections */
51
68
  connect() {
52
- this.ws.on("open", () => this.onWebSocketOpen());
53
- this.ws.on("message", (data) => this.onWebSocketMessage(data));
54
- this.ws.on("error", (err) => this.onWebSocketError(err));
55
- this.ws.on("close", (code, reason) => this.onWebSocketClose(code, reason));
69
+ if (this.ws) {
70
+ this.ws.on("open", () => this.onWebSocketOpen());
71
+ this.ws.on("message", (data) => this.onWebSocketMessage(data));
72
+ this.ws.on("error", (err) => this.onWebSocketError(err));
73
+ this.ws.on("close", (code, reason) => this.onWebSocketClose(code, reason));
74
+ }
56
75
  }
57
- /** https://discord.com/developers/docs/topics/gateway#connections */
58
- disconnect() {
76
+ /** https://discord.com/developers/docs/events/gateway#initiating-a-disconnect */
77
+ disconnect(reconnect) {
59
78
  if (this.heartbeatInterval) {
60
79
  clearInterval(this.heartbeatInterval);
61
80
  this.heartbeatInterval = null;
62
81
  }
63
- }
64
- /** https://discord.com/developers/docs/topics/gateway-events#heartbeat */
65
- heartbeat(lastSequence) {
66
- this.ws.send(JSON.stringify({
67
- op: constants_1.GatewayOPCodes.Heartbeat,
68
- d: lastSequence,
69
- }));
70
- }
71
- /** https://discord.com/developers/docs/topics/gateway-events#identify */
72
- identify(options) {
73
- this.ws.send(JSON.stringify({
74
- op: constants_1.GatewayOPCodes.Identify,
75
- d: {
76
- token: options.token,
77
- properties: {
78
- os: options.properties.os,
79
- browser: options.properties.browser,
80
- device: options.properties.device,
81
- },
82
- compress: options.compress,
83
- large_threshold: options.largeThreshold,
84
- shard: options.shard,
85
- presence: options.presence,
86
- intents: options.intents,
87
- },
88
- }));
89
- }
90
- onDispatch(packet) {
91
- this.client.emit("dispatch", packet, this.id);
92
- switch (packet.t) {
93
- case constants_1.GatewayEvents.Ready:
94
- {
95
- this.sessionID = packet.d.session_id;
96
- this.resumeGatewayURL = packet.d.resume_gateway_url;
97
- this.client.user = transformers_1.Users.userFromRaw(packet.d.user);
98
- this.client.application = packet.d.application;
99
- this.client.emit("ready");
82
+ if (this.ws) {
83
+ if (this.ws.readyState !== ws_1.default.CLOSED) {
84
+ this.ws.removeAllListeners();
85
+ if (reconnect &&
86
+ this.sessionId &&
87
+ this.sequence &&
88
+ this.resumeGatewayURL) {
89
+ if (this.ws.readyState === ws_1.default.OPEN) {
90
+ this.ws.terminate();
91
+ }
92
+ else {
93
+ this.ws.close(1000, "Resume Attempt - Reconnect");
94
+ }
100
95
  }
101
- break;
102
- case constants_1.GatewayEvents.Resumed:
103
- this.client.emit("resumed");
104
- break;
105
- case constants_1.GatewayEvents.ApplicationCommandPermissionsUpdate:
106
- this.client.emit("applicationCommandPermissionsUpdate", transformers_1.Guilds.guildApplicationCommandPermissionsFromRaw(packet.d));
107
- break;
108
- case constants_1.GatewayEvents.AutoModerationRuleCreate:
109
- this.client.emit("autoModerationRuleCreate", transformers_1.AutoModeration.autoModerationRuleFromRaw(packet.d));
110
- break;
111
- case constants_1.GatewayEvents.AutoModerationRuleUpdate:
112
- this.client.emit("autoModerationRuleUpdate", transformers_1.AutoModeration.autoModerationRuleFromRaw(packet.d));
113
- break;
114
- case constants_1.GatewayEvents.AutoModerationRuleDelete:
115
- this.client.emit("autoModerationRuleDelete", transformers_1.AutoModeration.autoModerationRuleFromRaw(packet.d));
116
- break;
117
- case constants_1.GatewayEvents.AutoModerationActionExecution:
118
- this.client.emit("autoModerationActionExecution", {
119
- guildID: packet.d.guild_id,
120
- action: {
121
- type: packet.d.action.type,
122
- metadata: {
123
- channelID: packet.d.action.metadata.channel_id,
124
- durationSeconds: packet.d.action.metadata.duration_seconds,
125
- customMessage: packet.d.action.metadata.custom_message,
126
- },
127
- },
128
- ruleID: packet.d.rule_id,
129
- ruleTriggerType: packet.d.rule_trigger_type,
130
- userID: packet.d.user_id,
131
- channelID: packet.d.channel_id,
132
- messageID: packet.d.message_id,
133
- alertSystemMessageID: packet.d.alert_system_message_id,
134
- content: packet.d.content,
135
- matchedKeyword: packet.d.matched_keyword,
136
- matchedContent: packet.d.matched_content,
137
- });
138
- break;
139
- case constants_1.GatewayEvents.ChannelCreate:
140
- this.client.emit("channelCreate", transformers_1.Channels.channelFromRaw(packet.d));
141
- break;
142
- case constants_1.GatewayEvents.ChannelUpdate:
143
- this.client.emit("channelUpdate", transformers_1.Channels.channelFromRaw(packet.d));
144
- break;
145
- case constants_1.GatewayEvents.ChannelDelete:
146
- this.client.emit("channelDelete", transformers_1.Channels.channelFromRaw(packet.d));
147
- break;
148
- case constants_1.GatewayEvents.ChannelPinsUpdate:
149
- this.client.emit("channelPinsUpdate", {
150
- guildID: packet.d.guild_id,
151
- channelID: packet.d.channel_id,
152
- lastPinTimestamp: packet.d.last_pin_timestamp,
153
- });
154
- break;
155
- case constants_1.GatewayEvents.ThreadCreate:
156
- this.client.emit("threadCreate", transformers_1.Channels.channelFromRaw(packet.d));
157
- break;
158
- case constants_1.GatewayEvents.ThreadUpdate:
159
- this.client.emit("threadUpdate", transformers_1.Channels.channelFromRaw(packet.d));
160
- break;
161
- case constants_1.GatewayEvents.ThreadDelete:
162
- this.client.emit("threadDelete", transformers_1.Channels.channelFromRaw(packet.d));
163
- break;
164
- case constants_1.GatewayEvents.ThreadListSync:
165
- this.client.emit("threadListSync", {
166
- guildID: packet.d.guild_id,
167
- channelIDs: packet.d.channel_ids,
168
- threads: packet.d.threads.map((thread) => transformers_1.Channels.channelFromRaw(thread)),
169
- members: packet.d.members.map((threadMember) => transformers_1.Channels.threadMemberFromRaw(threadMember)),
170
- });
171
- break;
172
- case constants_1.GatewayEvents.ThreadMemberUpdate:
173
- this.client.emit("threadMemberUpdate", {
174
- id: packet.d.id,
175
- userID: packet.d.user_id,
176
- joinTimestamp: packet.d.join_timestamp,
177
- flags: packet.d.flags,
178
- member: packet.d.member !== undefined
179
- ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
180
- : undefined,
181
- guildID: packet.d.guild_id,
182
- });
183
- break;
184
- case constants_1.GatewayEvents.ThreadMembersUpdate:
185
- this.client.emit("threadMembersUpdate", {
186
- id: packet.d.id,
187
- guildID: packet.d.guild_id,
188
- memberCount: packet.d.member_count,
189
- addedMembers: packet.d.members.map((threadMember) => transformers_1.Channels.threadMemberFromRaw(threadMember)),
190
- removedMemberIDs: packet.d.removed_member_ids,
191
- });
192
- break;
193
- case constants_1.GatewayEvents.EntitlementCreate:
194
- this.client.emit("entitlementCreate", transformers_1.Entitlements.entitlementFromRaw(packet.d));
195
- break;
196
- case constants_1.GatewayEvents.EntitlementUpdate:
197
- this.client.emit("entitlementUpdate", transformers_1.Entitlements.entitlementFromRaw(packet.d));
198
- break;
199
- case constants_1.GatewayEvents.EntitlementDelete:
200
- this.client.emit("entitlementDelete", transformers_1.Entitlements.entitlementFromRaw(packet.d));
201
- break;
202
- case constants_1.GatewayEvents.GuildCreate:
203
- {
204
- this.client.guildShardMap[packet.d.id] = this.id;
205
- this.client.guilds.set(packet.d.id, transformers_1.Guilds.guildFromRaw(packet.d));
206
- this.client.emit("guildCreate", transformers_1.Guilds.guildFromRaw(packet.d));
207
- }
208
- break;
209
- case constants_1.GatewayEvents.GuildUpdate:
210
- {
211
- this.client.guilds.set(packet.d.id, transformers_1.Guilds.guildFromRaw(packet.d));
212
- this.client.emit("guildUpdate", transformers_1.Guilds.guildFromRaw(packet.d));
213
- }
214
- break;
215
- case constants_1.GatewayEvents.GuildDelete:
216
- {
217
- delete this.client.guildShardMap[packet.d.id];
218
- this.client.guilds.delete(packet.d.id);
219
- this.client.emit("guildDelete", {
220
- id: packet.d.id,
221
- unavailable: packet.d.unavailable,
222
- });
223
- }
224
- break;
225
- case constants_1.GatewayEvents.GuildAuditLogEntryCreate:
226
- this.client.emit("guildAuditLogEntryCreate", {
227
- ...transformers_1.AuditLogs.auditLogEntryFromRaw(packet.d),
228
- guildID: packet.d.guild_id,
229
- });
230
- break;
231
- case constants_1.GatewayEvents.GuildBanAdd:
232
- this.client.emit("guildBanAdd", {
233
- guildID: packet.d.guild_id,
234
- user: transformers_1.Users.userFromRaw(packet.d.user),
235
- });
236
- break;
237
- case constants_1.GatewayEvents.GuildBanRemove:
238
- this.client.emit("guildBanRemove", {
239
- guildID: packet.d.guild_id,
240
- user: transformers_1.Users.userFromRaw(packet.d.user),
241
- });
242
- break;
243
- case constants_1.GatewayEvents.GuildEmojisUpdate:
244
- this.client.emit("guildEmojisUpdate", packet.d.emojis.map((emoji) => transformers_1.Emojis.emojiFromRaw(emoji)), packet.d.guild_id);
245
- break;
246
- case constants_1.GatewayEvents.GuildStickersUpdate:
247
- this.client.emit("guildStickersUpdate", packet.d.stickers.map((sticker) => transformers_1.Stickers.stickerFromRaw(sticker)), packet.d.guild_id);
248
- break;
249
- case constants_1.GatewayEvents.GuildIntegrationsUpdate:
250
- this.client.emit("guildIntegrationsUpdate", packet.d.guild_id);
251
- break;
252
- case constants_1.GatewayEvents.GuildMemberAdd:
253
- this.client.emit("guildMemberAdd", {
254
- ...transformers_1.Guilds.guildMemberFromRaw(packet.d),
255
- guildID: packet.d.guild_id,
256
- });
257
- break;
258
- case constants_1.GatewayEvents.GuildMemberRemove:
259
- this.client.emit("guildMemberRemove", {
260
- guildID: packet.d.guild_id,
261
- user: transformers_1.Users.userFromRaw(packet.d.user),
262
- });
263
- break;
264
- case constants_1.GatewayEvents.GuildMemberUpdate:
265
- this.client.emit("guildMemberUpdate", {
266
- guildID: packet.d.guild_id,
267
- roles: packet.d.roles,
268
- user: transformers_1.Users.userFromRaw(packet.d.user),
269
- nick: packet.d.nick,
270
- avatar: packet.d.avatar,
271
- banner: packet.d.banner,
272
- joinedAt: packet.d.joined_at,
273
- premiumSince: packet.d.premium_since,
274
- deaf: packet.d.deaf,
275
- mute: packet.d.mute,
276
- pending: packet.d.pending,
277
- communicationDisabledUntil: packet.d.communication_disabled_until,
278
- flags: packet.d.flags,
279
- avatarDecorationData: packet.d.avatar_decoration_data !== undefined
280
- ? {
281
- asset: packet.d.asset,
282
- skuID: packet.d.sku_id,
283
- }
284
- : undefined,
285
- });
286
- break;
287
- case constants_1.GatewayEvents.GuildMembersChunk:
288
- this.client.emit("guildMembersChunk", {
289
- guildID: packet.d.guild_id,
290
- members: packet.d.members.map((guildMember) => transformers_1.Guilds.guildMemberFromRaw(guildMember)),
291
- chunkIndex: packet.d.chunk_index,
292
- chunkCount: packet.d.chunk_count,
293
- notFound: packet.d.not_found,
294
- presences: packet.d.presences?.map((presence) => transformers_1.Presences.presenceFromRaw(presence)),
295
- nonce: packet.d.nonce,
296
- });
297
- break;
298
- case constants_1.GatewayEvents.GuildRoleCreate:
299
- this.client.emit("guildRoleCreate", transformers_1.Roles.roleFromRaw(packet.d.role), packet.d.guild_id);
300
- break;
301
- case constants_1.GatewayEvents.GuildRoleUpdate:
302
- this.client.emit("guildRoleUpdate", transformers_1.Roles.roleFromRaw(packet.d.role), packet.d.guild_id);
303
- break;
304
- case constants_1.GatewayEvents.GuildRoleDelete:
305
- this.client.emit("guildRoleDelete", packet.d.role_id, packet.d.guild_id);
306
- break;
307
- case constants_1.GatewayEvents.GuildScheduledEventCreate:
308
- this.client.emit("guildScheduledEventCreate", transformers_1.GuildScheduledEvents.guildScheduledEventFromRaw(packet.d));
309
- break;
310
- case constants_1.GatewayEvents.GuildScheduledEventUpdate:
311
- this.client.emit("guildScheduledEventUpdate", transformers_1.GuildScheduledEvents.guildScheduledEventFromRaw(packet.d));
312
- break;
313
- case constants_1.GatewayEvents.GuildScheduledEventDelete:
314
- this.client.emit("guildScheduledEventDelete", transformers_1.GuildScheduledEvents.guildScheduledEventFromRaw(packet.d));
315
- break;
316
- case constants_1.GatewayEvents.GuildScheduledEventUserAdd:
317
- this.client.emit("guildScheduledEventUserAdd", packet.d.user_id, packet.d.guild_scheduled_event_id, packet.d.guild_id);
318
- break;
319
- case constants_1.GatewayEvents.GuildScheduledEventUserRemove:
320
- this.client.emit("guildScheduledEventUserRemove", packet.d.user_id, packet.d.guild_scheduled_event_id, packet.d.guild_id);
321
- break;
322
- case constants_1.GatewayEvents.GuildSoundboardSoundCreate:
323
- this.client.emit("guildSoundboardSoundCreate", transformers_1.Soundboards.soundboardSoundFromRaw(packet.d));
324
- break;
325
- case constants_1.GatewayEvents.GuildSoundboardSoundUpdate:
326
- this.client.emit("guildSoundboardSoundUpdate", transformers_1.Soundboards.soundboardSoundFromRaw(packet.d));
327
- break;
328
- case constants_1.GatewayEvents.GuildSoundboardSoundDelete:
329
- this.client.emit("guildSoundboardSoundDelete", {
330
- soundID: packet.d.sound_id,
331
- guildID: packet.d.guild_id,
332
- });
333
- break;
334
- case constants_1.GatewayEvents.GuildSoundboardSoundsUpdate:
335
- this.client.emit("guildSoundboardSoundsUpdate", packet.d.soundboard_sounds.map((sound) => transformers_1.Soundboards.soundboardSoundFromRaw(sound)), packet.d.guild_id);
336
- break;
337
- case constants_1.GatewayEvents.SoundboardSounds:
338
- this.client.emit("soundboardSounds", packet.d.soundboard_sounds.map((sound) => transformers_1.Soundboards.soundboardSoundFromRaw(sound)), packet.d.guild_id);
339
- break;
340
- case constants_1.GatewayEvents.IntegrationCreate:
341
- this.client.emit("integrationCreate", {
342
- ...transformers_1.Guilds.integrationFromRaw(packet.d),
343
- guildID: packet.d.guild_id,
344
- });
345
- break;
346
- case constants_1.GatewayEvents.IntegrationUpdate:
347
- this.client.emit("integrationUpdate", {
348
- ...transformers_1.Guilds.integrationFromRaw(packet.d),
349
- guildID: packet.d.guild_id,
350
- });
351
- break;
352
- case constants_1.GatewayEvents.IntegrationDelete:
353
- this.client.emit("integrationDelete", {
354
- id: packet.d.id,
355
- guildID: packet.d.guild_id,
356
- applicationID: packet.d.application_id,
357
- });
358
- break;
359
- case constants_1.GatewayEvents.InteractionCreate:
360
- this.client.emit("interactionCreate", transformers_1.Interactions.interactionFromRaw(packet.d));
361
- break;
362
- case constants_1.GatewayEvents.InviteCreate:
363
- this.client.emit("inviteCreate", {
364
- channelID: packet.d.channel_id,
365
- code: packet.d.code,
366
- createdAt: packet.d.created_at,
367
- guildID: packet.d.guild_id,
368
- inviter: packet.d.inviter !== undefined
369
- ? transformers_1.Users.userFromRaw(packet.d.inviter)
370
- : undefined,
371
- maxAge: packet.d.max_age,
372
- maxUses: packet.d.max_uses,
373
- targetType: packet.d.target_type,
374
- targetUser: packet.d.target_user !== undefined
375
- ? transformers_1.Users.userFromRaw(packet.d.target_user)
376
- : undefined,
377
- targetApplication: packet.d.target_application !== undefined
378
- ? transformers_1.Applications.applicationFromRaw(packet.d.target_application)
379
- : undefined,
380
- temporary: packet.d.temporary,
381
- uses: packet.d.uses,
382
- });
383
- break;
384
- case constants_1.GatewayEvents.InviteDelete:
385
- this.client.emit("inviteDelete", {
386
- channelID: packet.d.channel_id,
387
- guildID: packet.d.guild_id,
388
- code: packet.d.code,
389
- });
390
- break;
391
- case constants_1.GatewayEvents.MessageCreate:
392
- this.client.emit("messageCreate", {
393
- ...transformers_1.Messages.messageFromRaw(packet.d),
394
- guildID: packet.d.guild_id,
395
- member: packet.d.member !== undefined
396
- ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
397
- : undefined,
398
- mentions: packet.d.mentions.map((mention) => transformers_1.Users.userFromRaw(mention)),
399
- });
400
- break;
401
- case constants_1.GatewayEvents.MessageUpdate:
402
- this.client.emit("messageUpdate", transformers_1.Messages.messageFromRaw(packet.d));
403
- break;
404
- case constants_1.GatewayEvents.MessageDelete:
405
- this.client.emit("messageDelete", {
406
- id: packet.d.id,
407
- channelID: packet.d.channel_id,
408
- guildID: packet.d.guild_id,
409
- });
410
- break;
411
- case constants_1.GatewayEvents.MessageDeleteBulk:
412
- this.client.emit("messageDeleteBulk", {
413
- ids: packet.d.ids,
414
- channelID: packet.d.channel_id,
415
- guildID: packet.d.guild_id,
416
- });
417
- break;
418
- case constants_1.GatewayEvents.MessageReactionAdd:
419
- this.client.emit("messageReactionAdd", {
420
- userID: packet.d.user_id,
421
- channelID: packet.d.user_id,
422
- messageID: packet.d.user_id,
423
- guildID: packet.d.user_id,
424
- member: packet.d.member !== undefined
425
- ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
426
- : undefined,
427
- emoji: transformers_1.Emojis.emojiFromRaw(packet.d.emoji),
428
- messageAuthorID: packet.d.message_author_id,
429
- burst: packet.d.burst,
430
- burstColors: packet.d.burst_colors,
431
- type: packet.d.type,
432
- });
433
- break;
434
- case constants_1.GatewayEvents.MessageReactionRemove:
435
- this.client.emit("messageReactionRemove", {
436
- userID: packet.d.user_id,
437
- channelID: packet.d.user_id,
438
- messageID: packet.d.user_id,
439
- guildID: packet.d.user_id,
440
- emoji: transformers_1.Emojis.emojiFromRaw(packet.d.emoji),
441
- burst: packet.d.burst,
442
- type: packet.d.type,
443
- });
444
- break;
445
- case constants_1.GatewayEvents.MessageReactionRemoveAll:
446
- this.client.emit("messageReactionRemoveAll", {
447
- channelID: packet.d.channel_id,
448
- messageID: packet.d.message_id,
449
- guildID: packet.d.guild_id,
450
- });
451
- break;
452
- case constants_1.GatewayEvents.MessageReactionRemoveEmoji:
453
- this.client.emit("messageReactionRemoveEmoji", {
454
- channelID: packet.d.channel_id,
455
- guildID: packet.d.guild_id,
456
- messageID: packet.d.message_id,
457
- emoji: transformers_1.Emojis.emojiFromRaw(packet.d.emoji),
458
- });
459
- break;
460
- case constants_1.GatewayEvents.PresenceUpdate:
461
- this.client.emit("presenceUpdate", transformers_1.Presences.presenceFromRaw(packet.d));
462
- break;
463
- case constants_1.GatewayEvents.StageInstanceCreate:
464
- this.client.emit("stageInstanceCreate", transformers_1.StageInstances.stageInstanceFromRaw(packet.d));
465
- break;
466
- case constants_1.GatewayEvents.StageInstanceUpdate:
467
- this.client.emit("stageInstanceUpdate", transformers_1.StageInstances.stageInstanceFromRaw(packet.d));
468
- break;
469
- case constants_1.GatewayEvents.StageInstanceDelete:
470
- this.client.emit("stageInstanceDelete", transformers_1.StageInstances.stageInstanceFromRaw(packet.d));
471
- break;
472
- case constants_1.GatewayEvents.TypingStart:
473
- this.client.emit("typingStart", {
474
- channelID: packet.d.channel_id,
475
- guildID: packet.d.guild_id,
476
- userID: packet.d.user_id,
477
- timestamp: packet.d.timestamp,
478
- member: packet.d.member !== undefined
479
- ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
480
- : undefined,
481
- });
482
- break;
483
- case constants_1.GatewayEvents.UserUpdate:
484
- this.client.emit("userUpdate", transformers_1.Users.userFromRaw(packet.d));
485
- break;
486
- case constants_1.GatewayEvents.VoiceChannelEffectSend:
487
- this.client.emit("voiceChannelEffectSend", {
488
- channelID: packet.d.channel_id,
489
- guildID: packet.d.guild_id,
490
- userID: packet.d.user_id,
491
- emoji: packet.d.emoji !== null
492
- ? transformers_1.Emojis.emojiFromRaw(packet.d.emoji)
493
- : null,
494
- animationType: packet.d.animation_type,
495
- animationID: packet.d.animation_id,
496
- soundID: packet.d.sound_id,
497
- soundVolume: packet.d.sound_volume,
498
- });
499
- break;
500
- case constants_1.GatewayEvents.VoiceStateUpdate:
501
- this.client.emit("voiceStateUpdate", transformers_1.Voice.voiceStateFromRaw(packet.d));
502
- break;
503
- case constants_1.GatewayEvents.VoiceServerUpdate:
504
- {
505
- this.client.emit("voiceServerUpdate", {
506
- token: packet.d.token,
507
- guildID: packet.d.guild_id,
508
- endpoint: packet.d.endpoint,
509
- });
96
+ else {
97
+ this.ws.close(1000, "Session Invalidated - Disconnect");
510
98
  }
511
- break;
512
- case constants_1.GatewayEvents.WebhooksUpdate:
513
- this.client.emit("webhooksUpdate", packet.d.channel_id, packet.d.guild_id);
514
- break;
515
- case constants_1.GatewayEvents.SubscriptionCreate:
516
- this.client.emit("subscriptionCreate", transformers_1.Subscriptions.subscriptionFromRaw(packet.d));
517
- break;
518
- case constants_1.GatewayEvents.SubscriptionUpdate:
519
- this.client.emit("subscriptionUpdate", transformers_1.Subscriptions.subscriptionFromRaw(packet.d));
520
- break;
521
- case constants_1.GatewayEvents.SubscriptionDelete:
522
- this.client.emit("subscriptionDelete", transformers_1.Subscriptions.subscriptionFromRaw(packet.d));
523
- break;
524
- case constants_1.GatewayEvents.MessagePollVoteAdd:
525
- this.client.emit("messagePollVoteAdd", {
526
- userID: packet.d.user_id,
527
- channelID: packet.d.channel_id,
528
- messageID: packet.d.message_id,
529
- guildID: packet.d.guild_id,
530
- answerID: packet.d.answer_id,
531
- });
532
- break;
533
- case constants_1.GatewayEvents.MessagePollVoteRemove:
534
- this.client.emit("messagePollVoteRemove", {
535
- userID: packet.d.user_id,
536
- channelID: packet.d.channel_id,
537
- messageID: packet.d.message_id,
538
- guildID: packet.d.guild_id,
539
- answerID: packet.d.answer_id,
540
- });
541
- break;
99
+ this.ws = null;
100
+ this.transmitter = new Transmitter_1.Transmitter(null);
101
+ }
102
+ if (reconnect &&
103
+ this.sessionId &&
104
+ this.sequence &&
105
+ this.resumeGatewayURL) {
106
+ this.ws = new ws_1.default(this.resumeGatewayURL, this.client.ws);
107
+ this.transmitter = new Transmitter_1.Transmitter(this.ws);
108
+ this.connect();
109
+ }
542
110
  }
543
111
  }
544
- onWebSocketOpen() {
545
- this.identify({
112
+ identify() {
113
+ this.transmitter.identify({
546
114
  token: this.client.token,
547
115
  properties: {
548
116
  os: this.client.properties?.os ?? process.platform,
@@ -572,21 +140,47 @@ class Shard {
572
140
  intents: this.client.intents,
573
141
  });
574
142
  }
143
+ onWebSocketOpen() { }
575
144
  onWebSocketMessage(data) {
576
145
  const packet = JSON.parse(data.toString());
577
146
  switch (packet.op) {
578
147
  case constants_1.GatewayOPCodes.Dispatch:
579
- this.onDispatch(packet);
148
+ this.sequence = packet.s;
149
+ this.client.emit("dispatch", packet, this.id);
150
+ this.dispatcher.dispatch(packet.t, packet.d);
151
+ break;
152
+ case constants_1.GatewayOPCodes.Heartbeat:
153
+ this.client.emit("heartbeat", this.id);
154
+ this.transmitter.heartbeat(this.sequence);
580
155
  break;
581
156
  case constants_1.GatewayOPCodes.Reconnect:
582
- this.client.emit("reconnect");
157
+ {
158
+ this.client.emit("reconnect", this.id);
159
+ this.disconnect(this.client.reconnect);
160
+ }
583
161
  break;
584
162
  case constants_1.GatewayOPCodes.InvalidSession:
585
- this.client.emit("invalidSession");
163
+ {
164
+ this.client.emit("invalidSession", this.id);
165
+ if (packet.d) {
166
+ this.resume();
167
+ }
168
+ else {
169
+ this.sequence = null;
170
+ this.sessionId = null;
171
+ this.identify();
172
+ }
173
+ }
586
174
  break;
587
175
  case constants_1.GatewayOPCodes.Hello:
588
176
  {
589
- this.heartbeatInterval = setInterval(() => this.heartbeat(null), packet.d.heartbeat_interval);
177
+ this.heartbeatInterval = setInterval(() => this.transmitter.heartbeat(this.sequence), packet.d.heartbeat_interval);
178
+ if (this.sessionId && this.sequence && this.resumeGatewayURL) {
179
+ this.resume();
180
+ }
181
+ else {
182
+ this.identify();
183
+ }
590
184
  this.client.emit("hello", packet.d.heartbeat_interval, this.id);
591
185
  }
592
186
  break;
@@ -599,74 +193,31 @@ class Shard {
599
193
  throw err;
600
194
  }
601
195
  onWebSocketClose(code, reason) {
602
- if (code === 1000)
603
- return;
604
- throw new utils_1.GatewayError(code, reason.toString());
605
- }
606
- /** https://discord.com/developers/docs/topics/gateway-events#request-guild-members */
607
- requestGuildMembers(options) {
608
- this.ws.send(JSON.stringify({
609
- op: constants_1.GatewayOPCodes.RequestGuildMembers,
610
- d: {
611
- guild_id: options.guildID,
612
- query: options.query,
613
- limit: options.limit,
614
- presences: options.presences,
615
- user_ids: options.userIDs,
616
- nonce: options.nonce,
617
- },
618
- }));
619
- }
620
- /** https://discord.com/developers/docs/topics/gateway-events#request-soundboard-sounds */
621
- requestSoundboardSounds(options) {
622
- this.ws.send(JSON.stringify({
623
- op: constants_1.GatewayOPCodes.RequestSoundboardSounds,
624
- d: {
625
- guild_ids: options.guildIDs,
626
- },
627
- }));
628
- }
629
- /** https://discord.com/developers/docs/topics/gateway-events#resume */
630
- resume(options) {
631
- this.ws.send(JSON.stringify({
632
- op: constants_1.GatewayOPCodes.Resume,
633
- d: {
634
- token: options.token,
635
- session_id: options.sessionID,
636
- seq: options.seq,
637
- },
638
- }));
639
- }
640
- /** https://discord.com/developers/docs/topics/gateway-events#update-presence */
641
- updatePresence(options) {
642
- this.ws.send(JSON.stringify({
643
- op: constants_1.GatewayOPCodes.PresenceUpdate,
644
- d: {
645
- since: options.status === constants_1.StatusTypes.Idle ? Date.now() : null,
646
- activities: options.activities?.map((activity) => ({
647
- name: activity.type === constants_1.ActivityType.Custom
648
- ? "Custom Status"
649
- : activity.name,
650
- type: activity.type,
651
- url: activity.url,
652
- state: activity.state,
653
- })),
654
- status: options.status ?? constants_1.StatusTypes.Online,
655
- afk: !!options.afk,
656
- },
657
- }));
196
+ let reconnect = false;
197
+ switch (code) {
198
+ case 1000:
199
+ break;
200
+ case constants_1.GatewayCloseEventCodes.UnknownError:
201
+ case constants_1.GatewayCloseEventCodes.UnknownOPCode:
202
+ case constants_1.GatewayCloseEventCodes.DecodeError:
203
+ case constants_1.GatewayCloseEventCodes.NotAuthenticated:
204
+ case constants_1.GatewayCloseEventCodes.AlreadyAuthenticated:
205
+ case constants_1.GatewayCloseEventCodes.InvalidSequence:
206
+ case constants_1.GatewayCloseEventCodes.RateLimited:
207
+ case constants_1.GatewayCloseEventCodes.SessionTimedOut:
208
+ reconnect = this.client.reconnect;
209
+ break;
210
+ default:
211
+ throw new utils_1.GatewayError(code, reason.toString());
212
+ }
213
+ this.disconnect(reconnect);
658
214
  }
659
- /** https://discord.com/developers/docs/topics/gateway-events#update-voice-state */
660
- updateVoiceState(options) {
661
- this.ws.send(JSON.stringify({
662
- op: constants_1.GatewayOPCodes.VoiceStateUpdate,
663
- d: {
664
- guild_id: options.guildID,
665
- channel_id: options.channelID,
666
- self_mute: options.selfMute,
667
- self_deaf: options.selfDeaf,
668
- },
669
- }));
215
+ resume() {
216
+ this.transmitter.resume({
217
+ token: this.client.token,
218
+ sessionId: this.sessionId,
219
+ seq: this.sequence,
220
+ });
670
221
  }
671
222
  }
672
223
  exports.Shard = Shard;