@magicyan/discord 1.7.0 → 1.7.2

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.
@@ -6,7 +6,7 @@ const core = require('@magicyan/core');
6
6
 
7
7
  function createMediaGallery(...items) {
8
8
  return new discord_js.MediaGalleryBuilder({
9
- items: items.flat().filter(core.isDefined).map((item) => {
9
+ items: items.flat().filter((item) => typeof item !== "boolean").filter(core.isDefined).map((item) => {
10
10
  if (typeof item === "string") {
11
11
  return { media: { url: item } };
12
12
  }
@@ -4,7 +4,7 @@ import { isDefined } from '@magicyan/core';
4
4
 
5
5
  function createMediaGallery(...items) {
6
6
  return new MediaGalleryBuilder({
7
- items: items.flat().filter(isDefined).map((item) => {
7
+ items: items.flat().filter((item) => typeof item !== "boolean").filter(isDefined).map((item) => {
8
8
  if (typeof item === "string") {
9
9
  return { media: { url: item } };
10
10
  }
@@ -2,26 +2,33 @@
2
2
 
3
3
  const discord_js = require('discord.js');
4
4
 
5
- function createLabel(argA, argB, argC, argD) {
6
- if (typeof argA === "object") {
7
- const { component, ...data } = argA;
8
- return new discord_js.LabelBuilder({
5
+ function createLabel(a, b, c, d) {
6
+ const label = new discord_js.LabelBuilder();
7
+ if (typeof a === "object") {
8
+ const { component, ...data } = a;
9
+ Object.assign(label.data, {
9
10
  ...data,
10
- component: component?.toJSON()
11
+ component: discord_js.isJSONEncodable(component) ? component.toJSON() : component
11
12
  });
13
+ return label;
12
14
  }
13
- if (typeof argB === "string") {
14
- return new discord_js.LabelBuilder({
15
- label: argA,
16
- description: argB,
17
- ...typeof argC === "number" ? { id: argC } : { component: argC?.toJSON(), id: argD }
15
+ if (typeof b === "string") {
16
+ Object.assign(label.data, {
17
+ label: a,
18
+ description: b,
19
+ ...typeof c === "number" ? { id: c } : {
20
+ component: discord_js.isJSONEncodable(c) ? c.toJSON() : c,
21
+ id: d
22
+ }
18
23
  });
24
+ return label;
19
25
  }
20
- return new discord_js.LabelBuilder({
21
- label: argA,
22
- component: argB?.toJSON(),
23
- ...typeof argC === "number" ? { id: argC } : {}
26
+ Object.assign(label.data, {
27
+ label: a,
28
+ component: discord_js.isJSONEncodable(b) ? b.toJSON() : b,
29
+ ...typeof c === "number" ? { id: c } : {}
24
30
  });
31
+ return label;
25
32
  }
26
33
 
27
34
  exports.createLabel = createLabel;
@@ -1,25 +1,32 @@
1
- import { LabelBuilder } from 'discord.js';
1
+ import { LabelBuilder, isJSONEncodable } from 'discord.js';
2
2
 
3
- function createLabel(argA, argB, argC, argD) {
4
- if (typeof argA === "object") {
5
- const { component, ...data } = argA;
6
- return new LabelBuilder({
3
+ function createLabel(a, b, c, d) {
4
+ const label = new LabelBuilder();
5
+ if (typeof a === "object") {
6
+ const { component, ...data } = a;
7
+ Object.assign(label.data, {
7
8
  ...data,
8
- component: component?.toJSON()
9
+ component: isJSONEncodable(component) ? component.toJSON() : component
9
10
  });
11
+ return label;
10
12
  }
11
- if (typeof argB === "string") {
12
- return new LabelBuilder({
13
- label: argA,
14
- description: argB,
15
- ...typeof argC === "number" ? { id: argC } : { component: argC?.toJSON(), id: argD }
13
+ if (typeof b === "string") {
14
+ Object.assign(label.data, {
15
+ label: a,
16
+ description: b,
17
+ ...typeof c === "number" ? { id: c } : {
18
+ component: isJSONEncodable(c) ? c.toJSON() : c,
19
+ id: d
20
+ }
16
21
  });
22
+ return label;
17
23
  }
18
- return new LabelBuilder({
19
- label: argA,
20
- component: argB?.toJSON(),
21
- ...typeof argC === "number" ? { id: argC } : {}
24
+ Object.assign(label.data, {
25
+ label: a,
26
+ component: isJSONEncodable(b) ? b.toJSON() : b,
27
+ ...typeof c === "number" ? { id: c } : {}
22
28
  });
29
+ return label;
23
30
  }
24
31
 
25
32
  export { createLabel };
@@ -30,6 +30,21 @@ function createModalFields(...components) {
30
30
  return data.data;
31
31
  });
32
32
  }
33
+ function createModal(data, title, ...components) {
34
+ if (typeof data === "string") {
35
+ return new discord_js.ModalBuilder({
36
+ customId: data,
37
+ title,
38
+ components: createModalFields(...components)
39
+ });
40
+ }
41
+ return new discord_js.ModalBuilder({
42
+ customId: data.title,
43
+ title: data.title,
44
+ components: createModalFields(...data.components ?? [])
45
+ });
46
+ }
33
47
 
48
+ exports.createModal = createModal;
34
49
  exports.createModalFields = createModalFields;
35
50
  exports.modalFieldsToRecord = modalFieldsToRecord;
@@ -1,5 +1,5 @@
1
1
  import { isDefined } from '@magicyan/core';
2
- import { ComponentType } from 'discord.js';
2
+ import { ComponentType, ModalBuilder } from 'discord.js';
3
3
 
4
4
  function modalFieldsToRecord(data, parse) {
5
5
  const collection = "fields" in data ? "fields" in data.fields ? data.fields.fields : data.fields : data;
@@ -28,5 +28,19 @@ function createModalFields(...components) {
28
28
  return data.data;
29
29
  });
30
30
  }
31
+ function createModal(data, title, ...components) {
32
+ if (typeof data === "string") {
33
+ return new ModalBuilder({
34
+ customId: data,
35
+ title,
36
+ components: createModalFields(...components)
37
+ });
38
+ }
39
+ return new ModalBuilder({
40
+ customId: data.title,
41
+ title: data.title,
42
+ components: createModalFields(...data.components ?? [])
43
+ });
44
+ }
31
45
 
32
- export { createModalFields, modalFieldsToRecord };
46
+ export { createModal, createModalFields, modalFieldsToRecord };
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
+ const core = require('@magicyan/core');
3
4
  const discord_js = require('discord.js');
4
5
 
5
6
  function createRow(...components) {
6
7
  return new discord_js.ActionRowBuilder({
7
- components: components.flat()
8
+ components: components.flat().filter((c) => typeof c !== "boolean").filter((c) => core.isDefined(c))
8
9
  });
9
10
  }
10
11
 
@@ -1,8 +1,9 @@
1
+ import { isDefined } from '@magicyan/core';
1
2
  import { ActionRowBuilder } from 'discord.js';
2
3
 
3
4
  function createRow(...components) {
4
5
  return new ActionRowBuilder({
5
- components: components.flat()
6
+ components: components.flat().filter((c) => typeof c !== "boolean").filter((c) => isDefined(c))
6
7
  });
7
8
  }
8
9
 
package/dist/index.cjs CHANGED
@@ -78,6 +78,7 @@ exports.createMediaGallery = gallery.createMediaGallery;
78
78
  exports.createModalInput = input.createModalInput;
79
79
  exports.createTextInput = input.createTextInput;
80
80
  exports.createLabel = label.createLabel;
81
+ exports.createModal = modal.createModal;
81
82
  exports.createModalFields = modal.createModalFields;
82
83
  exports.modalFieldsToRecord = modal.modalFieldsToRecord;
83
84
  exports.createRow = row.createRow;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, ActionRowBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, TextInputBuilder, TextInputComponentData, TextInputStyle, LabelBuilderData, LabelBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, FileUploadBuilder, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, ModalBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, ActionRowBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, TextInputBuilder, TextInputComponentData, TextInputStyle, LabelBuilder, LabelBuilderData, ComponentInLabelData, ModalBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, FileUploadBuilder, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -381,7 +381,7 @@ interface CreateFileOptions extends Omit<APIUnfurledMediaItem, "url"> {
381
381
  */
382
382
  declare function createFile(source: FileSource, options?: CreateFileOptions): FileBuilder;
383
383
 
384
- type MediaGallerySource = MediaGalleryItemData | string | Attachment | AttachmentBuilder | null | undefined;
384
+ type MediaGallerySource = MediaGalleryItemData | Attachment | AttachmentBuilder | string | null | undefined | boolean;
385
385
  /**
386
386
  * Creates a {@link MediaGalleryBuilder} instance with a collection of media items, which can be images, attachments, or URLs.
387
387
  *
@@ -433,11 +433,46 @@ declare function createModalInput(data: Omit<TextInputComponentData, "type" | "s
433
433
  style?: TextInputStyle;
434
434
  }): ActionRowBuilder<TextInputBuilder>;
435
435
 
436
- type CreateLabelData = Omit<LabelBuilderData, "type">;
437
- type ComponentInLabelBuilder = NonNullable<CreateLabelData["component"]>;
436
+ interface Unstable_CheckboxData {
437
+ type: ComponentType.Checkbox;
438
+ customId: string;
439
+ default?: boolean;
440
+ id?: number;
441
+ }
442
+ interface Unstable_CheckboxGroupData {
443
+ type: ComponentType.CheckboxGroup;
444
+ id?: number;
445
+ customId: string;
446
+ required?: boolean;
447
+ minValues?: number;
448
+ maxValues?: number;
449
+ options: {
450
+ label: string;
451
+ value: string;
452
+ description?: string;
453
+ default?: boolean;
454
+ }[];
455
+ }
456
+
457
+ interface Unstable_RadioGroupData {
458
+ type: ComponentType.RadioGroup;
459
+ id?: number;
460
+ customId: string;
461
+ required?: boolean;
462
+ options: {
463
+ label: string;
464
+ value: string;
465
+ description?: string;
466
+ default?: boolean;
467
+ }[];
468
+ }
469
+
470
+ interface CreateLabelData extends Omit<LabelBuilderData, "type" | "component"> {
471
+ component?: LabelBuilderData["component"] | ComponentInLabelData | Unstable_CheckboxData | Unstable_CheckboxGroupData | Unstable_RadioGroupData;
472
+ }
438
473
  declare function createLabel(data: CreateLabelData): LabelBuilder;
439
- declare function createLabel(label: string, description?: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
440
- declare function createLabel(label: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
474
+ declare function createLabel(label: string, description?: string, component?: CreateLabelData["component"], id?: number): LabelBuilder;
475
+ declare function createLabel(label: string, component?: CreateLabelData["component"], id?: number): LabelBuilder;
441
476
 
442
477
  type ModalComponents = LabelBuilder | TextDisplayBuilder | string | null | boolean | undefined;
443
478
  type ResolveModalData = {
@@ -482,7 +517,17 @@ declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveM
482
517
  declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
483
518
  type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
484
519
  declare function createModalFields(...components: ModalComponents[]): ModalFields;
520
+ interface CreateModalOptions {
521
+ customId: string;
522
+ title: string;
523
+ components: ModalComponents[];
524
+ }
525
+ declare function createModal(data: Partial<CreateModalOptions>): ModalBuilder;
526
+ declare function createModal(customId: string): ModalBuilder;
527
+ declare function createModal(customId: string, title: string): ModalBuilder;
528
+ declare function createModal(customId: string, title: string, ...components: ModalComponents[]): ModalBuilder;
485
529
 
530
+ type NullableValues = null | undefined | boolean;
486
531
  /**
487
532
  * Creates an {@link ActionRowBuilder} containing one or more UI components.
488
533
  *
@@ -522,7 +567,7 @@ declare function createModalFields(...components: ModalComponents[]): ModalField
522
567
  * })
523
568
  * );
524
569
  */
525
- declare function createRow<Component extends AnyComponentBuilder>(...components: (Component | Component[])[]): ActionRowBuilder<Component>;
570
+ declare function createRow<Component extends AnyComponentBuilder>(...components: (NullableValues | Component | Component[])[]): ActionRowBuilder<Component>;
526
571
 
527
572
  type ThumbnailData = Partial<Omit<ThumbnailComponentData, "type">> | Attachment | AttachmentBuilder | string;
528
573
  /**
@@ -1217,5 +1262,5 @@ declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
1217
1262
  */
1218
1263
  declare function isMessage(value: unknown): value is Message;
1219
1264
 
1220
- export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createFileUpload, createLabel, createLinkButton, createMediaGallery, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createTextInput, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isFileBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1221
- export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ComponentInLabelBuilder, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateLabelData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, FileUploadData, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
1265
+ export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createFileUpload, createLabel, createLinkButton, createMediaGallery, createModal, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createTextInput, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isFileBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1266
+ export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateModalOptions, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, FileUploadData, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData, Unstable_CheckboxData, Unstable_CheckboxGroupData, Unstable_RadioGroupData };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, ActionRowBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, TextInputBuilder, TextInputComponentData, TextInputStyle, LabelBuilderData, LabelBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, FileUploadBuilder, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, ModalBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, ActionRowBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, TextInputBuilder, TextInputComponentData, TextInputStyle, LabelBuilder, LabelBuilderData, ComponentInLabelData, ModalBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, FileUploadBuilder, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -381,7 +381,7 @@ interface CreateFileOptions extends Omit<APIUnfurledMediaItem, "url"> {
381
381
  */
382
382
  declare function createFile(source: FileSource, options?: CreateFileOptions): FileBuilder;
383
383
 
384
- type MediaGallerySource = MediaGalleryItemData | string | Attachment | AttachmentBuilder | null | undefined;
384
+ type MediaGallerySource = MediaGalleryItemData | Attachment | AttachmentBuilder | string | null | undefined | boolean;
385
385
  /**
386
386
  * Creates a {@link MediaGalleryBuilder} instance with a collection of media items, which can be images, attachments, or URLs.
387
387
  *
@@ -433,11 +433,46 @@ declare function createModalInput(data: Omit<TextInputComponentData, "type" | "s
433
433
  style?: TextInputStyle;
434
434
  }): ActionRowBuilder<TextInputBuilder>;
435
435
 
436
- type CreateLabelData = Omit<LabelBuilderData, "type">;
437
- type ComponentInLabelBuilder = NonNullable<CreateLabelData["component"]>;
436
+ interface Unstable_CheckboxData {
437
+ type: ComponentType.Checkbox;
438
+ customId: string;
439
+ default?: boolean;
440
+ id?: number;
441
+ }
442
+ interface Unstable_CheckboxGroupData {
443
+ type: ComponentType.CheckboxGroup;
444
+ id?: number;
445
+ customId: string;
446
+ required?: boolean;
447
+ minValues?: number;
448
+ maxValues?: number;
449
+ options: {
450
+ label: string;
451
+ value: string;
452
+ description?: string;
453
+ default?: boolean;
454
+ }[];
455
+ }
456
+
457
+ interface Unstable_RadioGroupData {
458
+ type: ComponentType.RadioGroup;
459
+ id?: number;
460
+ customId: string;
461
+ required?: boolean;
462
+ options: {
463
+ label: string;
464
+ value: string;
465
+ description?: string;
466
+ default?: boolean;
467
+ }[];
468
+ }
469
+
470
+ interface CreateLabelData extends Omit<LabelBuilderData, "type" | "component"> {
471
+ component?: LabelBuilderData["component"] | ComponentInLabelData | Unstable_CheckboxData | Unstable_CheckboxGroupData | Unstable_RadioGroupData;
472
+ }
438
473
  declare function createLabel(data: CreateLabelData): LabelBuilder;
439
- declare function createLabel(label: string, description?: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
440
- declare function createLabel(label: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
474
+ declare function createLabel(label: string, description?: string, component?: CreateLabelData["component"], id?: number): LabelBuilder;
475
+ declare function createLabel(label: string, component?: CreateLabelData["component"], id?: number): LabelBuilder;
441
476
 
442
477
  type ModalComponents = LabelBuilder | TextDisplayBuilder | string | null | boolean | undefined;
443
478
  type ResolveModalData = {
@@ -482,7 +517,17 @@ declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveM
482
517
  declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
483
518
  type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
484
519
  declare function createModalFields(...components: ModalComponents[]): ModalFields;
520
+ interface CreateModalOptions {
521
+ customId: string;
522
+ title: string;
523
+ components: ModalComponents[];
524
+ }
525
+ declare function createModal(data: Partial<CreateModalOptions>): ModalBuilder;
526
+ declare function createModal(customId: string): ModalBuilder;
527
+ declare function createModal(customId: string, title: string): ModalBuilder;
528
+ declare function createModal(customId: string, title: string, ...components: ModalComponents[]): ModalBuilder;
485
529
 
530
+ type NullableValues = null | undefined | boolean;
486
531
  /**
487
532
  * Creates an {@link ActionRowBuilder} containing one or more UI components.
488
533
  *
@@ -522,7 +567,7 @@ declare function createModalFields(...components: ModalComponents[]): ModalField
522
567
  * })
523
568
  * );
524
569
  */
525
- declare function createRow<Component extends AnyComponentBuilder>(...components: (Component | Component[])[]): ActionRowBuilder<Component>;
570
+ declare function createRow<Component extends AnyComponentBuilder>(...components: (NullableValues | Component | Component[])[]): ActionRowBuilder<Component>;
526
571
 
527
572
  type ThumbnailData = Partial<Omit<ThumbnailComponentData, "type">> | Attachment | AttachmentBuilder | string;
528
573
  /**
@@ -1217,5 +1262,5 @@ declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
1217
1262
  */
1218
1263
  declare function isMessage(value: unknown): value is Message;
1219
1264
 
1220
- export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createFileUpload, createLabel, createLinkButton, createMediaGallery, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createTextInput, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isFileBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1221
- export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ComponentInLabelBuilder, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateLabelData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, FileUploadData, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
1265
+ export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createFileUpload, createLabel, createLinkButton, createMediaGallery, createModal, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createTextInput, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isFileBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1266
+ export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateModalOptions, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, FileUploadData, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData, Unstable_CheckboxData, Unstable_CheckboxGroupData, Unstable_RadioGroupData };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, ActionRowBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, TextInputBuilder, TextInputComponentData, TextInputStyle, LabelBuilderData, LabelBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, FileUploadBuilder, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, ModalBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
2
+ import { GatewayIntentBits, Partials, ChannelType, Guild, CommandInteractionOption, Client, ApplicationCommand, GuildEmoji, GuildMember, GuildTextBasedChannel, Message, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, ActionRowBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, TextInputBuilder, TextInputComponentData, TextInputStyle, LabelBuilder, LabelBuilderData, ComponentInLabelData, ModalBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, FileUploadBuilder, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -381,7 +381,7 @@ interface CreateFileOptions extends Omit<APIUnfurledMediaItem, "url"> {
381
381
  */
382
382
  declare function createFile(source: FileSource, options?: CreateFileOptions): FileBuilder;
383
383
 
384
- type MediaGallerySource = MediaGalleryItemData | string | Attachment | AttachmentBuilder | null | undefined;
384
+ type MediaGallerySource = MediaGalleryItemData | Attachment | AttachmentBuilder | string | null | undefined | boolean;
385
385
  /**
386
386
  * Creates a {@link MediaGalleryBuilder} instance with a collection of media items, which can be images, attachments, or URLs.
387
387
  *
@@ -433,11 +433,46 @@ declare function createModalInput(data: Omit<TextInputComponentData, "type" | "s
433
433
  style?: TextInputStyle;
434
434
  }): ActionRowBuilder<TextInputBuilder>;
435
435
 
436
- type CreateLabelData = Omit<LabelBuilderData, "type">;
437
- type ComponentInLabelBuilder = NonNullable<CreateLabelData["component"]>;
436
+ interface Unstable_CheckboxData {
437
+ type: ComponentType.Checkbox;
438
+ customId: string;
439
+ default?: boolean;
440
+ id?: number;
441
+ }
442
+ interface Unstable_CheckboxGroupData {
443
+ type: ComponentType.CheckboxGroup;
444
+ id?: number;
445
+ customId: string;
446
+ required?: boolean;
447
+ minValues?: number;
448
+ maxValues?: number;
449
+ options: {
450
+ label: string;
451
+ value: string;
452
+ description?: string;
453
+ default?: boolean;
454
+ }[];
455
+ }
456
+
457
+ interface Unstable_RadioGroupData {
458
+ type: ComponentType.RadioGroup;
459
+ id?: number;
460
+ customId: string;
461
+ required?: boolean;
462
+ options: {
463
+ label: string;
464
+ value: string;
465
+ description?: string;
466
+ default?: boolean;
467
+ }[];
468
+ }
469
+
470
+ interface CreateLabelData extends Omit<LabelBuilderData, "type" | "component"> {
471
+ component?: LabelBuilderData["component"] | ComponentInLabelData | Unstable_CheckboxData | Unstable_CheckboxGroupData | Unstable_RadioGroupData;
472
+ }
438
473
  declare function createLabel(data: CreateLabelData): LabelBuilder;
439
- declare function createLabel(label: string, description?: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
440
- declare function createLabel(label: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
474
+ declare function createLabel(label: string, description?: string, component?: CreateLabelData["component"], id?: number): LabelBuilder;
475
+ declare function createLabel(label: string, component?: CreateLabelData["component"], id?: number): LabelBuilder;
441
476
 
442
477
  type ModalComponents = LabelBuilder | TextDisplayBuilder | string | null | boolean | undefined;
443
478
  type ResolveModalData = {
@@ -482,7 +517,17 @@ declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveM
482
517
  declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
483
518
  type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
484
519
  declare function createModalFields(...components: ModalComponents[]): ModalFields;
520
+ interface CreateModalOptions {
521
+ customId: string;
522
+ title: string;
523
+ components: ModalComponents[];
524
+ }
525
+ declare function createModal(data: Partial<CreateModalOptions>): ModalBuilder;
526
+ declare function createModal(customId: string): ModalBuilder;
527
+ declare function createModal(customId: string, title: string): ModalBuilder;
528
+ declare function createModal(customId: string, title: string, ...components: ModalComponents[]): ModalBuilder;
485
529
 
530
+ type NullableValues = null | undefined | boolean;
486
531
  /**
487
532
  * Creates an {@link ActionRowBuilder} containing one or more UI components.
488
533
  *
@@ -522,7 +567,7 @@ declare function createModalFields(...components: ModalComponents[]): ModalField
522
567
  * })
523
568
  * );
524
569
  */
525
- declare function createRow<Component extends AnyComponentBuilder>(...components: (Component | Component[])[]): ActionRowBuilder<Component>;
570
+ declare function createRow<Component extends AnyComponentBuilder>(...components: (NullableValues | Component | Component[])[]): ActionRowBuilder<Component>;
526
571
 
527
572
  type ThumbnailData = Partial<Omit<ThumbnailComponentData, "type">> | Attachment | AttachmentBuilder | string;
528
573
  /**
@@ -1217,5 +1262,5 @@ declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
1217
1262
  */
1218
1263
  declare function isMessage(value: unknown): value is Message;
1219
1264
 
1220
- export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createFileUpload, createLabel, createLinkButton, createMediaGallery, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createTextInput, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isFileBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1221
- export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ComponentInLabelBuilder, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateLabelData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, FileUploadData, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
1265
+ export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createFileUpload, createLabel, createLinkButton, createMediaGallery, createModal, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createTextInput, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isFileBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1266
+ export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateModalOptions, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, FileUploadData, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData, Unstable_CheckboxData, Unstable_CheckboxGroupData, Unstable_RadioGroupData };
package/dist/index.mjs CHANGED
@@ -18,7 +18,7 @@ export { createFile } from './functions/components/file.mjs';
18
18
  export { createMediaGallery } from './functions/components/gallery.mjs';
19
19
  export { createModalInput, createTextInput } from './functions/components/input.mjs';
20
20
  export { createLabel } from './functions/components/label.mjs';
21
- export { createModalFields, modalFieldsToRecord } from './functions/components/modal.mjs';
21
+ export { createModal, createModalFields, modalFieldsToRecord } from './functions/components/modal.mjs';
22
22
  export { createRow } from './functions/components/row.mjs';
23
23
  export { createSection } from './functions/components/section.mjs';
24
24
  export { createSeparator } from './functions/components/separator.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicyan/discord",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "Simple functions to facilitate discord bot development",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  "test": "vitest"
40
40
  },
41
41
  "peerDependencies": {
42
- "discord.js": "^14.24.2"
42
+ "discord.js": "^14.25.1"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@magicyan/config": "*",
@@ -49,6 +49,6 @@
49
49
  "vitest": "^2.1.9"
50
50
  },
51
51
  "dependencies": {
52
- "@magicyan/core": "^1.2.0"
52
+ "@magicyan/core": "*"
53
53
  }
54
54
  }