seyfert 4.5.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/Routes/cdn.d.ts +2 -2
- package/lib/api/Routes/guilds.d.ts +2 -2
- package/lib/api/Routes/invites.d.ts +2 -2
- package/lib/api/api.d.ts +20 -8
- package/lib/api/api.js +198 -44
- package/lib/api/shared.d.ts +30 -1
- package/lib/api/utils/constants.d.ts +1 -1
- package/lib/api/utils/constants.js +1 -1
- package/lib/api/utils/utils.d.ts +2 -1
- package/lib/api/utils/utils.js +1 -1
- package/lib/builders/Attachment.d.ts +1 -1
- package/lib/builders/Attachment.js +30 -8
- package/lib/builders/MediaGallery.d.ts +2 -2
- package/lib/builders/MediaGallery.js +10 -0
- package/lib/builders/Modal.d.ts +18 -8
- package/lib/builders/Modal.js +36 -7
- package/lib/builders/Poll.js +18 -0
- package/lib/builders/RadioGroup.d.ts +4 -3
- package/lib/builders/RadioGroup.js +24 -3
- package/lib/builders/SelectMenu.d.ts +8 -6
- package/lib/builders/SelectMenu.js +24 -3
- package/lib/builders/types.d.ts +3 -2
- package/lib/cache/adapters/default.d.ts +1 -1
- package/lib/cache/adapters/default.js +23 -26
- package/lib/cache/adapters/limited.d.ts +1 -0
- package/lib/cache/adapters/limited.js +47 -33
- package/lib/cache/index.d.ts +19 -25
- package/lib/cache/index.js +58 -6
- package/lib/cache/resources/bans.d.ts +1 -1
- package/lib/cache/resources/bans.js +4 -4
- package/lib/cache/resources/channels.d.ts +1 -1
- package/lib/cache/resources/channels.js +4 -4
- package/lib/cache/resources/default/base.d.ts +1 -1
- package/lib/cache/resources/default/base.js +8 -8
- package/lib/cache/resources/default/guild-based.d.ts +5 -5
- package/lib/cache/resources/default/guild-based.js +29 -16
- package/lib/cache/resources/default/guild-related.d.ts +5 -5
- package/lib/cache/resources/default/guild-related.js +14 -14
- package/lib/cache/resources/emojis.d.ts +1 -1
- package/lib/cache/resources/emojis.js +4 -4
- package/lib/cache/resources/guilds.js +28 -15
- package/lib/cache/resources/members.d.ts +1 -1
- package/lib/cache/resources/members.js +6 -6
- package/lib/cache/resources/messages.d.ts +7 -2
- package/lib/cache/resources/messages.js +43 -20
- package/lib/cache/resources/overwrites.d.ts +1 -1
- package/lib/cache/resources/overwrites.js +5 -8
- package/lib/cache/resources/roles.d.ts +1 -1
- package/lib/cache/resources/roles.js +4 -4
- package/lib/cache/resources/stickers.d.ts +1 -1
- package/lib/cache/resources/stickers.js +4 -4
- package/lib/cache/resources/users.js +4 -4
- package/lib/cache/resources/voice-states.d.ts +1 -1
- package/lib/cache/resources/voice-states.js +4 -4
- package/lib/client/base.d.ts +83 -24
- package/lib/client/base.js +594 -39
- package/lib/client/client.d.ts +28 -3
- package/lib/client/client.js +33 -9
- package/lib/client/collectors.d.ts +9 -8
- package/lib/client/collectors.js +19 -52
- package/lib/client/httpclient.d.ts +3 -0
- package/lib/client/index.d.ts +3 -1
- package/lib/client/index.js +4 -0
- package/lib/client/intents.d.ts +3 -0
- package/lib/client/intents.js +9 -0
- package/lib/client/plugins/api.d.ts +4 -0
- package/lib/client/plugins/api.js +550 -0
- package/lib/client/plugins/errors.d.ts +25 -0
- package/lib/client/plugins/errors.js +79 -0
- package/lib/client/plugins/order.d.ts +10 -0
- package/lib/client/plugins/order.js +32 -0
- package/lib/client/plugins/registry.d.ts +273 -0
- package/lib/client/plugins/registry.js +868 -0
- package/lib/client/plugins/shared.d.ts +23 -0
- package/lib/client/plugins/shared.js +193 -0
- package/lib/client/plugins/types.d.ts +398 -0
- package/lib/client/plugins/types.js +8 -0
- package/lib/client/plugins.d.ts +78 -0
- package/lib/client/plugins.js +558 -0
- package/lib/client/transformers.d.ts +33 -33
- package/lib/client/workerclient.d.ts +10 -1
- package/lib/client/workerclient.js +27 -17
- package/lib/collection.d.ts +10 -8
- package/lib/collection.js +19 -25
- package/lib/commands/applications/chat.d.ts +20 -18
- package/lib/commands/applications/chat.js +39 -14
- package/lib/commands/applications/chatcontext.d.ts +23 -15
- package/lib/commands/applications/chatcontext.js +23 -2
- package/lib/commands/applications/entryPoint.d.ts +4 -3
- package/lib/commands/applications/entryPoint.js +1 -1
- package/lib/commands/applications/entrycontext.d.ts +7 -9
- package/lib/commands/applications/entrycontext.js +3 -1
- package/lib/commands/applications/menu.d.ts +4 -3
- package/lib/commands/applications/menucontext.d.ts +7 -9
- package/lib/commands/applications/menucontext.js +3 -1
- package/lib/commands/applications/options.d.ts +23 -23
- package/lib/commands/applications/shared.d.ts +39 -17
- package/lib/commands/decorators.d.ts +50 -38
- package/lib/commands/decorators.js +15 -5
- package/lib/commands/handle.d.ts +19 -8
- package/lib/commands/handle.js +224 -143
- package/lib/commands/handler.d.ts +21 -8
- package/lib/commands/handler.js +157 -69
- package/lib/commands/index.d.ts +1 -0
- package/lib/commands/optionresolver.d.ts +2 -2
- package/lib/common/it/colors.js +12 -2
- package/lib/common/it/error.d.ts +9 -0
- package/lib/common/it/error.js +8 -0
- package/lib/common/it/fake-promise.d.ts +4 -0
- package/lib/common/it/fake-promise.js +10 -0
- package/lib/common/it/formatter.d.ts +14 -11
- package/lib/common/it/formatter.js +4 -3
- package/lib/common/it/logger.d.ts +7 -1
- package/lib/common/it/logger.js +24 -6
- package/lib/common/it/utils.d.ts +6 -8
- package/lib/common/it/utils.js +44 -42
- package/lib/common/shorters/application.d.ts +3 -3
- package/lib/common/shorters/application.js +3 -2
- package/lib/common/shorters/bans.d.ts +8 -4
- package/lib/common/shorters/bans.js +13 -5
- package/lib/common/shorters/channels.d.ts +4 -4
- package/lib/common/shorters/channels.js +4 -4
- package/lib/common/shorters/emojis.js +1 -0
- package/lib/common/shorters/guilds.d.ts +8 -8
- package/lib/common/shorters/guilds.js +14 -31
- package/lib/common/shorters/interaction.d.ts +1 -1
- package/lib/common/shorters/invites.d.ts +201 -201
- package/lib/common/shorters/members.d.ts +7 -7
- package/lib/common/shorters/members.js +13 -14
- package/lib/common/shorters/messages.d.ts +2 -2
- package/lib/common/shorters/soundboard.d.ts +5 -5
- package/lib/common/shorters/users.d.ts +1 -1
- package/lib/common/shorters/webhook.d.ts +3 -2
- package/lib/common/shorters/webhook.js +0 -7
- package/lib/common/types/options.d.ts +4 -0
- package/lib/common/types/util.d.ts +8 -0
- package/lib/common/types/write.d.ts +2 -1
- package/lib/components/BaseSelectMenuComponent.d.ts +1 -1
- package/lib/components/BaseSelectMenuComponent.js +1 -1
- package/lib/components/ButtonComponent.d.ts +3 -3
- package/lib/components/ChannelSelectMenuComponent.d.ts +2 -2
- package/lib/components/File.d.ts +1 -1
- package/lib/components/MediaGallery.d.ts +1 -1
- package/lib/components/MentionableSelectMenuComponent.d.ts +1 -1
- package/lib/components/RoleSelectMenuComponent.d.ts +1 -1
- package/lib/components/Separator.d.ts +1 -1
- package/lib/components/StringSelectMenuComponent.d.ts +1 -1
- package/lib/components/TextInputComponent.d.ts +1 -1
- package/lib/components/Thumbnail.d.ts +1 -1
- package/lib/components/UserSelectMenuComponent.d.ts +1 -1
- package/lib/components/componentcommand.d.ts +8 -7
- package/lib/components/componentcontext.d.ts +24 -36
- package/lib/components/componentcontext.js +7 -17
- package/lib/components/handler.d.ts +17 -7
- package/lib/components/handler.js +108 -49
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +1 -0
- package/lib/components/interactioncontext.d.ts +45 -0
- package/lib/components/interactioncontext.js +93 -0
- package/lib/components/modalcommand.d.ts +5 -4
- package/lib/components/modalcontext.d.ts +39 -20
- package/lib/components/modalcontext.js +59 -6
- package/lib/events/event.d.ts +9 -3
- package/lib/events/handler.d.ts +51 -6
- package/lib/events/handler.js +165 -36
- package/lib/events/hooks/application_command.d.ts +1 -1
- package/lib/events/hooks/auto_moderation.d.ts +2 -2
- package/lib/events/hooks/guild.d.ts +150 -150
- package/lib/events/hooks/interactions.d.ts +1 -1
- package/lib/events/hooks/invite.d.ts +20 -20
- package/lib/events/hooks/message.d.ts +27 -27
- package/lib/events/hooks/presence.d.ts +11 -11
- package/lib/events/hooks/soundboard.d.ts +6 -6
- package/lib/events/hooks/stage.d.ts +2 -2
- package/lib/events/hooks/subscriptions.d.ts +3 -3
- package/lib/events/hooks/thread.d.ts +30 -30
- package/lib/events/hooks/voice.d.ts +3 -4
- package/lib/events/hooks/voice.js +2 -1
- package/lib/events/utils.d.ts +4 -0
- package/lib/events/utils.js +59 -0
- package/lib/index.d.ts +9 -4
- package/lib/index.js +13 -8
- package/lib/langs/handler.d.ts +14 -11
- package/lib/langs/handler.js +46 -9
- package/lib/langs/router.d.ts +10 -3
- package/lib/structures/Application.d.ts +1 -1
- package/lib/structures/Emoji.d.ts +3 -3
- package/lib/structures/Emoji.js +2 -2
- package/lib/structures/Guild.d.ts +154 -154
- package/lib/structures/GuildBan.d.ts +4 -4
- package/lib/structures/GuildBan.js +3 -3
- package/lib/structures/GuildMember.d.ts +7 -7
- package/lib/structures/GuildMember.js +28 -7
- package/lib/structures/GuildRole.d.ts +1 -1
- package/lib/structures/GuildRole.js +2 -2
- package/lib/structures/Interaction.d.ts +11 -9
- package/lib/structures/Interaction.js +33 -12
- package/lib/structures/Message.d.ts +21 -14
- package/lib/structures/Message.js +29 -14
- package/lib/structures/User.d.ts +1 -1
- package/lib/structures/VoiceState.d.ts +4 -0
- package/lib/structures/VoiceState.js +13 -1
- package/lib/structures/Webhook.d.ts +9 -1
- package/lib/structures/Webhook.js +4 -1
- package/lib/structures/channels.d.ts +148 -134
- package/lib/structures/channels.js +27 -26
- package/lib/structures/extra/BitField.d.ts +4 -4
- package/lib/structures/extra/BitField.js +20 -4
- package/lib/structures/extra/DiscordBase.js +1 -1
- package/lib/structures/extra/Permissions.d.ts +2 -4
- package/lib/structures/extra/Permissions.js +1 -17
- package/lib/types/payloads/_interactions/responses.d.ts +2 -2
- package/lib/types/payloads/components.d.ts +4 -4
- package/lib/websocket/SharedTypes.d.ts +4 -4
- package/lib/websocket/constants/index.d.ts +1 -1
- package/lib/websocket/constants/index.js +3 -2
- package/lib/websocket/discord/events/memberUpdate.js +2 -2
- package/lib/websocket/discord/heartbeater.d.ts +1 -0
- package/lib/websocket/discord/heartbeater.js +7 -0
- package/lib/websocket/discord/shard.d.ts +2 -2
- package/lib/websocket/discord/shard.js +15 -13
- package/lib/websocket/discord/sharder.d.ts +8 -7
- package/lib/websocket/discord/sharder.js +25 -5
- package/lib/websocket/discord/shared.d.ts +19 -6
- package/lib/websocket/discord/socket/custom.js +5 -0
- package/lib/websocket/discord/worker.d.ts +1 -0
- package/lib/websocket/discord/worker.js +2 -0
- package/lib/websocket/discord/workermanager.d.ts +25 -11
- package/lib/websocket/discord/workermanager.js +41 -10
- package/package.json +12 -16
|
@@ -8,10 +8,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.DirectoryChannel = exports.NewsChannel = exports.CategoryChannel = exports.ThreadChannel = exports.ForumChannel = exports.MediaChannel = exports.StageChannel = exports.VoiceChannel = exports.DMChannel = exports.TextGuildChannel = exports.WebhookChannelMethods = exports.WebhookGuildMethods = exports.VoiceChannelMethods = exports.ThreadOnlyMethods = exports.TopicableGuildChannel = exports.TextBaseGuildChannel = exports.MessagesMethods = exports.BaseGuildChannel = exports.BaseChannel = exports.BaseNoEditableChannel = void 0;
|
|
10
10
|
exports.channelFrom = channelFrom;
|
|
11
|
-
const __1 = require("..");
|
|
12
11
|
const builders_1 = require("../builders");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
12
|
+
const transformers_1 = require("../client/transformers");
|
|
13
|
+
const formatter_1 = require("../common/it/formatter");
|
|
14
|
+
const utils_1 = require("../common/it/utils");
|
|
15
15
|
const mixer_1 = require("../deps/mixer");
|
|
16
16
|
const types_1 = require("../types");
|
|
17
17
|
const DiscordBase_1 = require("./extra/DiscordBase");
|
|
@@ -24,7 +24,7 @@ class BaseNoEditableChannel extends DiscordBase_1.DiscordBase {
|
|
|
24
24
|
}
|
|
25
25
|
/** The URL to the channel */
|
|
26
26
|
get url() {
|
|
27
|
-
return
|
|
27
|
+
return formatter_1.Formatter.channelLink(this.id);
|
|
28
28
|
}
|
|
29
29
|
fetch(mode = 'flow') {
|
|
30
30
|
switch (mode) {
|
|
@@ -39,7 +39,7 @@ class BaseNoEditableChannel extends DiscordBase_1.DiscordBase {
|
|
|
39
39
|
return this.client.channels.delete(this.id, { reason });
|
|
40
40
|
}
|
|
41
41
|
toString() {
|
|
42
|
-
return
|
|
42
|
+
return formatter_1.Formatter.channelMention(this.id);
|
|
43
43
|
}
|
|
44
44
|
isStage() {
|
|
45
45
|
return this.type === types_1.ChannelType.GuildStageVoice;
|
|
@@ -77,6 +77,12 @@ class BaseNoEditableChannel extends DiscordBase_1.DiscordBase {
|
|
|
77
77
|
isGuildTextable() {
|
|
78
78
|
return !this.isDM() && this.isTextable();
|
|
79
79
|
}
|
|
80
|
+
isNamed() {
|
|
81
|
+
return typeof this.name === 'string';
|
|
82
|
+
}
|
|
83
|
+
isGuild() {
|
|
84
|
+
return !this.isDM();
|
|
85
|
+
}
|
|
80
86
|
isThreadOnly() {
|
|
81
87
|
return this.isForum() || this.isMedia();
|
|
82
88
|
}
|
|
@@ -148,7 +154,7 @@ class BaseGuildChannel extends BaseChannel {
|
|
|
148
154
|
}
|
|
149
155
|
}
|
|
150
156
|
get url() {
|
|
151
|
-
return
|
|
157
|
+
return formatter_1.Formatter.channelLink(this.id, this.guildId);
|
|
152
158
|
}
|
|
153
159
|
setPosition(position, reason) {
|
|
154
160
|
return this.edit({ position }, reason);
|
|
@@ -211,7 +217,7 @@ class MessagesMethods extends DiscordBase_1.DiscordBase {
|
|
|
211
217
|
const payload = {
|
|
212
218
|
allowed_mentions: self.options?.allowedMentions,
|
|
213
219
|
...body,
|
|
214
|
-
embeds: body.embeds?.map(x => (
|
|
220
|
+
embeds: body.embeds?.map(x => ('toJSON' in x ? x.toJSON() : x)),
|
|
215
221
|
components: body.components?.map(x => ('toJSON' in x ? x.toJSON() : x)) ?? undefined,
|
|
216
222
|
poll: poll ? (poll instanceof builders_1.PollBuilder ? poll.toJSON() : poll) : undefined,
|
|
217
223
|
};
|
|
@@ -251,32 +257,32 @@ exports.TextBaseGuildChannel = TextBaseGuildChannel = __decorate([
|
|
|
251
257
|
function channelFrom(data, client) {
|
|
252
258
|
switch (data.type) {
|
|
253
259
|
case types_1.ChannelType.GuildStageVoice:
|
|
254
|
-
return
|
|
260
|
+
return transformers_1.Transformers.StageChannel(client, data);
|
|
255
261
|
case types_1.ChannelType.GuildMedia:
|
|
256
|
-
return
|
|
262
|
+
return transformers_1.Transformers.MediaChannel(client, data);
|
|
257
263
|
case types_1.ChannelType.DM:
|
|
258
|
-
return
|
|
264
|
+
return transformers_1.Transformers.DMChannel(client, data);
|
|
259
265
|
case types_1.ChannelType.GuildForum:
|
|
260
|
-
return
|
|
266
|
+
return transformers_1.Transformers.ForumChannel(client, data);
|
|
261
267
|
case types_1.ChannelType.AnnouncementThread:
|
|
262
268
|
case types_1.ChannelType.PrivateThread:
|
|
263
269
|
case types_1.ChannelType.PublicThread:
|
|
264
|
-
return
|
|
270
|
+
return transformers_1.Transformers.ThreadChannel(client, data);
|
|
265
271
|
case types_1.ChannelType.GuildDirectory:
|
|
266
|
-
return
|
|
272
|
+
return transformers_1.Transformers.DirectoryChannel(client, data);
|
|
267
273
|
case types_1.ChannelType.GuildVoice:
|
|
268
|
-
return
|
|
274
|
+
return transformers_1.Transformers.VoiceChannel(client, data);
|
|
269
275
|
case types_1.ChannelType.GuildText:
|
|
270
|
-
return
|
|
276
|
+
return transformers_1.Transformers.TextGuildChannel(client, data);
|
|
271
277
|
case types_1.ChannelType.GuildCategory:
|
|
272
|
-
return
|
|
278
|
+
return transformers_1.Transformers.CategoryChannel(client, data);
|
|
273
279
|
case types_1.ChannelType.GuildAnnouncement:
|
|
274
|
-
return
|
|
280
|
+
return transformers_1.Transformers.NewsChannel(client, data);
|
|
275
281
|
default: {
|
|
276
282
|
if ('guild_id' in data) {
|
|
277
|
-
return
|
|
283
|
+
return transformers_1.Transformers.BaseGuildChannel(client, data);
|
|
278
284
|
}
|
|
279
|
-
return
|
|
285
|
+
return transformers_1.Transformers.BaseChannel(client, data);
|
|
280
286
|
}
|
|
281
287
|
}
|
|
282
288
|
}
|
|
@@ -335,19 +341,14 @@ class VoiceChannelMethods extends DiscordBase_1.DiscordBase {
|
|
|
335
341
|
states() {
|
|
336
342
|
if (!this.guildId)
|
|
337
343
|
return this.cache.adapter.isAsync ? Promise.resolve([]) : [];
|
|
338
|
-
return (0,
|
|
344
|
+
return (0, utils_1.fakePromise)(this.cache.voiceStates?.values(this.guildId) ??
|
|
339
345
|
(this.cache.adapter.isAsync ? Promise.resolve([]) : [])).then(states => {
|
|
340
346
|
return states.filter(state => state.channelId === this.id);
|
|
341
347
|
});
|
|
342
348
|
}
|
|
343
349
|
async members(force) {
|
|
344
|
-
const collection = new __1.Collection();
|
|
345
350
|
const states = await this.states();
|
|
346
|
-
|
|
347
|
-
const member = await state.member(force);
|
|
348
|
-
collection.set(member.id, member);
|
|
349
|
-
}
|
|
350
|
-
return collection;
|
|
351
|
+
return await Promise.all(states.map(state => state.member(force)));
|
|
351
352
|
}
|
|
352
353
|
}
|
|
353
354
|
exports.VoiceChannelMethods = VoiceChannelMethods;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type BitFieldResolvable<T extends object> = keyof T | bigint;
|
|
1
|
+
export type BitFieldResolvable<T extends object> = keyof T | number | bigint | string;
|
|
2
2
|
export declare class BitField<T extends object> {
|
|
3
3
|
static None: bigint;
|
|
4
4
|
Flags: Record<string, bigint>;
|
|
@@ -6,12 +6,12 @@ export declare class BitField<T extends object> {
|
|
|
6
6
|
constructor(bitfields?: BitFieldResolvable<T>);
|
|
7
7
|
set bits(bits: BitFieldResolvable<T>);
|
|
8
8
|
get bits(): bigint;
|
|
9
|
-
has(bits: BitFieldResolvable<T>[]): boolean;
|
|
9
|
+
has(bits: BitFieldResolvable<T> | BitFieldResolvable<T>[]): boolean;
|
|
10
10
|
missings(bits: BitFieldResolvable<T>[]): bigint[];
|
|
11
11
|
equals(other: BitFieldResolvable<T>[]): boolean;
|
|
12
|
-
keys(bits?: BitFieldResolvable<T>[]):
|
|
12
|
+
keys(bits?: BitFieldResolvable<T>[]): (keyof T)[];
|
|
13
13
|
values(bits?: BitFieldResolvable<T>[]): bigint[];
|
|
14
14
|
add(bits: BitFieldResolvable<T>[]): bigint;
|
|
15
15
|
remove(bits: BitFieldResolvable<T>[]): bigint;
|
|
16
|
-
resolve(bits: BitFieldResolvable<T> | BitFieldResolvable<T>[]): bigint;
|
|
16
|
+
resolve(bits: BitFieldResolvable<T> | BitFieldResolvable<T>[], _flags?: Record<string, bigint>): bigint;
|
|
17
17
|
}
|
|
@@ -16,7 +16,8 @@ class BitField {
|
|
|
16
16
|
return this.bit;
|
|
17
17
|
}
|
|
18
18
|
has(bits) {
|
|
19
|
-
const
|
|
19
|
+
const data = Array.isArray(bits) ? bits : [bits];
|
|
20
|
+
const bitsResolved = data.map(bit => this.resolve(bit));
|
|
20
21
|
return bitsResolved.every(bit => (this.bits & bit) === bit);
|
|
21
22
|
}
|
|
22
23
|
missings(bits) {
|
|
@@ -60,21 +61,36 @@ class BitField {
|
|
|
60
61
|
}
|
|
61
62
|
return this.bits;
|
|
62
63
|
}
|
|
63
|
-
resolve(bits) {
|
|
64
|
+
resolve(bits, _flags) {
|
|
65
|
+
const flags = _flags ?? this.Flags;
|
|
64
66
|
let bitsResult = 0n;
|
|
65
67
|
for (const bit of Array.isArray(bits) ? bits : [bits]) {
|
|
66
68
|
switch (typeof bit) {
|
|
67
69
|
case 'string':
|
|
68
|
-
|
|
70
|
+
if (Object.hasOwn(flags, bit)) {
|
|
71
|
+
bitsResult |= flags[bit];
|
|
72
|
+
}
|
|
73
|
+
else if (/^\d+$/.test(bit)) {
|
|
74
|
+
bitsResult |= BigInt(bit);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
throw new TypeError(`Cannot resolve bitfield: ${bit}`);
|
|
78
|
+
}
|
|
69
79
|
break;
|
|
70
80
|
case 'number':
|
|
81
|
+
if (!Number.isSafeInteger(bit) || bit < 0) {
|
|
82
|
+
throw new TypeError(`Cannot resolve bitfield: ${bit}`);
|
|
83
|
+
}
|
|
71
84
|
bitsResult |= BigInt(bit);
|
|
72
85
|
break;
|
|
73
86
|
case 'bigint':
|
|
87
|
+
if (bit < 0n) {
|
|
88
|
+
throw new TypeError(`Cannot resolve bitfield: ${bit}`);
|
|
89
|
+
}
|
|
74
90
|
bitsResult |= bit;
|
|
75
91
|
break;
|
|
76
92
|
default:
|
|
77
|
-
throw new TypeError(`Cannot resolve
|
|
93
|
+
throw new TypeError(`Cannot resolve bitfield: ${typeof bit === 'symbol' ? String(bit) : bit}`);
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
96
|
return bitsResult;
|
|
@@ -16,7 +16,7 @@ class DiscordBase extends Base_1.Base {
|
|
|
16
16
|
* Create a timestamp for the current object.
|
|
17
17
|
*/
|
|
18
18
|
get createdTimestamp() {
|
|
19
|
-
return
|
|
19
|
+
return (0, utils_1.snowflakeToTimestamp)(this.id);
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* createdAt gets the creation Date instace of the current object.
|
|
@@ -57,10 +57,8 @@ export declare class PermissionsBitField extends BitField<typeof PermissionFlags
|
|
|
57
57
|
};
|
|
58
58
|
static All: bigint;
|
|
59
59
|
constructor(bitfields?: BitFieldResolvable<typeof PermissionFlagsBits> | BitFieldResolvable<typeof PermissionFlagsBits>[]);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
strictHas(bits: BitFieldResolvable<typeof PermissionFlagsBits>[]): boolean;
|
|
63
|
-
resolve<T extends typeof PermissionFlagsBits>(bits: BitFieldResolvable<T> | BitFieldResolvable<T>[]): bigint;
|
|
60
|
+
has(bits: BitFieldResolvable<typeof PermissionFlagsBits> | BitFieldResolvable<typeof PermissionFlagsBits>[]): boolean;
|
|
61
|
+
strictHas(bits: BitFieldResolvable<typeof PermissionFlagsBits> | BitFieldResolvable<typeof PermissionFlagsBits>[]): boolean;
|
|
64
62
|
static resolve<T extends typeof PermissionFlagsBits>(bits: BitFieldResolvable<T> | BitFieldResolvable<T>[]): bigint;
|
|
65
63
|
toString(): string;
|
|
66
64
|
}
|
|
@@ -17,24 +17,8 @@ class PermissionsBitField extends BitField_1.BitField {
|
|
|
17
17
|
strictHas(bits) {
|
|
18
18
|
return super.has(bits);
|
|
19
19
|
}
|
|
20
|
-
resolve(bits) {
|
|
21
|
-
return (Array.isArray(bits) ? bits : [bits]).reduce((acc, cur) => acc | PermissionsBitField.resolve([cur]), BitField_1.BitField.None);
|
|
22
|
-
}
|
|
23
20
|
static resolve(bits) {
|
|
24
|
-
|
|
25
|
-
for (const bit of Array.isArray(bits) ? bits : [bits]) {
|
|
26
|
-
switch (typeof bit) {
|
|
27
|
-
case 'string':
|
|
28
|
-
bitsResult |= PermissionsBitField.resolve(types_1.PermissionFlagsBits[bit]);
|
|
29
|
-
break;
|
|
30
|
-
case 'bigint':
|
|
31
|
-
bitsResult |= bit;
|
|
32
|
-
break;
|
|
33
|
-
default:
|
|
34
|
-
throw new TypeError(`Cannot resolve permission: ${typeof bit === 'symbol' ? String(bit) : bit}`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return bitsResult;
|
|
21
|
+
return BitField_1.BitField.prototype.resolve(bits, types_1.PermissionFlagsBits);
|
|
38
22
|
}
|
|
39
23
|
toString() {
|
|
40
24
|
return this.bit.toString();
|
|
@@ -86,8 +86,8 @@ export declare enum InteractionResponseType {
|
|
|
86
86
|
* https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-interaction-callback-data-structure
|
|
87
87
|
*/
|
|
88
88
|
export type APIInteractionResponseCallbackData = Omit<RESTPostAPIWebhookWithTokenJSONBody, 'avatar_url' | 'username'>;
|
|
89
|
-
export interface APICommandAutocompleteInteractionResponseCallbackData {
|
|
90
|
-
choices?: APIApplicationCommandOptionChoice[];
|
|
89
|
+
export interface APICommandAutocompleteInteractionResponseCallbackData<ValueType extends number | string = number | string> {
|
|
90
|
+
choices?: APIApplicationCommandOptionChoice<ValueType>[];
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
93
|
* https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-response-object-modal
|
|
@@ -222,11 +222,11 @@ export interface APIBaseAutoPopulatedSelectMenuComponent<T extends ComponentType
|
|
|
222
222
|
/**
|
|
223
223
|
* https://discord.com/developers/docs/interactions/message-components#select-menus
|
|
224
224
|
*/
|
|
225
|
-
export interface APIStringSelectComponent extends APIBaseSelectMenuComponent<ComponentType.StringSelect> {
|
|
225
|
+
export interface APIStringSelectComponent<Value extends string = string> extends APIBaseSelectMenuComponent<ComponentType.StringSelect> {
|
|
226
226
|
/**
|
|
227
227
|
* Specified choices in a select menu; max 25
|
|
228
228
|
*/
|
|
229
|
-
options: APISelectMenuOption[];
|
|
229
|
+
options: APISelectMenuOption<Value>[];
|
|
230
230
|
/**
|
|
231
231
|
* Whether the string select is required to answer in a modal
|
|
232
232
|
*
|
|
@@ -278,7 +278,7 @@ export type APISelectMenuComponent = APIChannelSelectComponent | APIMentionableS
|
|
|
278
278
|
/**
|
|
279
279
|
* https://discord.com/developers/docs/interactions/message-components#select-menu-object-select-option-structure
|
|
280
280
|
*/
|
|
281
|
-
export interface APISelectMenuOption {
|
|
281
|
+
export interface APISelectMenuOption<Value extends string = string> {
|
|
282
282
|
/**
|
|
283
283
|
* The user-facing name of the option (max 100 chars)
|
|
284
284
|
*/
|
|
@@ -286,7 +286,7 @@ export interface APISelectMenuOption {
|
|
|
286
286
|
/**
|
|
287
287
|
* The dev-defined value of the option (max 100 chars)
|
|
288
288
|
*/
|
|
289
|
-
value:
|
|
289
|
+
value: Value;
|
|
290
290
|
/**
|
|
291
291
|
* An additional description of the option (max 100 chars)
|
|
292
292
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RestToKeys } from '../common';
|
|
2
|
-
import type { APIAuditLogEntry, APIAutoModerationRule, APIChannel, APIEntitlement, APIGuild, APIGuildMember, APIGuildScheduledEvent, APIStageInstance, APISubscription, APIUser, GatewayActivity, GatewayAutoModerationActionExecutionDispatchData, GatewayChannelPinsUpdateDispatchData, GatewayChannelUpdateDispatchData, GatewayDispatchEvents, GatewayEntitlementCreateDispatchData, GatewayGuildBanAddDispatchData, GatewayGuildBanRemoveDispatchData, GatewayGuildCreateDispatchData, GatewayGuildDeleteDispatchData, GatewayGuildEmojisUpdateDispatchData, GatewayGuildIntegrationsUpdateDispatchData, GatewayGuildMemberAddDispatchData, GatewayGuildMemberRemoveDispatchData, GatewayGuildMembersChunkDispatchData, GatewayGuildMemberUpdateDispatchData, GatewayGuildRoleCreateDispatchData, GatewayGuildRoleDeleteDispatchData, GatewayGuildRoleUpdateDispatchData, GatewayGuildScheduledEventUserRemoveDispatchData, GatewayGuildSoundboardSoundDeleteDispatchData, GatewayGuildSoundboardSoundsUpdateDispatchData, GatewayGuildStickersUpdateDispatchData, GatewayIntegrationCreateDispatchData, GatewayIntegrationDeleteDispatchData, GatewayInteractionCreateDispatchData, GatewayInviteCreateDispatchData, GatewayInviteDeleteDispatchData, GatewayMessageCreateDispatchData, GatewayMessageDeleteBulkDispatchData, GatewayMessageDeleteDispatchData, GatewayMessagePollVoteDispatchData, GatewayMessageReactionAddDispatchData, GatewayMessageReactionRemoveAllDispatchData, GatewayMessageReactionRemoveDispatchData, GatewayMessageReactionRemoveEmojiDispatchData, GatewayMessageUpdateDispatchData, GatewayPresenceUpdateData, GatewayPresenceUpdateDispatchData, GatewayReadyDispatchData, GatewayRequestGuildMembersDataWithQuery, GatewayRequestGuildMembersDataWithUserIds, GatewaySoundboardSoundsDispatchData, GatewayThreadCreateDispatchData, GatewayThreadDeleteDispatchData, GatewayThreadListSyncDispatchData, GatewayThreadMembersUpdateDispatchData, GatewayThreadMemberUpdateDispatchData, GatewayTypingStartDispatchData, GatewayUserUpdateDispatchData, GatewayVoiceChannelEffectSendDispachData, GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateData, GatewayWebhooksUpdateDispatchData, PresenceUpdateStatus } from '../types';
|
|
2
|
+
import type { APIAuditLogEntry, APIAutoModerationRule, APIChannel, APIEntitlement, APIGuild, APIGuildMember, APIGuildScheduledEvent, APIStageInstance, APISubscription, APIUser, GatewayActivity, GatewayAutoModerationActionExecutionDispatchData, GatewayChannelPinsUpdateDispatchData, GatewayChannelUpdateDispatchData, GatewayDispatchEvents, GatewayEntitlementCreateDispatchData, GatewayGuildBanAddDispatchData, GatewayGuildBanRemoveDispatchData, GatewayGuildCreateDispatchData, GatewayGuildDeleteDispatchData, GatewayGuildEmojisUpdateDispatchData, GatewayGuildIntegrationsUpdateDispatchData, GatewayGuildMemberAddDispatchData, GatewayGuildMemberRemoveDispatchData, GatewayGuildMembersChunkDispatchData, GatewayGuildMemberUpdateDispatchData, GatewayGuildRoleCreateDispatchData, GatewayGuildRoleDeleteDispatchData, GatewayGuildRoleUpdateDispatchData, GatewayGuildScheduledEventUserRemoveDispatchData, GatewayGuildSoundboardSoundDeleteDispatchData, GatewayGuildSoundboardSoundsUpdateDispatchData, GatewayGuildStickersUpdateDispatchData, GatewayIntegrationCreateDispatchData, GatewayIntegrationDeleteDispatchData, GatewayInteractionCreateDispatchData, GatewayInviteCreateDispatchData, GatewayInviteDeleteDispatchData, GatewayMessageCreateDispatchData, GatewayMessageDeleteBulkDispatchData, GatewayMessageDeleteDispatchData, GatewayMessagePollVoteDispatchData, GatewayMessageReactionAddDispatchData, GatewayMessageReactionRemoveAllDispatchData, GatewayMessageReactionRemoveDispatchData, GatewayMessageReactionRemoveEmojiDispatchData, GatewayMessageUpdateDispatchData, GatewayPresenceUpdateData, GatewayPresenceUpdateDispatchData, GatewayReadyDispatchData, GatewayRequestGuildMembersDataWithQuery, GatewayRequestGuildMembersDataWithUserIds, GatewaySoundboardSoundsDispatchData, GatewayThreadCreateDispatchData, GatewayThreadDeleteDispatchData, GatewayThreadListSyncDispatchData, GatewayThreadMembersUpdateDispatchData, GatewayThreadMemberUpdateDispatchData, GatewayThreadUpdateDispatchData, GatewayTypingStartDispatchData, GatewayUserUpdateDispatchData, GatewayVoiceChannelEffectSendDispachData, GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateData, GatewayWebhooksUpdateDispatchData, PresenceUpdateStatus } from '../types';
|
|
3
3
|
import type { APISoundboardSound } from '../types/payloads/soundboard';
|
|
4
4
|
/** https://discord.com/developers/docs/topics/gateway-events#update-presence */
|
|
5
5
|
export interface StatusUpdate {
|
|
@@ -41,7 +41,7 @@ export interface Events {
|
|
|
41
41
|
[GatewayDispatchEvents.AutoModerationActionExecution]: GatewayAutoModerationActionExecutionDispatchData;
|
|
42
42
|
[GatewayDispatchEvents.ThreadCreate]: GatewayThreadCreateDispatchData;
|
|
43
43
|
[GatewayDispatchEvents.ThreadDelete]: GatewayThreadDeleteDispatchData;
|
|
44
|
-
[GatewayDispatchEvents.ThreadUpdate]:
|
|
44
|
+
[GatewayDispatchEvents.ThreadUpdate]: GatewayThreadUpdateDispatchData;
|
|
45
45
|
[GatewayDispatchEvents.ThreadListSync]: GatewayThreadListSyncDispatchData;
|
|
46
46
|
[GatewayDispatchEvents.ThreadMemberUpdate]: GatewayThreadMemberUpdateDispatchData;
|
|
47
47
|
[GatewayDispatchEvents.ThreadMembersUpdate]: GatewayThreadMembersUpdateDispatchData;
|
|
@@ -119,7 +119,7 @@ export type ChannelSameEvents = RestToKeys<[
|
|
|
119
119
|
GatewayDispatchEvents.ChannelDelete,
|
|
120
120
|
GatewayDispatchEvents.ChannelUpdate
|
|
121
121
|
]>;
|
|
122
|
-
export type
|
|
122
|
+
export type AutoModerationRuleEvents = RestToKeys<[
|
|
123
123
|
APIAutoModerationRule,
|
|
124
124
|
GatewayDispatchEvents.AutoModerationRuleCreate,
|
|
125
125
|
GatewayDispatchEvents.AutoModerationRuleDelete,
|
|
@@ -141,7 +141,7 @@ export type SoundboardSoundsEvents = RestToKeys<[
|
|
|
141
141
|
GatewayDispatchEvents.GuildSoundboardSoundCreate,
|
|
142
142
|
GatewayDispatchEvents.GuildSoundboardSoundUpdate
|
|
143
143
|
]>;
|
|
144
|
-
export type NormalizeEvents = Events &
|
|
144
|
+
export type NormalizeEvents = Events & AutoModerationRuleEvents & ChannelSameEvents & GuildScheduledSameEvents & GuildScheduledUserSameEvents & IntegrationSameEvents & EntitlementEvents & PollVoteSameEvents & StageSameEvents & SubscriptionEvents & SoundboardSoundsEvents & {
|
|
145
145
|
RAW: GatewayDispatchEvents;
|
|
146
146
|
};
|
|
147
147
|
export type GatewayEvents = {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.WorkerManagerDefaults = exports.ShardManagerDefaults = exports.properties = exports.COMPRESS = void 0;
|
|
4
4
|
const COMPRESS = false;
|
|
5
5
|
exports.COMPRESS = COMPRESS;
|
|
6
|
-
const propertiesVersion = 'Seyfert
|
|
6
|
+
const propertiesVersion = 'Seyfert v5.0.0 (https://seyfert.dev)';
|
|
7
7
|
const properties = {
|
|
8
8
|
os: process.platform,
|
|
9
9
|
browser: propertiesVersion,
|
|
@@ -26,6 +26,7 @@ const ShardManagerDefaults = {
|
|
|
26
26
|
exports.ShardManagerDefaults = ShardManagerDefaults;
|
|
27
27
|
const WorkerManagerDefaults = {
|
|
28
28
|
...ShardManagerDefaults,
|
|
29
|
+
mode: 'threads',
|
|
29
30
|
shardsPerWorker: 16,
|
|
30
31
|
};
|
|
31
32
|
exports.WorkerManagerDefaults = WorkerManagerDefaults;
|
|
@@ -9,8 +9,8 @@ class MemberUpdateHandler {
|
|
|
9
9
|
return true;
|
|
10
10
|
}
|
|
11
11
|
const data = this.guildMemberUpdate.get(member.user.id);
|
|
12
|
-
if (this.usersEqual(data.member.user, member.user)) {
|
|
13
|
-
return
|
|
12
|
+
if (this.usersEqual(data.member.user, member.user) && this.membersEquals(data.member, member)) {
|
|
13
|
+
return false;
|
|
14
14
|
}
|
|
15
15
|
clearTimeout(data.timeout);
|
|
16
16
|
this.setMember(member);
|
|
@@ -14,4 +14,5 @@ export declare class Heartbeater {
|
|
|
14
14
|
constructor(sendMethod: (workerId: number, data: WorkerHeartbeaterMessages) => Awaitable<void>, interval: number);
|
|
15
15
|
register(workerId: number, recreate: (workerId: number) => Awaitable<void>): void;
|
|
16
16
|
acknowledge(workerId: number): void;
|
|
17
|
+
unregister(workerId: number): void;
|
|
17
18
|
}
|
|
@@ -31,5 +31,12 @@ class Heartbeater {
|
|
|
31
31
|
return;
|
|
32
32
|
heartbeat.ack = true;
|
|
33
33
|
}
|
|
34
|
+
unregister(workerId) {
|
|
35
|
+
const heartbeat = this.store.get(workerId);
|
|
36
|
+
if (!heartbeat)
|
|
37
|
+
return;
|
|
38
|
+
clearInterval(heartbeat.interval);
|
|
39
|
+
this.store.delete(workerId);
|
|
40
|
+
}
|
|
34
41
|
}
|
|
35
42
|
exports.Heartbeater = Heartbeater;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Logger, type
|
|
1
|
+
import { Logger, type MakePresent } from '../../common';
|
|
2
2
|
import { type APIGuildMember, type GatewayGuildMembersChunkPresence, type GatewayReceivePayload, type GatewaySendPayload } from '../../types';
|
|
3
3
|
import type { GatewayRequestGuildMembersDataWithQuery, GatewayRequestGuildMembersDataWithUserIds } from '../../types/gateway';
|
|
4
4
|
import { DynamicBucket } from '../structures';
|
|
@@ -27,7 +27,7 @@ export declare class Shard {
|
|
|
27
27
|
bucket: DynamicBucket;
|
|
28
28
|
offlineSendQueue: ((_?: unknown) => void)[];
|
|
29
29
|
pendingGuilds?: Set<string>;
|
|
30
|
-
options:
|
|
30
|
+
options: MakePresent<ShardOptions, 'properties' | 'ratelimitOptions' | 'reconnectTimeout' | 'connectionTimeout'>;
|
|
31
31
|
isReady: boolean;
|
|
32
32
|
connectionTimeout?: NodeJS.Timeout;
|
|
33
33
|
private requestGuildMembersChunk;
|
|
@@ -96,7 +96,7 @@ class Shard {
|
|
|
96
96
|
this.handleMessage(data);
|
|
97
97
|
};
|
|
98
98
|
this.websocket.onclose = (event) => this.handleClosed(event);
|
|
99
|
-
this.websocket.onerror = (event) => this.logger.error(event);
|
|
99
|
+
this.websocket.onerror = (event) => this.logger.error(`Shard #${this.id}`, event);
|
|
100
100
|
this.websocket.onopen = () => {
|
|
101
101
|
this.isConnecting = false;
|
|
102
102
|
this.heart.ack = true;
|
|
@@ -104,14 +104,16 @@ class Shard {
|
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
106
|
async send(force, message) {
|
|
107
|
-
this.debugger
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
if (this.debugger) {
|
|
108
|
+
this.debugger.info(`[Shard #${this.id}] Sending: ${types_1.GatewayOpcodes[message.op]} ${JSON.stringify(message.d, (_, value) => {
|
|
109
|
+
if (typeof value === 'string')
|
|
110
|
+
return value.replaceAll(this.options.token, v => {
|
|
111
|
+
const split = v.split('.');
|
|
112
|
+
return `${split[0]}.${'*'.repeat(split[1].length)}.${'*'.repeat(split[2].length)}`;
|
|
113
|
+
});
|
|
114
|
+
return value;
|
|
115
|
+
}, 1)}`);
|
|
116
|
+
}
|
|
115
117
|
await this.checkOffline(force);
|
|
116
118
|
await this.bucket.acquire(force);
|
|
117
119
|
await this.checkOffline(force);
|
|
@@ -220,7 +222,7 @@ class Shard {
|
|
|
220
222
|
case types_1.GatewayOpcodes.InvalidSession: {
|
|
221
223
|
if (packet.d) {
|
|
222
224
|
if (!this.resumable) {
|
|
223
|
-
return this.logger.fatal(
|
|
225
|
+
return this.logger.fatal(`Shard #${this.id} received a non-resumable InvalidSession, cannot resume.`);
|
|
224
226
|
}
|
|
225
227
|
return this.resume();
|
|
226
228
|
}
|
|
@@ -383,7 +385,7 @@ class Shard {
|
|
|
383
385
|
this.isReady = false;
|
|
384
386
|
clearInterval(this.heart.nodeInterval);
|
|
385
387
|
clearTimeout(this.heart.ackTimeout);
|
|
386
|
-
this.logger.warn(
|
|
388
|
+
this.logger.warn(`Shard #${this.id} closed: ${shared_1.ShardSocketCloseCodes[close.code] ?? types_1.GatewayCloseCodes[close.code] ?? close.code} (${close.code})`, close.reason);
|
|
387
389
|
try {
|
|
388
390
|
switch (close.code) {
|
|
389
391
|
case shared_1.ShardSocketCloseCodes.Shutdown:
|
|
@@ -424,11 +426,11 @@ class Shard {
|
|
|
424
426
|
case types_1.GatewayCloseCodes.InvalidIntents:
|
|
425
427
|
case types_1.GatewayCloseCodes.InvalidShard:
|
|
426
428
|
case types_1.GatewayCloseCodes.ShardingRequired:
|
|
427
|
-
this.logger.fatal(
|
|
429
|
+
this.logger.fatal(`Shard #${this.id} cannot reconnect`);
|
|
428
430
|
break;
|
|
429
431
|
default:
|
|
430
432
|
{
|
|
431
|
-
this.logger.warn(
|
|
433
|
+
this.logger.warn(`Shard #${this.id} unknown close code (${close.code}), trying to reconnect anyways`);
|
|
432
434
|
await this.reconnect();
|
|
433
435
|
}
|
|
434
436
|
break;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Logger, type MakeRequired } from '../../common';
|
|
1
|
+
import { Logger, type MakePresent, type MakeRequired } from '../../common';
|
|
2
2
|
import type { MakeDeepPartial } from '../../common/types/util';
|
|
3
3
|
import { type GatewaySendPayload, type GatewayUpdatePresence, type GatewayVoiceStateUpdate } from '../../types';
|
|
4
4
|
import { ShardManagerDefaults } from '../constants';
|
|
@@ -7,7 +7,7 @@ import { Shard } from './shard';
|
|
|
7
7
|
import { type ShardData, type ShardManagerOptions, ShardSocketCloseCodes } from './shared';
|
|
8
8
|
export declare class ShardManager extends Map<number, Shard> {
|
|
9
9
|
connectQueue: ConnectQueue;
|
|
10
|
-
options:
|
|
10
|
+
options: MakePresent<ShardManagerOptions, keyof typeof ShardManagerDefaults>;
|
|
11
11
|
debugger?: Logger;
|
|
12
12
|
constructor(options: MakeDeepPartial<ShardManagerOptions, 'resharding'>);
|
|
13
13
|
get totalShards(): number;
|
|
@@ -24,11 +24,12 @@ export declare class ShardManager extends Map<number, Shard> {
|
|
|
24
24
|
forceIdentify(shardId: number): Promise<void>;
|
|
25
25
|
disconnect(shardId: number, code?: ShardSocketCloseCodes): void | undefined;
|
|
26
26
|
disconnectAll(code?: ShardSocketCloseCodes): void;
|
|
27
|
-
setShardPresence(shardId: number, payload: GatewayUpdatePresence['d']):
|
|
27
|
+
setShardPresence(shardId: number, payload: GatewayUpdatePresence['d']): Promise<boolean>;
|
|
28
28
|
setPresence(payload: GatewayUpdatePresence['d']): void;
|
|
29
|
-
joinVoice(guild_id: string, channel_id: string, options: Pick<GatewayVoiceStateUpdate['d'], 'self_deaf' | 'self_mute'>):
|
|
30
|
-
leaveVoice(guild_id: string):
|
|
31
|
-
requestChannelInfo(guild_id: string, fields: ('status' | 'voice_start_time')[]):
|
|
32
|
-
send<T extends GatewaySendPayload>(shardId: number, payload: T):
|
|
29
|
+
joinVoice(guild_id: string, channel_id: string, options: Pick<GatewayVoiceStateUpdate['d'], 'self_deaf' | 'self_mute'>): Promise<boolean>;
|
|
30
|
+
leaveVoice(guild_id: string): Promise<boolean>;
|
|
31
|
+
requestChannelInfo(guild_id: string, fields: ('status' | 'voice_start_time')[]): Promise<boolean>;
|
|
32
|
+
send<T extends GatewaySendPayload>(shardId: number, payload: T): Promise<boolean>;
|
|
33
|
+
private resolveSendPayload;
|
|
33
34
|
resume(shardId: number, shardData: MakeRequired<ShardData>): unknown;
|
|
34
35
|
}
|
|
@@ -69,7 +69,7 @@ class ShardManager extends Map {
|
|
|
69
69
|
properties: this.options.properties,
|
|
70
70
|
debugger: this.debugger,
|
|
71
71
|
compress: this.options.compress ?? false,
|
|
72
|
-
presence: this.options.presence?.(shardId
|
|
72
|
+
presence: this.options.presence?.(shardId),
|
|
73
73
|
connectionTimeout: this.options.connectionTimeout,
|
|
74
74
|
reconnectTimeout: this.options.reconnectTimeout,
|
|
75
75
|
});
|
|
@@ -229,15 +229,35 @@ class ShardManager extends Map {
|
|
|
229
229
|
},
|
|
230
230
|
});
|
|
231
231
|
}
|
|
232
|
-
send(shardId, payload) {
|
|
232
|
+
async send(shardId, payload) {
|
|
233
|
+
const resolvedPayload = await this.resolveSendPayload(shardId, payload);
|
|
234
|
+
if (!resolvedPayload)
|
|
235
|
+
return false;
|
|
233
236
|
if (workerData?.__USING_WATCHER__) {
|
|
234
|
-
|
|
237
|
+
if (!parentPort) {
|
|
238
|
+
throw new common_1.SeyfertError('INTERNAL_ERROR', {
|
|
239
|
+
metadata: { detail: 'Cannot send shard payload without a watcher parent port' },
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
parentPort.postMessage({
|
|
235
243
|
type: 'SEND_TO_SHARD',
|
|
236
244
|
shardId,
|
|
237
|
-
payload,
|
|
245
|
+
payload: resolvedPayload,
|
|
238
246
|
});
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
const shard = this.get(shardId);
|
|
250
|
+
if (!shard) {
|
|
251
|
+
throw new common_1.SeyfertError('INTERNAL_ERROR', { metadata: { detail: `Shard #${shardId} doesn't exist` } });
|
|
239
252
|
}
|
|
240
|
-
|
|
253
|
+
await shard.send(false, resolvedPayload);
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
async resolveSendPayload(shardId, payload) {
|
|
257
|
+
const result = await this.options.handleSendPayload?.(shardId, payload);
|
|
258
|
+
if (result === null)
|
|
259
|
+
return null;
|
|
260
|
+
return (result ?? payload);
|
|
241
261
|
}
|
|
242
262
|
resume(shardId, shardData) {
|
|
243
263
|
if (this.has(shardId))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InternalRuntimeConfig, InternalRuntimeConfigHTTP } from '../../client/base';
|
|
2
2
|
import type { Awaitable, DeepPartial, Logger } from '../../common';
|
|
3
|
-
import type { APIGatewayBotInfo, GatewayDispatchPayload, GatewayIntentBits, GatewayPresenceUpdateData } from '../../types';
|
|
3
|
+
import type { APIGatewayBotInfo, GatewayDispatchPayload, GatewayIntentBits, GatewayPresenceUpdateData, GatewaySendPayload } from '../../types';
|
|
4
4
|
import type { IdentifyProperties } from '../constants';
|
|
5
5
|
import type { WorkerMessages } from './worker';
|
|
6
6
|
export interface ShardDisconnectData {
|
|
@@ -30,6 +30,7 @@ export interface ShardManagerOptions extends ShardDetails {
|
|
|
30
30
|
* The payload handlers for messages on the shard.
|
|
31
31
|
*/
|
|
32
32
|
handlePayload(shardId: number, packet: GatewayDispatchPayload): unknown;
|
|
33
|
+
handleSendPayload?(shardId: number, payload: GatewaySendPayload): Awaitable<GatewaySendPayload | null | undefined | void>;
|
|
33
34
|
onShardDisconnect?(data: ShardDisconnectData): Awaitable<unknown>;
|
|
34
35
|
onShardReconnect?(data: ShardReconnectData): Awaitable<unknown>;
|
|
35
36
|
/**
|
|
@@ -39,7 +40,7 @@ export interface ShardManagerOptions extends ShardDetails {
|
|
|
39
40
|
/**
|
|
40
41
|
* Set a presence.
|
|
41
42
|
*/
|
|
42
|
-
presence?: (shardId: number
|
|
43
|
+
presence?: (shardId: number) => GatewayPresenceUpdateData;
|
|
43
44
|
compress?: boolean;
|
|
44
45
|
resharding?: {
|
|
45
46
|
/**
|
|
@@ -56,9 +57,7 @@ export interface CustomManagerAdapter {
|
|
|
56
57
|
postMessage(workerId: number, body: unknown): Awaitable<unknown>;
|
|
57
58
|
spawn(workerData: WorkerData, env: Record<string, any>): Awaitable<unknown>;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
-
mode: 'threads' | 'clusters' | 'custom';
|
|
61
|
-
adapter?: CustomManagerAdapter;
|
|
60
|
+
interface WorkerManagerOptionsBase extends Omit<ShardManagerOptions, 'handlePayload' | 'presence' | 'properties'> {
|
|
62
61
|
workers?: number;
|
|
63
62
|
/**
|
|
64
63
|
* @default 16
|
|
@@ -67,12 +66,25 @@ export interface WorkerManagerOptions extends Omit<ShardManagerOptions, 'handleP
|
|
|
67
66
|
workerProxy?: boolean;
|
|
68
67
|
/** @default 15000 */
|
|
69
68
|
heartbeaterInterval?: number;
|
|
70
|
-
path: string;
|
|
71
69
|
handlePayload?(shardId: number, workerId: number, packet: GatewayDispatchPayload): any;
|
|
70
|
+
presence?: (shardId: number, workerId: number) => GatewayPresenceUpdateData;
|
|
72
71
|
handleWorkerMessage?(message: WorkerMessages): any;
|
|
73
72
|
properties?: DeepPartial<NonNullable<ShardManagerOptions['properties']>>;
|
|
74
73
|
getRC?(): Awaitable<InternalRuntimeConfig | InternalRuntimeConfigHTTP>;
|
|
75
74
|
}
|
|
75
|
+
export type WorkerManagerOptions = (WorkerManagerOptionsBase & {
|
|
76
|
+
mode?: 'threads';
|
|
77
|
+
path: string;
|
|
78
|
+
adapter?: CustomManagerAdapter;
|
|
79
|
+
}) | (WorkerManagerOptionsBase & {
|
|
80
|
+
mode: 'clusters';
|
|
81
|
+
path: string;
|
|
82
|
+
adapter?: CustomManagerAdapter;
|
|
83
|
+
}) | (WorkerManagerOptionsBase & {
|
|
84
|
+
mode: 'custom';
|
|
85
|
+
adapter: CustomManagerAdapter;
|
|
86
|
+
path?: string;
|
|
87
|
+
});
|
|
76
88
|
export interface ShardData {
|
|
77
89
|
/** resume seq to resume connections */
|
|
78
90
|
resume_seq: number | null;
|
|
@@ -148,3 +160,4 @@ export interface WorkerData {
|
|
|
148
160
|
__USING_WATCHER__?: boolean;
|
|
149
161
|
resharding: boolean;
|
|
150
162
|
}
|
|
163
|
+
export {};
|