@magicyan/discord 1.5.4 → 1.6.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.
@@ -9,7 +9,7 @@ const row = require('./row.cjs');
9
9
  const text = require('./text.cjs');
10
10
 
11
11
  function createComponents(...data) {
12
- return data.flat().filter((value) => core.isDefined(value)).filter((value) => typeof value !== "boolean").map((component) => {
12
+ return data.flat().filter((value) => core.isDefined(value) && typeof value !== "boolean").map((component) => {
13
13
  if (typeof component === "string") {
14
14
  return text.createTextDisplay(component);
15
15
  }
@@ -7,7 +7,7 @@ import { createRow } from './row.mjs';
7
7
  import { createTextDisplay } from './text.mjs';
8
8
 
9
9
  function createComponents(...data) {
10
- return data.flat().filter((value) => isDefined(value)).filter((value) => typeof value !== "boolean").map((component) => {
10
+ return data.flat().filter((value) => isDefined(value) && typeof value !== "boolean").map((component) => {
11
11
  if (typeof component === "string") {
12
12
  return createTextDisplay(component);
13
13
  }
@@ -5,19 +5,17 @@ const attachment = require('../../guards/attachment.cjs');
5
5
  const core = require('@magicyan/core');
6
6
 
7
7
  function createMediaGallery(...items) {
8
- const gallery = new discord_js.MediaGalleryBuilder();
9
- for (const item of items.flat().filter(core.isDefined)) {
10
- if (typeof item === "string") {
11
- gallery.addItems({ media: { url: item } });
12
- continue;
13
- }
14
- if (attachment.isAttachment(item)) {
15
- gallery.addItems({ media: { url: `attachment://${item.name}` } });
16
- continue;
17
- }
18
- gallery.addItems(item);
19
- }
20
- return gallery;
8
+ return new discord_js.MediaGalleryBuilder({
9
+ items: items.flat().filter(core.isDefined).map((item) => {
10
+ if (typeof item === "string") {
11
+ return { media: { url: item } };
12
+ }
13
+ if (attachment.isAttachment(item)) {
14
+ return { media: { url: `attachment://${item.name}` } };
15
+ }
16
+ return item;
17
+ })
18
+ });
21
19
  }
22
20
 
23
21
  exports.createMediaGallery = createMediaGallery;
@@ -3,19 +3,17 @@ import { isAttachment } from '../../guards/attachment.mjs';
3
3
  import { isDefined } from '@magicyan/core';
4
4
 
5
5
  function createMediaGallery(...items) {
6
- const gallery = new MediaGalleryBuilder();
7
- for (const item of items.flat().filter(isDefined)) {
8
- if (typeof item === "string") {
9
- gallery.addItems({ media: { url: item } });
10
- continue;
11
- }
12
- if (isAttachment(item)) {
13
- gallery.addItems({ media: { url: `attachment://${item.name}` } });
14
- continue;
15
- }
16
- gallery.addItems(item);
17
- }
18
- return gallery;
6
+ return new MediaGalleryBuilder({
7
+ items: items.flat().filter(isDefined).map((item) => {
8
+ if (typeof item === "string") {
9
+ return { media: { url: item } };
10
+ }
11
+ if (isAttachment(item)) {
12
+ return { media: { url: `attachment://${item.name}` } };
13
+ }
14
+ return item;
15
+ })
16
+ });
19
17
  }
20
18
 
21
19
  export { createMediaGallery };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ const discord_js = require('discord.js');
4
+ const row = require('./row.cjs');
5
+
6
+ function createTextInput(data) {
7
+ data.style ?? (data.style = discord_js.TextInputStyle.Short);
8
+ if ("label" in data)
9
+ delete data.label;
10
+ return new discord_js.TextInputBuilder(data);
11
+ }
12
+ function createModalInput(data) {
13
+ data.style ?? (data.style = discord_js.TextInputStyle.Short);
14
+ return row.createRow(new discord_js.TextInputBuilder(data));
15
+ }
16
+
17
+ exports.createModalInput = createModalInput;
18
+ exports.createTextInput = createTextInput;
@@ -0,0 +1,15 @@
1
+ import { TextInputStyle, TextInputBuilder } from 'discord.js';
2
+ import { createRow } from './row.mjs';
3
+
4
+ function createTextInput(data) {
5
+ data.style ?? (data.style = TextInputStyle.Short);
6
+ if ("label" in data)
7
+ delete data.label;
8
+ return new TextInputBuilder(data);
9
+ }
10
+ function createModalInput(data) {
11
+ data.style ?? (data.style = TextInputStyle.Short);
12
+ return createRow(new TextInputBuilder(data));
13
+ }
14
+
15
+ export { createModalInput, createTextInput };
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ const discord_js = require('discord.js');
4
+
5
+ function createLabel(argA, argB, argC, argD) {
6
+ if (typeof argA === "object") {
7
+ const { component, ...data } = argA;
8
+ return new discord_js.LabelBuilder({
9
+ ...data,
10
+ component: component?.toJSON()
11
+ });
12
+ }
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 }
18
+ });
19
+ }
20
+ return new discord_js.LabelBuilder({
21
+ label: argA,
22
+ component: argB?.toJSON(),
23
+ ...typeof argC === "number" ? { id: argC } : {}
24
+ });
25
+ }
26
+
27
+ exports.createLabel = createLabel;
@@ -0,0 +1,25 @@
1
+ import { LabelBuilder } from 'discord.js';
2
+
3
+ function createLabel(argA, argB, argC, argD) {
4
+ if (typeof argA === "object") {
5
+ const { component, ...data } = argA;
6
+ return new LabelBuilder({
7
+ ...data,
8
+ component: component?.toJSON()
9
+ });
10
+ }
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 }
16
+ });
17
+ }
18
+ return new LabelBuilder({
19
+ label: argA,
20
+ component: argB?.toJSON(),
21
+ ...typeof argC === "number" ? { id: argC } : {}
22
+ });
23
+ }
24
+
25
+ export { createLabel };
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const core = require('@magicyan/core');
4
+ const discord_js = require('discord.js');
5
+
6
+ function modalFieldsToRecord(data, parse) {
7
+ const collection = "fields" in data ? "fields" in data.fields ? data.fields.fields : data.fields : data;
8
+ const record = collection.reduce((acc, data2) => {
9
+ acc[data2.customId] = data2.type === discord_js.ComponentType.TextInput ? data2.value : Array.from(data2.values ?? []);
10
+ return acc;
11
+ }, {});
12
+ return parse ? parse(record) : record;
13
+ }
14
+ function createModalFields(...components) {
15
+ return components.filter((v) => core.isDefined(v) && typeof v !== "boolean").map((data) => {
16
+ if (typeof data === "string")
17
+ return {
18
+ type: discord_js.ComponentType.TextDisplay,
19
+ content: data
20
+ };
21
+ return data.data;
22
+ });
23
+ }
24
+
25
+ exports.createModalFields = createModalFields;
26
+ exports.modalFieldsToRecord = modalFieldsToRecord;
@@ -0,0 +1,23 @@
1
+ import { isDefined } from '@magicyan/core';
2
+ import { ComponentType } from 'discord.js';
3
+
4
+ function modalFieldsToRecord(data, parse) {
5
+ const collection = "fields" in data ? "fields" in data.fields ? data.fields.fields : data.fields : data;
6
+ const record = collection.reduce((acc, data2) => {
7
+ acc[data2.customId] = data2.type === ComponentType.TextInput ? data2.value : Array.from(data2.values ?? []);
8
+ return acc;
9
+ }, {});
10
+ return parse ? parse(record) : record;
11
+ }
12
+ function createModalFields(...components) {
13
+ return components.filter((v) => isDefined(v) && typeof v !== "boolean").map((data) => {
14
+ if (typeof data === "string")
15
+ return {
16
+ type: ComponentType.TextDisplay,
17
+ content: data
18
+ };
19
+ return data.data;
20
+ });
21
+ }
22
+
23
+ export { createModalFields, modalFieldsToRecord };
package/dist/index.cjs CHANGED
@@ -10,7 +10,6 @@ const emojis = require('./functions/emojis.cjs');
10
10
  const members = require('./functions/members.cjs');
11
11
  const message = require('./functions/message.cjs');
12
12
  const misc = require('./functions/misc.cjs');
13
- const modals = require('./functions/modals.cjs');
14
13
  const regex = require('./functions/regex.cjs');
15
14
  const roles = require('./functions/roles.cjs');
16
15
  const webhooks = require('./functions/webhooks.cjs');
@@ -19,6 +18,9 @@ const components = require('./functions/components/components.cjs');
19
18
  const container = require('./functions/components/container.cjs');
20
19
  const file = require('./functions/components/file.cjs');
21
20
  const gallery = require('./functions/components/gallery.cjs');
21
+ const input = require('./functions/components/input.cjs');
22
+ const label = require('./functions/components/label.cjs');
23
+ const modal = require('./functions/components/modal.cjs');
22
24
  const row = require('./functions/components/row.cjs');
23
25
  const section = require('./functions/components/section.cjs');
24
26
  const separator$1 = require('./functions/components/separator.cjs');
@@ -31,17 +33,17 @@ const embedplus = require('./functions/embeds/embedplus.cjs');
31
33
  const files = require('./functions/embeds/files.cjs');
32
34
  const footer = require('./functions/embeds/footer.cjs');
33
35
  const attachment = require('./guards/attachment.cjs');
34
- const message$1 = require('./guards/message.cjs');
35
36
  const button = require('./guards/components/button.cjs');
36
37
  const container$1 = require('./guards/components/container.cjs');
37
38
  const gallery$1 = require('./guards/components/gallery.cjs');
38
- const modal = require('./guards/components/modal.cjs');
39
+ const modal$1 = require('./guards/components/modal.cjs');
39
40
  const row$1 = require('./guards/components/row.cjs');
40
41
  const section$1 = require('./guards/components/section.cjs');
41
42
  const selectmenu = require('./guards/components/selectmenu.cjs');
42
43
  const separator$2 = require('./guards/components/separator.cjs');
43
44
  const textdisplay = require('./guards/components/textdisplay.cjs');
44
45
  const textinput = require('./guards/components/textinput.cjs');
46
+ const message$1 = require('./guards/message.cjs');
45
47
  const core = require('@magicyan/core');
46
48
 
47
49
 
@@ -61,10 +63,6 @@ exports.fetchMessageFromURL = message.fetchMessageFromURL;
61
63
  exports.findMessage = message.findMessage;
62
64
  exports.getMessageURLInfo = message.getMessageURLInfo;
63
65
  exports.setMobileStatus = misc.setMobileStatus;
64
- exports.createModal = modals.createModal;
65
- exports.createModalFields = modals.createModalFields;
66
- exports.createModalInput = modals.createModalInput;
67
- exports.modalFieldsToRecord = modals.modalFieldsToRecord;
68
66
  exports.extractMentionId = regex.extractMentionId;
69
67
  exports.findRole = roles.findRole;
70
68
  exports.createWebhookClient = webhooks.createWebhookClient;
@@ -75,6 +73,11 @@ exports.ContainerPlusBuilder = container.ContainerPlusBuilder;
75
73
  exports.createContainer = container.createContainer;
76
74
  exports.createFile = file.createFile;
77
75
  exports.createMediaGallery = gallery.createMediaGallery;
76
+ exports.createModalInput = input.createModalInput;
77
+ exports.createTextInput = input.createTextInput;
78
+ exports.createLabel = label.createLabel;
79
+ exports.createModalFields = modal.createModalFields;
80
+ exports.modalFieldsToRecord = modal.modalFieldsToRecord;
78
81
  exports.createRow = row.createRow;
79
82
  exports.createSection = section.createSection;
80
83
  exports.createSeparator = separator$1.createSeparator;
@@ -88,12 +91,11 @@ exports.createEmbed = embedplus.createEmbed;
88
91
  exports.createEmbedFiles = files.createEmbedFiles;
89
92
  exports.createEmbedFooter = footer.createEmbedFooter;
90
93
  exports.isAttachment = attachment.isAttachment;
91
- exports.isMessage = message$1.isMessage;
92
94
  exports.isButtonBuilder = button.isButtonBuilder;
93
95
  exports.isContainerBuilder = container$1.isContainerBuilder;
94
96
  exports.isMediaGalleryBuilder = gallery$1.isMediaGalleryBuilder;
95
97
  exports.isMediaGalleryItemBuilder = gallery$1.isMediaGalleryItemBuilder;
96
- exports.isModalBuilder = modal.isModalBuilder;
98
+ exports.isModalBuilder = modal$1.isModalBuilder;
97
99
  exports.isActionRowBuilder = row$1.isActionRowBuilder;
98
100
  exports.isSectionBuilder = section$1.isSectionBuilder;
99
101
  exports.isAnySelectMenuBuilder = selectmenu.isAnySelectMenuBuilder;
@@ -105,6 +107,7 @@ exports.isUserSelectMenuBuilder = selectmenu.isUserSelectMenuBuilder;
105
107
  exports.isSeparatorBuilder = separator$2.isSeparatorBuilder;
106
108
  exports.isTextDisplayBuilder = textdisplay.isTextDisplayBuilder;
107
109
  exports.isTextInputBuilder = textinput.isTextInputBuilder;
110
+ exports.isMessage = message$1.isMessage;
108
111
  Object.keys(core).forEach(function (k) {
109
112
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = core[k];
110
113
  });
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, ActionRowBuilder, TextInputBuilder, ModalSubmitInteraction, ModalSubmitFields, Collection, TextInputComponent, ModalBuilder, TextInputStyle, TextInputComponentData, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, 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, LabelBuilderData, LabelBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, ModalBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -144,22 +144,6 @@ declare function fetchMessageFromURL(client: Client | Client, url: string): Prom
144
144
 
145
145
  declare function setMobileStatus(): void;
146
146
 
147
- type TextInputData = Omit<TextInputComponentData, "type">;
148
- interface ModalFieldData extends Omit<TextInputData, "style"> {
149
- style?: TextInputStyle;
150
- }
151
- declare function createModalInput(data: ModalFieldData): ActionRowBuilder<TextInputBuilder>;
152
- type ModalFieldsData = Record<string, Omit<ModalFieldData, "customId">>;
153
- declare function createModalFields(data: ModalFieldsData): ActionRowBuilder<TextInputBuilder>[];
154
- type ModalFieldsRecord<K extends string> = Record<K, string>;
155
- declare function modalFieldsToRecord<K extends string = string>(fields: ModalSubmitInteraction | ModalSubmitFields | Collection<string, TextInputComponent>): ModalFieldsRecord<K>;
156
- interface CreateModalData {
157
- title?: string;
158
- customId: string;
159
- components: ModalFieldsData;
160
- }
161
- declare function createModal(data: CreateModalData): ModalBuilder;
162
-
163
147
  /**
164
148
  *
165
149
  * @param mention Discord mentionable string
@@ -429,6 +413,35 @@ type MediaGallerySource = MediaGalleryItemData | string | Attachment | Attachmen
429
413
  */
430
414
  declare function createMediaGallery(...items: (MediaGallerySource | MediaGallerySource[])[]): MediaGalleryBuilder;
431
415
 
416
+ type CreateInputData = Partial<Omit<TextInputComponentData, "type" | "label">>;
417
+ declare function createTextInput(data: CreateInputData): TextInputBuilder;
418
+ /**
419
+ * @deprecated Use {@link createTextInput} instead.
420
+ */
421
+ declare function createModalInput(data: Omit<TextInputComponentData, "type" | "style"> & {
422
+ style?: TextInputStyle;
423
+ }): ActionRowBuilder<TextInputBuilder>;
424
+
425
+ type CreateLabelData = Omit<LabelBuilderData, "type">;
426
+ type ComponentInLabelBuilder = NonNullable<CreateLabelData["component"]>;
427
+ declare function createLabel(data: CreateLabelData): LabelBuilder;
428
+ declare function createLabel(label: string, description?: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
429
+ declare function createLabel(label: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
430
+
431
+ type ModalComponents = LabelBuilder | TextDisplayBuilder | string | null | boolean | undefined;
432
+ type ResolveModalData = {
433
+ fields: {
434
+ fields: Collection<string, ModalData>;
435
+ };
436
+ } | {
437
+ fields: Collection<string, ModalData>;
438
+ } | Collection<string, ModalData>;
439
+ type ModalFieldsRecord = Record<string, string | string[]>;
440
+ declare function modalFieldsToRecord<T = ModalFieldsRecord>(data: ResolveModalData): ModalFieldsRecord;
441
+ declare function modalFieldsToRecord<T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
442
+ type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
443
+ declare function createModalFields(...components: ModalComponents[]): ModalFields;
444
+
432
445
  /**
433
446
  * Creates an {@link ActionRowBuilder} containing one or more UI components.
434
447
  *
@@ -841,26 +854,6 @@ declare function createEmbedFiles(embed: EmbedBuilder, options?: CreateEmbedFile
841
854
  */
842
855
  declare function isAttachment(value: unknown): value is Attachment | AttachmentBuilder;
843
856
 
844
- /**
845
- * Checks whether the given value is a {@link Message}.
846
- *
847
- * This function returns `true` if the value is an instance of `Message`
848
- * or if it structurally resembles a `Message` object.
849
- *
850
- * @param value - The value to check.
851
- * @returns `true` if the value is a `Message`, otherwise `false`.
852
- *
853
- * @example
854
- * import type { Message, Interaction } from "discord.js";
855
- *
856
- * function handle(input: Message | Interaction | unknown) {
857
- * if (isMessage(input)) {
858
- * console.log("This is a message with ID:", input.id);
859
- * }
860
- * }
861
- */
862
- declare function isMessage(value: unknown): value is Message;
863
-
864
857
  /**
865
858
  * Checks whether the given value is a {@link ButtonBuilder}.
866
859
  *
@@ -1082,5 +1075,25 @@ declare function isTextDisplayBuilder(value: unknown): value is TextDisplayBuild
1082
1075
  */
1083
1076
  declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
1084
1077
 
1085
- export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createLinkButton, createMediaGallery, createModal, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1086
- export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateModalData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, MagicComponentData, MediaGallerySource, ModalFieldsData, ModalFieldsRecord, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
1078
+ /**
1079
+ * Checks whether the given value is a {@link Message}.
1080
+ *
1081
+ * This function returns `true` if the value is an instance of `Message`
1082
+ * or if it structurally resembles a `Message` object.
1083
+ *
1084
+ * @param value - The value to check.
1085
+ * @returns `true` if the value is a `Message`, otherwise `false`.
1086
+ *
1087
+ * @example
1088
+ * import type { Message, Interaction } from "discord.js";
1089
+ *
1090
+ * function handle(input: Message | Interaction | unknown) {
1091
+ * if (isMessage(input)) {
1092
+ * console.log("This is a message with ID:", input.id);
1093
+ * }
1094
+ * }
1095
+ */
1096
+ declare function isMessage(value: unknown): value is Message;
1097
+
1098
+ export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, 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, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1099
+ export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ComponentInLabelBuilder, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateLabelData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
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, ActionRowBuilder, TextInputBuilder, ModalSubmitInteraction, ModalSubmitFields, Collection, TextInputComponent, ModalBuilder, TextInputStyle, TextInputComponentData, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, 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, LabelBuilderData, LabelBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, ModalBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -144,22 +144,6 @@ declare function fetchMessageFromURL(client: Client | Client, url: string): Prom
144
144
 
145
145
  declare function setMobileStatus(): void;
146
146
 
147
- type TextInputData = Omit<TextInputComponentData, "type">;
148
- interface ModalFieldData extends Omit<TextInputData, "style"> {
149
- style?: TextInputStyle;
150
- }
151
- declare function createModalInput(data: ModalFieldData): ActionRowBuilder<TextInputBuilder>;
152
- type ModalFieldsData = Record<string, Omit<ModalFieldData, "customId">>;
153
- declare function createModalFields(data: ModalFieldsData): ActionRowBuilder<TextInputBuilder>[];
154
- type ModalFieldsRecord<K extends string> = Record<K, string>;
155
- declare function modalFieldsToRecord<K extends string = string>(fields: ModalSubmitInteraction | ModalSubmitFields | Collection<string, TextInputComponent>): ModalFieldsRecord<K>;
156
- interface CreateModalData {
157
- title?: string;
158
- customId: string;
159
- components: ModalFieldsData;
160
- }
161
- declare function createModal(data: CreateModalData): ModalBuilder;
162
-
163
147
  /**
164
148
  *
165
149
  * @param mention Discord mentionable string
@@ -429,6 +413,35 @@ type MediaGallerySource = MediaGalleryItemData | string | Attachment | Attachmen
429
413
  */
430
414
  declare function createMediaGallery(...items: (MediaGallerySource | MediaGallerySource[])[]): MediaGalleryBuilder;
431
415
 
416
+ type CreateInputData = Partial<Omit<TextInputComponentData, "type" | "label">>;
417
+ declare function createTextInput(data: CreateInputData): TextInputBuilder;
418
+ /**
419
+ * @deprecated Use {@link createTextInput} instead.
420
+ */
421
+ declare function createModalInput(data: Omit<TextInputComponentData, "type" | "style"> & {
422
+ style?: TextInputStyle;
423
+ }): ActionRowBuilder<TextInputBuilder>;
424
+
425
+ type CreateLabelData = Omit<LabelBuilderData, "type">;
426
+ type ComponentInLabelBuilder = NonNullable<CreateLabelData["component"]>;
427
+ declare function createLabel(data: CreateLabelData): LabelBuilder;
428
+ declare function createLabel(label: string, description?: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
429
+ declare function createLabel(label: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
430
+
431
+ type ModalComponents = LabelBuilder | TextDisplayBuilder | string | null | boolean | undefined;
432
+ type ResolveModalData = {
433
+ fields: {
434
+ fields: Collection<string, ModalData>;
435
+ };
436
+ } | {
437
+ fields: Collection<string, ModalData>;
438
+ } | Collection<string, ModalData>;
439
+ type ModalFieldsRecord = Record<string, string | string[]>;
440
+ declare function modalFieldsToRecord<T = ModalFieldsRecord>(data: ResolveModalData): ModalFieldsRecord;
441
+ declare function modalFieldsToRecord<T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
442
+ type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
443
+ declare function createModalFields(...components: ModalComponents[]): ModalFields;
444
+
432
445
  /**
433
446
  * Creates an {@link ActionRowBuilder} containing one or more UI components.
434
447
  *
@@ -841,26 +854,6 @@ declare function createEmbedFiles(embed: EmbedBuilder, options?: CreateEmbedFile
841
854
  */
842
855
  declare function isAttachment(value: unknown): value is Attachment | AttachmentBuilder;
843
856
 
844
- /**
845
- * Checks whether the given value is a {@link Message}.
846
- *
847
- * This function returns `true` if the value is an instance of `Message`
848
- * or if it structurally resembles a `Message` object.
849
- *
850
- * @param value - The value to check.
851
- * @returns `true` if the value is a `Message`, otherwise `false`.
852
- *
853
- * @example
854
- * import type { Message, Interaction } from "discord.js";
855
- *
856
- * function handle(input: Message | Interaction | unknown) {
857
- * if (isMessage(input)) {
858
- * console.log("This is a message with ID:", input.id);
859
- * }
860
- * }
861
- */
862
- declare function isMessage(value: unknown): value is Message;
863
-
864
857
  /**
865
858
  * Checks whether the given value is a {@link ButtonBuilder}.
866
859
  *
@@ -1082,5 +1075,25 @@ declare function isTextDisplayBuilder(value: unknown): value is TextDisplayBuild
1082
1075
  */
1083
1076
  declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
1084
1077
 
1085
- export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createLinkButton, createMediaGallery, createModal, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1086
- export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateModalData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, MagicComponentData, MediaGallerySource, ModalFieldsData, ModalFieldsRecord, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
1078
+ /**
1079
+ * Checks whether the given value is a {@link Message}.
1080
+ *
1081
+ * This function returns `true` if the value is an instance of `Message`
1082
+ * or if it structurally resembles a `Message` object.
1083
+ *
1084
+ * @param value - The value to check.
1085
+ * @returns `true` if the value is a `Message`, otherwise `false`.
1086
+ *
1087
+ * @example
1088
+ * import type { Message, Interaction } from "discord.js";
1089
+ *
1090
+ * function handle(input: Message | Interaction | unknown) {
1091
+ * if (isMessage(input)) {
1092
+ * console.log("This is a message with ID:", input.id);
1093
+ * }
1094
+ * }
1095
+ */
1096
+ declare function isMessage(value: unknown): value is Message;
1097
+
1098
+ export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, 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, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1099
+ export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ComponentInLabelBuilder, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateLabelData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
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, ActionRowBuilder, TextInputBuilder, ModalSubmitInteraction, ModalSubmitFields, Collection, TextInputComponent, ModalBuilder, TextInputStyle, TextInputComponentData, Role, WebhookClientOptions, WebhookClient, WebhookClientData, ComponentEmojiResolvable, ButtonBuilder, LinkButtonComponentData, Attachment, AttachmentBuilder, MessageActionRowComponentBuilder, TextDisplayBuilder, SeparatorBuilder, FileBuilder, SectionBuilder, MediaGalleryBuilder, ContainerBuilder, ContainerComponentBuilder as ContainerComponentBuilder$1, ColorResolvable, ComponentType, ContainerComponentData, ContainerComponent, APIUnfurledMediaItem, MediaGalleryItemData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, 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, LabelBuilderData, LabelBuilder, Collection, ModalData, LabelComponentData, TextDisplayComponentData, AnyComponentBuilder, ThumbnailComponentData, ThumbnailBuilder, ButtonComponentData, EmbedAssetData, User, ClientUser, ImageURLOptions, EmbedFooterData, APIEmbed, Embed, EmbedData, EmbedBuilder, AttachmentData, MediaGalleryItemBuilder, ModalBuilder, StringSelectMenuBuilder, UserSelectMenuBuilder, RoleSelectMenuBuilder, ChannelSelectMenuBuilder, MentionableSelectMenuBuilder } from 'discord.js';
3
3
  export * from '@magicyan/core';
4
4
 
5
5
  declare const chars: {
@@ -144,22 +144,6 @@ declare function fetchMessageFromURL(client: Client | Client, url: string): Prom
144
144
 
145
145
  declare function setMobileStatus(): void;
146
146
 
147
- type TextInputData = Omit<TextInputComponentData, "type">;
148
- interface ModalFieldData extends Omit<TextInputData, "style"> {
149
- style?: TextInputStyle;
150
- }
151
- declare function createModalInput(data: ModalFieldData): ActionRowBuilder<TextInputBuilder>;
152
- type ModalFieldsData = Record<string, Omit<ModalFieldData, "customId">>;
153
- declare function createModalFields(data: ModalFieldsData): ActionRowBuilder<TextInputBuilder>[];
154
- type ModalFieldsRecord<K extends string> = Record<K, string>;
155
- declare function modalFieldsToRecord<K extends string = string>(fields: ModalSubmitInteraction | ModalSubmitFields | Collection<string, TextInputComponent>): ModalFieldsRecord<K>;
156
- interface CreateModalData {
157
- title?: string;
158
- customId: string;
159
- components: ModalFieldsData;
160
- }
161
- declare function createModal(data: CreateModalData): ModalBuilder;
162
-
163
147
  /**
164
148
  *
165
149
  * @param mention Discord mentionable string
@@ -429,6 +413,35 @@ type MediaGallerySource = MediaGalleryItemData | string | Attachment | Attachmen
429
413
  */
430
414
  declare function createMediaGallery(...items: (MediaGallerySource | MediaGallerySource[])[]): MediaGalleryBuilder;
431
415
 
416
+ type CreateInputData = Partial<Omit<TextInputComponentData, "type" | "label">>;
417
+ declare function createTextInput(data: CreateInputData): TextInputBuilder;
418
+ /**
419
+ * @deprecated Use {@link createTextInput} instead.
420
+ */
421
+ declare function createModalInput(data: Omit<TextInputComponentData, "type" | "style"> & {
422
+ style?: TextInputStyle;
423
+ }): ActionRowBuilder<TextInputBuilder>;
424
+
425
+ type CreateLabelData = Omit<LabelBuilderData, "type">;
426
+ type ComponentInLabelBuilder = NonNullable<CreateLabelData["component"]>;
427
+ declare function createLabel(data: CreateLabelData): LabelBuilder;
428
+ declare function createLabel(label: string, description?: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
429
+ declare function createLabel(label: string, component?: ComponentInLabelBuilder, id?: number): LabelBuilder;
430
+
431
+ type ModalComponents = LabelBuilder | TextDisplayBuilder | string | null | boolean | undefined;
432
+ type ResolveModalData = {
433
+ fields: {
434
+ fields: Collection<string, ModalData>;
435
+ };
436
+ } | {
437
+ fields: Collection<string, ModalData>;
438
+ } | Collection<string, ModalData>;
439
+ type ModalFieldsRecord = Record<string, string | string[]>;
440
+ declare function modalFieldsToRecord<T = ModalFieldsRecord>(data: ResolveModalData): ModalFieldsRecord;
441
+ declare function modalFieldsToRecord<T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
442
+ type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
443
+ declare function createModalFields(...components: ModalComponents[]): ModalFields;
444
+
432
445
  /**
433
446
  * Creates an {@link ActionRowBuilder} containing one or more UI components.
434
447
  *
@@ -841,26 +854,6 @@ declare function createEmbedFiles(embed: EmbedBuilder, options?: CreateEmbedFile
841
854
  */
842
855
  declare function isAttachment(value: unknown): value is Attachment | AttachmentBuilder;
843
856
 
844
- /**
845
- * Checks whether the given value is a {@link Message}.
846
- *
847
- * This function returns `true` if the value is an instance of `Message`
848
- * or if it structurally resembles a `Message` object.
849
- *
850
- * @param value - The value to check.
851
- * @returns `true` if the value is a `Message`, otherwise `false`.
852
- *
853
- * @example
854
- * import type { Message, Interaction } from "discord.js";
855
- *
856
- * function handle(input: Message | Interaction | unknown) {
857
- * if (isMessage(input)) {
858
- * console.log("This is a message with ID:", input.id);
859
- * }
860
- * }
861
- */
862
- declare function isMessage(value: unknown): value is Message;
863
-
864
857
  /**
865
858
  * Checks whether the given value is a {@link ButtonBuilder}.
866
859
  *
@@ -1082,5 +1075,25 @@ declare function isTextDisplayBuilder(value: unknown): value is TextDisplayBuild
1082
1075
  */
1083
1076
  declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
1084
1077
 
1085
- export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, createLinkButton, createMediaGallery, createModal, createModalFields, createModalInput, createRow, createSection, createSeparator, createTextDisplay, createThumbArea, createThumbnail, createWebhookClient, extractMentionId, fetchMessageFromURL, findChannel, findCommand, findEmoji, findMember, findMessage, findRole, getChannelUrlInfo, getMessageURLInfo, isActionRowBuilder, isAnySelectMenuBuilder, isAttachment, isButtonBuilder, isChannelSelectMenuBuilder, isContainerBuilder, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1086
- export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateModalData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, MagicComponentData, MediaGallerySource, ModalFieldsData, ModalFieldsRecord, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
1078
+ /**
1079
+ * Checks whether the given value is a {@link Message}.
1080
+ *
1081
+ * This function returns `true` if the value is an instance of `Message`
1082
+ * or if it structurally resembles a `Message` object.
1083
+ *
1084
+ * @param value - The value to check.
1085
+ * @returns `true` if the value is a `Message`, otherwise `false`.
1086
+ *
1087
+ * @example
1088
+ * import type { Message, Interaction } from "discord.js";
1089
+ *
1090
+ * function handle(input: Message | Interaction | unknown) {
1091
+ * if (isMessage(input)) {
1092
+ * console.log("This is a message with ID:", input.id);
1093
+ * }
1094
+ * }
1095
+ */
1096
+ declare function isMessage(value: unknown): value is Message;
1097
+
1098
+ export { ContainerPlusBuilder, CustomItents, CustomPartials, EmbedLimit, EmbedPlusBuilder, Separator, chars, commandMention, createComponents, createContainer, createEmbed, createEmbedAsset, createEmbedAuthor, createEmbedFiles, createEmbedFooter, createFile, 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, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
1099
+ export type { AnyEmbedData, AnySelectMenuBuilder, ComponentBuildersData, ComponentData, ComponentInLabelBuilder, ContainerColor, ContainerComponentBuilder, ContainerData, ContainerInComponentType, CreateComponentData, CreateLabelData, EmbedPlusAssetData, EmbedPlusAuthorData, EmbedPlusColorData, EmbedPlusData, EmbedPlusFooterData, EmbedPlusProperty, MagicComponentData, MediaGallerySource, SectionAccessory, SectionAccessoryData, SectionButtonAccessory, SectionData, SectionThumbnailAccessory, SeparatorData, ThumbAreaData, ThumbAreaThumbnail, ThumbnailData };
package/dist/index.mjs CHANGED
@@ -8,7 +8,6 @@ export { findEmoji } from './functions/emojis.mjs';
8
8
  export { findMember } from './functions/members.mjs';
9
9
  export { fetchMessageFromURL, findMessage, getMessageURLInfo } from './functions/message.mjs';
10
10
  export { setMobileStatus } from './functions/misc.mjs';
11
- export { createModal, createModalFields, createModalInput, modalFieldsToRecord } from './functions/modals.mjs';
12
11
  export { extractMentionId } from './functions/regex.mjs';
13
12
  export { findRole } from './functions/roles.mjs';
14
13
  export { createWebhookClient } from './functions/webhooks.mjs';
@@ -17,6 +16,9 @@ export { createComponents } from './functions/components/components.mjs';
17
16
  export { ContainerPlusBuilder, createContainer } from './functions/components/container.mjs';
18
17
  export { createFile } from './functions/components/file.mjs';
19
18
  export { createMediaGallery } from './functions/components/gallery.mjs';
19
+ export { createModalInput, createTextInput } from './functions/components/input.mjs';
20
+ export { createLabel } from './functions/components/label.mjs';
21
+ export { createModalFields, modalFieldsToRecord } from './functions/components/modal.mjs';
20
22
  export { createRow } from './functions/components/row.mjs';
21
23
  export { createSection } from './functions/components/section.mjs';
22
24
  export { createSeparator } from './functions/components/separator.mjs';
@@ -29,7 +31,6 @@ export { EmbedPlusBuilder, createEmbed } from './functions/embeds/embedplus.mjs'
29
31
  export { createEmbedFiles } from './functions/embeds/files.mjs';
30
32
  export { createEmbedFooter } from './functions/embeds/footer.mjs';
31
33
  export { isAttachment } from './guards/attachment.mjs';
32
- export { isMessage } from './guards/message.mjs';
33
34
  export { isButtonBuilder } from './guards/components/button.mjs';
34
35
  export { isContainerBuilder } from './guards/components/container.mjs';
35
36
  export { isMediaGalleryBuilder, isMediaGalleryItemBuilder } from './guards/components/gallery.mjs';
@@ -40,4 +41,5 @@ export { isAnySelectMenuBuilder, isChannelSelectMenuBuilder, isMentionableSelect
40
41
  export { isSeparatorBuilder } from './guards/components/separator.mjs';
41
42
  export { isTextDisplayBuilder } from './guards/components/textdisplay.mjs';
42
43
  export { isTextInputBuilder } from './guards/components/textinput.mjs';
44
+ export { isMessage } from './guards/message.mjs';
43
45
  export * from '@magicyan/core';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicyan/discord",
3
- "version": "1.5.4",
3
+ "version": "1.6.0",
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.22.1"
42
+ "discord.js": "^14.23.2"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@magicyan/config": "*",
@@ -1,33 +0,0 @@
1
- 'use strict';
2
-
3
- const discord_js = require('discord.js');
4
- const row = require('./components/row.cjs');
5
-
6
- function createModalInput(data) {
7
- data.style ?? (data.style = discord_js.TextInputStyle.Short);
8
- return row.createRow(new discord_js.TextInputBuilder(data));
9
- }
10
- function createModalFields(data) {
11
- return Object.entries(data).map(
12
- ([customId, data2]) => createModalInput({ customId, ...data2 })
13
- );
14
- }
15
- function modalFieldsToRecord(fields) {
16
- const modalFields = fields instanceof discord_js.ModalSubmitInteraction ? fields.fields.fields : "fields" in fields ? fields.fields : fields;
17
- return modalFields.reduce((acc, { customId, value }) => {
18
- acc[customId] = value;
19
- return acc;
20
- }, {});
21
- }
22
- function createModal(data) {
23
- return new discord_js.ModalBuilder({
24
- title: data.title ?? data.customId,
25
- customId: data.customId,
26
- components: createModalFields(data.components)
27
- });
28
- }
29
-
30
- exports.createModal = createModal;
31
- exports.createModalFields = createModalFields;
32
- exports.createModalInput = createModalInput;
33
- exports.modalFieldsToRecord = modalFieldsToRecord;
@@ -1,28 +0,0 @@
1
- import { TextInputStyle, TextInputBuilder, ModalSubmitInteraction, ModalBuilder } from 'discord.js';
2
- import { createRow } from './components/row.mjs';
3
-
4
- function createModalInput(data) {
5
- data.style ?? (data.style = TextInputStyle.Short);
6
- return createRow(new TextInputBuilder(data));
7
- }
8
- function createModalFields(data) {
9
- return Object.entries(data).map(
10
- ([customId, data2]) => createModalInput({ customId, ...data2 })
11
- );
12
- }
13
- function modalFieldsToRecord(fields) {
14
- const modalFields = fields instanceof ModalSubmitInteraction ? fields.fields.fields : "fields" in fields ? fields.fields : fields;
15
- return modalFields.reduce((acc, { customId, value }) => {
16
- acc[customId] = value;
17
- return acc;
18
- }, {});
19
- }
20
- function createModal(data) {
21
- return new ModalBuilder({
22
- title: data.title ?? data.customId,
23
- customId: data.customId,
24
- components: createModalFields(data.components)
25
- });
26
- }
27
-
28
- export { createModal, createModalFields, createModalInput, modalFieldsToRecord };