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