disgroove 2.2.7-dev.fca4921 → 3.0.0-dev.513aea4

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 (81) hide show
  1. package/dist/lib/Client.d.ts +291 -254
  2. package/dist/lib/Client.js +554 -460
  3. package/dist/lib/constants.d.ts +29 -21
  4. package/dist/lib/constants.js +33 -24
  5. package/dist/lib/gateway/Shard.d.ts +7 -4
  6. package/dist/lib/gateway/Shard.js +275 -190
  7. package/dist/lib/index.d.ts +5 -1
  8. package/dist/lib/index.js +5 -1
  9. package/dist/lib/rest/Endpoints.d.ts +95 -91
  10. package/dist/lib/rest/Endpoints.js +111 -102
  11. package/dist/lib/rest/RequestManager.d.ts +1 -3
  12. package/dist/lib/transformers/ApplicationCommands.js +4 -4
  13. package/dist/lib/transformers/Applications.d.ts +2 -0
  14. package/dist/lib/transformers/Applications.js +110 -4
  15. package/dist/lib/transformers/AuditLogs.js +10 -10
  16. package/dist/lib/transformers/AutoModeration.js +6 -6
  17. package/dist/lib/transformers/Channels.js +16 -16
  18. package/dist/lib/transformers/Components.d.ts +13 -3
  19. package/dist/lib/transformers/Components.js +283 -156
  20. package/dist/lib/transformers/Entitlements.d.ts +2 -2
  21. package/dist/lib/transformers/Entitlements.js +16 -16
  22. package/dist/lib/transformers/GuildScheduledEvents.js +8 -8
  23. package/dist/lib/transformers/GuildTemplates.js +4 -4
  24. package/dist/lib/transformers/Guilds.js +28 -28
  25. package/dist/lib/transformers/Interactions.js +300 -55
  26. package/dist/lib/transformers/Lobbies.d.ts +7 -0
  27. package/dist/lib/transformers/Lobbies.js +38 -0
  28. package/dist/lib/transformers/Messages.d.ts +4 -3
  29. package/dist/lib/transformers/Messages.js +38 -52
  30. package/dist/lib/transformers/Polls.js +2 -2
  31. package/dist/lib/transformers/Presences.js +6 -6
  32. package/dist/lib/transformers/Roles.js +8 -8
  33. package/dist/lib/transformers/SKUs.js +2 -2
  34. package/dist/lib/transformers/Soundboards.js +6 -6
  35. package/dist/lib/transformers/StageInstances.js +6 -6
  36. package/dist/lib/transformers/Stickers.js +3 -3
  37. package/dist/lib/transformers/Subscriptions.js +8 -8
  38. package/dist/lib/transformers/Teams.js +4 -4
  39. package/dist/lib/transformers/Users.js +6 -6
  40. package/dist/lib/transformers/Voice.js +8 -8
  41. package/dist/lib/transformers/Webhooks.js +6 -6
  42. package/dist/lib/transformers/index.d.ts +2 -1
  43. package/dist/lib/transformers/index.js +2 -1
  44. package/dist/lib/types/application-command.d.ts +9 -4
  45. package/dist/lib/types/application-role-connection-metadata.d.ts +1 -0
  46. package/dist/lib/types/application.d.ts +12 -7
  47. package/dist/lib/types/audit-log.d.ts +9 -5
  48. package/dist/lib/types/auto-moderation.d.ts +7 -3
  49. package/dist/lib/types/channel.d.ts +17 -23
  50. package/dist/lib/types/common.d.ts +2 -0
  51. package/dist/lib/types/components.d.ts +478 -0
  52. package/dist/lib/types/components.js +2 -0
  53. package/dist/lib/types/emoji.d.ts +1 -0
  54. package/dist/lib/types/entitlements.d.ts +5 -4
  55. package/dist/lib/types/gateway-events.d.ts +203 -130
  56. package/dist/lib/types/guild-scheduled-event.d.ts +10 -5
  57. package/dist/lib/types/guild-template.d.ts +3 -2
  58. package/dist/lib/types/guild.d.ts +40 -22
  59. package/dist/lib/types/interaction.d.ts +35 -18
  60. package/dist/lib/types/invite.d.ts +5 -2
  61. package/dist/lib/types/lobby.d.ts +31 -0
  62. package/dist/lib/types/lobby.js +2 -0
  63. package/dist/lib/types/message-components.d.ts +334 -118
  64. package/dist/lib/types/message.d.ts +32 -20
  65. package/dist/lib/types/poll.d.ts +7 -1
  66. package/dist/lib/types/role.d.ts +8 -5
  67. package/dist/lib/types/sku.d.ts +2 -1
  68. package/dist/lib/types/soundboard.d.ts +4 -3
  69. package/dist/lib/types/stage-instance.d.ts +4 -3
  70. package/dist/lib/types/sticker.d.ts +8 -5
  71. package/dist/lib/types/subscription.d.ts +6 -5
  72. package/dist/lib/types/team.d.ts +4 -2
  73. package/dist/lib/types/user.d.ts +10 -3
  74. package/dist/lib/types/voice.d.ts +6 -4
  75. package/dist/lib/types/webhook.d.ts +4 -3
  76. package/dist/lib/utils/CDN.d.ts +22 -22
  77. package/dist/lib/utils/CDN.js +22 -22
  78. package/dist/lib/utils/formatters.d.ts +7 -7
  79. package/dist/lib/utils/formatters.js +19 -19
  80. package/dist/package.json +4 -4
  81. package/package.json +4 -4
@@ -37,63 +37,79 @@ class Shard {
37
37
  heartbeatInterval;
38
38
  client;
39
39
  ws;
40
- sessionID;
40
+ sessionId;
41
41
  resumeGatewayURL;
42
+ sequence;
42
43
  constructor(id, client) {
43
44
  this.id = id;
44
45
  this.heartbeatInterval = null;
45
46
  this.client = client;
46
- this.ws = new ws_1.default("wss://gateway.discord.gg/?v=10&encoding=json", client.ws);
47
- this.sessionID = null;
47
+ this.ws = new ws_1.default("wss://gateway.discord.gg/?v=10&encoding=json", this.client.ws);
48
+ this.sessionId = null;
48
49
  this.resumeGatewayURL = null;
50
+ this.sequence = null;
49
51
  }
50
52
  /** https://discord.com/developers/docs/topics/gateway#connections */
51
- 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));
53
+ connect(reconnect) {
54
+ if (this.ws) {
55
+ this.ws.on("open", () => this.onWebSocketOpen(reconnect));
56
+ this.ws.on("message", (data) => this.onWebSocketMessage(data));
57
+ this.ws.on("error", (err) => this.onWebSocketError(err));
58
+ this.ws.on("close", (code, reason) => this.onWebSocketClose(code, reason));
59
+ }
56
60
  }
57
- /** https://discord.com/developers/docs/topics/gateway#connections */
61
+ /** https://discord.com/developers/docs/events/gateway#initiating-a-disconnect */
58
62
  disconnect() {
59
- if (this.heartbeatInterval) {
60
- clearInterval(this.heartbeatInterval);
61
- this.heartbeatInterval = null;
63
+ if (this.ws) {
64
+ if (this.heartbeatInterval) {
65
+ clearInterval(this.heartbeatInterval);
66
+ this.heartbeatInterval = null;
67
+ }
68
+ if (this.ws.readyState !== ws_1.default.CLOSED) {
69
+ this.ws.removeAllListeners();
70
+ this.ws.close(1000, "Session Invalidated - Disconnect");
71
+ this.ws = null;
72
+ }
62
73
  }
63
74
  }
64
75
  /** https://discord.com/developers/docs/topics/gateway-events#heartbeat */
65
76
  heartbeat(lastSequence) {
66
- this.ws.send(JSON.stringify({
67
- op: constants_1.GatewayOPCodes.Heartbeat,
68
- d: lastSequence,
69
- }));
77
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
78
+ this.ws.send(JSON.stringify({
79
+ op: constants_1.GatewayOPCodes.Heartbeat,
80
+ d: lastSequence,
81
+ }));
82
+ }
70
83
  }
71
84
  /** https://discord.com/developers/docs/topics/gateway-events#identify */
72
85
  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,
86
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
87
+ this.ws.send(JSON.stringify({
88
+ op: constants_1.GatewayOPCodes.Identify,
89
+ d: {
90
+ token: options.token,
91
+ properties: {
92
+ os: options.properties.os,
93
+ browser: options.properties.browser,
94
+ device: options.properties.device,
95
+ },
96
+ compress: options.compress,
97
+ large_threshold: options.largeThreshold,
98
+ shard: options.shard,
99
+ presence: options.presence,
100
+ intents: options.intents,
81
101
  },
82
- compress: options.compress,
83
- large_threshold: options.largeThreshold,
84
- shard: options.shard,
85
- presence: options.presence,
86
- intents: options.intents,
87
- },
88
- }));
102
+ }));
103
+ }
89
104
  }
90
105
  onDispatch(packet) {
106
+ this.sequence = packet.s;
91
107
  this.client.emit("dispatch", packet, this.id);
92
108
  switch (packet.t) {
93
109
  case constants_1.GatewayEvents.Ready:
94
110
  {
95
- this.sessionID = packet.d.session_id;
96
- this.resumeGatewayURL = packet.d.resume_gateway_url;
111
+ this.sessionId = packet.d.session_id;
112
+ this.resumeGatewayURL = `${packet.d.resume_gateway_url}?v=10&encoding=json`;
97
113
  this.client.user = transformers_1.Users.userFromRaw(packet.d.user);
98
114
  this.client.application = packet.d.application;
99
115
  this.client.emit("ready");
@@ -102,6 +118,20 @@ class Shard {
102
118
  case constants_1.GatewayEvents.Resumed:
103
119
  this.client.emit("resumed");
104
120
  break;
121
+ case constants_1.GatewayEvents.RateLimited:
122
+ switch (packet.d.opcode) {
123
+ case constants_1.GatewayOPCodes.RequestGuildMembers: {
124
+ this.client.emit("rateLimited", {
125
+ opcode: constants_1.GatewayOPCodes.RequestGuildMembers,
126
+ retryAfter: packet.d.retry_after,
127
+ meta: {
128
+ guildId: packet.d.meta.guild_id,
129
+ nonce: packet.d.nonce,
130
+ },
131
+ });
132
+ }
133
+ }
134
+ break;
105
135
  case constants_1.GatewayEvents.ApplicationCommandPermissionsUpdate:
106
136
  this.client.emit("applicationCommandPermissionsUpdate", transformers_1.Guilds.guildApplicationCommandPermissionsFromRaw(packet.d));
107
137
  break;
@@ -116,21 +146,21 @@ class Shard {
116
146
  break;
117
147
  case constants_1.GatewayEvents.AutoModerationActionExecution:
118
148
  this.client.emit("autoModerationActionExecution", {
119
- guildID: packet.d.guild_id,
149
+ guildId: packet.d.guild_id,
120
150
  action: {
121
151
  type: packet.d.action.type,
122
152
  metadata: {
123
- channelID: packet.d.action.metadata.channel_id,
153
+ channelId: packet.d.action.metadata.channel_id,
124
154
  durationSeconds: packet.d.action.metadata.duration_seconds,
125
155
  customMessage: packet.d.action.metadata.custom_message,
126
156
  },
127
157
  },
128
- ruleID: packet.d.rule_id,
158
+ ruleId: packet.d.rule_id,
129
159
  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,
160
+ userId: packet.d.user_id,
161
+ channelId: packet.d.channel_id,
162
+ messageId: packet.d.message_id,
163
+ alertSystemMessageId: packet.d.alert_system_message_id,
134
164
  content: packet.d.content,
135
165
  matchedKeyword: packet.d.matched_keyword,
136
166
  matchedContent: packet.d.matched_content,
@@ -147,8 +177,8 @@ class Shard {
147
177
  break;
148
178
  case constants_1.GatewayEvents.ChannelPinsUpdate:
149
179
  this.client.emit("channelPinsUpdate", {
150
- guildID: packet.d.guild_id,
151
- channelID: packet.d.channel_id,
180
+ guildId: packet.d.guild_id,
181
+ channelId: packet.d.channel_id,
152
182
  lastPinTimestamp: packet.d.last_pin_timestamp,
153
183
  });
154
184
  break;
@@ -163,8 +193,8 @@ class Shard {
163
193
  break;
164
194
  case constants_1.GatewayEvents.ThreadListSync:
165
195
  this.client.emit("threadListSync", {
166
- guildID: packet.d.guild_id,
167
- channelIDs: packet.d.channel_ids,
196
+ guildId: packet.d.guild_id,
197
+ channelIds: packet.d.channel_ids,
168
198
  threads: packet.d.threads.map((thread) => transformers_1.Channels.channelFromRaw(thread)),
169
199
  members: packet.d.members.map((threadMember) => transformers_1.Channels.threadMemberFromRaw(threadMember)),
170
200
  });
@@ -172,22 +202,22 @@ class Shard {
172
202
  case constants_1.GatewayEvents.ThreadMemberUpdate:
173
203
  this.client.emit("threadMemberUpdate", {
174
204
  id: packet.d.id,
175
- userID: packet.d.user_id,
205
+ userId: packet.d.user_id,
176
206
  joinTimestamp: packet.d.join_timestamp,
177
207
  flags: packet.d.flags,
178
208
  member: packet.d.member !== undefined
179
209
  ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
180
210
  : undefined,
181
- guildID: packet.d.guild_id,
211
+ guildId: packet.d.guild_id,
182
212
  });
183
213
  break;
184
214
  case constants_1.GatewayEvents.ThreadMembersUpdate:
185
215
  this.client.emit("threadMembersUpdate", {
186
216
  id: packet.d.id,
187
- guildID: packet.d.guild_id,
217
+ guildId: packet.d.guild_id,
188
218
  memberCount: packet.d.member_count,
189
219
  addedMembers: packet.d.members.map((threadMember) => transformers_1.Channels.threadMemberFromRaw(threadMember)),
190
- removedMemberIDs: packet.d.removed_member_ids,
220
+ removedMemberIds: packet.d.removed_member_ids,
191
221
  });
192
222
  break;
193
223
  case constants_1.GatewayEvents.EntitlementCreate:
@@ -225,18 +255,18 @@ class Shard {
225
255
  case constants_1.GatewayEvents.GuildAuditLogEntryCreate:
226
256
  this.client.emit("guildAuditLogEntryCreate", {
227
257
  ...transformers_1.AuditLogs.auditLogEntryFromRaw(packet.d),
228
- guildID: packet.d.guild_id,
258
+ guildId: packet.d.guild_id,
229
259
  });
230
260
  break;
231
261
  case constants_1.GatewayEvents.GuildBanAdd:
232
262
  this.client.emit("guildBanAdd", {
233
- guildID: packet.d.guild_id,
263
+ guildId: packet.d.guild_id,
234
264
  user: transformers_1.Users.userFromRaw(packet.d.user),
235
265
  });
236
266
  break;
237
267
  case constants_1.GatewayEvents.GuildBanRemove:
238
268
  this.client.emit("guildBanRemove", {
239
- guildID: packet.d.guild_id,
269
+ guildId: packet.d.guild_id,
240
270
  user: transformers_1.Users.userFromRaw(packet.d.user),
241
271
  });
242
272
  break;
@@ -252,18 +282,18 @@ class Shard {
252
282
  case constants_1.GatewayEvents.GuildMemberAdd:
253
283
  this.client.emit("guildMemberAdd", {
254
284
  ...transformers_1.Guilds.guildMemberFromRaw(packet.d),
255
- guildID: packet.d.guild_id,
285
+ guildId: packet.d.guild_id,
256
286
  });
257
287
  break;
258
288
  case constants_1.GatewayEvents.GuildMemberRemove:
259
289
  this.client.emit("guildMemberRemove", {
260
- guildID: packet.d.guild_id,
290
+ guildId: packet.d.guild_id,
261
291
  user: transformers_1.Users.userFromRaw(packet.d.user),
262
292
  });
263
293
  break;
264
294
  case constants_1.GatewayEvents.GuildMemberUpdate:
265
295
  this.client.emit("guildMemberUpdate", {
266
- guildID: packet.d.guild_id,
296
+ guildId: packet.d.guild_id,
267
297
  roles: packet.d.roles,
268
298
  user: transformers_1.Users.userFromRaw(packet.d.user),
269
299
  nick: packet.d.nick,
@@ -279,14 +309,14 @@ class Shard {
279
309
  avatarDecorationData: packet.d.avatar_decoration_data !== undefined
280
310
  ? {
281
311
  asset: packet.d.asset,
282
- skuID: packet.d.sku_id,
312
+ skuId: packet.d.sku_id,
283
313
  }
284
314
  : undefined,
285
315
  });
286
316
  break;
287
317
  case constants_1.GatewayEvents.GuildMembersChunk:
288
318
  this.client.emit("guildMembersChunk", {
289
- guildID: packet.d.guild_id,
319
+ guildId: packet.d.guild_id,
290
320
  members: packet.d.members.map((guildMember) => transformers_1.Guilds.guildMemberFromRaw(guildMember)),
291
321
  chunkIndex: packet.d.chunk_index,
292
322
  chunkCount: packet.d.chunk_count,
@@ -327,8 +357,8 @@ class Shard {
327
357
  break;
328
358
  case constants_1.GatewayEvents.GuildSoundboardSoundDelete:
329
359
  this.client.emit("guildSoundboardSoundDelete", {
330
- soundID: packet.d.sound_id,
331
- guildID: packet.d.guild_id,
360
+ soundId: packet.d.sound_id,
361
+ guildId: packet.d.guild_id,
332
362
  });
333
363
  break;
334
364
  case constants_1.GatewayEvents.GuildSoundboardSoundsUpdate:
@@ -340,20 +370,20 @@ class Shard {
340
370
  case constants_1.GatewayEvents.IntegrationCreate:
341
371
  this.client.emit("integrationCreate", {
342
372
  ...transformers_1.Guilds.integrationFromRaw(packet.d),
343
- guildID: packet.d.guild_id,
373
+ guildId: packet.d.guild_id,
344
374
  });
345
375
  break;
346
376
  case constants_1.GatewayEvents.IntegrationUpdate:
347
377
  this.client.emit("integrationUpdate", {
348
378
  ...transformers_1.Guilds.integrationFromRaw(packet.d),
349
- guildID: packet.d.guild_id,
379
+ guildId: packet.d.guild_id,
350
380
  });
351
381
  break;
352
382
  case constants_1.GatewayEvents.IntegrationDelete:
353
383
  this.client.emit("integrationDelete", {
354
384
  id: packet.d.id,
355
- guildID: packet.d.guild_id,
356
- applicationID: packet.d.application_id,
385
+ guildId: packet.d.guild_id,
386
+ applicationId: packet.d.application_id,
357
387
  });
358
388
  break;
359
389
  case constants_1.GatewayEvents.InteractionCreate:
@@ -361,10 +391,10 @@ class Shard {
361
391
  break;
362
392
  case constants_1.GatewayEvents.InviteCreate:
363
393
  this.client.emit("inviteCreate", {
364
- channelID: packet.d.channel_id,
394
+ channelId: packet.d.channel_id,
365
395
  code: packet.d.code,
366
396
  createdAt: packet.d.created_at,
367
- guildID: packet.d.guild_id,
397
+ guildId: packet.d.guild_id,
368
398
  inviter: packet.d.inviter !== undefined
369
399
  ? transformers_1.Users.userFromRaw(packet.d.inviter)
370
400
  : undefined,
@@ -379,19 +409,20 @@ class Shard {
379
409
  : undefined,
380
410
  temporary: packet.d.temporary,
381
411
  uses: packet.d.uses,
412
+ expiresAt: packet.d.expires_at,
382
413
  });
383
414
  break;
384
415
  case constants_1.GatewayEvents.InviteDelete:
385
416
  this.client.emit("inviteDelete", {
386
- channelID: packet.d.channel_id,
387
- guildID: packet.d.guild_id,
417
+ channelId: packet.d.channel_id,
418
+ guildId: packet.d.guild_id,
388
419
  code: packet.d.code,
389
420
  });
390
421
  break;
391
422
  case constants_1.GatewayEvents.MessageCreate:
392
423
  this.client.emit("messageCreate", {
393
424
  ...transformers_1.Messages.messageFromRaw(packet.d),
394
- guildID: packet.d.guild_id,
425
+ guildId: packet.d.guild_id,
395
426
  member: packet.d.member !== undefined
396
427
  ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
397
428
  : undefined,
@@ -404,28 +435,28 @@ class Shard {
404
435
  case constants_1.GatewayEvents.MessageDelete:
405
436
  this.client.emit("messageDelete", {
406
437
  id: packet.d.id,
407
- channelID: packet.d.channel_id,
408
- guildID: packet.d.guild_id,
438
+ channelId: packet.d.channel_id,
439
+ guildId: packet.d.guild_id,
409
440
  });
410
441
  break;
411
442
  case constants_1.GatewayEvents.MessageDeleteBulk:
412
443
  this.client.emit("messageDeleteBulk", {
413
444
  ids: packet.d.ids,
414
- channelID: packet.d.channel_id,
415
- guildID: packet.d.guild_id,
445
+ channelId: packet.d.channel_id,
446
+ guildId: packet.d.guild_id,
416
447
  });
417
448
  break;
418
449
  case constants_1.GatewayEvents.MessageReactionAdd:
419
450
  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,
451
+ userId: packet.d.user_id,
452
+ channelId: packet.d.user_id,
453
+ messageId: packet.d.user_id,
454
+ guildId: packet.d.user_id,
424
455
  member: packet.d.member !== undefined
425
456
  ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
426
457
  : undefined,
427
458
  emoji: transformers_1.Emojis.emojiFromRaw(packet.d.emoji),
428
- messageAuthorID: packet.d.message_author_id,
459
+ messageAuthorId: packet.d.message_author_id,
429
460
  burst: packet.d.burst,
430
461
  burstColors: packet.d.burst_colors,
431
462
  type: packet.d.type,
@@ -433,10 +464,10 @@ class Shard {
433
464
  break;
434
465
  case constants_1.GatewayEvents.MessageReactionRemove:
435
466
  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,
467
+ userId: packet.d.user_id,
468
+ channelId: packet.d.user_id,
469
+ messageId: packet.d.user_id,
470
+ guildId: packet.d.user_id,
440
471
  emoji: transformers_1.Emojis.emojiFromRaw(packet.d.emoji),
441
472
  burst: packet.d.burst,
442
473
  type: packet.d.type,
@@ -444,16 +475,16 @@ class Shard {
444
475
  break;
445
476
  case constants_1.GatewayEvents.MessageReactionRemoveAll:
446
477
  this.client.emit("messageReactionRemoveAll", {
447
- channelID: packet.d.channel_id,
448
- messageID: packet.d.message_id,
449
- guildID: packet.d.guild_id,
478
+ channelId: packet.d.channel_id,
479
+ messageId: packet.d.message_id,
480
+ guildId: packet.d.guild_id,
450
481
  });
451
482
  break;
452
483
  case constants_1.GatewayEvents.MessageReactionRemoveEmoji:
453
484
  this.client.emit("messageReactionRemoveEmoji", {
454
- channelID: packet.d.channel_id,
455
- guildID: packet.d.guild_id,
456
- messageID: packet.d.message_id,
485
+ channelId: packet.d.channel_id,
486
+ guildId: packet.d.guild_id,
487
+ messageId: packet.d.message_id,
457
488
  emoji: transformers_1.Emojis.emojiFromRaw(packet.d.emoji),
458
489
  });
459
490
  break;
@@ -471,9 +502,9 @@ class Shard {
471
502
  break;
472
503
  case constants_1.GatewayEvents.TypingStart:
473
504
  this.client.emit("typingStart", {
474
- channelID: packet.d.channel_id,
475
- guildID: packet.d.guild_id,
476
- userID: packet.d.user_id,
505
+ channelId: packet.d.channel_id,
506
+ guildId: packet.d.guild_id,
507
+ userId: packet.d.user_id,
477
508
  timestamp: packet.d.timestamp,
478
509
  member: packet.d.member !== undefined
479
510
  ? transformers_1.Guilds.guildMemberFromRaw(packet.d.member)
@@ -485,15 +516,15 @@ class Shard {
485
516
  break;
486
517
  case constants_1.GatewayEvents.VoiceChannelEffectSend:
487
518
  this.client.emit("voiceChannelEffectSend", {
488
- channelID: packet.d.channel_id,
489
- guildID: packet.d.guild_id,
490
- userID: packet.d.user_id,
519
+ channelId: packet.d.channel_id,
520
+ guildId: packet.d.guild_id,
521
+ userId: packet.d.user_id,
491
522
  emoji: packet.d.emoji !== null
492
523
  ? transformers_1.Emojis.emojiFromRaw(packet.d.emoji)
493
524
  : null,
494
525
  animationType: packet.d.animation_type,
495
- animationID: packet.d.animation_id,
496
- soundID: packet.d.sound_id,
526
+ animationId: packet.d.animation_id,
527
+ soundId: packet.d.sound_id,
497
528
  soundVolume: packet.d.sound_volume,
498
529
  });
499
530
  break;
@@ -504,7 +535,7 @@ class Shard {
504
535
  {
505
536
  this.client.emit("voiceServerUpdate", {
506
537
  token: packet.d.token,
507
- guildID: packet.d.guild_id,
538
+ guildId: packet.d.guild_id,
508
539
  endpoint: packet.d.endpoint,
509
540
  });
510
541
  }
@@ -523,54 +554,63 @@ class Shard {
523
554
  break;
524
555
  case constants_1.GatewayEvents.MessagePollVoteAdd:
525
556
  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,
557
+ userId: packet.d.user_id,
558
+ channelId: packet.d.channel_id,
559
+ messageId: packet.d.message_id,
560
+ guildId: packet.d.guild_id,
561
+ answerId: packet.d.answer_id,
531
562
  });
532
563
  break;
533
564
  case constants_1.GatewayEvents.MessagePollVoteRemove:
534
565
  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,
566
+ userId: packet.d.user_id,
567
+ channelId: packet.d.channel_id,
568
+ messageId: packet.d.message_id,
569
+ guildId: packet.d.guild_id,
570
+ answerId: packet.d.answer_id,
540
571
  });
541
572
  break;
542
573
  }
543
574
  }
544
- onWebSocketOpen() {
545
- this.identify({
546
- token: this.client.token,
547
- properties: {
548
- os: this.client.properties?.os ?? process.platform,
549
- browser: this.client.properties?.browser ?? pkg.name,
550
- device: this.client.properties?.device ?? pkg.name,
551
- },
552
- compress: this.client.compress,
553
- largeThreshold: this.client.largeThreshold,
554
- shard: [this.id, this.client.shardsCount],
555
- presence: this.client.presence !== undefined
556
- ? {
557
- since: this.client.presence.status === constants_1.StatusTypes.Idle
558
- ? Date.now()
559
- : null,
560
- activities: this.client.presence.activities?.map((activity) => ({
561
- name: activity.type === constants_1.ActivityType.Custom
562
- ? "Custom Status"
563
- : activity.name,
564
- type: activity.type,
565
- url: activity.url,
566
- state: activity.state,
567
- })),
568
- status: this.client.presence.status ?? constants_1.StatusTypes.Online,
569
- afk: !!this.client.presence.afk,
570
- }
571
- : undefined,
572
- intents: this.client.intents,
573
- });
575
+ onWebSocketOpen(reconnect) {
576
+ if (reconnect) {
577
+ this.resume({
578
+ token: this.client.token,
579
+ sessionId: this.sessionId,
580
+ seq: this.sequence,
581
+ });
582
+ }
583
+ else {
584
+ this.identify({
585
+ token: this.client.token,
586
+ properties: {
587
+ os: this.client.properties?.os ?? process.platform,
588
+ browser: this.client.properties?.browser ?? pkg.name,
589
+ device: this.client.properties?.device ?? pkg.name,
590
+ },
591
+ compress: this.client.compress,
592
+ largeThreshold: this.client.largeThreshold,
593
+ shard: [this.id, this.client.shardsCount],
594
+ presence: this.client.presence !== undefined
595
+ ? {
596
+ since: this.client.presence.status === constants_1.StatusTypes.Idle
597
+ ? Date.now()
598
+ : null,
599
+ activities: this.client.presence.activities?.map((activity) => ({
600
+ name: activity.type === constants_1.ActivityType.Custom
601
+ ? "Custom Status"
602
+ : activity.name,
603
+ type: activity.type,
604
+ url: activity.url,
605
+ state: activity.state,
606
+ })),
607
+ status: this.client.presence.status ?? constants_1.StatusTypes.Online,
608
+ afk: !!this.client.presence.afk,
609
+ }
610
+ : undefined,
611
+ intents: this.client.intents,
612
+ });
613
+ }
574
614
  }
575
615
  onWebSocketMessage(data) {
576
616
  const packet = JSON.parse(data.toString());
@@ -579,10 +619,23 @@ class Shard {
579
619
  this.onDispatch(packet);
580
620
  break;
581
621
  case constants_1.GatewayOPCodes.Reconnect:
582
- this.client.emit("reconnect");
622
+ {
623
+ this.client.emit("reconnect");
624
+ this.reconnect();
625
+ }
583
626
  break;
584
627
  case constants_1.GatewayOPCodes.InvalidSession:
585
- this.client.emit("invalidSession");
628
+ {
629
+ this.client.emit("invalidSession");
630
+ if (packet.d) {
631
+ this.reconnect();
632
+ }
633
+ else if (this.ws) {
634
+ this.ws.close(1000, "Invalid Session - Identify required");
635
+ this.ws = new ws_1.default("wss://gateway.discord.gg/?v=10&encoding=json", this.client.ws);
636
+ this.connect(false);
637
+ }
638
+ }
586
639
  break;
587
640
  case constants_1.GatewayOPCodes.Hello:
588
641
  {
@@ -599,74 +652,106 @@ class Shard {
599
652
  throw err;
600
653
  }
601
654
  onWebSocketClose(code, reason) {
602
- if (code === 1000)
603
- return;
604
- throw new utils_1.GatewayError(code, reason.toString());
655
+ switch (code) {
656
+ case 1000:
657
+ break;
658
+ case constants_1.GatewayCloseEventCodes.UnknownError:
659
+ case constants_1.GatewayCloseEventCodes.UnknownOPCode:
660
+ case constants_1.GatewayCloseEventCodes.DecodeError:
661
+ case constants_1.GatewayCloseEventCodes.NotAuthenticated:
662
+ case constants_1.GatewayCloseEventCodes.AlreadyAuthenticated:
663
+ case constants_1.GatewayCloseEventCodes.InvalidSequence:
664
+ case constants_1.GatewayCloseEventCodes.RateLimited:
665
+ case constants_1.GatewayCloseEventCodes.SessionTimedOut:
666
+ this.reconnect();
667
+ break;
668
+ default:
669
+ this.disconnect();
670
+ throw new utils_1.GatewayError(code, reason.toString());
671
+ }
672
+ }
673
+ /** https://discord.com/developers/docs/events/gateway#resuming */
674
+ reconnect() {
675
+ if (this.ws && this.resumeGatewayURL && this.sessionId && this.sequence) {
676
+ this.ws.close(1000, "Resume Attempt - Reconnect");
677
+ this.ws = new ws_1.default(this.resumeGatewayURL, this.client.ws);
678
+ this.connect(true);
679
+ }
605
680
  }
606
681
  /** https://discord.com/developers/docs/topics/gateway-events#request-guild-members */
607
682
  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
- }));
683
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
684
+ this.ws.send(JSON.stringify({
685
+ op: constants_1.GatewayOPCodes.RequestGuildMembers,
686
+ d: {
687
+ guild_id: options.guildId,
688
+ query: options.query,
689
+ limit: options.limit,
690
+ presences: options.presences,
691
+ user_ids: options.userIds,
692
+ nonce: options.nonce,
693
+ },
694
+ }));
695
+ }
619
696
  }
620
697
  /** https://discord.com/developers/docs/topics/gateway-events#request-soundboard-sounds */
621
698
  requestSoundboardSounds(options) {
622
- this.ws.send(JSON.stringify({
623
- op: constants_1.GatewayOPCodes.RequestSoundboardSounds,
624
- d: {
625
- guild_ids: options.guildIDs,
626
- },
627
- }));
699
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
700
+ this.ws.send(JSON.stringify({
701
+ op: constants_1.GatewayOPCodes.RequestSoundboardSounds,
702
+ d: {
703
+ guild_ids: options.guildIds,
704
+ },
705
+ }));
706
+ }
628
707
  }
629
708
  /** https://discord.com/developers/docs/topics/gateway-events#resume */
630
709
  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
- }));
710
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
711
+ this.ws.send(JSON.stringify({
712
+ op: constants_1.GatewayOPCodes.Resume,
713
+ d: {
714
+ token: options.token,
715
+ session_id: options.sessionId,
716
+ seq: options.seq,
717
+ },
718
+ }));
719
+ }
639
720
  }
640
721
  /** https://discord.com/developers/docs/topics/gateway-events#update-presence */
641
722
  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
- }));
723
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
724
+ this.ws.send(JSON.stringify({
725
+ op: constants_1.GatewayOPCodes.PresenceUpdate,
726
+ d: {
727
+ since: options.status === constants_1.StatusTypes.Idle ? Date.now() : null,
728
+ activities: options.activities?.map((activity) => ({
729
+ name: activity.type === constants_1.ActivityType.Custom
730
+ ? "Custom Status"
731
+ : activity.name,
732
+ type: activity.type,
733
+ url: activity.url,
734
+ state: activity.state,
735
+ })),
736
+ status: options.status ?? constants_1.StatusTypes.Online,
737
+ afk: !!options.afk,
738
+ },
739
+ }));
740
+ }
658
741
  }
659
742
  /** https://discord.com/developers/docs/topics/gateway-events#update-voice-state */
660
743
  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
- }));
744
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
745
+ this.ws.send(JSON.stringify({
746
+ op: constants_1.GatewayOPCodes.VoiceStateUpdate,
747
+ d: {
748
+ guild_id: options.guildId,
749
+ channel_id: options.channelId,
750
+ self_mute: options.selfMute,
751
+ self_deaf: options.selfDeaf,
752
+ },
753
+ }));
754
+ }
670
755
  }
671
756
  }
672
757
  exports.Shard = Shard;