oceanic.js 1.10.3-dev.c6c9f52 → 1.10.3-dev.ca8b6e8

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 (205) hide show
  1. package/dist/lib/Client.d.ts +99 -0
  2. package/dist/lib/Client.js +263 -0
  3. package/dist/lib/Constants.d.ts +1215 -0
  4. package/dist/lib/Constants.js +1513 -0
  5. package/dist/lib/gateway/Shard.d.ts +83 -0
  6. package/dist/lib/gateway/Shard.js +1621 -0
  7. package/dist/lib/gateway/ShardManager.d.ts +29 -0
  8. package/dist/lib/gateway/ShardManager.js +300 -0
  9. package/dist/lib/index.d.ts +84 -0
  10. package/dist/lib/index.js +168 -0
  11. package/dist/lib/rest/Bucket.d.ts +33 -0
  12. package/dist/lib/rest/Bucket.js +78 -0
  13. package/dist/lib/rest/DiscordHTTPError.d.ts +16 -0
  14. package/dist/lib/rest/DiscordHTTPError.js +65 -0
  15. package/dist/lib/rest/DiscordRESTError.d.ts +19 -0
  16. package/dist/lib/rest/DiscordRESTError.js +89 -0
  17. package/dist/lib/rest/OAuthHelper.d.ts +62 -0
  18. package/dist/lib/rest/OAuthHelper.js +183 -0
  19. package/dist/lib/rest/RESTManager.d.ts +42 -0
  20. package/dist/lib/rest/RESTManager.js +82 -0
  21. package/dist/lib/rest/RequestHandler.d.ts +28 -0
  22. package/dist/lib/rest/RequestHandler.js +313 -0
  23. package/dist/lib/rest/SequentialBucket.d.ts +25 -0
  24. package/dist/lib/rest/SequentialBucket.js +76 -0
  25. package/dist/lib/routes/Applications.d.ts +171 -0
  26. package/dist/lib/routes/Applications.js +447 -0
  27. package/dist/lib/routes/Channels.d.ts +408 -0
  28. package/dist/lib/routes/Channels.js +1160 -0
  29. package/dist/lib/routes/Guilds.d.ts +606 -0
  30. package/dist/lib/routes/Guilds.js +1669 -0
  31. package/dist/lib/routes/Interactions.d.ts +74 -0
  32. package/dist/lib/routes/Interactions.js +141 -0
  33. package/dist/lib/routes/Miscellaneous.d.ts +31 -0
  34. package/dist/lib/routes/Miscellaneous.js +69 -0
  35. package/dist/lib/routes/OAuth.d.ts +108 -0
  36. package/dist/lib/routes/OAuth.js +312 -0
  37. package/dist/lib/routes/Users.d.ts +32 -0
  38. package/dist/lib/routes/Users.js +59 -0
  39. package/dist/lib/routes/Webhooks.d.ts +128 -0
  40. package/dist/lib/routes/Webhooks.js +265 -0
  41. package/dist/lib/structures/AnnouncementChannel.d.ts +36 -0
  42. package/dist/lib/structures/AnnouncementChannel.js +47 -0
  43. package/dist/lib/structures/AnnouncementThreadChannel.d.ts +18 -0
  44. package/dist/lib/structures/AnnouncementThreadChannel.js +27 -0
  45. package/dist/lib/structures/Application.d.ts +102 -0
  46. package/dist/lib/structures/Application.js +189 -0
  47. package/dist/lib/structures/ApplicationCommand.d.ts +74 -0
  48. package/dist/lib/structures/ApplicationCommand.js +141 -0
  49. package/dist/lib/structures/Attachment.d.ts +34 -0
  50. package/dist/lib/structures/Attachment.js +64 -0
  51. package/dist/lib/structures/AuditLogEntry.d.ts +25 -0
  52. package/dist/lib/structures/AuditLogEntry.js +53 -0
  53. package/dist/lib/structures/AutoModerationRule.d.ts +49 -0
  54. package/dist/lib/structures/AutoModerationRule.js +139 -0
  55. package/dist/lib/structures/AutocompleteInteraction.d.ts +62 -0
  56. package/dist/lib/structures/AutocompleteInteraction.js +115 -0
  57. package/dist/lib/structures/Base.d.ts +20 -0
  58. package/dist/lib/structures/Base.js +58 -0
  59. package/dist/lib/structures/BaseEntitlement.d.ts +19 -0
  60. package/dist/lib/structures/BaseEntitlement.js +44 -0
  61. package/dist/lib/structures/CategoryChannel.d.ts +41 -0
  62. package/dist/lib/structures/CategoryChannel.js +105 -0
  63. package/dist/lib/structures/Channel.d.ts +20 -0
  64. package/dist/lib/structures/Channel.js +91 -0
  65. package/dist/lib/structures/ClientApplication.d.ts +153 -0
  66. package/dist/lib/structures/ClientApplication.js +220 -0
  67. package/dist/lib/structures/CommandInteraction.d.ts +127 -0
  68. package/dist/lib/structures/CommandInteraction.js +297 -0
  69. package/dist/lib/structures/ComponentInteraction.d.ts +137 -0
  70. package/dist/lib/structures/ComponentInteraction.js +311 -0
  71. package/dist/lib/structures/Entitlement.d.ts +12 -0
  72. package/dist/lib/structures/Entitlement.js +26 -0
  73. package/dist/lib/structures/ExtendedUser.d.ts +26 -0
  74. package/dist/lib/structures/ExtendedUser.js +57 -0
  75. package/dist/lib/structures/ForumChannel.d.ts +11 -0
  76. package/dist/lib/structures/ForumChannel.js +19 -0
  77. package/dist/lib/structures/GroupChannel.d.ts +62 -0
  78. package/dist/lib/structures/GroupChannel.js +133 -0
  79. package/dist/lib/structures/Guild.d.ts +654 -0
  80. package/dist/lib/structures/Guild.js +1319 -0
  81. package/dist/lib/structures/GuildChannel.d.ts +34 -0
  82. package/dist/lib/structures/GuildChannel.js +75 -0
  83. package/dist/lib/structures/GuildPreview.d.ts +50 -0
  84. package/dist/lib/structures/GuildPreview.js +119 -0
  85. package/dist/lib/structures/GuildScheduledEvent.d.ts +60 -0
  86. package/dist/lib/structures/GuildScheduledEvent.js +154 -0
  87. package/dist/lib/structures/GuildTemplate.d.ts +55 -0
  88. package/dist/lib/structures/GuildTemplate.js +126 -0
  89. package/dist/lib/structures/Integration.d.ts +54 -0
  90. package/dist/lib/structures/Integration.js +156 -0
  91. package/dist/lib/structures/Interaction.d.ts +40 -0
  92. package/dist/lib/structures/Interaction.js +90 -0
  93. package/dist/lib/structures/InteractionResolvedChannel.d.ts +28 -0
  94. package/dist/lib/structures/InteractionResolvedChannel.js +45 -0
  95. package/dist/lib/structures/Invite.d.ts +64 -0
  96. package/dist/lib/structures/Invite.js +193 -0
  97. package/dist/lib/structures/InviteGuild.d.ts +52 -0
  98. package/dist/lib/structures/InviteGuild.js +88 -0
  99. package/dist/lib/structures/MediaChannel.d.ts +11 -0
  100. package/dist/lib/structures/MediaChannel.js +19 -0
  101. package/dist/lib/structures/Member.d.ts +122 -0
  102. package/dist/lib/structures/Member.js +255 -0
  103. package/dist/lib/structures/Message.d.ts +194 -0
  104. package/dist/lib/structures/Message.js +477 -0
  105. package/dist/lib/structures/ModalSubmitInteraction.d.ts +128 -0
  106. package/dist/lib/structures/ModalSubmitInteraction.js +240 -0
  107. package/dist/lib/structures/OAuthApplication.d.ts +79 -0
  108. package/dist/lib/structures/OAuthApplication.js +210 -0
  109. package/dist/lib/structures/OAuthGuild.d.ts +35 -0
  110. package/dist/lib/structures/OAuthGuild.js +61 -0
  111. package/dist/lib/structures/PartialApplication.d.ts +30 -0
  112. package/dist/lib/structures/PartialApplication.js +67 -0
  113. package/dist/lib/structures/Permission.d.ts +21 -0
  114. package/dist/lib/structures/Permission.js +68 -0
  115. package/dist/lib/structures/PermissionOverwrite.d.ts +26 -0
  116. package/dist/lib/structures/PermissionOverwrite.js +49 -0
  117. package/dist/lib/structures/PingInteraction.d.ts +16 -0
  118. package/dist/lib/structures/PingInteraction.js +26 -0
  119. package/dist/lib/structures/Poll.d.ts +28 -0
  120. package/dist/lib/structures/Poll.js +78 -0
  121. package/dist/lib/structures/PrivateChannel.d.ts +90 -0
  122. package/dist/lib/structures/PrivateChannel.js +131 -0
  123. package/dist/lib/structures/PrivateThreadChannel.d.ts +18 -0
  124. package/dist/lib/structures/PrivateThreadChannel.js +27 -0
  125. package/dist/lib/structures/PublicThreadChannel.d.ts +21 -0
  126. package/dist/lib/structures/PublicThreadChannel.js +37 -0
  127. package/dist/lib/structures/Role.d.ts +52 -0
  128. package/dist/lib/structures/Role.js +137 -0
  129. package/dist/lib/structures/SKU.d.ts +32 -0
  130. package/dist/lib/structures/SKU.js +53 -0
  131. package/dist/lib/structures/StageChannel.d.ts +33 -0
  132. package/dist/lib/structures/StageChannel.js +44 -0
  133. package/dist/lib/structures/StageInstance.d.ts +36 -0
  134. package/dist/lib/structures/StageInstance.js +94 -0
  135. package/dist/lib/structures/Team.d.ts +22 -0
  136. package/dist/lib/structures/Team.js +67 -0
  137. package/dist/lib/structures/TestEntitlement.d.ts +10 -0
  138. package/dist/lib/structures/TestEntitlement.js +21 -0
  139. package/dist/lib/structures/TextChannel.d.ts +34 -0
  140. package/dist/lib/structures/TextChannel.js +46 -0
  141. package/dist/lib/structures/TextableChannel.d.ts +158 -0
  142. package/dist/lib/structures/TextableChannel.js +276 -0
  143. package/dist/lib/structures/TextableVoiceChannel.d.ts +39 -0
  144. package/dist/lib/structures/TextableVoiceChannel.js +81 -0
  145. package/dist/lib/structures/ThreadChannel.d.ts +159 -0
  146. package/dist/lib/structures/ThreadChannel.js +295 -0
  147. package/dist/lib/structures/ThreadOnlyChannel.d.ts +99 -0
  148. package/dist/lib/structures/ThreadOnlyChannel.js +233 -0
  149. package/dist/lib/structures/ThreadableChannel.d.ts +36 -0
  150. package/dist/lib/structures/ThreadableChannel.js +58 -0
  151. package/dist/lib/structures/UnavailableGuild.d.ts +11 -0
  152. package/dist/lib/structures/UnavailableGuild.js +21 -0
  153. package/dist/lib/structures/User.d.ts +82 -0
  154. package/dist/lib/structures/User.js +168 -0
  155. package/dist/lib/structures/VoiceChannel.d.ts +20 -0
  156. package/dist/lib/structures/VoiceChannel.js +35 -0
  157. package/dist/lib/structures/VoiceState.d.ts +51 -0
  158. package/dist/lib/structures/VoiceState.js +140 -0
  159. package/dist/lib/structures/Webhook.d.ts +129 -0
  160. package/dist/lib/structures/Webhook.js +206 -0
  161. package/dist/lib/types/applications.d.ts +466 -0
  162. package/dist/lib/types/audit-log.d.ts +122 -0
  163. package/dist/lib/types/auto-moderation.d.ts +99 -0
  164. package/dist/lib/types/channels.d.ts +1244 -0
  165. package/dist/lib/types/client.d.ts +228 -0
  166. package/dist/lib/types/events.d.ts +265 -0
  167. package/dist/lib/types/gateway-raw.d.ts +584 -0
  168. package/dist/lib/types/gateway.d.ts +351 -0
  169. package/dist/lib/types/guild-template.d.ts +33 -0
  170. package/dist/lib/types/guilds.d.ts +855 -0
  171. package/dist/lib/types/index.d.ts +18 -0
  172. package/dist/lib/types/interactions.d.ts +377 -0
  173. package/dist/lib/types/json.d.ts +742 -0
  174. package/dist/lib/types/misc.d.ts +28 -0
  175. package/dist/lib/types/oauth.d.ts +201 -0
  176. package/dist/lib/types/request-handler.d.ts +52 -0
  177. package/dist/lib/types/scheduled-events.d.ts +88 -0
  178. package/dist/lib/types/shared.d.ts +9 -0
  179. package/dist/lib/types/users.d.ts +45 -0
  180. package/dist/lib/types/voice.d.ts +45 -0
  181. package/dist/lib/types/webhooks.d.ts +74 -0
  182. package/dist/lib/util/Collection.d.ts +47 -0
  183. package/dist/lib/util/Collection.js +78 -0
  184. package/dist/lib/util/Errors.d.ts +29 -0
  185. package/dist/lib/util/Errors.js +56 -0
  186. package/dist/lib/util/Routes.d.ts +127 -0
  187. package/dist/lib/util/Routes.js +248 -0
  188. package/dist/lib/util/SimpleCollection.d.ts +12 -0
  189. package/dist/lib/util/SimpleCollection.js +81 -0
  190. package/dist/lib/util/TypedCollection.d.ts +24 -0
  191. package/dist/lib/util/TypedCollection.js +76 -0
  192. package/dist/lib/util/TypedEmitter.d.ts +19 -0
  193. package/dist/lib/util/TypedEmitter.js +19 -0
  194. package/dist/lib/util/Util.d.ts +58 -0
  195. package/dist/lib/util/Util.js +535 -0
  196. package/dist/lib/util/interactions/InteractionOptionsWrapper.d.ts +170 -0
  197. package/dist/lib/util/interactions/InteractionOptionsWrapper.js +213 -0
  198. package/dist/lib/util/interactions/MessageInteractionResponse.d.ts +24 -0
  199. package/dist/lib/util/interactions/MessageInteractionResponse.js +28 -0
  200. package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.d.ts +24 -0
  201. package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.js +34 -0
  202. package/dist/lib/util/interactions/SelectMenuValuesWrapper.d.ts +60 -0
  203. package/dist/lib/util/interactions/SelectMenuValuesWrapper.js +124 -0
  204. package/dist/package.json +1 -1
  205. package/package.json +1 -1
@@ -0,0 +1,1621 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const TypedEmitter_1 = tslib_1.__importDefault(require("../util/TypedEmitter"));
5
+ const Bucket_1 = tslib_1.__importDefault(require("../rest/Bucket"));
6
+ const Constants_1 = require("../Constants");
7
+ const Member_1 = tslib_1.__importDefault(require("../structures/Member"));
8
+ const Base_1 = tslib_1.__importDefault(require("../structures/Base"));
9
+ const ExtendedUser_1 = tslib_1.__importDefault(require("../structures/ExtendedUser"));
10
+ const AutoModerationRule_1 = tslib_1.__importDefault(require("../structures/AutoModerationRule"));
11
+ const Channel_1 = tslib_1.__importDefault(require("../structures/Channel"));
12
+ const VoiceChannel_1 = tslib_1.__importDefault(require("../structures/VoiceChannel"));
13
+ const StageChannel_1 = tslib_1.__importDefault(require("../structures/StageChannel"));
14
+ const GuildScheduledEvent_1 = tslib_1.__importDefault(require("../structures/GuildScheduledEvent"));
15
+ const Invite_1 = tslib_1.__importDefault(require("../structures/Invite"));
16
+ const Message_1 = tslib_1.__importDefault(require("../structures/Message"));
17
+ const StageInstance_1 = tslib_1.__importDefault(require("../structures/StageInstance"));
18
+ const Interaction_1 = tslib_1.__importDefault(require("../structures/Interaction"));
19
+ const Guild_1 = tslib_1.__importDefault(require("../structures/Guild"));
20
+ const Role_1 = tslib_1.__importDefault(require("../structures/Role"));
21
+ const Integration_1 = tslib_1.__importDefault(require("../structures/Integration"));
22
+ const VoiceState_1 = tslib_1.__importDefault(require("../structures/VoiceState"));
23
+ const AuditLogEntry_1 = tslib_1.__importDefault(require("../structures/AuditLogEntry"));
24
+ const Errors_1 = tslib_1.__importStar(require("../util/Errors"));
25
+ const ClientApplication_1 = tslib_1.__importDefault(require("../structures/ClientApplication"));
26
+ const ws_1 = tslib_1.__importDefault(require("ws"));
27
+ const node_crypto_1 = require("node:crypto");
28
+ const node_util_1 = require("node:util");
29
+ const node_assert_1 = tslib_1.__importDefault(require("node:assert"));
30
+ /* eslint-disable @typescript-eslint/ban-ts-comment, @typescript-eslint/no-redundant-type-constituents, @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment, unicorn/prefer-module, @typescript-eslint/no-unsafe-member-access */
31
+ // @ts-ignore
32
+ let Erlpack;
33
+ try {
34
+ Erlpack = require("erlpack");
35
+ }
36
+ catch { }
37
+ // @ts-ignore
38
+ let ZlibSync, zlibConstants;
39
+ try {
40
+ ZlibSync = require("zlib-sync");
41
+ zlibConstants = require("zlib-sync");
42
+ }
43
+ catch {
44
+ try {
45
+ ZlibSync = require("pako");
46
+ zlibConstants = require("pako").constants;
47
+ }
48
+ catch { }
49
+ }
50
+ /* eslint-enable @typescript-eslint/ban-ts-comment, @typescript-eslint/no-redundant-type-constituents, @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment, unicorn/prefer-module */
51
+ /** Represents a gateway connection to Discord. See {@link ShardEvents | Shard Events} for a list of events. */
52
+ class Shard extends TypedEmitter_1.default {
53
+ _connectTimeout;
54
+ _getAllUsersCount;
55
+ _getAllUsersQueue;
56
+ _guildCreateTimeout;
57
+ _heartbeatInterval;
58
+ _requestMembersPromise;
59
+ // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
60
+ _sharedZLib;
61
+ client;
62
+ connectAttempts;
63
+ connecting;
64
+ globalBucket;
65
+ id;
66
+ lastHeartbeatAck;
67
+ lastHeartbeatReceived;
68
+ lastHeartbeatSent;
69
+ latency;
70
+ preReady;
71
+ presence;
72
+ presenceUpdateBucket;
73
+ ready;
74
+ reconnectInterval;
75
+ resumeURL;
76
+ sequence;
77
+ sessionID;
78
+ status;
79
+ ws;
80
+ constructor(id, client) {
81
+ super();
82
+ Object.defineProperties(this, {
83
+ client: {
84
+ value: client,
85
+ enumerable: false,
86
+ writable: false,
87
+ configurable: false
88
+ },
89
+ ws: {
90
+ value: null,
91
+ enumerable: false,
92
+ writable: true,
93
+ configurable: false
94
+ }
95
+ });
96
+ this.onDispatch = this.onDispatch.bind(this);
97
+ this.onPacket = this.onPacket.bind(this);
98
+ this.onWSClose = this.onWSClose.bind(this);
99
+ this.onWSError = this.onWSError.bind(this);
100
+ this.onWSMessage = this.onWSMessage.bind(this);
101
+ this.onWSOpen = this.onWSOpen.bind(this);
102
+ this.connectAttempts = 0;
103
+ this._connectTimeout = null;
104
+ this.connecting = false;
105
+ this._getAllUsersCount = {};
106
+ this._getAllUsersQueue = [];
107
+ this._guildCreateTimeout = null;
108
+ this._heartbeatInterval = null;
109
+ this.id = id;
110
+ this.lastHeartbeatAck = true;
111
+ this.lastHeartbeatReceived = 0;
112
+ this.lastHeartbeatSent = 0;
113
+ this.latency = Infinity;
114
+ this.preReady = false;
115
+ this.ready = false;
116
+ this.reconnectInterval = 1000;
117
+ this._requestMembersPromise = {};
118
+ this.resumeURL = null;
119
+ this.sequence = 0;
120
+ this.sessionID = null;
121
+ this.status = "disconnected";
122
+ this.hardReset();
123
+ }
124
+ async checkReady() {
125
+ if (!this.ready) {
126
+ if (this._getAllUsersQueue.length !== 0) {
127
+ const id = this._getAllUsersQueue.shift();
128
+ await this.requestGuildMembers(id);
129
+ this._getAllUsersQueue.splice(this._getAllUsersQueue.indexOf(id), 1);
130
+ return;
131
+ }
132
+ if (Object.keys(this._getAllUsersCount).length === 0) {
133
+ this.ready = true;
134
+ this.emit("ready");
135
+ }
136
+ }
137
+ }
138
+ createGuild(data) {
139
+ this.client.guildShardMap[data.id] = this.id;
140
+ const guild = this.client.guilds.update(data);
141
+ if (this.client.shards.options.getAllUsers && guild.members.size < guild.memberCount) {
142
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
143
+ void this.requestGuildMembers(guild.id, { presences: (this.client.shards.options.intents & Constants_1.Intents.GUILD_PRESENCES) === Constants_1.Intents.GUILD_PRESENCES });
144
+ }
145
+ return guild;
146
+ }
147
+ async initialize() {
148
+ if (!this._token) {
149
+ return this.disconnect(false, new TypeError("Invalid Token."));
150
+ }
151
+ this.status = "connecting";
152
+ if (this.client.shards.options.compress) {
153
+ if (!ZlibSync) {
154
+ throw new Errors_1.DependencyError("Cannot use compression without pako or zlib-sync.");
155
+ }
156
+ this.client.emit("debug", "Initializing zlib-sync-based compression.");
157
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
158
+ this._sharedZLib = new ZlibSync.Inflate({ chunkSize: 128 * 1024 });
159
+ }
160
+ if (!this.client.shards.options.override.gatewayURLIsResumeURL && this.sessionID) {
161
+ if (this.resumeURL === null) {
162
+ this.client.emit("warn", "Resume url is not currently present. Discord may disconnect you quicker.", this.id);
163
+ }
164
+ this.ws = new ws_1.default(this.resumeURL ?? await this.client.shards["_gatewayURLForShard"](this), this.client.shards.options.ws);
165
+ }
166
+ else {
167
+ this.ws = new ws_1.default(await this.client.shards["_gatewayURLForShard"](this), this.client.shards.options.ws);
168
+ }
169
+ /* eslint-disable @typescript-eslint/unbound-method */
170
+ this.ws.on("close", this.onWSClose);
171
+ this.ws.on("error", this.onWSError);
172
+ this.ws.on("message", this.onWSMessage);
173
+ this.ws.on("open", this.onWSOpen);
174
+ /* eslint-enable @typescript-eslint/unbound-method */
175
+ this._connectTimeout = setTimeout(() => {
176
+ if (this.connecting) {
177
+ this.disconnect(undefined, new Error("Connection timeout."));
178
+ }
179
+ }, this.client.shards.options.connectionTimeout);
180
+ }
181
+ async onDispatch(packet) {
182
+ this.client.emit("packet", packet, this.id);
183
+ switch (packet.t) {
184
+ case "APPLICATION_COMMAND_PERMISSIONS_UPDATE": {
185
+ this.client.emit("applicationCommandPermissionsUpdate", this.client.guilds.get(packet.d.guild_id) ?? { id: packet.d.guild_id }, {
186
+ application: packet.d.application_id === this.client.application.id ? this.client.application : undefined,
187
+ applicationID: packet.d.application_id,
188
+ id: packet.d.id,
189
+ permissions: packet.d.permissions
190
+ });
191
+ break;
192
+ }
193
+ case "AUTO_MODERATION_ACTION_EXECUTION": {
194
+ const guild = this.client.guilds.get(packet.d.guild_id);
195
+ const channel = this.client.getChannel(packet.d.channel_id ?? "");
196
+ this.client.emit("autoModerationActionExecution", guild ?? { id: packet.d.guild_id }, packet.d.channel_id === undefined ? null : channel ?? { id: packet.d.channel_id }, this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id }, {
197
+ action: {
198
+ metadata: {
199
+ channelID: packet.d.action.metadata.channel_id,
200
+ customMessage: packet.d.action.metadata.custom_message,
201
+ durationSeconds: packet.d.action.metadata.duration_seconds
202
+ },
203
+ type: packet.d.action.type
204
+ },
205
+ alertSystemMessageID: packet.d.alert_system_message_id,
206
+ content: packet.d.content,
207
+ matchedContent: packet.d.matched_content,
208
+ matchedKeyword: packet.d.matched_keyword,
209
+ messageID: packet.d.message_id,
210
+ rule: guild?.autoModerationRules.get(packet.d.rule_id),
211
+ ruleID: packet.d.rule_id,
212
+ ruleTriggerType: packet.d.rule_trigger_type
213
+ });
214
+ break;
215
+ }
216
+ case "AUTO_MODERATION_RULE_CREATE": {
217
+ const guild = this.client.guilds.get(packet.d.guild_id);
218
+ const rule = guild?.autoModerationRules.update(packet.d) ?? new AutoModerationRule_1.default(packet.d, this.client);
219
+ this.client.emit("autoModerationRuleCreate", rule);
220
+ break;
221
+ }
222
+ case "AUTO_MODERATION_RULE_DELETE": {
223
+ const guild = this.client.guilds.get(packet.d.guild_id);
224
+ const rule = guild?.autoModerationRules.update(packet.d) ?? new AutoModerationRule_1.default(packet.d, this.client);
225
+ guild?.autoModerationRules.delete(packet.d.id);
226
+ this.client.emit("autoModerationRuleDelete", rule);
227
+ break;
228
+ }
229
+ case "AUTO_MODERATION_RULE_UPDATE": {
230
+ const guild = this.client.guilds.get(packet.d.guild_id);
231
+ const oldRule = guild?.autoModerationRules.get(packet.d.id)?.toJSON() ?? null;
232
+ const rule = guild?.autoModerationRules.update(packet.d) ?? new AutoModerationRule_1.default(packet.d, this.client);
233
+ this.client.emit("autoModerationRuleUpdate", rule, oldRule);
234
+ break;
235
+ }
236
+ case "CHANNEL_CREATE": {
237
+ const channel = packet.d.type === Constants_1.ChannelTypes.GROUP_DM ? this.client.groupChannels.update(packet.d) : this.client.util.updateChannel(packet.d);
238
+ this.client.emit("channelCreate", channel);
239
+ break;
240
+ }
241
+ case "CHANNEL_DELETE": {
242
+ if (packet.d.type === Constants_1.ChannelTypes.DM) {
243
+ const channel = this.client.privateChannels.get(packet.d.id);
244
+ this.client.privateChannels.delete(packet.d.id);
245
+ this.client.emit("channelDelete", channel ?? {
246
+ id: packet.d.id,
247
+ flags: packet.d.flags,
248
+ lastMessageID: packet.d.last_message_id,
249
+ type: packet.d.type
250
+ });
251
+ break;
252
+ }
253
+ const guild = this.client.guilds.get(packet.d.guild_id);
254
+ const channel = this.client.util.updateChannel(packet.d);
255
+ if (channel instanceof VoiceChannel_1.default || channel instanceof StageChannel_1.default) {
256
+ for (const [, member] of channel.voiceMembers) {
257
+ channel.voiceMembers.delete(member.id);
258
+ this.client.emit("voiceChannelLeave", member, channel);
259
+ }
260
+ }
261
+ guild?.channels.delete(packet.d.id);
262
+ this.client.emit("channelDelete", channel);
263
+ break;
264
+ }
265
+ case "CHANNEL_PINS_UPDATE": {
266
+ const channel = this.client.getChannel(packet.d.channel_id);
267
+ this.client.emit("channelPinsUpdate", channel ?? { id: packet.d.channel_id }, packet.d.last_pin_timestamp === undefined || packet.d.last_pin_timestamp === null ? null : new Date(packet.d.last_pin_timestamp));
268
+ break;
269
+ }
270
+ case "CHANNEL_UPDATE": {
271
+ const oldChannel = this.client.getChannel(packet.d.id)?.toJSON() ?? null;
272
+ const channel = this.client.util.updateChannel(packet.d);
273
+ this.client.emit("channelUpdate", channel, oldChannel);
274
+ break;
275
+ }
276
+ case "ENTITLEMENT_CREATE": {
277
+ const entitlement = this.client.util.updateEntitlement(packet.d);
278
+ this.client.emit("entitlementCreate", entitlement);
279
+ break;
280
+ }
281
+ case "ENTITLEMENT_DELETE": {
282
+ const entitlement = this.client.util.updateEntitlement(packet.d);
283
+ this.client["_application"]?.entitlements.delete(packet.d.id);
284
+ this.client.emit("entitlementDelete", entitlement);
285
+ break;
286
+ }
287
+ case "ENTITLEMENT_UPDATE": {
288
+ const oldEntitlement = this.client["_application"]?.entitlements.get(packet.d.id)?.toJSON() ?? null;
289
+ const entitlement = this.client.util.updateEntitlement(packet.d);
290
+ this.client.emit("entitlementUpdate", entitlement, oldEntitlement);
291
+ break;
292
+ }
293
+ case "GUILD_AUDIT_LOG_ENTRY_CREATE": {
294
+ const guild = this.client.guilds.get(packet.d.guild_id);
295
+ this.client.emit("guildAuditLogEntryCreate", guild ?? { id: packet.d.guild_id }, guild?.auditLogEntries.update(packet.d) ?? new AuditLogEntry_1.default(packet.d, this.client));
296
+ break;
297
+ }
298
+ case "GUILD_BAN_ADD": {
299
+ this.client.emit("guildBanAdd", this.client.guilds.get(packet.d.guild_id) ?? { id: packet.d.guild_id }, this.client.users.update(packet.d.user));
300
+ break;
301
+ }
302
+ case "GUILD_BAN_REMOVE": {
303
+ this.client.emit("guildBanRemove", this.client.guilds.get(packet.d.guild_id) ?? { id: packet.d.guild_id }, this.client.users.update(packet.d.user));
304
+ break;
305
+ }
306
+ case "GUILD_CREATE": {
307
+ if (packet.d.unavailable) {
308
+ this.client.guilds.delete(packet.d.id);
309
+ this.client.emit("unavailableGuildCreate", this.client.unavailableGuilds.update(packet.d));
310
+ }
311
+ else {
312
+ const guild = this.createGuild(packet.d);
313
+ if (this.ready) {
314
+ if (this.client.unavailableGuilds.delete(guild.id)) {
315
+ this.client.emit("guildAvailable", guild);
316
+ }
317
+ else {
318
+ this.client.emit("guildCreate", guild);
319
+ }
320
+ }
321
+ else {
322
+ if (this.client.unavailableGuilds.delete(guild.id)) {
323
+ void this.restartGuildCreateTimeout();
324
+ }
325
+ else {
326
+ this.client.emit("guildCreate", guild);
327
+ }
328
+ }
329
+ }
330
+ break;
331
+ }
332
+ case "GUILD_DELETE": {
333
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
334
+ this.client.voiceAdapters.get(packet.d.id)?.destroy();
335
+ delete this.client.guildShardMap[packet.d.id];
336
+ const guild = this.client.guilds.get(packet.d.id);
337
+ guild?.channels.clear();
338
+ guild?.threads.clear();
339
+ this.client.guilds.delete(packet.d.id);
340
+ if (packet.d.unavailable) {
341
+ this.client.emit("guildUnavailable", this.client.unavailableGuilds.update(packet.d));
342
+ }
343
+ else {
344
+ this.client.emit("guildDelete", guild ?? { id: packet.d.id });
345
+ }
346
+ break;
347
+ }
348
+ case "GUILD_EMOJIS_UPDATE": {
349
+ const guild = this.client.guilds.get(packet.d.guild_id);
350
+ const oldEmojis = guild?.emojis ? guild.emojis.toArray() : null;
351
+ // eslint-disable-next-line @typescript-eslint/dot-notation
352
+ guild?.["update"]({ emojis: packet.d.emojis });
353
+ this.client.emit("guildEmojisUpdate", guild ?? { id: packet.d.guild_id }, guild?.emojis?.toArray() ?? packet.d.emojis.map(emoji => this.client.util.convertEmoji(emoji)), oldEmojis);
354
+ break;
355
+ }
356
+ case "GUILD_INTEGRATIONS_UPDATE": {
357
+ this.client.emit("guildIntegrationsUpdate", this.client.guilds.get(packet.d.guild_id) ?? { id: packet.d.guild_id });
358
+ break;
359
+ }
360
+ case "GUILD_MEMBER_ADD": {
361
+ const guild = this.client.guilds.get(packet.d.guild_id);
362
+ if (guild) {
363
+ guild.memberCount++;
364
+ }
365
+ const member = this.client.util.updateMember(packet.d.guild_id, packet.d.user.id, packet.d);
366
+ this.client.emit("guildMemberAdd", member);
367
+ break;
368
+ }
369
+ case "GUILD_MEMBERS_CHUNK": {
370
+ const guild = this.client.guilds.get(packet.d.guild_id);
371
+ // eslint-disable-next-line @typescript-eslint/dot-notation
372
+ guild?.["updateMemberLimit"](packet.d.members.length);
373
+ const members = packet.d.members.map(member => this.client.util.updateMember(packet.d.guild_id, member.user.id, member));
374
+ if (packet.d.presences)
375
+ for (const presence of packet.d.presences) {
376
+ const member = members.find(m => m.id === presence.user.id);
377
+ member.presence = {
378
+ clientStatus: presence.client_status,
379
+ guildID: presence.guild_id,
380
+ status: presence.status,
381
+ activities: presence.activities?.map(activity => ({
382
+ createdAt: activity.created_at,
383
+ name: activity.name,
384
+ type: activity.type,
385
+ applicationID: activity.application_id,
386
+ assets: activity.assets ? {
387
+ largeImage: activity.assets.large_image,
388
+ largeText: activity.assets.large_text,
389
+ smallImage: activity.assets.small_image,
390
+ smallText: activity.assets.small_text
391
+ } : undefined,
392
+ buttons: activity.buttons,
393
+ details: activity.details,
394
+ emoji: activity.emoji,
395
+ flags: activity.flags,
396
+ instance: activity.instance,
397
+ party: activity.party,
398
+ secrets: activity.secrets,
399
+ state: activity.state,
400
+ timestamps: activity.timestamps,
401
+ url: activity.url
402
+ }))
403
+ };
404
+ }
405
+ if (!packet.d.nonce) {
406
+ this.client.emit("warn", "Received GUILD_MEMBERS_CHUNK without a nonce.");
407
+ break;
408
+ }
409
+ if (this._requestMembersPromise[packet.d.nonce]) {
410
+ this._requestMembersPromise[packet.d.nonce].members.push(...members);
411
+ }
412
+ if (packet.d.chunk_index >= packet.d.chunk_count - 1) {
413
+ if (this._requestMembersPromise[packet.d.nonce]) {
414
+ clearTimeout(this._requestMembersPromise[packet.d.nonce].timeout);
415
+ this._requestMembersPromise[packet.d.nonce].resolve(this._requestMembersPromise[packet.d.nonce].members);
416
+ delete this._requestMembersPromise[packet.d.nonce];
417
+ }
418
+ if (this._getAllUsersCount[packet.d.guild_id]) {
419
+ delete this._getAllUsersCount[packet.d.guild_id];
420
+ void this.checkReady();
421
+ }
422
+ }
423
+ this.client.emit("guildMemberChunk", members);
424
+ this.lastHeartbeatAck = true;
425
+ break;
426
+ }
427
+ case "GUILD_MEMBER_REMOVE": {
428
+ if (packet.d.user.id === this.client.user.id) {
429
+ break;
430
+ }
431
+ const guild = this.client.guilds.get(packet.d.guild_id);
432
+ // eslint-disable-next-line @typescript-eslint/dot-notation
433
+ let user = guild?.members.get(packet.d.user.id);
434
+ if (user instanceof Member_1.default) {
435
+ user["update"]({ user: packet.d.user });
436
+ }
437
+ else {
438
+ user = this.client.users.update(packet.d.user);
439
+ }
440
+ if (guild) {
441
+ guild.memberCount--;
442
+ guild.members.delete(packet.d.user.id);
443
+ }
444
+ this.client.emit("guildMemberRemove", user, guild ?? { id: packet.d.guild_id });
445
+ break;
446
+ }
447
+ case "GUILD_MEMBER_UPDATE": {
448
+ const guild = this.client.guilds.get(packet.d.guild_id);
449
+ const oldMember = guild?.members.get(packet.d.user.id)?.toJSON() ?? null;
450
+ const member = this.client.util.updateMember(packet.d.guild_id, packet.d.user.id, { deaf: oldMember?.deaf ?? false, mute: oldMember?.mute ?? false, ...packet.d });
451
+ this.client.emit("guildMemberUpdate", member, oldMember);
452
+ break;
453
+ }
454
+ case "GUILD_ROLE_CREATE": {
455
+ const guild = this.client.guilds.get(packet.d.guild_id);
456
+ const role = guild?.roles.update(packet.d.role, packet.d.guild_id) ?? new Role_1.default(packet.d.role, this.client, packet.d.guild_id);
457
+ this.client.emit("guildRoleCreate", role);
458
+ break;
459
+ }
460
+ case "GUILD_ROLE_DELETE": {
461
+ const guild = this.client.guilds.get(packet.d.guild_id);
462
+ const role = guild?.roles.get(packet.d.role_id);
463
+ guild?.roles.delete(packet.d.role_id);
464
+ this.client.emit("guildRoleDelete", role ?? { id: packet.d.role_id }, guild ?? { id: packet.d.guild_id });
465
+ break;
466
+ }
467
+ case "GUILD_ROLE_UPDATE": {
468
+ const guild = this.client.guilds.get(packet.d.guild_id);
469
+ const oldRole = guild?.roles.get(packet.d.role.id)?.toJSON() ?? null;
470
+ const role = guild?.roles.update(packet.d.role, packet.d.guild_id) ?? new Role_1.default(packet.d.role, this.client, packet.d.guild_id);
471
+ this.client.emit("guildRoleUpdate", role, oldRole);
472
+ break;
473
+ }
474
+ case "GUILD_SCHEDULED_EVENT_CREATE": {
475
+ const guild = this.client.guilds.get(packet.d.guild_id);
476
+ const event = guild?.scheduledEvents.update(packet.d) ?? new GuildScheduledEvent_1.default(packet.d, this.client);
477
+ this.client.emit("guildScheduledEventCreate", event);
478
+ break;
479
+ }
480
+ case "GUILD_SCHEDULED_EVENT_DELETE": {
481
+ const guild = this.client.guilds.get(packet.d.guild_id);
482
+ const event = guild?.scheduledEvents.update(packet.d) ?? new GuildScheduledEvent_1.default(packet.d, this.client);
483
+ guild?.scheduledEvents.delete(packet.d.id);
484
+ this.client.emit("guildScheduledEventDelete", event);
485
+ break;
486
+ }
487
+ case "GUILD_SCHEDULED_EVENT_UPDATE": {
488
+ const guild = this.client.guilds.get(packet.d.guild_id);
489
+ const oldEvent = guild?.scheduledEvents.get(packet.d.id)?.toJSON() ?? null;
490
+ const event = guild?.scheduledEvents.update(packet.d) ?? new GuildScheduledEvent_1.default(packet.d, this.client);
491
+ this.client.emit("guildScheduledEventUpdate", event, oldEvent);
492
+ break;
493
+ }
494
+ case "GUILD_SCHEDULED_EVENT_USER_ADD": {
495
+ const guild = this.client.guilds.get(packet.d.guild_id);
496
+ const event = guild?.scheduledEvents.get(packet.d.guild_scheduled_event_id);
497
+ if (event?.userCount) {
498
+ event.userCount++;
499
+ }
500
+ const user = this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id };
501
+ this.client.emit("guildScheduledEventUserAdd", event ?? { id: packet.d.guild_scheduled_event_id }, user ?? { id: packet.d.user_id });
502
+ break;
503
+ }
504
+ case "GUILD_SCHEDULED_EVENT_USER_REMOVE": {
505
+ const guild = this.client.guilds.get(packet.d.guild_id);
506
+ const event = guild?.scheduledEvents.get(packet.d.guild_scheduled_event_id);
507
+ if (event?.userCount) {
508
+ event.userCount--;
509
+ }
510
+ const user = this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id };
511
+ this.client.emit("guildScheduledEventUserRemove", event ?? { id: packet.d.guild_scheduled_event_id }, user ?? { id: packet.d.user_id });
512
+ break;
513
+ }
514
+ case "GUILD_STICKERS_UPDATE": {
515
+ const guild = this.client.guilds.get(packet.d.guild_id);
516
+ const oldStickers = guild?.stickers ? guild.stickers.toArray() : null;
517
+ // eslint-disable-next-line @typescript-eslint/dot-notation
518
+ guild?.["update"]({ stickers: packet.d.stickers });
519
+ this.client.emit("guildStickersUpdate", guild ?? { id: packet.d.guild_id }, guild?.stickers?.toArray() ?? packet.d.stickers.map(sticker => this.client.util.convertSticker(sticker)), oldStickers);
520
+ break;
521
+ }
522
+ case "GUILD_UPDATE": {
523
+ const guild = this.client.guilds.get(packet.d.id);
524
+ const oldGuild = guild?.toJSON() ?? null;
525
+ this.client.emit("guildUpdate", this.client.guilds.update(packet.d), oldGuild);
526
+ break;
527
+ }
528
+ case "INTEGRATION_CREATE": {
529
+ const guild = this.client.guilds.get(packet.d.guild_id);
530
+ const integration = guild?.integrations.update(packet.d, packet.d.guild_id) ?? new Integration_1.default(packet.d, this.client, packet.d.guild_id);
531
+ this.client.emit("integrationCreate", guild ?? { id: packet.d.guild_id }, integration);
532
+ break;
533
+ }
534
+ case "INTEGRATION_DELETE": {
535
+ const guild = this.client.guilds.get(packet.d.guild_id);
536
+ const integration = guild?.integrations.get(packet.d.id);
537
+ guild?.integrations.delete(packet.d.id);
538
+ this.client.emit("integrationDelete", guild ?? { id: packet.d.guild_id }, integration ?? { applicationID: packet.d.application_id, id: packet.d.id });
539
+ break;
540
+ }
541
+ case "INTEGRATION_UPDATE": {
542
+ const guild = this.client.guilds.get(packet.d.guild_id);
543
+ const oldIntegration = guild?.integrations.get(packet.d.id)?.toJSON() ?? null;
544
+ const integration = guild?.integrations.update(packet.d, packet.d.guild_id) ?? new Integration_1.default(packet.d, this.client, packet.d.guild_id);
545
+ this.client.emit("integrationUpdate", guild ?? { id: packet.d.guild_id }, integration, oldIntegration);
546
+ break;
547
+ }
548
+ case "INTERACTION_CREATE": {
549
+ this.client.emit("interactionCreate", Interaction_1.default.from(packet.d, this.client));
550
+ break;
551
+ }
552
+ case "INVITE_CREATE": {
553
+ let invite;
554
+ if (packet.d.guild_id) {
555
+ const guild = this.client.guilds.get(packet.d.guild_id);
556
+ invite = guild?.invites.update(packet.d);
557
+ }
558
+ this.client.emit("inviteCreate", invite ?? new Invite_1.default(packet.d, this.client));
559
+ break;
560
+ }
561
+ case "INVITE_DELETE": {
562
+ const channel = this.client.getChannel(packet.d.channel_id) ?? { id: packet.d.channel_id };
563
+ const guild = packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) ?? { id: packet.d.guild_id } : undefined;
564
+ let invite = {
565
+ code: packet.d.code,
566
+ channel,
567
+ guild
568
+ };
569
+ if (guild instanceof Guild_1.default && guild.invites.has(packet.d.code)) {
570
+ invite = guild.invites.get(packet.d.code);
571
+ guild.invites.delete(packet.d.code);
572
+ }
573
+ this.client.emit("inviteDelete", invite);
574
+ break;
575
+ }
576
+ case "MESSAGE_CREATE": {
577
+ const channel = this.client.getChannel(packet.d.channel_id);
578
+ const message = channel?.messages?.update(packet.d) ?? new Message_1.default(packet.d, this.client);
579
+ if (channel) {
580
+ channel.lastMessage = message;
581
+ channel.lastMessageID = message.id;
582
+ }
583
+ this.client.emit("messageCreate", message);
584
+ break;
585
+ }
586
+ case "MESSAGE_DELETE": {
587
+ const channel = this.client.getChannel(packet.d.channel_id);
588
+ const message = channel?.messages?.get(packet.d.id);
589
+ if (channel) {
590
+ channel.messages?.delete(packet.d.id);
591
+ if (channel.lastMessageID === packet.d.id) {
592
+ channel.lastMessageID = null;
593
+ channel.lastMessage = null;
594
+ }
595
+ }
596
+ this.client.emit("messageDelete", message ?? {
597
+ channel: channel ?? { id: packet.d.channel_id },
598
+ channelID: packet.d.channel_id,
599
+ guild: packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined,
600
+ guildID: packet.d.guild_id, id: packet.d.id
601
+ });
602
+ break;
603
+ }
604
+ case "MESSAGE_DELETE_BULK": {
605
+ const channel = this.client.getChannel(packet.d.channel_id);
606
+ const guild = packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined;
607
+ this.client.emit("messageDeleteBulk", packet.d.ids.map(id => {
608
+ const message = channel?.messages?.get(id);
609
+ channel?.messages?.delete(id);
610
+ return message ?? {
611
+ channel: channel ?? { id: packet.d.channel_id },
612
+ channelID: packet.d.channel_id,
613
+ guild,
614
+ guildID: packet.d.guild_id,
615
+ id
616
+ };
617
+ }));
618
+ break;
619
+ }
620
+ case "MESSAGE_POLL_VOTE_ADD": {
621
+ const user = this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id };
622
+ const channel = this.client.getChannel(packet.d.channel_id) ?? { id: packet.d.channel_id };
623
+ const guild = packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined;
624
+ const message = (channel instanceof Channel_1.default ? channel.messages.get(packet.d.message_id) : undefined) ?? { channel, channelID: channel.id, guild, guildID: guild?.id, id: packet.d.message_id };
625
+ let answer = { answerID: packet.d.answer_id };
626
+ if (message instanceof Message_1.default && message.poll !== undefined) {
627
+ const pollAnswer = message.poll.answers.find(a => a.answerID === packet.d.answer_id);
628
+ if (pollAnswer) {
629
+ answer = pollAnswer;
630
+ }
631
+ this.client.util.updatePollAnswer(message.poll, packet.d.answer_id, 1, packet.d.user_id);
632
+ }
633
+ this.client.emit("messagePollVoteAdd", message, user, answer);
634
+ break;
635
+ }
636
+ case "MESSAGE_POLL_VOTE_REMOVE": {
637
+ const user = this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id };
638
+ const channel = this.client.getChannel(packet.d.channel_id) ?? { id: packet.d.channel_id };
639
+ const guild = packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined;
640
+ const message = (channel instanceof Channel_1.default ? channel.messages.get(packet.d.message_id) : undefined) ?? { channel, channelID: channel.id, guild, guildID: guild?.id, id: packet.d.message_id };
641
+ let answer = { answerID: packet.d.answer_id };
642
+ if (message instanceof Message_1.default && message.poll !== undefined) {
643
+ const pollAnswer = message.poll.answers.find(a => a.answerID === packet.d.answer_id);
644
+ if (pollAnswer) {
645
+ answer = pollAnswer;
646
+ }
647
+ this.client.util.updatePollAnswer(message.poll, packet.d.answer_id, -1, packet.d.user_id);
648
+ }
649
+ this.client.emit("messagePollVoteRemove", message, user, answer);
650
+ break;
651
+ }
652
+ case "MESSAGE_REACTION_ADD": {
653
+ const channel = this.client.getChannel(packet.d.channel_id);
654
+ const guild = packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined;
655
+ const message = channel?.messages?.get(packet.d.message_id);
656
+ const reactor = packet.d.member
657
+ ? (packet.d.guild_id ? this.client.util.updateMember(packet.d.guild_id, packet.d.user_id, packet.d.member) : this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id })
658
+ : this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id };
659
+ if (message) {
660
+ const index = message.reactions.findIndex(r => r.emoji.id === packet.d.emoji.id && r.emoji.name === packet.d.emoji.name);
661
+ if (index === -1) {
662
+ message.reactions.push({
663
+ burstColors: packet.d.burst_colors,
664
+ count: 1,
665
+ countDetails: {
666
+ burst: packet.d.burst ? 1 : 0,
667
+ normal: packet.d.burst ? 0 : 1
668
+ },
669
+ emoji: packet.d.emoji,
670
+ me: packet.d.user_id === this.client.user.id,
671
+ meBurst: packet.d.user_id === this.client.user.id && packet.d.burst
672
+ });
673
+ }
674
+ else {
675
+ if (packet.d.burst) {
676
+ message.reactions[index].countDetails.burst++;
677
+ }
678
+ else {
679
+ message.reactions[index].countDetails.normal++;
680
+ }
681
+ message.reactions[index].count++;
682
+ if (packet.d.user_id === this.client.user.id) {
683
+ message.reactions[index].me = true;
684
+ }
685
+ }
686
+ }
687
+ this.client.emit("messageReactionAdd", message ?? {
688
+ channel: channel ?? { id: packet.d.channel_id },
689
+ channelID: packet.d.channel_id,
690
+ guild,
691
+ guildID: packet.d.guild_id,
692
+ id: packet.d.message_id,
693
+ // @TODO (1.11.0): Convert this to only be User, and add a member field
694
+ author: packet.d.message_author_id === undefined ? undefined : guild?.members.get(packet.d.user_id) ?? this.client.users.get(packet.d.user_id) ?? { id: packet.d.message_author_id }
695
+ }, reactor, packet.d.emoji, packet.d.burst);
696
+ break;
697
+ }
698
+ case "MESSAGE_REACTION_REMOVE": {
699
+ const channel = this.client.getChannel(packet.d.channel_id);
700
+ const message = channel?.messages?.get(packet.d.message_id);
701
+ const reactor = this.client.users.get(packet.d.user_id) ?? { id: packet.d.user_id };
702
+ if (message) {
703
+ const index = message.reactions.findIndex(r => r.emoji.id === packet.d.emoji.id && r.emoji.name === packet.d.emoji.name);
704
+ if (index !== -1) {
705
+ if (packet.d.burst) {
706
+ message.reactions[index].countDetails.burst--;
707
+ }
708
+ else {
709
+ message.reactions[index].countDetails.normal--;
710
+ }
711
+ message.reactions[index].count--;
712
+ if (packet.d.user_id === this.client.user.id) {
713
+ if (packet.d.burst) {
714
+ message.reactions[index].meBurst = false;
715
+ }
716
+ else {
717
+ message.reactions[index].me = false;
718
+ }
719
+ }
720
+ if (message.reactions[index].count === 0) {
721
+ message.reactions.splice(index, 1);
722
+ }
723
+ }
724
+ }
725
+ this.client.emit("messageReactionRemove", message ?? {
726
+ channel: channel ?? { id: packet.d.channel_id },
727
+ channelID: packet.d.channel_id,
728
+ guild: packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined,
729
+ guildID: packet.d.guild_id,
730
+ id: packet.d.message_id
731
+ }, reactor, packet.d.emoji, packet.d.burst);
732
+ break;
733
+ }
734
+ case "MESSAGE_REACTION_REMOVE_ALL": {
735
+ const channel = this.client.getChannel(packet.d.channel_id);
736
+ const message = channel?.messages?.get(packet.d.message_id);
737
+ if (message) {
738
+ message.reactions = [];
739
+ }
740
+ this.client.emit("messageReactionRemoveAll", message ?? {
741
+ channel: channel ?? { id: packet.d.channel_id },
742
+ channelID: packet.d.channel_id,
743
+ guild: packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined,
744
+ guildID: packet.d.guild_id,
745
+ id: packet.d.message_id
746
+ });
747
+ break;
748
+ }
749
+ case "MESSAGE_REACTION_REMOVE_EMOJI": {
750
+ const channel = this.client.getChannel(packet.d.channel_id);
751
+ const message = channel?.messages?.get(packet.d.message_id);
752
+ if (message) {
753
+ const index = message.reactions.findIndex(r => r.emoji.id === packet.d.emoji.id && r.emoji.name === packet.d.emoji.name);
754
+ if (index !== -1) {
755
+ message.reactions.splice(index, 1);
756
+ }
757
+ }
758
+ this.client.emit("messageReactionRemoveEmoji", message ?? {
759
+ channel: channel ?? { id: packet.d.channel_id },
760
+ channelID: packet.d.channel_id,
761
+ guild: packet.d.guild_id ? this.client.guilds.get(packet.d.guild_id) : undefined,
762
+ guildID: packet.d.guild_id,
763
+ id: packet.d.message_id
764
+ }, packet.d.emoji);
765
+ break;
766
+ }
767
+ case "MESSAGE_UPDATE": {
768
+ const channel = this.client.getChannel(packet.d.channel_id);
769
+ const oldMessage = channel?.messages?.get(packet.d.id)?.toJSON() ?? null;
770
+ if (!oldMessage && !packet.d.author) {
771
+ this.client.emit("debug", `Got partial MESSAGE_UPDATE for uncached message ${packet.d.id} for channel ${packet.d.channel_id}, discarding..`);
772
+ break;
773
+ }
774
+ const message = channel?.messages?.update(packet.d) ?? new Message_1.default(packet.d, this.client);
775
+ this.client.emit("messageUpdate", message, oldMessage);
776
+ break;
777
+ }
778
+ case "PRESENCE_UPDATE": {
779
+ const user = this.client.users.get(packet.d.user.id);
780
+ if (user) {
781
+ const oldUser = user.toJSON();
782
+ user["update"](packet.d.user);
783
+ if (JSON.stringify(oldUser) !== JSON.stringify(user.toJSON())) {
784
+ this.client.emit("userUpdate", user, oldUser);
785
+ }
786
+ }
787
+ const guild = this.client.guilds.get(packet.d.guild_id);
788
+ const member = guild?.members.get(packet.d.user.id);
789
+ const oldPresence = member?.presence ?? null;
790
+ const presence = {
791
+ clientStatus: packet.d.client_status,
792
+ guildID: packet.d.guild_id,
793
+ status: packet.d.status,
794
+ activities: packet.d.activities?.map(activity => ({
795
+ createdAt: activity.created_at,
796
+ name: activity.name,
797
+ type: activity.type,
798
+ applicationID: activity.application_id,
799
+ assets: activity.assets ? {
800
+ largeImage: activity.assets.large_image,
801
+ largeText: activity.assets.large_text,
802
+ smallImage: activity.assets.small_image,
803
+ smallText: activity.assets.small_text
804
+ } : undefined,
805
+ buttons: activity.buttons,
806
+ details: activity.details,
807
+ emoji: activity.emoji,
808
+ flags: activity.flags,
809
+ instance: activity.instance,
810
+ party: activity.party,
811
+ secrets: activity.secrets,
812
+ state: activity.state,
813
+ timestamps: activity.timestamps,
814
+ url: activity.url
815
+ }))
816
+ };
817
+ const userID = packet.d.user.id;
818
+ delete packet.d.user;
819
+ if (member) {
820
+ member.presence = presence;
821
+ }
822
+ this.client.emit("presenceUpdate", guild ?? { id: packet.d.guild_id }, member ?? { id: userID }, presence, oldPresence);
823
+ break;
824
+ }
825
+ case "READY": {
826
+ this.connectAttempts = 0;
827
+ this.reconnectInterval = 1000;
828
+ this.connecting = false;
829
+ if (this._connectTimeout) {
830
+ clearInterval(this._connectTimeout);
831
+ }
832
+ this.status = "ready";
833
+ this.client.shards["_ready"](this.id);
834
+ this.client["_application"] = new ClientApplication_1.default(packet.d.application, this.client);
835
+ if (this.client["_user"]) {
836
+ this.client.users.update(packet.d.user);
837
+ }
838
+ else {
839
+ this.client["_user"] = this.client.users.add(new ExtendedUser_1.default(packet.d.user, this.client));
840
+ }
841
+ let url = packet.d.resume_gateway_url;
842
+ if (url.includes("?")) {
843
+ url = url.slice(0, url.indexOf("?"));
844
+ }
845
+ if (!url.endsWith("/")) {
846
+ url += "/";
847
+ }
848
+ this.resumeURL = `${url}?v=${Constants_1.GATEWAY_VERSION}&encoding=${Erlpack ? "etf" : "json"}`;
849
+ if (this.client.shards.options.compress) {
850
+ this.resumeURL += "&compress=zlib-stream";
851
+ }
852
+ this.sessionID = packet.d.session_id;
853
+ for (const guild of packet.d.guilds) {
854
+ this.client.guilds.delete(guild.id);
855
+ this.client.unavailableGuilds.update(guild);
856
+ }
857
+ this.preReady = true;
858
+ this.emit("preReady");
859
+ if (this.client.unavailableGuilds.size !== 0 && packet.d.guilds.length !== 0) {
860
+ void this.restartGuildCreateTimeout();
861
+ }
862
+ else {
863
+ void this.checkReady();
864
+ }
865
+ break;
866
+ }
867
+ case "RESUMED": {
868
+ this.connectAttempts = 0;
869
+ this.reconnectInterval = 1000;
870
+ this.connecting = false;
871
+ if (this._connectTimeout) {
872
+ clearInterval(this._connectTimeout);
873
+ }
874
+ this.status = "ready";
875
+ this.client.shards["_ready"](this.id);
876
+ void this.checkReady();
877
+ this.emit("resume");
878
+ break;
879
+ }
880
+ case "STAGE_INSTANCE_CREATE": {
881
+ const guild = this.client.guilds.get(packet.d.guild_id);
882
+ const stateInstance = guild?.stageInstances.update(packet.d) ?? new StageInstance_1.default(packet.d, this.client);
883
+ this.client.emit("stageInstanceCreate", stateInstance);
884
+ break;
885
+ }
886
+ case "STAGE_INSTANCE_DELETE": {
887
+ const guild = this.client.guilds.get(packet.d.guild_id);
888
+ const stateInstance = guild?.stageInstances.update(packet.d) ?? new StageInstance_1.default(packet.d, this.client);
889
+ guild?.stageInstances.delete(packet.d.id);
890
+ this.client.emit("stageInstanceDelete", stateInstance);
891
+ break;
892
+ }
893
+ case "STAGE_INSTANCE_UPDATE": {
894
+ const guild = this.client.guilds.get(packet.d.guild_id);
895
+ const oldStageInstance = guild?.stageInstances.get(packet.d.id)?.toJSON() ?? null;
896
+ const stateInstance = guild?.stageInstances.update(packet.d) ?? new StageInstance_1.default(packet.d, this.client);
897
+ this.client.emit("stageInstanceUpdate", stateInstance, oldStageInstance);
898
+ break;
899
+ }
900
+ case "THREAD_CREATE": {
901
+ const thread = this.client.util.updateThread(packet.d);
902
+ const channel = this.client.getChannel(packet.d.parent_id);
903
+ if (channel && channel.type === Constants_1.ChannelTypes.GUILD_FORUM) {
904
+ channel.lastThreadID = thread.id;
905
+ }
906
+ this.client.emit("threadCreate", thread);
907
+ break;
908
+ }
909
+ case "THREAD_DELETE": {
910
+ const channel = this.client.getChannel(packet.d.parent_id);
911
+ const thread = this.client.getChannel(packet.d.id) ?? {
912
+ id: packet.d.id,
913
+ guild: this.client.guilds.get(packet.d.guild_id),
914
+ guildID: packet.d.guild_id,
915
+ parent: channel || { id: packet.d.parent_id },
916
+ parentID: packet.d.parent_id,
917
+ type: packet.d.type
918
+ };
919
+ if (channel && channel.type === Constants_1.ChannelTypes.GUILD_FORUM && channel.lastThreadID === packet.d.id) {
920
+ channel.lastThreadID = null;
921
+ }
922
+ this.client.guilds.get(packet.d.guild_id)?.threads.delete(packet.d.id);
923
+ this.client.emit("threadDelete", thread);
924
+ break;
925
+ }
926
+ case "THREAD_LIST_SYNC": {
927
+ const guild = this.client.guilds.get(packet.d.guild_id);
928
+ if (!guild) {
929
+ this.client.emit("debug", `Missing guild in THREAD_LIST_SYNC: ${packet.d.guild_id}`);
930
+ break;
931
+ }
932
+ for (const threadData of packet.d.threads) {
933
+ this.client.util.updateThread(threadData);
934
+ }
935
+ for (const member of packet.d.members) {
936
+ const thread = this.client.getChannel(member.id);
937
+ if (thread) {
938
+ const threadMember = {
939
+ id: member.id,
940
+ flags: member.flags,
941
+ joinTimestamp: new Date(member.join_timestamp),
942
+ userID: member.user_id
943
+ };
944
+ const index = thread.members.findIndex(m => m.userID === member.user_id);
945
+ if (index === -1) {
946
+ thread.members.push(threadMember);
947
+ }
948
+ else {
949
+ thread.members[index] = threadMember;
950
+ }
951
+ }
952
+ }
953
+ break;
954
+ }
955
+ case "THREAD_MEMBER_UPDATE": {
956
+ const thread = this.client.getChannel(packet.d.id);
957
+ const guild = this.client.guilds.get(packet.d.guild_id);
958
+ const threadMember = {
959
+ id: packet.d.id,
960
+ flags: packet.d.flags,
961
+ joinTimestamp: new Date(packet.d.join_timestamp),
962
+ userID: packet.d.user_id
963
+ };
964
+ let oldThreadMember = null;
965
+ if (thread) {
966
+ const index = thread.members.findIndex(m => m.userID === packet.d.user_id);
967
+ if (index === -1) {
968
+ thread.members.push(threadMember);
969
+ }
970
+ else {
971
+ oldThreadMember = { ...thread.members[index] };
972
+ thread.members[index] = threadMember;
973
+ }
974
+ }
975
+ this.client.emit("threadMemberUpdate", thread ?? {
976
+ id: packet.d.id,
977
+ guild,
978
+ guildID: packet.d.guild_id
979
+ }, threadMember, oldThreadMember);
980
+ break;
981
+ }
982
+ case "THREAD_MEMBERS_UPDATE": {
983
+ const thread = this.client.getChannel(packet.d.id);
984
+ const guild = this.client.guilds.get(packet.d.guild_id);
985
+ const addedMembers = (packet.d.added_members ?? []).map(rawMember => ({
986
+ flags: rawMember.flags,
987
+ id: rawMember.id,
988
+ joinTimestamp: new Date(rawMember.join_timestamp),
989
+ userID: rawMember.user_id
990
+ }));
991
+ const removedMembers = (packet.d.removed_member_ids ?? []).map(id => ({ userID: id, id: packet.d.id }));
992
+ if (thread) {
993
+ thread.memberCount = packet.d.member_count;
994
+ for (const rawMember of addedMembers) {
995
+ const index = thread.members.findIndex(m => m.userID === rawMember.id);
996
+ if (index === -1) {
997
+ thread.members.push(rawMember);
998
+ }
999
+ else {
1000
+ thread.members[index] = rawMember;
1001
+ }
1002
+ }
1003
+ for (const [index, { userID }] of removedMembers.entries()) {
1004
+ const memberIndex = thread.members.findIndex(m => m.userID === userID);
1005
+ if (memberIndex >= 0) {
1006
+ removedMembers[index] = thread.members[memberIndex];
1007
+ thread.members.splice(memberIndex, 1);
1008
+ }
1009
+ }
1010
+ }
1011
+ this.client.emit("threadMembersUpdate", thread ?? {
1012
+ id: packet.d.id,
1013
+ guild,
1014
+ guildID: packet.d.guild_id
1015
+ }, addedMembers, removedMembers);
1016
+ break;
1017
+ }
1018
+ case "THREAD_UPDATE": {
1019
+ const oldThread = this.client.getChannel(packet.d.id)?.toJSON() ?? null;
1020
+ const thread = this.client.util.updateThread(packet.d);
1021
+ this.client.emit("threadUpdate", thread, oldThread);
1022
+ break;
1023
+ }
1024
+ case "TYPING_START": {
1025
+ const channel = this.client.getChannel(packet.d.channel_id) ?? { id: packet.d.channel_id };
1026
+ const startTimestamp = new Date(packet.d.timestamp);
1027
+ if (packet.d.member) {
1028
+ const member = this.client.util.updateMember(packet.d.guild_id, packet.d.user_id, packet.d.member);
1029
+ this.client.emit("typingStart", channel, member, startTimestamp);
1030
+ break;
1031
+ }
1032
+ const user = this.client.users.get(packet.d.user_id);
1033
+ this.client.emit("typingStart", channel, user ?? { id: packet.d.user_id }, startTimestamp);
1034
+ break;
1035
+ }
1036
+ case "USER_UPDATE": {
1037
+ const oldUser = this.client.users.get(packet.d.id)?.toJSON() ?? null;
1038
+ this.client.emit("userUpdate", this.client.users.update(packet.d), oldUser);
1039
+ break;
1040
+ }
1041
+ case "VOICE_CHANNEL_EFFECT_SEND": {
1042
+ const channel = this.client.getChannel(packet.d.channel_id);
1043
+ const guild = this.client.guilds.get(packet.d.guild_id);
1044
+ const user = guild?.members.get(packet.d.user_id) ?? this.client.users.get(packet.d.user_id);
1045
+ this.client.emit("voiceChannelEffectSend", channel ?? { id: packet.d.channel_id, guild: guild ?? { id: packet.d.guild_id } }, user ?? { id: packet.d.user_id }, {
1046
+ animationID: packet.d.animation_id,
1047
+ animationType: packet.d.animation_type
1048
+ });
1049
+ break;
1050
+ }
1051
+ case "VOICE_STATE_UPDATE": {
1052
+ if (packet.d.guild_id && packet.d.session_id && packet.d.user_id === this.client.user.id) {
1053
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
1054
+ this.client.voiceAdapters.get(packet.d.guild_id)?.onVoiceStateUpdate(packet.d);
1055
+ }
1056
+ // @TODO voice states without guilds?
1057
+ if (!packet.d.guild_id || !packet.d.member) {
1058
+ break;
1059
+ }
1060
+ packet.d.self_stream = !!packet.d.self_stream;
1061
+ const guild = this.client.guilds.get(packet.d.guild_id);
1062
+ const member = this.client.util.updateMember(packet.d.guild_id, packet.d.user_id, packet.d.member);
1063
+ const oldState = guild?.voiceStates.get(member.id)?.toJSON() ?? null;
1064
+ const state = guild?.voiceStates.update({ ...packet.d, id: member.id }) ?? new VoiceState_1.default(packet.d, this.client);
1065
+ member["update"]({ deaf: state.deaf, mute: state.mute });
1066
+ if (oldState?.channelID !== state.channelID) {
1067
+ const oldChannel = oldState?.channelID ? this.client.getChannel(oldState.channelID) ?? { id: oldState.channelID } : null;
1068
+ const newChannel = state.channel === null ? null : state.channel ?? { id: state.channelID };
1069
+ if (newChannel instanceof Channel_1.default) {
1070
+ newChannel.voiceMembers.add(member);
1071
+ }
1072
+ if (oldChannel instanceof Channel_1.default) {
1073
+ oldChannel.voiceMembers.delete(member.id);
1074
+ }
1075
+ if (oldChannel && newChannel) {
1076
+ this.client.emit("voiceChannelSwitch", member, newChannel, oldChannel);
1077
+ }
1078
+ else if (newChannel) {
1079
+ this.client.emit("voiceChannelJoin", member, newChannel);
1080
+ }
1081
+ else if (state.channelID === null) {
1082
+ this.client.emit("voiceChannelLeave", member, oldChannel);
1083
+ }
1084
+ }
1085
+ if (JSON.stringify(oldState) !== JSON.stringify(state.toJSON())) {
1086
+ this.client.emit("voiceStateUpdate", member, oldState);
1087
+ }
1088
+ break;
1089
+ }
1090
+ case "VOICE_CHANNEL_STATUS_UPDATE": {
1091
+ this.client.emit("voiceChannelStatusUpdate", this.client.getChannel(packet.d.id) ?? { id: packet.d.id }, packet.d.status);
1092
+ break;
1093
+ }
1094
+ case "VOICE_SERVER_UPDATE": {
1095
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
1096
+ this.client.voiceAdapters.get(packet.d.guild_id)?.onVoiceServerUpdate(packet.d);
1097
+ break;
1098
+ }
1099
+ case "WEBHOOKS_UPDATE": {
1100
+ this.client.emit("webhooksUpdate", this.client.guilds.get(packet.d.guild_id) ?? { id: packet.d.guild_id }, this.client.getChannel(packet.d.channel_id) ?? { id: packet.d.channel_id });
1101
+ break;
1102
+ }
1103
+ }
1104
+ }
1105
+ onPacket(packet) {
1106
+ if ("s" in packet && packet.s) {
1107
+ if (packet.s > this.sequence + 1 && this.ws && this.status !== "resuming") {
1108
+ this.client.emit("warn", `Non-consecutive sequence (${this.sequence} -> ${packet.s})`, this.id);
1109
+ }
1110
+ this.sequence = packet.s;
1111
+ }
1112
+ switch (packet.op) {
1113
+ case Constants_1.GatewayOPCodes.DISPATCH: {
1114
+ void this.onDispatch(packet);
1115
+ break;
1116
+ }
1117
+ case Constants_1.GatewayOPCodes.HEARTBEAT: {
1118
+ this.heartbeat(true);
1119
+ break;
1120
+ }
1121
+ case Constants_1.GatewayOPCodes.INVALID_SESSION: {
1122
+ if (packet.d) {
1123
+ this.client.emit("warn", "Session Invalidated. Session may be resumable, attempting to resume..", this.id);
1124
+ this.resume();
1125
+ }
1126
+ else {
1127
+ this.sequence = 0;
1128
+ this.sessionID = null;
1129
+ this.client.emit("warn", "Session Invalidated. Session is not resumable, requesting a new session..", this.id);
1130
+ this.identify();
1131
+ }
1132
+ break;
1133
+ }
1134
+ case Constants_1.GatewayOPCodes.RECONNECT: {
1135
+ this.client.emit("debug", "Reconnect requested by Discord.", this.id);
1136
+ this.disconnect(true);
1137
+ break;
1138
+ }
1139
+ case Constants_1.GatewayOPCodes.HELLO: {
1140
+ if (this._heartbeatInterval) {
1141
+ clearInterval(this._heartbeatInterval);
1142
+ }
1143
+ this._heartbeatInterval = setInterval(() => this.heartbeat(false), packet.d.heartbeat_interval);
1144
+ this.connecting = false;
1145
+ if (this._connectTimeout) {
1146
+ clearTimeout(this._connectTimeout);
1147
+ }
1148
+ this._connectTimeout = null;
1149
+ if (this.sessionID) {
1150
+ this.resume();
1151
+ }
1152
+ else {
1153
+ this.identify();
1154
+ this.heartbeat();
1155
+ }
1156
+ this.client.emit("hello", packet.d.heartbeat_interval, this.id);
1157
+ break;
1158
+ }
1159
+ case Constants_1.GatewayOPCodes.HEARTBEAT_ACK: {
1160
+ this.lastHeartbeatAck = true;
1161
+ this.lastHeartbeatReceived = Date.now();
1162
+ this.latency = this.lastHeartbeatReceived - this.lastHeartbeatSent;
1163
+ if (isNaN(this.latency)) {
1164
+ this.latency = Infinity;
1165
+ }
1166
+ break;
1167
+ }
1168
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
1169
+ default: {
1170
+ this.client.emit("warn", `Unrecognized gateway packet: ${packet}`, this.id);
1171
+ }
1172
+ }
1173
+ }
1174
+ async onWSClose(code, r) {
1175
+ const reason = r.toString();
1176
+ let err;
1177
+ let reconnect;
1178
+ if (code) {
1179
+ this.client.emit("debug", `${code === 1000 ? "Clean" : "Unclean"} WS close: ${code}: ${reason}`, this.id);
1180
+ switch (code) {
1181
+ case 1001: {
1182
+ err = new Errors_1.default("CloudFlare WebSocket proxy restarting.", code);
1183
+ break;
1184
+ }
1185
+ case 1006: {
1186
+ err = new Errors_1.default("Connection reset by peer. This is a network issue. If you are concerned, talk to your ISP or host.", code);
1187
+ break;
1188
+ }
1189
+ case Constants_1.GatewayCloseCodes.UNKNOWN_OPCODE: {
1190
+ err = new Errors_1.default("Gateway received an unknown opcode.", code);
1191
+ break;
1192
+ }
1193
+ case Constants_1.GatewayCloseCodes.DECODE_ERROR: {
1194
+ err = new Errors_1.default("Gateway received an improperly encoded packet.", code);
1195
+ break;
1196
+ }
1197
+ case Constants_1.GatewayCloseCodes.NOT_AUTHENTICATED: {
1198
+ err = new Errors_1.default("Gateway received a packet before authentication.", code);
1199
+ this.sessionID = null;
1200
+ break;
1201
+ }
1202
+ case Constants_1.GatewayCloseCodes.AUTHENTICATION_FAILED: {
1203
+ err = new Errors_1.default("Authentication failed.", code);
1204
+ this.sessionID = null;
1205
+ reconnect = false;
1206
+ this.client.emit("error", new Error(`Invalid Token: ${this._token}`));
1207
+ break;
1208
+ }
1209
+ case Constants_1.GatewayCloseCodes.ALREADY_AUTHENTICATED: {
1210
+ err = new Errors_1.default("Gateway received an authentication attempt while already authenticated.", code);
1211
+ break;
1212
+ }
1213
+ case Constants_1.GatewayCloseCodes.INVALID_SEQUENCE: {
1214
+ err = new Errors_1.default("Gateway received an invalid sequence.", code);
1215
+ this.sequence = 0;
1216
+ break;
1217
+ }
1218
+ case Constants_1.GatewayCloseCodes.RATE_LIMITED: {
1219
+ err = new Errors_1.default("Gateway connection was ratelimited.", code);
1220
+ break;
1221
+ }
1222
+ case Constants_1.GatewayCloseCodes.INVALID_SHARD: {
1223
+ err = new Errors_1.default("Invalid sharding specified.", code);
1224
+ this.sessionID = null;
1225
+ reconnect = false;
1226
+ break;
1227
+ }
1228
+ case Constants_1.GatewayCloseCodes.SHARDING_REQUIRED: {
1229
+ err = new Errors_1.default("Shard would handle too many guilds (>2500 each).", code);
1230
+ this.sessionID = null;
1231
+ reconnect = false;
1232
+ break;
1233
+ }
1234
+ case Constants_1.GatewayCloseCodes.INVALID_API_VERSION: {
1235
+ err = new Errors_1.default("Invalid API version.", code);
1236
+ this.sessionID = null;
1237
+ reconnect = false;
1238
+ break;
1239
+ }
1240
+ case Constants_1.GatewayCloseCodes.INVALID_INTENTS: {
1241
+ err = new Errors_1.default("Invalid intents specified.", code);
1242
+ this.sessionID = null;
1243
+ reconnect = false;
1244
+ break;
1245
+ }
1246
+ case Constants_1.GatewayCloseCodes.DISALLOWED_INTENTS: {
1247
+ const disallowed = this.client.shards.options.lookupDisallowedIntents ? await this.client.util.detectMissingPrivilegedIntents() : [];
1248
+ let message = "Disallowed intents specified. Make sure any privileged intents you're trying to access have been enabled in the developer portal.";
1249
+ if (disallowed.length !== 0) {
1250
+ // application should always be present after the call to detectMissingPrivilegedIntents, but just in case it isn't, we don't want to swallow this disallowed intents error with a lib error
1251
+ message = `Disallowed intents specified. You are missing: ${disallowed.join(", ")}. Make sure they are enabled here: https://discord.com/developers/applications/${this.client["_application"]?.id || "unknown"}/bot`;
1252
+ }
1253
+ err = new Errors_1.default(message, code);
1254
+ this.sessionID = null;
1255
+ reconnect = false;
1256
+ break;
1257
+ }
1258
+ default: {
1259
+ err = new Errors_1.default(`Unknown close: ${code}: ${reason}`, code);
1260
+ break;
1261
+ }
1262
+ }
1263
+ this.disconnect(reconnect, err);
1264
+ }
1265
+ }
1266
+ onWSError(err) {
1267
+ this.client.emit("error", err, this.id);
1268
+ }
1269
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-argument */
1270
+ onWSMessage(data) {
1271
+ if (typeof data === "string") {
1272
+ data = Buffer.from(data);
1273
+ }
1274
+ try {
1275
+ if (data instanceof ArrayBuffer) {
1276
+ if (this.client.shards.options.compress || Erlpack) {
1277
+ data = Buffer.from(data);
1278
+ }
1279
+ }
1280
+ else if (Array.isArray(data)) {
1281
+ data = Buffer.concat(data);
1282
+ }
1283
+ const is = (input) => true;
1284
+ (0, node_assert_1.default)(is(data));
1285
+ if (this.client.shards.options.compress) {
1286
+ if (data.length >= 4 && data.readUInt32BE(data.length - 4) === 0xFFFF) {
1287
+ // store the current pointer for slicing buffers after pushing.
1288
+ const currentPointer = this._sharedZLib.strm?.next_out;
1289
+ this._sharedZLib.push(data, zlibConstants.Z_SYNC_FLUSH);
1290
+ if (this._sharedZLib.err) {
1291
+ this.client.emit("error", new Errors_1.default(`zlib error ${this._sharedZLib.err}: ${this._sharedZLib.msg ?? ""}`, 0));
1292
+ return;
1293
+ }
1294
+ if (currentPointer === undefined) {
1295
+ // decompression support by zlib-sync
1296
+ data = Buffer.from(this._sharedZLib.result ?? "");
1297
+ }
1298
+ else if (this._sharedZLib.chunks.length === 0) {
1299
+ // decompression support by pako. The current buffer hasn't been flushed
1300
+ data = Buffer.from(this._sharedZLib.strm.output.slice(currentPointer));
1301
+ }
1302
+ else {
1303
+ // decompression support by pako. Buffers have been flushed once or more times.
1304
+ data = Buffer.concat([
1305
+ this._sharedZLib.chunks[0].slice(currentPointer),
1306
+ ...this._sharedZLib.chunks.slice(1),
1307
+ this._sharedZLib.strm.output
1308
+ ]);
1309
+ this._sharedZLib.chunks = [];
1310
+ }
1311
+ (0, node_assert_1.default)(is(data));
1312
+ if (Erlpack) {
1313
+ return this.onPacket(Erlpack.unpack(data));
1314
+ }
1315
+ else {
1316
+ // After the valid data, all the remaining octets are filled with zero, so remove them.
1317
+ let last = data.length - 1;
1318
+ if (data[last] === 0) {
1319
+ while (data[last - 1] === 0 && last > 0)
1320
+ last--;
1321
+ data = data.subarray(0, last);
1322
+ }
1323
+ return this.onPacket(JSON.parse(String(data)));
1324
+ }
1325
+ }
1326
+ else {
1327
+ this._sharedZLib.push(data, false);
1328
+ }
1329
+ }
1330
+ else if (Erlpack) {
1331
+ return this.onPacket(Erlpack.unpack(data));
1332
+ }
1333
+ else {
1334
+ return this.onPacket(JSON.parse(data.toString()));
1335
+ }
1336
+ }
1337
+ catch (err) {
1338
+ this.client.emit("error", err, this.id);
1339
+ }
1340
+ }
1341
+ /* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-argument */
1342
+ onWSOpen() {
1343
+ this.status = "handshaking";
1344
+ this.client.emit("connect", this.id);
1345
+ this.lastHeartbeatAck = true;
1346
+ }
1347
+ async restartGuildCreateTimeout() {
1348
+ if (this._guildCreateTimeout) {
1349
+ clearTimeout(this._guildCreateTimeout);
1350
+ this._guildCreateTimeout = null;
1351
+ }
1352
+ if (!this.ready) {
1353
+ if (this.client.unavailableGuilds.size === 0) {
1354
+ return this.checkReady();
1355
+ }
1356
+ this._guildCreateTimeout = setTimeout(this.checkReady.bind(this), this.client.shards.options.guildCreateTimeout);
1357
+ }
1358
+ }
1359
+ sendPresenceUpdate() {
1360
+ this.send(Constants_1.GatewayOPCodes.PRESENCE_UPDATE, {
1361
+ activities: this.presence.activities,
1362
+ afk: !!this.presence.afk,
1363
+ since: this.presence.status === "idle" ? Date.now() : null,
1364
+ status: this.presence.status
1365
+ });
1366
+ }
1367
+ get _token() {
1368
+ return this.client.options.auth;
1369
+ }
1370
+ /** Connect this shard. */
1371
+ async connect() {
1372
+ if (this.ws && this.ws.readyState !== ws_1.default.CLOSED) {
1373
+ this.client.emit("error", new Error("Shard#connect called while existing connection is established."), this.id);
1374
+ return;
1375
+ }
1376
+ ++this.connectAttempts;
1377
+ this.connecting = true;
1378
+ await this.initialize();
1379
+ }
1380
+ disconnect(reconnect = this.client.shards.options.autoReconnect, error) {
1381
+ if (!this.ws) {
1382
+ return;
1383
+ }
1384
+ if (this._heartbeatInterval) {
1385
+ clearInterval(this._heartbeatInterval);
1386
+ this._heartbeatInterval = null;
1387
+ }
1388
+ if (this.ws.readyState !== ws_1.default.CLOSED) {
1389
+ this.ws.removeAllListeners();
1390
+ try {
1391
+ if (reconnect && this.sessionID) {
1392
+ if (this.ws.readyState === ws_1.default.OPEN) {
1393
+ this.client.emit("debug", `Closing websocket (state: ${this.ws.readyState})`, this.id);
1394
+ this.ws.terminate();
1395
+ }
1396
+ else {
1397
+ this.ws.close(4999, "Reconnect");
1398
+ }
1399
+ }
1400
+ else {
1401
+ this.ws.close(1000, "Normal Close");
1402
+ }
1403
+ }
1404
+ catch (err) {
1405
+ this.client.emit("error", err, this.id);
1406
+ }
1407
+ }
1408
+ this.ws = null;
1409
+ this.reset();
1410
+ if (error) {
1411
+ if (error instanceof Errors_1.default && [1001, 1006].includes(error.code)) {
1412
+ this.client.emit("debug", error.message, this.id);
1413
+ }
1414
+ else {
1415
+ this.client.emit("error", error, this.id);
1416
+ }
1417
+ }
1418
+ this.emit("disconnect", error);
1419
+ if (this.sessionID && this.connectAttempts >= this.client.shards.options.maxReconnectAttempts) {
1420
+ this.client.emit("debug", `Automatically invalidating session due to excessive resume attempts | Attempt ${this.connectAttempts}`, this.id);
1421
+ this.sessionID = null;
1422
+ }
1423
+ if (reconnect) {
1424
+ if (this.sessionID) {
1425
+ this.client.emit("debug", `Immediately reconnecting for potential resume | Attempt ${this.connectAttempts}`, this.id);
1426
+ void this.client.shards["_connect"](this);
1427
+ }
1428
+ else {
1429
+ this.client.emit("debug", `Queueing reconnect in ${this.reconnectInterval}ms | Attempt ${this.connectAttempts}`, this.id);
1430
+ setTimeout(() => {
1431
+ void this.client.shards["_connect"](this);
1432
+ }, this.reconnectInterval);
1433
+ this.reconnectInterval = Math.min(Math.round(this.reconnectInterval * (Math.random() * 2 + 1)), 30000);
1434
+ }
1435
+ }
1436
+ else {
1437
+ this.hardReset();
1438
+ }
1439
+ }
1440
+ /**
1441
+ * Edit this shard's status.
1442
+ * @param status The status.
1443
+ * @param activities An array of activities.
1444
+ */
1445
+ async editStatus(status, activities = []) {
1446
+ this.presence.status = status;
1447
+ this.presence.activities = activities;
1448
+ return this.sendPresenceUpdate();
1449
+ }
1450
+ hardReset() {
1451
+ this.reset();
1452
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
1453
+ for (const [, voiceAdapter] of this.client.voiceAdapters)
1454
+ voiceAdapter.destroy();
1455
+ this.sequence = 0;
1456
+ this.sessionID = null;
1457
+ this.reconnectInterval = 1000;
1458
+ this.connectAttempts = 0;
1459
+ this.ws = null;
1460
+ this._heartbeatInterval = null;
1461
+ this._guildCreateTimeout = null;
1462
+ this.globalBucket = new Bucket_1.default(120, 60000, { reservedTokens: 5 });
1463
+ this.presence = JSON.parse(JSON.stringify(this.client.shards.options.presence));
1464
+ this.presenceUpdateBucket = new Bucket_1.default(5, 20000);
1465
+ this.resumeURL = null;
1466
+ }
1467
+ heartbeat(requested = false) {
1468
+ // discord/discord-api-docs#1619
1469
+ if (this.status === "resuming" || this.status === "identifying") {
1470
+ return;
1471
+ }
1472
+ if (!requested) {
1473
+ if (!this.lastHeartbeatAck) {
1474
+ this.client.emit("debug", "Heartbeat timeout; " + JSON.stringify({
1475
+ lastReceived: this.lastHeartbeatReceived,
1476
+ lastSent: this.lastHeartbeatSent,
1477
+ interval: this._heartbeatInterval,
1478
+ status: this.status,
1479
+ timestamp: Date.now()
1480
+ }));
1481
+ return this.disconnect(undefined, new Error("Server didn't acknowledge previous heartbeat, possible lost connection."));
1482
+ }
1483
+ this.lastHeartbeatAck = false;
1484
+ }
1485
+ this.lastHeartbeatSent = Date.now();
1486
+ this.send(Constants_1.GatewayOPCodes.HEARTBEAT, this.sequence, true);
1487
+ }
1488
+ identify() {
1489
+ const data = {
1490
+ token: this._token,
1491
+ properties: this.client.shards.options.connectionProperties,
1492
+ compress: this.client.shards.options.compress,
1493
+ large_threshold: this.client.shards.options.largeThreshold,
1494
+ shard: [this.id, this.client.shards.options.maxShards],
1495
+ presence: this.presence,
1496
+ intents: this.client.shards.options.intents
1497
+ };
1498
+ this.send(Constants_1.GatewayOPCodes.IDENTIFY, data);
1499
+ }
1500
+ [node_util_1.inspect.custom]() {
1501
+ return Base_1.default.prototype[node_util_1.inspect.custom].call(this);
1502
+ }
1503
+ /**
1504
+ * Request the members of a guild.
1505
+ * @param guildID The ID of the guild to request the members of.
1506
+ * @param options The options for requesting the members.
1507
+ */
1508
+ async requestGuildMembers(guildID, options) {
1509
+ const opts = {
1510
+ guild_id: guildID,
1511
+ limit: options?.limit ?? 0,
1512
+ user_ids: options?.userIDs,
1513
+ query: options?.query,
1514
+ nonce: (0, node_crypto_1.randomBytes)(16).toString("hex"),
1515
+ presences: options?.presences ?? false
1516
+ };
1517
+ if (!opts.user_ids && !opts.query) {
1518
+ opts.query = "";
1519
+ }
1520
+ if (!opts.query && !opts.user_ids) {
1521
+ if (!(this.client.shards.options.intents & Constants_1.Intents.GUILD_MEMBERS)) {
1522
+ throw new TypeError("Cannot request all members without the GUILD_MEMBERS intent.");
1523
+ }
1524
+ const guild = this.client.guilds.get(guildID);
1525
+ if (guild) {
1526
+ guild["updateMemberLimit"](true);
1527
+ }
1528
+ }
1529
+ if (opts.presences && (!(this.client.shards.options.intents & Constants_1.Intents.GUILD_PRESENCES))) {
1530
+ throw new TypeError("Cannot request presences without the GUILD_PRESENCES intent.");
1531
+ }
1532
+ if (opts.user_ids && opts.user_ids.length > 100) {
1533
+ throw new TypeError("Cannot request more than 100 users at once.");
1534
+ }
1535
+ this.send(Constants_1.GatewayOPCodes.REQUEST_GUILD_MEMBERS, opts);
1536
+ return new Promise((resolve, reject) => this._requestMembersPromise[opts.nonce] = {
1537
+ members: [],
1538
+ received: 0,
1539
+ timeout: setTimeout(() => {
1540
+ resolve(this._requestMembersPromise[opts.nonce].members);
1541
+ delete this._requestMembersPromise[opts.nonce];
1542
+ }, options?.timeout ?? this.client.rest.options.requestTimeout),
1543
+ resolve,
1544
+ reject
1545
+ });
1546
+ }
1547
+ reset() {
1548
+ this.connecting = false;
1549
+ this.ready = false;
1550
+ this.preReady = false;
1551
+ if (this._requestMembersPromise !== undefined) {
1552
+ for (const guildID in this._requestMembersPromise) {
1553
+ if (!this._requestMembersPromise[guildID]) {
1554
+ continue;
1555
+ }
1556
+ clearTimeout(this._requestMembersPromise[guildID].timeout);
1557
+ this._requestMembersPromise[guildID].resolve(this._requestMembersPromise[guildID].received);
1558
+ }
1559
+ }
1560
+ this._requestMembersPromise = {};
1561
+ this._getAllUsersCount = {};
1562
+ this._getAllUsersQueue = [];
1563
+ this.latency = Infinity;
1564
+ this.lastHeartbeatAck = true;
1565
+ this.lastHeartbeatReceived = 0;
1566
+ this.lastHeartbeatSent = 0;
1567
+ this.status = "disconnected";
1568
+ if (this._connectTimeout) {
1569
+ clearTimeout(this._connectTimeout);
1570
+ }
1571
+ this._connectTimeout = null;
1572
+ }
1573
+ resume() {
1574
+ this.status = "resuming";
1575
+ this.send(Constants_1.GatewayOPCodes.RESUME, {
1576
+ token: this._token,
1577
+ session_id: this.sessionID,
1578
+ seq: this.sequence
1579
+ });
1580
+ }
1581
+ send(op, data, priority = false) {
1582
+ if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
1583
+ let i = 0, waitFor = 1;
1584
+ const func = () => {
1585
+ if (++i >= waitFor && this.ws && this.ws.readyState === ws_1.default.OPEN) {
1586
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
1587
+ const d = Erlpack ? Erlpack.pack({ op, d: data }) : JSON.stringify({ op, d: data });
1588
+ this.ws.send(d);
1589
+ if (typeof data === "object" && data && "token" in data) {
1590
+ data.token = "[REMOVED]";
1591
+ }
1592
+ this.client.emit("debug", JSON.stringify({ op, d: data }), this.id);
1593
+ }
1594
+ };
1595
+ if (op === Constants_1.GatewayOPCodes.PRESENCE_UPDATE) {
1596
+ ++waitFor;
1597
+ this.presenceUpdateBucket.queue(func, priority);
1598
+ }
1599
+ this.globalBucket.queue(func, priority);
1600
+ }
1601
+ }
1602
+ toString() {
1603
+ return Base_1.default.prototype.toString.call(this);
1604
+ }
1605
+ /**
1606
+ * Update the voice state of this shard.
1607
+ * @param guildID The ID of the guild to update the voice state of.
1608
+ * @param channelID The ID of the voice channel to join. Null to disconnect.
1609
+ * @param options The options for updating the voice state.
1610
+ */
1611
+ updateVoiceState(guildID, channelID, options) {
1612
+ this.send(Constants_1.GatewayOPCodes.VOICE_STATE_UPDATE, {
1613
+ channel_id: channelID,
1614
+ guild_id: guildID,
1615
+ self_deaf: options?.selfDeaf ?? false,
1616
+ self_mute: options?.selfMute ?? false
1617
+ });
1618
+ }
1619
+ }
1620
+ exports.default = Shard;
1621
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2F0ZXdheS9TaGFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxnRkFBZ0Q7QUFDaEQsb0VBQW9DO0FBQ3BDLDRDQU1zQjtBQVV0QiwwRUFBMEM7QUFDMUMsc0VBQXNDO0FBSXRDLHNGQUFzRDtBQUN0RCxrR0FBa0U7QUFDbEUsNEVBQTRDO0FBZ0I1QyxzRkFBc0Q7QUFDdEQsc0ZBQXNEO0FBQ3RELG9HQUFvRTtBQUNwRSwwRUFBMEM7QUFDMUMsNEVBQTRDO0FBQzVDLHdGQUF3RDtBQUV4RCxvRkFBb0Q7QUFDcEQsd0VBQXdDO0FBRXhDLHNFQUFzQztBQUN0QyxvRkFBb0Q7QUFDcEQsa0ZBQWtEO0FBQ2xELHdGQUF3RDtBQUV4RCxpRUFBK0Q7QUFDL0QsZ0dBQWdFO0FBQ2hFLG9EQUEwQztBQUsxQyw2Q0FBMEM7QUFDMUMseUNBQW9DO0FBQ3BDLHNFQUFpQztBQUVqQyx5UEFBeVA7QUFDelAsYUFBYTtBQUNiLElBQUksT0FBNkMsQ0FBQztBQUNsRCxJQUFJLENBQUM7SUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO0FBQ1YsYUFBYTtBQUNiLElBQUksUUFBd0UsRUFBRSxhQUF1RixDQUFDO0FBQ3RLLElBQUksQ0FBQztJQUNELFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBQUMsTUFBTSxDQUFDO0lBQ0wsSUFBSSxDQUFDO1FBQ0QsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztB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