seyfert 3.2.7-dev-17041037679.0 → 3.2.7-dev-17387316482.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.
@@ -0,0 +1,12 @@
1
+ import { type APILabelComponent } from '../types';
2
+ import { BaseComponentBuilder } from './Base';
3
+ import type { TextInput } from './Modal';
4
+ import type { StringSelectMenu } from './SelectMenu';
5
+ export declare class Label extends BaseComponentBuilder<APILabelComponent> {
6
+ constructor({ component, ...data }?: Partial<APILabelComponent>);
7
+ component?: TextInput | StringSelectMenu;
8
+ setLabel(label: string): this;
9
+ setDescription(description: string): this;
10
+ setComponent(component: TextInput | StringSelectMenu): this;
11
+ toJSON(): APILabelComponent;
12
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Label = void 0;
4
+ const types_1 = require("../types");
5
+ const _1 = require(".");
6
+ const Base_1 = require("./Base");
7
+ class Label extends Base_1.BaseComponentBuilder {
8
+ constructor({ component, ...data } = {}) {
9
+ super({ type: types_1.ComponentType.Label, ...data });
10
+ if (component)
11
+ this.component = (0, _1.fromComponent)(component);
12
+ }
13
+ component;
14
+ setLabel(label) {
15
+ this.data.label = label;
16
+ return this;
17
+ }
18
+ setDescription(description) {
19
+ this.data.description = description;
20
+ return this;
21
+ }
22
+ setComponent(component) {
23
+ this.component = component;
24
+ return this;
25
+ }
26
+ toJSON() {
27
+ if (!this.component)
28
+ throw new Error('Cannot convert to JSON without a component.');
29
+ return {
30
+ ...this.data,
31
+ component: this.component.toJSON(),
32
+ };
33
+ }
34
+ }
35
+ exports.Label = Label;
@@ -1,8 +1,8 @@
1
1
  import type { RestOrArray } from '../common';
2
2
  import { type APIModalInteractionResponseCallbackData, type APITextInputComponent, type TextInputStyle } from '../types';
3
- import type { ActionRow } from './ActionRow';
4
3
  import { BaseComponentBuilder, type OptionValuesLength } from './Base';
5
- import type { ModalBuilderComponents, ModalSubmitCallback } from './types';
4
+ import { Label } from './Label';
5
+ import type { ModalSubmitCallback } from './types';
6
6
  /**
7
7
  * Represents a modal for user interactions.
8
8
  * @template T - The type of components allowed in the modal.
@@ -18,9 +18,9 @@ import type { ModalBuilderComponents, ModalSubmitCallback } from './types';
18
18
  * });
19
19
  * const json = modal.toJSON();
20
20
  */
21
- export declare class Modal<T extends ModalBuilderComponents = TextInput> {
21
+ export declare class Modal {
22
22
  data: Partial<APIModalInteractionResponseCallbackData>;
23
- components: ActionRow<T>[];
23
+ components: Label[];
24
24
  /**
25
25
  * Creates a new Modal instance.
26
26
  * @param data - Optional data for the modal.
@@ -31,13 +31,13 @@ export declare class Modal<T extends ModalBuilderComponents = TextInput> {
31
31
  * @param components - Components to be added to the modal.
32
32
  * @returns The current Modal instance.
33
33
  */
34
- addComponents(...components: RestOrArray<ActionRow<T>>): this;
34
+ addComponents(...components: RestOrArray<Label>): this;
35
35
  /**
36
36
  * Set the components to the modal.
37
37
  * @param component - The components to set into the modal.
38
38
  * @returns The current Modal instance.
39
39
  */
40
- setComponents(component: ActionRow<T>[]): this;
40
+ setComponents(component: Label[]): this;
41
41
  /**
42
42
  * Sets the title of the modal.
43
43
  * @param title - The title of the modal.
@@ -82,12 +82,6 @@ export declare class TextInput extends BaseComponentBuilder<APITextInputComponen
82
82
  * @returns The current TextInput instance.
83
83
  */
84
84
  setStyle(style: TextInputStyle): this;
85
- /**
86
- * Sets the label of the text input.
87
- * @param label - The label of the text input.
88
- * @returns The current TextInput instance.
89
- */
90
- setLabel(label: string): this;
91
85
  /**
92
86
  * Sets the placeholder of the text input.
93
87
  * @param placeholder - The placeholder text.
@@ -115,15 +115,6 @@ class TextInput extends Base_1.BaseComponentBuilder {
115
115
  this.data.style = style;
116
116
  return this;
117
117
  }
118
- /**
119
- * Sets the label of the text input.
120
- * @param label - The label of the text input.
121
- * @returns The current TextInput instance.
122
- */
123
- setLabel(label) {
124
- this.data.label = label;
125
- return this;
126
- }
127
118
  /**
128
119
  * Sets the placeholder of the text input.
129
120
  * @param placeholder - The placeholder text.
@@ -163,6 +163,12 @@ export declare class StringSelectMenu extends SelectMenu {
163
163
  * @returns The current StringSelectMenu instance.
164
164
  */
165
165
  setOptions(options: StringSelectOption[]): this;
166
+ /**
167
+ * Sets whether the string select is required to answer in a modal.
168
+ * @param required - Whether the string select is required to answer in a modal.
169
+ * @returns The current StringSelectMenu instance.
170
+ */
171
+ setRequired(required?: boolean): this;
166
172
  toJSON(): APIStringSelectComponent;
167
173
  }
168
174
  /**
@@ -236,6 +236,15 @@ class StringSelectMenu extends SelectMenu {
236
236
  this.data.options = options;
237
237
  return this;
238
238
  }
239
+ /**
240
+ * Sets whether the string select is required to answer in a modal.
241
+ * @param required - Whether the string select is required to answer in a modal.
242
+ * @returns The current StringSelectMenu instance.
243
+ */
244
+ setRequired(required = true) {
245
+ this.data.required = required;
246
+ return this;
247
+ }
239
248
  toJSON() {
240
249
  const { options, ...raw } = this.data;
241
250
  return {
@@ -20,6 +20,7 @@ const ActionRow_1 = require("./ActionRow");
20
20
  const Button_1 = require("./Button");
21
21
  const Container_1 = require("./Container");
22
22
  const File_1 = require("./File");
23
+ const Label_1 = require("./Label");
23
24
  const MediaGallery_1 = require("./MediaGallery");
24
25
  const Modal_1 = require("./Modal");
25
26
  const Section_1 = require("./Section");
@@ -78,5 +79,7 @@ function fromComponent(data) {
78
79
  return new Separator_1.Separator(data);
79
80
  case types_1.ComponentType.File:
80
81
  return new File_1.File(data);
82
+ case types_1.ComponentType.Label:
83
+ return new Label_1.Label(data);
81
84
  }
82
85
  }
@@ -3,6 +3,7 @@ import type { ActionRow } from './ActionRow';
3
3
  import type { Button } from './Button';
4
4
  import type { Container } from './Container';
5
5
  import type { File } from './File';
6
+ import { Label } from './Label';
6
7
  import type { MediaGallery } from './MediaGallery';
7
8
  import type { TextInput } from './Modal';
8
9
  import type { Section } from './Section';
@@ -18,11 +19,11 @@ export type ComponentRefreshCallback = () => any;
18
19
  export type ModalSubmitCallback<T = ModalSubmitInteraction> = (interaction: T) => any;
19
20
  export type ButtonLink = Omit<Button, 'setCustomId'>;
20
21
  export type ButtonID = Omit<Button, 'setURL'>;
21
- export type MessageBuilderComponents = FixedComponents<Button> | BuilderSelectMenus;
22
- export type ModalBuilderComponents = TextInput;
23
- export type ActionBuilderComponents = MessageBuilderComponents | TextInput;
24
- export type BuilderComponents = ActionRow | ActionBuilderComponents | Section<Button | Thumbnail> | Thumbnail | TextDisplay | Container | Separator | MediaGallery | File | TextInput;
25
- export type TopLevelBuilders = Exclude<BuilderComponents, Thumbnail | TextInput>;
22
+ export type MessageBuilderComponents = Exclude<TopLevelBuilders, Label>;
23
+ export type ModalBuilderComponents = Label;
24
+ export type ActionBuilderComponents = Button | BuilderSelectMenus;
25
+ export type BuilderComponents = ActionRow | BuilderSelectMenus | Button | Section<Button | Thumbnail> | Thumbnail | TextDisplay | Container | Separator | MediaGallery | File | TextInput | Label;
26
+ export type TopLevelBuilders = Exclude<BuilderComponents, Thumbnail | TextInput | Button | BuilderSelectMenus>;
26
27
  export type FixedComponents<T = Button> = T extends Button ? ButtonLink | ButtonID : T;
27
28
  export interface ListenerOptions {
28
29
  timeout?: number;
@@ -2,6 +2,7 @@ import { type AnonymousGuildStructure, type AutoModerationRuleStructure, type Gu
2
2
  import type { SeyfertChannelMap } from '../../commands';
3
3
  import { type AllChannels, type CreateStickerBodyRequest, type GuildChannelTypes } from '../../structures';
4
4
  import type { GuildWidgetStyle, RESTGetAPICurrentUserGuildsQuery, RESTGetAPIGuildQuery, RESTPatchAPIAutoModerationRuleJSONBody, RESTPatchAPIChannelJSONBody, RESTPatchAPIGuildChannelPositionsJSONBody, RESTPatchAPIGuildJSONBody, RESTPatchAPIGuildStickerJSONBody, RESTPostAPIAutoModerationRuleJSONBody, RESTPostAPIGuildChannelJSONBody } from '../../types';
5
+ import type { If } from '../types/util';
5
6
  import { BaseShorter } from './base';
6
7
  export declare class GuildShorter extends BaseShorter {
7
8
  /**
@@ -30,7 +31,7 @@ export declare class GuildShorter extends BaseShorter {
30
31
  */
31
32
  widgetURL(id: string, style?: GuildWidgetStyle): Promise<import("../../types").APIGuildWidgetSettings>;
32
33
  edit(guildId: string, body: RESTPatchAPIGuildJSONBody, reason?: string): Promise<GuildStructure<'api'>>;
33
- list(query?: RESTGetAPICurrentUserGuildsQuery): Promise<AnonymousGuildStructure[]>;
34
+ list<T extends boolean = false>(query?: RESTGetAPICurrentUserGuildsQuery, force?: T): Promise<If<T, AnonymousGuildStructure[], GuildStructure<'cached'>[]>>;
34
35
  fetchSelf(id: string, force?: boolean): Promise<GuildMemberStructure>;
35
36
  leave(id: string): Promise<void | undefined>;
36
37
  /**
@@ -53,7 +53,12 @@ class GuildShorter extends base_1.BaseShorter {
53
53
  await this.client.cache.guilds?.patch(cache_1.CacheFrom.Rest, guildId, guild);
54
54
  return transformers_1.Transformers.Guild(this.client, guild);
55
55
  }
56
- list(query) {
56
+ async list(query, force) {
57
+ if (!force) {
58
+ const guilds = await this.client.cache.guilds?.values();
59
+ if (guilds?.length)
60
+ return guilds;
61
+ }
57
62
  return this.client.proxy
58
63
  .users('@me')
59
64
  .guilds.get({ query })
@@ -1,5 +1,6 @@
1
1
  import { type ActionRow, type Button, type ChannelSelectMenu, type Container, type File, type MediaGallery, type MentionableSelectMenu, type RoleSelectMenu, type Section, type Separator, type StringSelectMenu, type TextDisplay, type TextInput, type Thumbnail, type UserSelectMenu } from '../builders';
2
- import { type APIActionRowComponent, type APIActionRowComponentTypes, type APIButtonComponent, type APIChannelSelectComponent, type APIContainerComponent, type APIFileComponent, type APIMediaGalleryComponent, type APIMentionableSelectComponent, type APIRoleSelectComponent, type APISectionComponent, type APISeparatorComponent, type APIStringSelectComponent, type APITextDisplayComponent, type APITextInputComponent, type APIThumbnailComponent, type APIUserSelectComponent, ComponentType } from '../types';
2
+ import { Label } from '../builders/Label';
3
+ import { type APIActionRowComponent, type APIActionRowComponentTypes, type APIButtonComponent, type APIChannelSelectComponent, type APIContainerComponent, type APIFileComponent, type APILabelComponent, type APIMediaGalleryComponent, type APIMentionableSelectComponent, type APIRoleSelectComponent, type APISectionComponent, type APISeparatorComponent, type APIStringSelectComponent, type APITextDisplayComponent, type APITextInputComponent, type APIThumbnailComponent, type APIUserSelectComponent, ComponentType } from '../types';
3
4
  export declare class BaseComponent<T extends ComponentType> {
4
5
  data: APIComponentsMap[T];
5
6
  constructor(data: APIComponentsMap[T]);
@@ -23,6 +24,7 @@ export interface APIComponentsMap {
23
24
  [ComponentType.MediaGallery]: APIMediaGalleryComponent;
24
25
  [ComponentType.Separator]: APISeparatorComponent;
25
26
  [ComponentType.TextDisplay]: APITextDisplayComponent;
27
+ [ComponentType.Label]: APILabelComponent;
26
28
  }
27
29
  export interface BuilderComponentsMap {
28
30
  [ComponentType.ActionRow]: ActionRow;
@@ -40,4 +42,5 @@ export interface BuilderComponentsMap {
40
42
  [ComponentType.MediaGallery]: MediaGallery;
41
43
  [ComponentType.Separator]: Separator;
42
44
  [ComponentType.TextDisplay]: TextDisplay;
45
+ [ComponentType.Label]: Label;
43
46
  }
@@ -0,0 +1,8 @@
1
+ import { APILabelComponent, ComponentType } from '../types';
2
+ import { BaseComponent } from './BaseComponent';
3
+ export declare class LabelComponent extends BaseComponent<ComponentType.Label> {
4
+ constructor(data: APILabelComponent);
5
+ get label(): string;
6
+ get description(): string | undefined;
7
+ get component(): import(".").AllComponents;
8
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LabelComponent = void 0;
4
+ const _1 = require(".");
5
+ const BaseComponent_1 = require("./BaseComponent");
6
+ class LabelComponent extends BaseComponent_1.BaseComponent {
7
+ constructor(data) {
8
+ super(data);
9
+ }
10
+ get label() {
11
+ return this.data.label;
12
+ }
13
+ get description() {
14
+ return this.data.description;
15
+ }
16
+ get component() {
17
+ return (0, _1.componentFactory)(this.data.component);
18
+ }
19
+ }
20
+ exports.LabelComponent = LabelComponent;
@@ -4,7 +4,6 @@ export declare class TextInputComponent extends BaseComponent<ComponentType.Text
4
4
  get customId(): string;
5
5
  get value(): string | undefined;
6
6
  get style(): import("../types").TextInputStyle;
7
- get label(): string;
8
7
  get max(): number | undefined;
9
8
  get min(): number | undefined;
10
9
  get required(): boolean | undefined;
@@ -12,9 +12,6 @@ class TextInputComponent extends BaseComponent_1.BaseComponent {
12
12
  get style() {
13
13
  return this.data.style;
14
14
  }
15
- get label() {
16
- return this.data.label;
17
- }
18
15
  get max() {
19
16
  return this.data.max_length;
20
17
  }
@@ -26,7 +26,8 @@ export declare class ModalContext<M extends keyof RegisteredMiddlewares = never>
26
26
  components: {
27
27
  type: import("../types").ComponentType;
28
28
  customId: string;
29
- value: string;
29
+ value?: string | undefined;
30
+ values?: string[] | undefined;
30
31
  }[];
31
32
  type: import("../types").ComponentType.ActionRow;
32
33
  }[];
@@ -1,6 +1,7 @@
1
1
  import { type ClientUserStructure } from '../../client/transformers';
2
2
  import type { UsingClient } from '../../commands';
3
- import type { GatewayDispatchPayload, GatewayReadyDispatchData, GatewayResumedDispatch } from '../../types';
3
+ import type { GatewayDispatchPayload, GatewayRateLimitedDispatchData, GatewayReadyDispatchData, GatewayResumedDispatch } from '../../types';
4
4
  export declare const READY: (self: UsingClient, data: GatewayReadyDispatchData) => ClientUserStructure;
5
5
  export declare const RESUMED: (_self: UsingClient, _data: GatewayResumedDispatch["d"]) => void;
6
6
  export declare const RAW: (_self: UsingClient, data: GatewayDispatchPayload) => GatewayDispatchPayload;
7
+ export declare const RATE_LIMITED: (_self: UsingClient, data: GatewayRateLimitedDispatchData) => GatewayRateLimitedDispatchData;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RAW = exports.RESUMED = exports.READY = void 0;
3
+ exports.RATE_LIMITED = exports.RAW = exports.RESUMED = exports.READY = void 0;
4
4
  const transformers_1 = require("../../client/transformers");
5
5
  const READY = (self, data) => {
6
6
  return transformers_1.Transformers.ClientUser(self, data.user, data.application);
@@ -14,3 +14,7 @@ const RAW = (_self, data) => {
14
14
  return data;
15
15
  };
16
16
  exports.RAW = RAW;
17
+ const RATE_LIMITED = (_self, data) => {
18
+ return data;
19
+ };
20
+ exports.RATE_LIMITED = RATE_LIMITED;
@@ -201,12 +201,13 @@ export declare class ModalSubmitInteraction<FromGuild extends boolean = boolean>
201
201
  components: {
202
202
  type: ComponentType;
203
203
  customId: string;
204
- value: string;
204
+ value?: string | undefined;
205
+ values?: string[] | undefined;
205
206
  }[];
206
207
  type: ComponentType.ActionRow;
207
208
  }[];
208
- getInputValue(customId: string, required: true): string;
209
- getInputValue(customId: string, required?: false): string | undefined;
209
+ getInputValue(customId: string, required: true): string | string[];
210
+ getInputValue(customId: string, required?: false): string | string[] | undefined;
210
211
  isModal(): this is ModalSubmitInteraction;
211
212
  }
212
213
  export {};
@@ -8,6 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.ModalSubmitInteraction = exports.MessageCommandInteraction = exports.UserCommandInteraction = exports.ChatInputCommandInteraction = exports.UserSelectMenuInteraction = exports.RoleSelectMenuInteraction = exports.MentionableSelectMenuInteraction = exports.ChannelSelectMenuInteraction = exports.StringSelectMenuInteraction = exports.SelectMenuInteraction = exports.ButtonInteraction = exports.ComponentInteraction = exports.EntryPointInteraction = exports.ApplicationCommandInteraction = exports.Interaction = exports.AutocompleteInteraction = exports.BaseInteraction = void 0;
10
10
  const builders_1 = require("../builders");
11
+ const Label_1 = require("../builders/Label");
11
12
  const transformers_1 = require("../client/transformers");
12
13
  const common_1 = require("../common");
13
14
  const mixer_1 = require("../deps/mixer");
@@ -65,9 +66,7 @@ class BaseInteraction extends DiscordBase_1.DiscordBase {
65
66
  : {
66
67
  ...body.data,
67
68
  components: body.data?.components
68
- ? body.data.components.map(x => x instanceof builders_1.ActionRow
69
- ? x.toJSON()
70
- : x)
69
+ ? body.data.components.map(x => (x instanceof Label_1.Label ? x.toJSON() : x))
71
70
  : [],
72
71
  },
73
72
  };
@@ -520,11 +519,11 @@ let ModalSubmitInteraction = class ModalSubmitInteraction extends BaseInteractio
520
519
  for (const { components } of this.components) {
521
520
  const get = components.find(x => x.customId === customId);
522
521
  if (get) {
523
- value = get.value;
522
+ value = get.value ?? get.values;
524
523
  break;
525
524
  }
526
525
  }
527
- if (!value && required)
526
+ if ((!value || value.length === 0) && required)
528
527
  throw new Error(`${customId} component doesn't have a value`);
529
528
  return value;
530
529
  }
@@ -18,7 +18,7 @@ export interface GatewayURLQuery {
18
18
  */
19
19
  export type GatewaySendPayload = GatewayHeartbeat | GatewayIdentify | GatewayRequestGuildMembers | GatewayResume | GatewayUpdatePresence | GatewayVoiceStateUpdate | GatewayRequestSoundboardSounds;
20
20
  export type GatewayReceivePayload = GatewayDispatchPayload | GatewayHeartbeatAck | GatewayHeartbeatRequest | GatewayHello | GatewayInvalidSession | GatewayReconnect;
21
- export type GatewayDispatchPayload = GatewayApplicationCommandPermissionsUpdateDispatch | GatewayAutoModerationActionExecutionDispatch | GatewayAutoModerationRuleCreateDispatch | GatewayAutoModerationRuleDeleteDispatch | GatewayAutoModerationRuleModifyDispatch | GatewayChannelModifyDispatch | GatewayChannelPinsUpdateDispatch | GatewayEntitlementModifyDispatch | GatewayGuildAuditLogEntryCreateDispatch | GatewayGuildBanModifyDispatch | GatewayGuildCreateDispatch | GatewayRawGuildCreateDispatch | GatewayGuildDeleteDispatch | GatewayRawGuildDeleteDispatch | GatewayGuildsReadyDispatch | GatewayGuildEmojisUpdateDispatch | GatewayGuildIntegrationsUpdateDispatch | GatewayGuildMemberAddDispatch | GatewayGuildMemberRemoveDispatch | GatewayGuildMembersChunkDispatch | GatewayGuildMemberUpdateDispatch | GatewayGuildModifyDispatch | GatewayGuildRoleDeleteDispatch | GatewayGuildRoleModifyDispatch | GatewayGuildScheduledEventCreateDispatch | GatewayGuildScheduledEventDeleteDispatch | GatewayGuildScheduledEventUpdateDispatch | GatewayGuildScheduledEventUserAddDispatch | GatewayGuildScheduledEventUserRemoveDispatch | GatewayGuildStickersUpdateDispatch | GatewayIntegrationCreateDispatch | GatewayIntegrationDeleteDispatch | GatewayIntegrationUpdateDispatch | GatewayInteractionCreateDispatch | GatewayInviteCreateDispatch | GatewayInviteDeleteDispatch | GatewayMessageCreateDispatch | GatewayMessageDeleteBulkDispatch | GatewayMessageDeleteDispatch | GatewayMessagePollVoteAddDispatch | GatewayMessagePollVoteRemoveDispatch | GatewayMessageReactionAddDispatch | GatewayMessageReactionRemoveAllDispatch | GatewayMessageReactionRemoveDispatch | GatewayMessageReactionRemoveEmojiDispatch | GatewayMessageUpdateDispatch | GatewayPresenceUpdateDispatch | GatewayReadyDispatch | GatewayResumedDispatch | GatewayStageInstanceCreateDispatch | GatewayStageInstanceDeleteDispatch | GatewayStageInstanceUpdateDispatch | GatewayThreadCreateDispatch | GatewayThreadDeleteDispatch | GatewayThreadListSyncDispatch | GatewayThreadMembersUpdateDispatch | GatewayThreadMemberUpdateDispatch | GatewayThreadUpdateDispatch | GatewayTypingStartDispatch | GatewayUserUpdateDispatch | GatewayVoiceServerUpdateDispatch | GatewayVoiceStateUpdateDispatch | GatewayWebhooksUpdateDispatch | GatewayGuildSoundboardSoundCreateDispatch | GatewayGuildSoundboardSoundDeleteDispatch | GatewayGuildSoundboardSoundUpdateDispatch | GatewayGuildSoundboardSoundsUpdateDispatch | GatewaySoundboardSoundsDispatch;
21
+ export type GatewayDispatchPayload = GatewayApplicationCommandPermissionsUpdateDispatch | GatewayAutoModerationActionExecutionDispatch | GatewayAutoModerationRuleCreateDispatch | GatewayAutoModerationRuleDeleteDispatch | GatewayAutoModerationRuleModifyDispatch | GatewayChannelModifyDispatch | GatewayChannelPinsUpdateDispatch | GatewayEntitlementModifyDispatch | GatewayGuildAuditLogEntryCreateDispatch | GatewayGuildBanModifyDispatch | GatewayGuildCreateDispatch | GatewayRawGuildCreateDispatch | GatewayGuildDeleteDispatch | GatewayRawGuildDeleteDispatch | GatewayGuildsReadyDispatch | GatewayGuildEmojisUpdateDispatch | GatewayGuildIntegrationsUpdateDispatch | GatewayGuildMemberAddDispatch | GatewayGuildMemberRemoveDispatch | GatewayGuildMembersChunkDispatch | GatewayGuildMemberUpdateDispatch | GatewayGuildModifyDispatch | GatewayGuildRoleDeleteDispatch | GatewayGuildRoleModifyDispatch | GatewayGuildScheduledEventCreateDispatch | GatewayGuildScheduledEventDeleteDispatch | GatewayGuildScheduledEventUpdateDispatch | GatewayGuildScheduledEventUserAddDispatch | GatewayGuildScheduledEventUserRemoveDispatch | GatewayGuildStickersUpdateDispatch | GatewayIntegrationCreateDispatch | GatewayIntegrationDeleteDispatch | GatewayIntegrationUpdateDispatch | GatewayInteractionCreateDispatch | GatewayInviteCreateDispatch | GatewayInviteDeleteDispatch | GatewayMessageCreateDispatch | GatewayMessageDeleteBulkDispatch | GatewayMessageDeleteDispatch | GatewayMessagePollVoteAddDispatch | GatewayMessagePollVoteRemoveDispatch | GatewayMessageReactionAddDispatch | GatewayMessageReactionRemoveAllDispatch | GatewayMessageReactionRemoveDispatch | GatewayMessageReactionRemoveEmojiDispatch | GatewayMessageUpdateDispatch | GatewayPresenceUpdateDispatch | GatewayReadyDispatch | GatewayResumedDispatch | GatewayStageInstanceCreateDispatch | GatewayStageInstanceDeleteDispatch | GatewayStageInstanceUpdateDispatch | GatewayThreadCreateDispatch | GatewayThreadDeleteDispatch | GatewayThreadListSyncDispatch | GatewayThreadMembersUpdateDispatch | GatewayThreadMemberUpdateDispatch | GatewayThreadUpdateDispatch | GatewayTypingStartDispatch | GatewayUserUpdateDispatch | GatewayVoiceServerUpdateDispatch | GatewayVoiceStateUpdateDispatch | GatewayWebhooksUpdateDispatch | GatewayGuildSoundboardSoundCreateDispatch | GatewayGuildSoundboardSoundDeleteDispatch | GatewayGuildSoundboardSoundUpdateDispatch | GatewayGuildSoundboardSoundsUpdateDispatch | GatewaySoundboardSoundsDispatch | GatewayRateLimitedDispatch;
22
22
  /**
23
23
  * https://discord.com/developers/docs/topics/gateway-events#hello
24
24
  */
@@ -67,6 +67,37 @@ export interface GatewayReconnect extends NonDispatchPayload {
67
67
  op: GatewayOpcodes.Reconnect;
68
68
  d: never;
69
69
  }
70
+ /**
71
+ * https://discord.com/developers/docs/events/gateway-events#rate-limited
72
+ */
73
+ export type GatewayRateLimitedDispatch = DataPayload<GatewayDispatchEvents.RateLimited, GatewayRateLimitedDispatchData>;
74
+ export interface GatewayRateLimitedDispatchData {
75
+ /**
76
+ * Gateway opcode of the event that was rate limited (for now only GuildMembersChunk)
77
+ */
78
+ opcode: Extract<GatewayOpcodes, GatewayOpcodes.RequestGuildMembers>;
79
+ /**
80
+ * The number of seconds to wait before submitting another request
81
+ */
82
+ retry_after: number;
83
+ /**
84
+ * Metadata for the event that was rate limited
85
+ */
86
+ metadata: GatewayRateLimitedMetadata;
87
+ }
88
+ /**
89
+ * https://discord.com/developers/docs/events/gateway-events#rate-limited-request-guild-member-rate-limit-metadata-structure
90
+ */
91
+ export interface GatewayRateLimitedMetadata {
92
+ /**
93
+ * ID of the guild to get members for
94
+ */
95
+ guild_id: Snowflake;
96
+ /**
97
+ * nonce to identify the Guild Members Chunk response
98
+ */
99
+ nonce?: string;
100
+ }
70
101
  /**
71
102
  * https://discord.com/developers/docs/topics/gateway-events#ready
72
103
  */
@@ -2,7 +2,8 @@ import type { APIActionRowComponent, APIBaseInteraction, APIDMInteractionWrapper
2
2
  export interface ModalSubmitComponent {
3
3
  type: ComponentType;
4
4
  custom_id: string;
5
- value: string;
5
+ value?: string;
6
+ values?: string[];
6
7
  }
7
8
  export interface ModalSubmitActionRowComponent extends Omit<APIActionRowComponent<APIModalActionRowComponent>, 'components'> {
8
9
  components: ModalSubmitComponent[];
@@ -1,6 +1,6 @@
1
1
  import type { MakeRequired } from '../../../common';
2
2
  import type { RESTPostAPIWebhookWithTokenJSONBody } from '../../index';
3
- import type { APIActionRowComponent, APIModalActionRowComponent, MessageFlags } from '../index';
3
+ import type { APILabelComponent, MessageFlags } from '../index';
4
4
  import type { APIApplicationCommandOptionChoice } from './applicationCommands';
5
5
  /**
6
6
  * https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-type
@@ -104,7 +104,7 @@ export interface APIModalInteractionResponseCallbackData {
104
104
  /**
105
105
  * Between 1 and 5 (inclusive) components that make up the modal
106
106
  */
107
- components: APIActionRowComponent<APIModalActionRowComponent>[];
107
+ components: APILabelComponent[];
108
108
  }
109
109
  /**
110
110
  * https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-callback-interaction-callback-object
@@ -73,7 +73,11 @@ export declare enum ComponentType {
73
73
  /**
74
74
  * Container component
75
75
  */
76
- Container = 17
76
+ Container = 17,
77
+ /**
78
+ * Label component
79
+ */
80
+ Label = 18
77
81
  }
78
82
  /**
79
83
  * https://discord.com/developers/docs/interactions/message-components#action-rows
@@ -201,6 +205,12 @@ export interface APIStringSelectComponent extends APIBaseSelectMenuComponent<Com
201
205
  * Specified choices in a select menu; max 25
202
206
  */
203
207
  options: APISelectMenuOption[];
208
+ /**
209
+ * Whether the string select is required to answer in a modal
210
+ *
211
+ * @default true
212
+ */
213
+ required?: boolean;
204
214
  }
205
215
  /**
206
216
  * https://discord.com/developers/docs/interactions/message-components#select-menus
@@ -280,10 +290,6 @@ export interface APITextInputComponent extends APIBaseComponent<ComponentType.Te
280
290
  * The custom id for the text input
281
291
  */
282
292
  custom_id: string;
283
- /**
284
- * Text that appears on top of the text input field, max 45 characters
285
- */
286
- label: string;
287
293
  /**
288
294
  * Placeholder for the text input
289
295
  */
@@ -481,9 +487,24 @@ export interface APIContainerComponent {
481
487
  /** Whether the container should be a spoiler (or blurred out). Defaults to false. */
482
488
  spoiler?: boolean;
483
489
  }
490
+ /**
491
+ * https://discord.com/developers/docs/components/reference#label
492
+ */
493
+ export interface APILabelComponent {
494
+ /** 18 for label */
495
+ type: ComponentType.Label;
496
+ /** Optional identifier for component */
497
+ id?: string;
498
+ /** The label text */
499
+ label: string;
500
+ /** An optional description textfor the label */
501
+ description?: string;
502
+ /** The component within the label */
503
+ component: APITextInputComponent | APIStringSelectComponent;
504
+ }
484
505
  /**
485
506
  * https://discord.com/developers/docs/components/reference#unfurled-media-item-structure
486
507
  */
487
508
  export interface APIUnfurledMediaItem extends Identify<MakeRequired<Partial<Pick<APIAttachment, 'url' | 'proxy_url' | 'height' | 'width' | 'content_type'>>, 'url'>> {
488
509
  }
489
- export type APITopLevelComponent = APIContainerComponent | APIActionRowComponent<APIActionRowComponentTypes> | APIFileComponent | APIMediaGalleryComponent | APISectionComponent | APISeparatorComponent | APITextDisplayComponent;
510
+ export type APITopLevelComponent = APIContainerComponent | APIActionRowComponent<APIActionRowComponentTypes> | APIFileComponent | APIMediaGalleryComponent | APISectionComponent | APISeparatorComponent | APITextDisplayComponent | APILabelComponent;
@@ -66,6 +66,10 @@ var ComponentType;
66
66
  * Container component
67
67
  */
68
68
  ComponentType[ComponentType["Container"] = 17] = "Container";
69
+ /**
70
+ * Label component
71
+ */
72
+ ComponentType[ComponentType["Label"] = 18] = "Label";
69
73
  })(ComponentType || (exports.ComponentType = ComponentType = {}));
70
74
  /**
71
75
  * https://discord.com/developers/docs/interactions/message-components#button-object-button-styles
@@ -345,6 +345,7 @@ export declare enum GatewayDispatchEvents {
345
345
  SubscriptionDelete = "SUBSCRIPTION_DELETE",
346
346
  Ready = "READY",
347
347
  Resumed = "RESUMED",
348
+ RateLimited = "RATE_LIMITED",
348
349
  ThreadCreate = "THREAD_CREATE",
349
350
  ThreadDelete = "THREAD_DELETE",
350
351
  ThreadListSync = "THREAD_LIST_SYNC",
@@ -330,6 +330,7 @@ var GatewayDispatchEvents;
330
330
  GatewayDispatchEvents["SubscriptionDelete"] = "SUBSCRIPTION_DELETE";
331
331
  GatewayDispatchEvents["Ready"] = "READY";
332
332
  GatewayDispatchEvents["Resumed"] = "RESUMED";
333
+ GatewayDispatchEvents["RateLimited"] = "RATE_LIMITED";
333
334
  GatewayDispatchEvents["ThreadCreate"] = "THREAD_CREATE";
334
335
  GatewayDispatchEvents["ThreadDelete"] = "THREAD_DELETE";
335
336
  GatewayDispatchEvents["ThreadListSync"] = "THREAD_LIST_SYNC";
@@ -274,6 +274,37 @@ class Shard {
274
274
  this.options.handlePayload(this.id, packet);
275
275
  }
276
276
  break;
277
+ case types_1.GatewayDispatchEvents.RateLimited:
278
+ {
279
+ switch (packet.d.opcode) {
280
+ case types_1.GatewayOpcodes.RequestGuildMembers:
281
+ {
282
+ const { retry_after, metadata } = packet.d;
283
+ const nonce = metadata.nonce;
284
+ if (!nonce) {
285
+ this.options.handlePayload(this.id, packet);
286
+ return;
287
+ }
288
+ if (!this.requestGuildMembersChunk.has(nonce)) {
289
+ this.options.handlePayload(this.id, packet);
290
+ return;
291
+ }
292
+ const guildMemberChunk = this.requestGuildMembersChunk.get(nonce);
293
+ void (0, common_1.delay)((retry_after + 0.5) * 1e3).then(() => {
294
+ this.send(false, {
295
+ op: types_1.GatewayOpcodes.RequestGuildMembers,
296
+ d: {
297
+ ...guildMemberChunk.options,
298
+ nonce,
299
+ },
300
+ });
301
+ });
302
+ }
303
+ break;
304
+ }
305
+ }
306
+ this.options.handlePayload(this.id, packet);
307
+ break;
277
308
  default:
278
309
  this.options.handlePayload(this.id, packet);
279
310
  break;
@@ -299,6 +330,7 @@ class Shard {
299
330
  presences: [],
300
331
  reject,
301
332
  resolve,
333
+ options,
302
334
  });
303
335
  this.send(false, {
304
336
  op: types_1.GatewayOpcodes.RequestGuildMembers,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "seyfert",
3
- "version": "3.2.7-dev-17041037679.0",
3
+ "version": "3.2.7-dev-17387316482.0",
4
4
  "description": "The most advanced framework for discord bots",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./lib/index.js",