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.
- package/dist/lib/Client.d.ts +99 -0
- package/dist/lib/Client.js +263 -0
- package/dist/lib/Constants.d.ts +1215 -0
- package/dist/lib/Constants.js +1513 -0
- package/dist/lib/gateway/Shard.d.ts +83 -0
- package/dist/lib/gateway/Shard.js +1621 -0
- package/dist/lib/gateway/ShardManager.d.ts +29 -0
- package/dist/lib/gateway/ShardManager.js +300 -0
- package/dist/lib/index.d.ts +84 -0
- package/dist/lib/index.js +168 -0
- package/dist/lib/rest/Bucket.d.ts +33 -0
- package/dist/lib/rest/Bucket.js +78 -0
- package/dist/lib/rest/DiscordHTTPError.d.ts +16 -0
- package/dist/lib/rest/DiscordHTTPError.js +65 -0
- package/dist/lib/rest/DiscordRESTError.d.ts +19 -0
- package/dist/lib/rest/DiscordRESTError.js +89 -0
- package/dist/lib/rest/OAuthHelper.d.ts +62 -0
- package/dist/lib/rest/OAuthHelper.js +183 -0
- package/dist/lib/rest/RESTManager.d.ts +42 -0
- package/dist/lib/rest/RESTManager.js +82 -0
- package/dist/lib/rest/RequestHandler.d.ts +28 -0
- package/dist/lib/rest/RequestHandler.js +313 -0
- package/dist/lib/rest/SequentialBucket.d.ts +25 -0
- package/dist/lib/rest/SequentialBucket.js +76 -0
- package/dist/lib/routes/Applications.d.ts +171 -0
- package/dist/lib/routes/Applications.js +447 -0
- package/dist/lib/routes/Channels.d.ts +408 -0
- package/dist/lib/routes/Channels.js +1160 -0
- package/dist/lib/routes/Guilds.d.ts +606 -0
- package/dist/lib/routes/Guilds.js +1669 -0
- package/dist/lib/routes/Interactions.d.ts +74 -0
- package/dist/lib/routes/Interactions.js +141 -0
- package/dist/lib/routes/Miscellaneous.d.ts +31 -0
- package/dist/lib/routes/Miscellaneous.js +69 -0
- package/dist/lib/routes/OAuth.d.ts +108 -0
- package/dist/lib/routes/OAuth.js +312 -0
- package/dist/lib/routes/Users.d.ts +32 -0
- package/dist/lib/routes/Users.js +59 -0
- package/dist/lib/routes/Webhooks.d.ts +128 -0
- package/dist/lib/routes/Webhooks.js +265 -0
- package/dist/lib/structures/AnnouncementChannel.d.ts +36 -0
- package/dist/lib/structures/AnnouncementChannel.js +47 -0
- package/dist/lib/structures/AnnouncementThreadChannel.d.ts +18 -0
- package/dist/lib/structures/AnnouncementThreadChannel.js +27 -0
- package/dist/lib/structures/Application.d.ts +102 -0
- package/dist/lib/structures/Application.js +189 -0
- package/dist/lib/structures/ApplicationCommand.d.ts +74 -0
- package/dist/lib/structures/ApplicationCommand.js +141 -0
- package/dist/lib/structures/Attachment.d.ts +34 -0
- package/dist/lib/structures/Attachment.js +64 -0
- package/dist/lib/structures/AuditLogEntry.d.ts +25 -0
- package/dist/lib/structures/AuditLogEntry.js +53 -0
- package/dist/lib/structures/AutoModerationRule.d.ts +49 -0
- package/dist/lib/structures/AutoModerationRule.js +139 -0
- package/dist/lib/structures/AutocompleteInteraction.d.ts +62 -0
- package/dist/lib/structures/AutocompleteInteraction.js +115 -0
- package/dist/lib/structures/Base.d.ts +20 -0
- package/dist/lib/structures/Base.js +58 -0
- package/dist/lib/structures/BaseEntitlement.d.ts +19 -0
- package/dist/lib/structures/BaseEntitlement.js +44 -0
- package/dist/lib/structures/CategoryChannel.d.ts +41 -0
- package/dist/lib/structures/CategoryChannel.js +105 -0
- package/dist/lib/structures/Channel.d.ts +20 -0
- package/dist/lib/structures/Channel.js +91 -0
- package/dist/lib/structures/ClientApplication.d.ts +153 -0
- package/dist/lib/structures/ClientApplication.js +220 -0
- package/dist/lib/structures/CommandInteraction.d.ts +127 -0
- package/dist/lib/structures/CommandInteraction.js +297 -0
- package/dist/lib/structures/ComponentInteraction.d.ts +137 -0
- package/dist/lib/structures/ComponentInteraction.js +311 -0
- package/dist/lib/structures/Entitlement.d.ts +12 -0
- package/dist/lib/structures/Entitlement.js +26 -0
- package/dist/lib/structures/ExtendedUser.d.ts +26 -0
- package/dist/lib/structures/ExtendedUser.js +57 -0
- package/dist/lib/structures/ForumChannel.d.ts +11 -0
- package/dist/lib/structures/ForumChannel.js +19 -0
- package/dist/lib/structures/GroupChannel.d.ts +62 -0
- package/dist/lib/structures/GroupChannel.js +133 -0
- package/dist/lib/structures/Guild.d.ts +654 -0
- package/dist/lib/structures/Guild.js +1319 -0
- package/dist/lib/structures/GuildChannel.d.ts +34 -0
- package/dist/lib/structures/GuildChannel.js +75 -0
- package/dist/lib/structures/GuildPreview.d.ts +50 -0
- package/dist/lib/structures/GuildPreview.js +119 -0
- package/dist/lib/structures/GuildScheduledEvent.d.ts +60 -0
- package/dist/lib/structures/GuildScheduledEvent.js +154 -0
- package/dist/lib/structures/GuildTemplate.d.ts +55 -0
- package/dist/lib/structures/GuildTemplate.js +126 -0
- package/dist/lib/structures/Integration.d.ts +54 -0
- package/dist/lib/structures/Integration.js +156 -0
- package/dist/lib/structures/Interaction.d.ts +40 -0
- package/dist/lib/structures/Interaction.js +90 -0
- package/dist/lib/structures/InteractionResolvedChannel.d.ts +28 -0
- package/dist/lib/structures/InteractionResolvedChannel.js +45 -0
- package/dist/lib/structures/Invite.d.ts +64 -0
- package/dist/lib/structures/Invite.js +193 -0
- package/dist/lib/structures/InviteGuild.d.ts +52 -0
- package/dist/lib/structures/InviteGuild.js +88 -0
- package/dist/lib/structures/MediaChannel.d.ts +11 -0
- package/dist/lib/structures/MediaChannel.js +19 -0
- package/dist/lib/structures/Member.d.ts +122 -0
- package/dist/lib/structures/Member.js +255 -0
- package/dist/lib/structures/Message.d.ts +194 -0
- package/dist/lib/structures/Message.js +477 -0
- package/dist/lib/structures/ModalSubmitInteraction.d.ts +128 -0
- package/dist/lib/structures/ModalSubmitInteraction.js +240 -0
- package/dist/lib/structures/OAuthApplication.d.ts +79 -0
- package/dist/lib/structures/OAuthApplication.js +210 -0
- package/dist/lib/structures/OAuthGuild.d.ts +35 -0
- package/dist/lib/structures/OAuthGuild.js +61 -0
- package/dist/lib/structures/PartialApplication.d.ts +30 -0
- package/dist/lib/structures/PartialApplication.js +67 -0
- package/dist/lib/structures/Permission.d.ts +21 -0
- package/dist/lib/structures/Permission.js +68 -0
- package/dist/lib/structures/PermissionOverwrite.d.ts +26 -0
- package/dist/lib/structures/PermissionOverwrite.js +49 -0
- package/dist/lib/structures/PingInteraction.d.ts +16 -0
- package/dist/lib/structures/PingInteraction.js +26 -0
- package/dist/lib/structures/Poll.d.ts +28 -0
- package/dist/lib/structures/Poll.js +78 -0
- package/dist/lib/structures/PrivateChannel.d.ts +90 -0
- package/dist/lib/structures/PrivateChannel.js +131 -0
- package/dist/lib/structures/PrivateThreadChannel.d.ts +18 -0
- package/dist/lib/structures/PrivateThreadChannel.js +27 -0
- package/dist/lib/structures/PublicThreadChannel.d.ts +21 -0
- package/dist/lib/structures/PublicThreadChannel.js +37 -0
- package/dist/lib/structures/Role.d.ts +52 -0
- package/dist/lib/structures/Role.js +137 -0
- package/dist/lib/structures/SKU.d.ts +32 -0
- package/dist/lib/structures/SKU.js +53 -0
- package/dist/lib/structures/StageChannel.d.ts +33 -0
- package/dist/lib/structures/StageChannel.js +44 -0
- package/dist/lib/structures/StageInstance.d.ts +36 -0
- package/dist/lib/structures/StageInstance.js +94 -0
- package/dist/lib/structures/Team.d.ts +22 -0
- package/dist/lib/structures/Team.js +67 -0
- package/dist/lib/structures/TestEntitlement.d.ts +10 -0
- package/dist/lib/structures/TestEntitlement.js +21 -0
- package/dist/lib/structures/TextChannel.d.ts +34 -0
- package/dist/lib/structures/TextChannel.js +46 -0
- package/dist/lib/structures/TextableChannel.d.ts +158 -0
- package/dist/lib/structures/TextableChannel.js +276 -0
- package/dist/lib/structures/TextableVoiceChannel.d.ts +39 -0
- package/dist/lib/structures/TextableVoiceChannel.js +81 -0
- package/dist/lib/structures/ThreadChannel.d.ts +159 -0
- package/dist/lib/structures/ThreadChannel.js +295 -0
- package/dist/lib/structures/ThreadOnlyChannel.d.ts +99 -0
- package/dist/lib/structures/ThreadOnlyChannel.js +233 -0
- package/dist/lib/structures/ThreadableChannel.d.ts +36 -0
- package/dist/lib/structures/ThreadableChannel.js +58 -0
- package/dist/lib/structures/UnavailableGuild.d.ts +11 -0
- package/dist/lib/structures/UnavailableGuild.js +21 -0
- package/dist/lib/structures/User.d.ts +82 -0
- package/dist/lib/structures/User.js +168 -0
- package/dist/lib/structures/VoiceChannel.d.ts +20 -0
- package/dist/lib/structures/VoiceChannel.js +35 -0
- package/dist/lib/structures/VoiceState.d.ts +51 -0
- package/dist/lib/structures/VoiceState.js +140 -0
- package/dist/lib/structures/Webhook.d.ts +129 -0
- package/dist/lib/structures/Webhook.js +206 -0
- package/dist/lib/types/applications.d.ts +466 -0
- package/dist/lib/types/audit-log.d.ts +122 -0
- package/dist/lib/types/auto-moderation.d.ts +99 -0
- package/dist/lib/types/channels.d.ts +1244 -0
- package/dist/lib/types/client.d.ts +228 -0
- package/dist/lib/types/events.d.ts +265 -0
- package/dist/lib/types/gateway-raw.d.ts +584 -0
- package/dist/lib/types/gateway.d.ts +351 -0
- package/dist/lib/types/guild-template.d.ts +33 -0
- package/dist/lib/types/guilds.d.ts +855 -0
- package/dist/lib/types/index.d.ts +18 -0
- package/dist/lib/types/interactions.d.ts +377 -0
- package/dist/lib/types/json.d.ts +742 -0
- package/dist/lib/types/misc.d.ts +28 -0
- package/dist/lib/types/oauth.d.ts +201 -0
- package/dist/lib/types/request-handler.d.ts +52 -0
- package/dist/lib/types/scheduled-events.d.ts +88 -0
- package/dist/lib/types/shared.d.ts +9 -0
- package/dist/lib/types/users.d.ts +45 -0
- package/dist/lib/types/voice.d.ts +45 -0
- package/dist/lib/types/webhooks.d.ts +74 -0
- package/dist/lib/util/Collection.d.ts +47 -0
- package/dist/lib/util/Collection.js +78 -0
- package/dist/lib/util/Errors.d.ts +29 -0
- package/dist/lib/util/Errors.js +56 -0
- package/dist/lib/util/Routes.d.ts +127 -0
- package/dist/lib/util/Routes.js +248 -0
- package/dist/lib/util/SimpleCollection.d.ts +12 -0
- package/dist/lib/util/SimpleCollection.js +81 -0
- package/dist/lib/util/TypedCollection.d.ts +24 -0
- package/dist/lib/util/TypedCollection.js +76 -0
- package/dist/lib/util/TypedEmitter.d.ts +19 -0
- package/dist/lib/util/TypedEmitter.js +19 -0
- package/dist/lib/util/Util.d.ts +58 -0
- package/dist/lib/util/Util.js +535 -0
- package/dist/lib/util/interactions/InteractionOptionsWrapper.d.ts +170 -0
- package/dist/lib/util/interactions/InteractionOptionsWrapper.js +213 -0
- package/dist/lib/util/interactions/MessageInteractionResponse.d.ts +24 -0
- package/dist/lib/util/interactions/MessageInteractionResponse.js +28 -0
- package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.d.ts +24 -0
- package/dist/lib/util/interactions/ModalSubmitInteractionComponentsWrapper.js +34 -0
- package/dist/lib/util/interactions/SelectMenuValuesWrapper.d.ts +60 -0
- package/dist/lib/util/interactions/SelectMenuValuesWrapper.js +124 -0
- package/dist/package.json +1 -1
- 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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
|