@velliajs/discord 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +133 -0
  3. package/package.json +82 -0
  4. package/src/client/BaseClient.js +83 -0
  5. package/src/client/Client.js +591 -0
  6. package/src/client/WebhookClient.js +103 -0
  7. package/src/client/actions/Action.js +119 -0
  8. package/src/client/actions/ActionsManager.js +79 -0
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  10. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  11. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  12. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  13. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  14. package/src/client/actions/ChannelCreate.js +23 -0
  15. package/src/client/actions/ChannelDelete.js +23 -0
  16. package/src/client/actions/ChannelUpdate.js +33 -0
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  18. package/src/client/actions/GuildBanAdd.js +20 -0
  19. package/src/client/actions/GuildBanRemove.js +25 -0
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  21. package/src/client/actions/GuildDelete.js +44 -0
  22. package/src/client/actions/GuildEmojiCreate.js +20 -0
  23. package/src/client/actions/GuildEmojiDelete.js +19 -0
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  27. package/src/client/actions/GuildMemberRemove.js +31 -0
  28. package/src/client/actions/GuildMemberUpdate.js +44 -0
  29. package/src/client/actions/GuildRoleCreate.js +25 -0
  30. package/src/client/actions/GuildRoleDelete.js +29 -0
  31. package/src/client/actions/GuildRoleUpdate.js +39 -0
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  38. package/src/client/actions/GuildStickerCreate.js +20 -0
  39. package/src/client/actions/GuildStickerDelete.js +19 -0
  40. package/src/client/actions/GuildStickerUpdate.js +20 -0
  41. package/src/client/actions/GuildStickersUpdate.js +34 -0
  42. package/src/client/actions/GuildUpdate.js +33 -0
  43. package/src/client/actions/InteractionCreate.js +101 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +37 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +47 -0
  49. package/src/client/actions/MessageReactionAdd.js +55 -0
  50. package/src/client/actions/MessageReactionRemove.js +45 -0
  51. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  52. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  53. package/src/client/actions/MessageUpdate.js +26 -0
  54. package/src/client/actions/PresenceUpdate.js +42 -0
  55. package/src/client/actions/StageInstanceCreate.js +28 -0
  56. package/src/client/actions/StageInstanceDelete.js +31 -0
  57. package/src/client/actions/StageInstanceUpdate.js +30 -0
  58. package/src/client/actions/ThreadCreate.js +24 -0
  59. package/src/client/actions/ThreadDelete.js +26 -0
  60. package/src/client/actions/ThreadListSync.js +60 -0
  61. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  62. package/src/client/actions/ThreadMembersUpdate.js +47 -0
  63. package/src/client/actions/TypingStart.js +29 -0
  64. package/src/client/actions/UserUpdate.js +36 -0
  65. package/src/client/actions/VoiceStateUpdate.js +43 -0
  66. package/src/client/actions/WebhooksUpdate.js +20 -0
  67. package/src/client/voice/ClientVoiceManager.js +44 -0
  68. package/src/client/websocket/WebSocketManager.js +393 -0
  69. package/src/client/websocket/WebSocketShard.js +231 -0
  70. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  71. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  72. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  73. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  74. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  76. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  77. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  78. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  79. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  80. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  81. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  82. package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
  83. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  84. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  85. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  86. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  87. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  88. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  89. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  90. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  94. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  98. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  99. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  100. package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  102. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  103. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  104. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  105. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  106. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  107. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  108. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  109. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  110. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  111. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/READY.js +27 -0
  113. package/src/client/websocket/handlers/RESUMED.js +14 -0
  114. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  115. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  116. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  118. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  119. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  120. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  122. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  123. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  124. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  125. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  126. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/index.js +64 -0
  129. package/src/errors/DJSError.js +48 -0
  130. package/src/errors/ErrorCodes.js +319 -0
  131. package/src/errors/Messages.js +170 -0
  132. package/src/errors/index.js +5 -0
  133. package/src/index.js +213 -0
  134. package/src/managers/ApplicationCommandManager.js +263 -0
  135. package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
  136. package/src/managers/AutoModerationRuleManager.js +288 -0
  137. package/src/managers/BaseGuildEmojiManager.js +80 -0
  138. package/src/managers/BaseManager.js +19 -0
  139. package/src/managers/CachedManager.js +57 -0
  140. package/src/managers/CategoryChannelChildManager.js +77 -0
  141. package/src/managers/ChannelManager.js +128 -0
  142. package/src/managers/DataManager.js +61 -0
  143. package/src/managers/GuildApplicationCommandManager.js +28 -0
  144. package/src/managers/GuildBanManager.js +204 -0
  145. package/src/managers/GuildChannelManager.js +494 -0
  146. package/src/managers/GuildEmojiManager.js +174 -0
  147. package/src/managers/GuildEmojiRoleManager.js +118 -0
  148. package/src/managers/GuildForumThreadManager.js +83 -0
  149. package/src/managers/GuildInviteManager.js +213 -0
  150. package/src/managers/GuildManager.js +283 -0
  151. package/src/managers/GuildMemberManager.js +540 -0
  152. package/src/managers/GuildMemberRoleManager.js +204 -0
  153. package/src/managers/GuildScheduledEventManager.js +297 -0
  154. package/src/managers/GuildStickerManager.js +182 -0
  155. package/src/managers/GuildTextThreadManager.js +91 -0
  156. package/src/managers/MessageManager.js +259 -0
  157. package/src/managers/PermissionOverwriteManager.js +168 -0
  158. package/src/managers/PresenceManager.js +58 -0
  159. package/src/managers/ReactionManager.js +68 -0
  160. package/src/managers/ReactionUserManager.js +77 -0
  161. package/src/managers/RoleManager.js +360 -0
  162. package/src/managers/StageInstanceManager.js +154 -0
  163. package/src/managers/ThreadManager.js +204 -0
  164. package/src/managers/ThreadMemberManager.js +182 -0
  165. package/src/managers/UserManager.js +139 -0
  166. package/src/managers/VoiceStateManager.js +37 -0
  167. package/src/sharding/Shard.js +457 -0
  168. package/src/sharding/ShardClientUtil.js +285 -0
  169. package/src/sharding/ShardingManager.js +326 -0
  170. package/src/structures/ActionRow.js +46 -0
  171. package/src/structures/ActionRowBuilder.js +35 -0
  172. package/src/structures/AnonymousGuild.js +97 -0
  173. package/src/structures/ApplicationCommand.js +606 -0
  174. package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
  175. package/src/structures/Attachment.js +140 -0
  176. package/src/structures/AttachmentBuilder.js +116 -0
  177. package/src/structures/AutoModerationActionExecution.js +116 -0
  178. package/src/structures/AutoModerationRule.js +284 -0
  179. package/src/structures/AutocompleteInteraction.js +97 -0
  180. package/src/structures/Base.js +43 -0
  181. package/src/structures/BaseChannel.js +160 -0
  182. package/src/structures/BaseGuild.js +119 -0
  183. package/src/structures/BaseGuildEmoji.js +56 -0
  184. package/src/structures/BaseGuildTextChannel.js +186 -0
  185. package/src/structures/BaseGuildVoiceChannel.js +234 -0
  186. package/src/structures/BaseInteraction.js +344 -0
  187. package/src/structures/BaseSelectMenuComponent.js +56 -0
  188. package/src/structures/ButtonBuilder.js +44 -0
  189. package/src/structures/ButtonComponent.js +65 -0
  190. package/src/structures/ButtonInteraction.js +11 -0
  191. package/src/structures/CategoryChannel.js +45 -0
  192. package/src/structures/ChannelSelectMenuBuilder.js +31 -0
  193. package/src/structures/ChannelSelectMenuComponent.js +20 -0
  194. package/src/structures/ChannelSelectMenuInteraction.js +33 -0
  195. package/src/structures/ChatInputCommandInteraction.js +41 -0
  196. package/src/structures/ClientApplication.js +193 -0
  197. package/src/structures/ClientPresence.js +82 -0
  198. package/src/structures/ClientUser.js +185 -0
  199. package/src/structures/CommandInteraction.js +224 -0
  200. package/src/structures/CommandInteractionOptionResolver.js +308 -0
  201. package/src/structures/Component.js +47 -0
  202. package/src/structures/ContextMenuCommandInteraction.js +64 -0
  203. package/src/structures/DMChannel.js +129 -0
  204. package/src/structures/DirectoryChannel.js +36 -0
  205. package/src/structures/Embed.js +220 -0
  206. package/src/structures/EmbedBuilder.js +41 -0
  207. package/src/structures/Emoji.js +108 -0
  208. package/src/structures/ForumChannel.js +264 -0
  209. package/src/structures/Guild.js +1361 -0
  210. package/src/structures/GuildAuditLogs.js +91 -0
  211. package/src/structures/GuildAuditLogsEntry.js +527 -0
  212. package/src/structures/GuildBan.js +59 -0
  213. package/src/structures/GuildChannel.js +457 -0
  214. package/src/structures/GuildEmoji.js +148 -0
  215. package/src/structures/GuildMember.js +518 -0
  216. package/src/structures/GuildPreview.js +193 -0
  217. package/src/structures/GuildPreviewEmoji.js +27 -0
  218. package/src/structures/GuildScheduledEvent.js +439 -0
  219. package/src/structures/GuildTemplate.js +241 -0
  220. package/src/structures/Integration.js +220 -0
  221. package/src/structures/IntegrationApplication.js +85 -0
  222. package/src/structures/InteractionCollector.js +263 -0
  223. package/src/structures/InteractionResponse.js +102 -0
  224. package/src/structures/InteractionWebhook.js +59 -0
  225. package/src/structures/Invite.js +322 -0
  226. package/src/structures/InviteGuild.js +22 -0
  227. package/src/structures/InviteStageInstance.js +87 -0
  228. package/src/structures/MentionableSelectMenuBuilder.js +32 -0
  229. package/src/structures/MentionableSelectMenuComponent.js +11 -0
  230. package/src/structures/MentionableSelectMenuInteraction.js +71 -0
  231. package/src/structures/Message.js +997 -0
  232. package/src/structures/MessageCollector.js +146 -0
  233. package/src/structures/MessageComponentInteraction.js +107 -0
  234. package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
  235. package/src/structures/MessageMentions.js +297 -0
  236. package/src/structures/MessagePayload.js +299 -0
  237. package/src/structures/MessageReaction.js +142 -0
  238. package/src/structures/ModalBuilder.js +34 -0
  239. package/src/structures/ModalSubmitFields.js +55 -0
  240. package/src/structures/ModalSubmitInteraction.js +121 -0
  241. package/src/structures/NewsChannel.js +32 -0
  242. package/src/structures/OAuth2Guild.js +28 -0
  243. package/src/structures/PartialGroupDMChannel.js +60 -0
  244. package/src/structures/PermissionOverwrites.js +196 -0
  245. package/src/structures/Presence.js +372 -0
  246. package/src/structures/ReactionCollector.js +229 -0
  247. package/src/structures/ReactionEmoji.js +31 -0
  248. package/src/structures/Role.js +458 -0
  249. package/src/structures/RoleSelectMenuBuilder.js +31 -0
  250. package/src/structures/RoleSelectMenuComponent.js +11 -0
  251. package/src/structures/RoleSelectMenuInteraction.js +33 -0
  252. package/src/structures/SelectMenuBuilder.js +26 -0
  253. package/src/structures/SelectMenuComponent.js +26 -0
  254. package/src/structures/SelectMenuInteraction.js +26 -0
  255. package/src/structures/SelectMenuOptionBuilder.js +26 -0
  256. package/src/structures/StageChannel.js +112 -0
  257. package/src/structures/StageInstance.js +167 -0
  258. package/src/structures/Sticker.js +272 -0
  259. package/src/structures/StickerPack.js +95 -0
  260. package/src/structures/StringSelectMenuBuilder.js +79 -0
  261. package/src/structures/StringSelectMenuComponent.js +20 -0
  262. package/src/structures/StringSelectMenuInteraction.js +21 -0
  263. package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
  264. package/src/structures/Team.js +117 -0
  265. package/src/structures/TeamMember.js +70 -0
  266. package/src/structures/TextChannel.js +33 -0
  267. package/src/structures/TextInputBuilder.js +31 -0
  268. package/src/structures/TextInputComponent.js +29 -0
  269. package/src/structures/ThreadChannel.js +606 -0
  270. package/src/structures/ThreadMember.js +113 -0
  271. package/src/structures/Typing.js +74 -0
  272. package/src/structures/User.js +331 -0
  273. package/src/structures/UserContextMenuCommandInteraction.js +29 -0
  274. package/src/structures/UserSelectMenuBuilder.js +31 -0
  275. package/src/structures/UserSelectMenuComponent.js +11 -0
  276. package/src/structures/UserSelectMenuInteraction.js +51 -0
  277. package/src/structures/VoiceChannel.js +96 -0
  278. package/src/structures/VoiceRegion.js +46 -0
  279. package/src/structures/VoiceState.js +303 -0
  280. package/src/structures/Webhook.js +481 -0
  281. package/src/structures/WelcomeChannel.js +60 -0
  282. package/src/structures/WelcomeScreen.js +49 -0
  283. package/src/structures/Widget.js +88 -0
  284. package/src/structures/WidgetMember.js +99 -0
  285. package/src/structures/interfaces/Application.js +108 -0
  286. package/src/structures/interfaces/Collector.js +335 -0
  287. package/src/structures/interfaces/InteractionResponses.js +320 -0
  288. package/src/structures/interfaces/TextBasedChannel.js +413 -0
  289. package/src/util/APITypes.js +456 -0
  290. package/src/util/ActivityFlagsBitField.js +26 -0
  291. package/src/util/ApplicationFlagsBitField.js +26 -0
  292. package/src/util/BitField.js +176 -0
  293. package/src/util/ChannelFlagsBitField.js +41 -0
  294. package/src/util/Channels.js +150 -0
  295. package/src/util/Colors.js +73 -0
  296. package/src/util/Components.js +152 -0
  297. package/src/util/Constants.js +230 -0
  298. package/src/util/DataResolver.js +140 -0
  299. package/src/util/Enums.js +13 -0
  300. package/src/util/Events.js +160 -0
  301. package/src/util/Formatters.js +413 -0
  302. package/src/util/GuildMemberFlagsBitField.js +41 -0
  303. package/src/util/IntentsBitField.js +34 -0
  304. package/src/util/LimitedCollection.js +68 -0
  305. package/src/util/MessageFlagsBitField.js +32 -0
  306. package/src/util/Options.js +216 -0
  307. package/src/util/Partials.js +44 -0
  308. package/src/util/PermissionsBitField.js +104 -0
  309. package/src/util/ShardEvents.js +27 -0
  310. package/src/util/Status.js +33 -0
  311. package/src/util/Sweepers.js +467 -0
  312. package/src/util/SystemChannelFlagsBitField.js +43 -0
  313. package/src/util/ThreadMemberFlagsBitField.js +31 -0
  314. package/src/util/Transformers.js +36 -0
  315. package/src/util/UserFlagsBitField.js +32 -0
  316. package/src/util/Util.js +394 -0
  317. package/src/util/WebSocketShardEvents.js +25 -0
@@ -0,0 +1,231 @@
1
+ 'use strict';
2
+
3
+ const EventEmitter = require('node:events');
4
+ const process = require('node:process');
5
+ const { setTimeout, clearTimeout } = require('node:timers');
6
+ const { GatewayIntentBits } = require('discord-api-types/v10');
7
+ const Status = require('../../util/Status');
8
+ const WebSocketShardEvents = require('../../util/WebSocketShardEvents');
9
+
10
+ let deprecationEmittedForImportant = false;
11
+ /**
12
+ * Represents a Shard's WebSocket connection
13
+ * @extends {EventEmitter}
14
+ */
15
+ class WebSocketShard extends EventEmitter {
16
+ constructor(manager, id) {
17
+ super();
18
+
19
+ /**
20
+ * The WebSocketManager of the shard
21
+ * @type {WebSocketManager}
22
+ */
23
+ this.manager = manager;
24
+
25
+ /**
26
+ * The shard's id
27
+ * @type {number}
28
+ */
29
+ this.id = id;
30
+
31
+ /**
32
+ * The current status of the shard
33
+ * @type {Status}
34
+ */
35
+ this.status = Status.Idle;
36
+
37
+ /**
38
+ * The sequence of the shard after close
39
+ * @type {number}
40
+ * @private
41
+ */
42
+ this.closeSequence = 0;
43
+
44
+ /**
45
+ * The previous heartbeat ping of the shard
46
+ * @type {number}
47
+ */
48
+ this.ping = -1;
49
+
50
+ /**
51
+ * The last time a ping was sent (a timestamp)
52
+ * @type {number}
53
+ */
54
+ this.lastPingTimestamp = -1;
55
+
56
+ /**
57
+ * A set of guild ids this shard expects to receive
58
+ * @name WebSocketShard#expectedGuilds
59
+ * @type {?Set<string>}
60
+ * @private
61
+ */
62
+ Object.defineProperty(this, 'expectedGuilds', { value: null, writable: true });
63
+
64
+ /**
65
+ * The ready timeout
66
+ * @name WebSocketShard#readyTimeout
67
+ * @type {?NodeJS.Timeout}
68
+ * @private
69
+ */
70
+ Object.defineProperty(this, 'readyTimeout', { value: null, writable: true });
71
+
72
+ /**
73
+ * @external SessionInfo
74
+ * @see {@link https://discord.js.org/#/docs/ws/main/typedef/SessionInfo}
75
+ */
76
+
77
+ /**
78
+ * The session info used by `@discordjs/ws` package.
79
+ * @name WebSocketShard#sessionInfo
80
+ * @type {?SessionInfo}
81
+ * @private
82
+ */
83
+ Object.defineProperty(this, 'sessionInfo', { value: null, writable: true });
84
+ }
85
+
86
+ /**
87
+ * Emits a debug event.
88
+ * @param {string} message The debug message
89
+ * @private
90
+ */
91
+ debug(message) {
92
+ this.manager.debug(message, this.id);
93
+ }
94
+
95
+ /**
96
+ * @external CloseEvent
97
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent}
98
+ */
99
+
100
+ /**
101
+ * This method is responsible to emit close event for this shard.
102
+ * This method helps the shard reconnect.
103
+ * @param {CloseEvent} [event] Close event that was received
104
+ * @deprecated
105
+ */
106
+ emitClose(
107
+ event = {
108
+ code: 1011,
109
+ reason: 'INTERNAL_ERROR',
110
+ wasClean: false,
111
+ },
112
+ ) {
113
+ this.debug(`[CLOSE]
114
+ Event Code: ${event.code}
115
+ Clean : ${event.wasClean}
116
+ Reason : ${event.reason ?? 'No reason received'}`);
117
+ /**
118
+ * Emitted when a shard's WebSocket closes.
119
+ * @private
120
+ * @event WebSocketShard#close
121
+ * @param {CloseEvent} event The received event
122
+ */
123
+ this.emit(WebSocketShardEvents.Close, event);
124
+ }
125
+
126
+ /**
127
+ * Called when the shard receives the READY payload.
128
+ * @param {Object} packet The received packet
129
+ * @private
130
+ */
131
+ onReadyPacket(packet) {
132
+ if (!packet) {
133
+ this.debug(`Received broken packet: '${packet}'.`);
134
+ return;
135
+ }
136
+
137
+ /**
138
+ * Emitted when the shard receives the READY payload and is now waiting for guilds
139
+ * @event WebSocketShard#ready
140
+ */
141
+ this.emit(WebSocketShardEvents.Ready);
142
+
143
+ this.expectedGuilds = new Set(packet.guilds.map(d => d.id));
144
+ this.status = Status.WaitingForGuilds;
145
+ }
146
+
147
+ /**
148
+ * Called when a GuildCreate or GuildDelete for this shard was sent after READY payload was received,
149
+ * but before we emitted the READY event.
150
+ * @param {Snowflake} guildId the id of the Guild sent in the payload
151
+ * @private
152
+ */
153
+ gotGuild(guildId) {
154
+ this.expectedGuilds.delete(guildId);
155
+ this.checkReady();
156
+ }
157
+
158
+ /**
159
+ * Checks if the shard can be marked as ready
160
+ * @private
161
+ */
162
+ checkReady() {
163
+ // Step 0. Clear the ready timeout, if it exists
164
+ if (this.readyTimeout) {
165
+ clearTimeout(this.readyTimeout);
166
+ this.readyTimeout = null;
167
+ }
168
+ // Step 1. If we don't have any other guilds pending, we are ready
169
+ if (!this.expectedGuilds.size) {
170
+ this.debug('Shard received all its guilds. Marking as fully ready.');
171
+ this.status = Status.Ready;
172
+
173
+ /**
174
+ * Emitted when the shard is fully ready.
175
+ * This event is emitted if:
176
+ * * all guilds were received by this shard
177
+ * * the ready timeout expired, and some guilds are unavailable
178
+ * @event WebSocketShard#allReady
179
+ * @param {?Set<string>} unavailableGuilds Set of unavailable guilds, if any
180
+ */
181
+ this.emit(WebSocketShardEvents.AllReady);
182
+ return;
183
+ }
184
+ const hasGuildsIntent = this.manager.client.options.intents.has(GatewayIntentBits.Guilds);
185
+ // Step 2. Create a timeout that will mark the shard as ready if there are still unavailable guilds
186
+ // * The timeout is 15 seconds by default
187
+ // * This can be optionally changed in the client options via the `waitGuildTimeout` option
188
+ // * a timeout time of zero will skip this timeout, which potentially could cause the Client to miss guilds.
189
+
190
+ const { waitGuildTimeout } = this.manager.client.options;
191
+
192
+ this.readyTimeout = setTimeout(
193
+ () => {
194
+ this.debug(
195
+ `Shard ${hasGuildsIntent ? 'did' : 'will'} not receive any more guild packets` +
196
+ `${hasGuildsIntent ? ` in ${waitGuildTimeout} ms` : ''}.\nUnavailable guild count: ${
197
+ this.expectedGuilds.size
198
+ }`,
199
+ );
200
+
201
+ this.readyTimeout = null;
202
+ this.status = Status.Ready;
203
+
204
+ this.emit(WebSocketShardEvents.AllReady, this.expectedGuilds);
205
+ },
206
+ hasGuildsIntent ? waitGuildTimeout : 0,
207
+ ).unref();
208
+ }
209
+
210
+ /**
211
+ * Adds a packet to the queue to be sent to the gateway.
212
+ * <warn>If you use this method, make sure you understand that you need to provide
213
+ * a full [Payload](https://discord.com/developers/docs/topics/gateway#commands-and-events-gateway-commands).
214
+ * Do not use this method if you don't know what you're doing.</warn>
215
+ * @param {Object} data The full packet to send
216
+ * @param {boolean} [important=false] If this packet should be added first in queue
217
+ * <warn>This parameter is **deprecated**. Important payloads are determined by their opcode instead.</warn>
218
+ */
219
+ send(data, important = false) {
220
+ if (important && !deprecationEmittedForImportant) {
221
+ process.emitWarning(
222
+ 'Sending important payloads explicitly is deprecated. They are determined by their opcode implicitly now.',
223
+ 'DeprecationWarning',
224
+ );
225
+ deprecationEmittedForImportant = true;
226
+ }
227
+ this.manager._ws.send(this.id, data);
228
+ }
229
+ }
230
+
231
+ module.exports = WebSocketShard;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.ApplicationCommandPermissionsUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.AutoModerationActionExecution.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.AutoModerationRuleCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.AutoModerationRuleDelete.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.AutoModerationRuleUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.ChannelCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.ChannelDelete.handle(packet.d);
5
+ };
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ const Events = require('../../../util/Events');
4
+
5
+ module.exports = (client, { d: data }) => {
6
+ const channel = client.channels.cache.get(data.channel_id);
7
+ const time = data.last_pin_timestamp ? Date.parse(data.last_pin_timestamp) : null;
8
+
9
+ if (channel) {
10
+ // Discord sends null for last_pin_timestamp if the last pinned message was removed
11
+ channel.lastPinTimestamp = time;
12
+
13
+ /**
14
+ * Emitted whenever the pins of a channel are updated. Due to the nature of the WebSocket event,
15
+ * not much information can be provided easily here - you need to manually check the pins yourself.
16
+ * @event Client#channelPinsUpdate
17
+ * @param {TextBasedChannels} channel The channel that the pins update occurred in
18
+ * @param {Date} time The time of the pins update
19
+ */
20
+ client.emit(Events.ChannelPinsUpdate, channel, time);
21
+ }
22
+ };
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ const Events = require('../../../util/Events');
4
+
5
+ module.exports = (client, packet) => {
6
+ const { old, updated } = client.actions.ChannelUpdate.handle(packet.d);
7
+ if (old && updated) {
8
+ /**
9
+ * Emitted whenever a channel is updated - e.g. name change, topic change, channel type change.
10
+ * @event Client#channelUpdate
11
+ * @param {DMChannel|GuildChannel} oldChannel The channel before the update
12
+ * @param {DMChannel|GuildChannel} newChannel The channel after the update
13
+ */
14
+ client.emit(Events.ChannelUpdate, old, updated);
15
+ }
16
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildAuditLogEntryCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildBanAdd.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildBanRemove.handle(packet.d);
5
+ };
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const Events = require('../../../util/Events');
4
+ const Status = require('../../../util/Status');
5
+
6
+ module.exports = (client, { d: data }, shard) => {
7
+ let guild = client.guilds.cache.get(data.id);
8
+ if (guild) {
9
+ if (!guild.available && !data.unavailable) {
10
+ // A newly available guild
11
+ guild._patch(data);
12
+ }
13
+ } else {
14
+ // A new guild
15
+ data.shardId = shard.id;
16
+ guild = client.guilds._add(data);
17
+ if (client.ws.status === Status.Ready) {
18
+ /**
19
+ * Emitted whenever the client joins a guild.
20
+ * @event Client#guildCreate
21
+ * @param {Guild} guild The created guild
22
+ */
23
+ client.emit(Events.GuildCreate, guild);
24
+ }
25
+ }
26
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildDelete.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildEmojisUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildIntegrationsUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const Events = require('../../../util/Events');
5
+
6
+ module.exports = (client, { d: data }) => {
7
+ const guild = client.guilds.cache.get(data.guild_id);
8
+ if (!guild) return;
9
+ const members = new Collection();
10
+
11
+ for (const member of data.members) members.set(member.user.id, guild.members._add(member));
12
+ if (data.presences) {
13
+ for (const presence of data.presences) guild.presences._add(Object.assign(presence, { guild }));
14
+ }
15
+
16
+ /**
17
+ * Represents the properties of a guild members chunk
18
+ * @typedef {Object} GuildMembersChunk
19
+ * @property {number} index Index of the received chunk
20
+ * @property {number} count Number of chunks the client should receive
21
+ * @property {Array<*>} notFound An array of whatever could not be found
22
+ * when using {@link GatewayOpcodes.RequestGuildMembers}
23
+ * @property {?string} nonce Nonce for this chunk
24
+ */
25
+
26
+ /**
27
+ * Emitted whenever a chunk of guild members is received (all members come from the same guild).
28
+ * @event Client#guildMembersChunk
29
+ * @param {Collection<Snowflake, GuildMember>} members The members in the chunk
30
+ * @param {Guild} guild The guild related to the member chunk
31
+ * @param {GuildMembersChunk} chunk Properties of the received chunk
32
+ */
33
+ client.emit(Events.GuildMembersChunk, members, guild, {
34
+ index: data.chunk_index,
35
+ count: data.chunk_count,
36
+ notFound: data.not_found,
37
+ nonce: data.nonce,
38
+ });
39
+ };
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const Events = require('../../../util/Events');
4
+ const Status = require('../../../util/Status');
5
+
6
+ module.exports = (client, { d: data }, shard) => {
7
+ const guild = client.guilds.cache.get(data.guild_id);
8
+ if (guild) {
9
+ guild.memberCount++;
10
+ const member = guild.members._add(data);
11
+ if (shard.status === Status.Ready) {
12
+ /**
13
+ * Emitted whenever a user joins a guild.
14
+ * @event Client#guildMemberAdd
15
+ * @param {GuildMember} member The member that has joined a guild
16
+ */
17
+ client.emit(Events.GuildMemberAdd, member);
18
+ }
19
+ }
20
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet, shard) => {
4
+ client.actions.GuildMemberRemove.handle(packet.d, shard);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet, shard) => {
4
+ client.actions.GuildMemberUpdate.handle(packet.d, shard);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildRoleCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildRoleDelete.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildRoleUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildScheduledEventCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildScheduledEventDelete.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildScheduledEventUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildScheduledEventUserAdd.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildScheduledEventUserRemove.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildStickersUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.GuildUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.InteractionCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.InviteCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.InviteDelete.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.MessageCreate.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.MessageDelete.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.MessageDeleteBulk.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.MessageReactionAdd.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.MessageReactionRemove.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.MessageReactionRemoveAll.handle(packet.d);
5
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.MessageReactionRemoveEmoji.handle(packet.d);
5
+ };
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ const Events = require('../../../util/Events');
4
+
5
+ module.exports = (client, packet) => {
6
+ const { old, updated } = client.actions.MessageUpdate.handle(packet.d);
7
+ if (old && updated) {
8
+ /**
9
+ * Emitted whenever a message is updated - e.g. embed or content change.
10
+ * @event Client#messageUpdate
11
+ * @param {Message} oldMessage The message before the update
12
+ * @param {Message} newMessage The message after the update
13
+ */
14
+ client.emit(Events.MessageUpdate, old, updated);
15
+ }
16
+ };
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = (client, packet) => {
4
+ client.actions.PresenceUpdate.handle(packet.d);
5
+ };
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ const ClientApplication = require('../../../structures/ClientApplication');
4
+ let ClientUser;
5
+
6
+ module.exports = (client, { d: data }, shard) => {
7
+ if (client.user) {
8
+ client.user._patch(data.user);
9
+ } else {
10
+ ClientUser ??= require('../../../structures/ClientUser');
11
+ client.user = new ClientUser(client, data.user);
12
+ client.users.cache.set(client.user.id, client.user);
13
+ }
14
+
15
+ for (const guild of data.guilds) {
16
+ guild.shardId = shard.id;
17
+ client.guilds._add(guild);
18
+ }
19
+
20
+ if (client.application) {
21
+ client.application._patch(data.application);
22
+ } else {
23
+ client.application = new ClientApplication(client, data.application);
24
+ }
25
+
26
+ shard.checkReady();
27
+ };