@magicyan/discord 1.6.0 → 1.6.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.
- package/dist/functions/components/modal.cjs +10 -1
- package/dist/functions/components/modal.mjs +10 -1
- package/dist/functions/components/upload.cjs +19 -0
- package/dist/functions/components/upload.mjs +17 -0
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +45 -5
- package/dist/index.d.mts +45 -5
- package/dist/index.d.ts +45 -5
- package/dist/index.mjs +1 -0
- package/package.json +2 -2
|
@@ -6,7 +6,16 @@ const discord_js = require('discord.js');
|
|
|
6
6
|
function modalFieldsToRecord(data, parse) {
|
|
7
7
|
const collection = "fields" in data ? "fields" in data.fields ? data.fields.fields : data.fields : data;
|
|
8
8
|
const record = collection.reduce((acc, data2) => {
|
|
9
|
-
|
|
9
|
+
if (data2.type === discord_js.ComponentType.TextInput) {
|
|
10
|
+
acc[data2.customId] = data2.value;
|
|
11
|
+
return acc;
|
|
12
|
+
}
|
|
13
|
+
if (data2.type === discord_js.ComponentType.FileUpload) {
|
|
14
|
+
const attachments = data2.attachments;
|
|
15
|
+
acc[data2.customId] = Array.from(attachments?.values() ?? []).map((data3) => data3.url);
|
|
16
|
+
return acc;
|
|
17
|
+
}
|
|
18
|
+
acc[data2.customId] = Array.from(data2.values ?? []);
|
|
10
19
|
return acc;
|
|
11
20
|
}, {});
|
|
12
21
|
return parse ? parse(record) : record;
|
|
@@ -4,7 +4,16 @@ import { ComponentType } from 'discord.js';
|
|
|
4
4
|
function modalFieldsToRecord(data, parse) {
|
|
5
5
|
const collection = "fields" in data ? "fields" in data.fields ? data.fields.fields : data.fields : data;
|
|
6
6
|
const record = collection.reduce((acc, data2) => {
|
|
7
|
-
|
|
7
|
+
if (data2.type === ComponentType.TextInput) {
|
|
8
|
+
acc[data2.customId] = data2.value;
|
|
9
|
+
return acc;
|
|
10
|
+
}
|
|
11
|
+
if (data2.type === ComponentType.FileUpload) {
|
|
12
|
+
const attachments = data2.attachments;
|
|
13
|
+
acc[data2.customId] = Array.from(attachments?.values() ?? []).map((data3) => data3.url);
|
|
14
|
+
return acc;
|
|
15
|
+
}
|
|
16
|
+
acc[data2.customId] = Array.from(data2.values ?? []);
|
|
8
17
|
return acc;
|
|
9
18
|
}, {});
|
|
10
19
|
return parse ? parse(record) : record;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const discord_js = require('discord.js');
|
|
4
|
+
|
|
5
|
+
function createFileUpload(arg) {
|
|
6
|
+
if (typeof arg === "string")
|
|
7
|
+
return new discord_js.FileUploadBuilder({
|
|
8
|
+
custom_id: arg
|
|
9
|
+
});
|
|
10
|
+
const { customId, maxValues, minValues, ...data } = arg;
|
|
11
|
+
return new discord_js.FileUploadBuilder({
|
|
12
|
+
custom_id: customId,
|
|
13
|
+
max_values: maxValues,
|
|
14
|
+
min_values: minValues,
|
|
15
|
+
...data
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.createFileUpload = createFileUpload;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FileUploadBuilder } from 'discord.js';
|
|
2
|
+
|
|
3
|
+
function createFileUpload(arg) {
|
|
4
|
+
if (typeof arg === "string")
|
|
5
|
+
return new FileUploadBuilder({
|
|
6
|
+
custom_id: arg
|
|
7
|
+
});
|
|
8
|
+
const { customId, maxValues, minValues, ...data } = arg;
|
|
9
|
+
return new FileUploadBuilder({
|
|
10
|
+
custom_id: customId,
|
|
11
|
+
max_values: maxValues,
|
|
12
|
+
min_values: minValues,
|
|
13
|
+
...data
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { createFileUpload };
|
package/dist/index.cjs
CHANGED
|
@@ -27,6 +27,7 @@ const separator$1 = require('./functions/components/separator.cjs');
|
|
|
27
27
|
const text = require('./functions/components/text.cjs');
|
|
28
28
|
const thumbarea = require('./functions/components/thumbarea.cjs');
|
|
29
29
|
const thumbnail = require('./functions/components/thumbnail.cjs');
|
|
30
|
+
const upload = require('./functions/components/upload.cjs');
|
|
30
31
|
const assets = require('./functions/embeds/assets.cjs');
|
|
31
32
|
const author = require('./functions/embeds/author.cjs');
|
|
32
33
|
const embedplus = require('./functions/embeds/embedplus.cjs');
|
|
@@ -84,6 +85,7 @@ exports.createSeparator = separator$1.createSeparator;
|
|
|
84
85
|
exports.createTextDisplay = text.createTextDisplay;
|
|
85
86
|
exports.createThumbArea = thumbarea.createThumbArea;
|
|
86
87
|
exports.createThumbnail = thumbnail.createThumbnail;
|
|
88
|
+
exports.createFileUpload = upload.createFileUpload;
|
|
87
89
|
exports.createEmbedAsset = assets.createEmbedAsset;
|
|
88
90
|
exports.createEmbedAuthor = author.createEmbedAuthor;
|
|
89
91
|
exports.EmbedPlusBuilder = embedplus.EmbedPlusBuilder;
|
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, 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, 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';
|
|
3
3
|
export * from '@magicyan/core';
|
|
4
4
|
|
|
5
5
|
declare const chars: {
|
|
@@ -437,8 +437,38 @@ type ResolveModalData = {
|
|
|
437
437
|
fields: Collection<string, ModalData>;
|
|
438
438
|
} | Collection<string, ModalData>;
|
|
439
439
|
type ModalFieldsRecord = Record<string, string | string[]>;
|
|
440
|
-
|
|
441
|
-
|
|
440
|
+
/**
|
|
441
|
+
* Converts modal submitted fields into a plain record object, mapping each component `customId` to its value.
|
|
442
|
+
*
|
|
443
|
+
* This function supports multiple modal submission data shapes coming from Discord.js,
|
|
444
|
+
* automatically extracting and normalizing values from:
|
|
445
|
+
* - Text input fields (`ComponentType.TextInput`) → string
|
|
446
|
+
* - Select menus & other multi-value components → string[]
|
|
447
|
+
* - File upload fields (`ComponentType.FileUpload`) → string[] of attachment URLs
|
|
448
|
+
*
|
|
449
|
+
* Optionally, a parser callback may be provided to transform the resulting record before returning it.
|
|
450
|
+
*
|
|
451
|
+
* @template T The expected return type after optional parsing.
|
|
452
|
+
* @param {ResolveModalData} data - The modal submission data, usually from an interaction.
|
|
453
|
+
* @param {(record: ModalFieldsRecord) => T} [parse] - Optional transform function applied to the resulting record.
|
|
454
|
+
* @returns {ModalFieldsRecord | T} The processed fields as a record, or the parser result if provided.
|
|
455
|
+
*
|
|
456
|
+
* @example
|
|
457
|
+
* ```ts
|
|
458
|
+
* const fields = modalFieldsToRecord(interaction.fields);
|
|
459
|
+
* console.log(fields.username); // "JohnDoe"
|
|
460
|
+
* ```
|
|
461
|
+
*
|
|
462
|
+
* @example With parsing
|
|
463
|
+
* ```ts
|
|
464
|
+
* const result = modalFieldsToRecord(interaction.fields, fields => ({
|
|
465
|
+
* name: fields.username.trim(),
|
|
466
|
+
* age: Number.parseInt(fields.age),
|
|
467
|
+
* }));
|
|
468
|
+
* ```
|
|
469
|
+
*/
|
|
470
|
+
declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData): T;
|
|
471
|
+
declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
|
|
442
472
|
type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
|
|
443
473
|
declare function createModalFields(...components: ModalComponents[]): ModalFields;
|
|
444
474
|
|
|
@@ -688,6 +718,16 @@ type ThumbAreaData = {
|
|
|
688
718
|
declare function createThumbArea(content: string, thumbnail?: ThumbAreaThumbnail): SectionBuilder | TextDisplayBuilder;
|
|
689
719
|
declare function createThumbArea(data: ThumbAreaData): SectionBuilder | TextDisplayBuilder;
|
|
690
720
|
|
|
721
|
+
interface FileUploadData {
|
|
722
|
+
customId?: string;
|
|
723
|
+
minValues?: number;
|
|
724
|
+
maxValues?: number;
|
|
725
|
+
required?: boolean;
|
|
726
|
+
id?: number;
|
|
727
|
+
}
|
|
728
|
+
declare function createFileUpload(data: FileUploadData): FileUploadBuilder;
|
|
729
|
+
declare function createFileUpload(customId: string): FileUploadBuilder;
|
|
730
|
+
|
|
691
731
|
type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
|
|
692
732
|
type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
|
|
693
733
|
declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
@@ -1095,5 +1135,5 @@ declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
|
|
|
1095
1135
|
*/
|
|
1096
1136
|
declare function isMessage(value: unknown): value is Message;
|
|
1097
1137
|
|
|
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 };
|
|
1138
|
+
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, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
|
|
1139
|
+
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 };
|
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, 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, 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';
|
|
3
3
|
export * from '@magicyan/core';
|
|
4
4
|
|
|
5
5
|
declare const chars: {
|
|
@@ -437,8 +437,38 @@ type ResolveModalData = {
|
|
|
437
437
|
fields: Collection<string, ModalData>;
|
|
438
438
|
} | Collection<string, ModalData>;
|
|
439
439
|
type ModalFieldsRecord = Record<string, string | string[]>;
|
|
440
|
-
|
|
441
|
-
|
|
440
|
+
/**
|
|
441
|
+
* Converts modal submitted fields into a plain record object, mapping each component `customId` to its value.
|
|
442
|
+
*
|
|
443
|
+
* This function supports multiple modal submission data shapes coming from Discord.js,
|
|
444
|
+
* automatically extracting and normalizing values from:
|
|
445
|
+
* - Text input fields (`ComponentType.TextInput`) → string
|
|
446
|
+
* - Select menus & other multi-value components → string[]
|
|
447
|
+
* - File upload fields (`ComponentType.FileUpload`) → string[] of attachment URLs
|
|
448
|
+
*
|
|
449
|
+
* Optionally, a parser callback may be provided to transform the resulting record before returning it.
|
|
450
|
+
*
|
|
451
|
+
* @template T The expected return type after optional parsing.
|
|
452
|
+
* @param {ResolveModalData} data - The modal submission data, usually from an interaction.
|
|
453
|
+
* @param {(record: ModalFieldsRecord) => T} [parse] - Optional transform function applied to the resulting record.
|
|
454
|
+
* @returns {ModalFieldsRecord | T} The processed fields as a record, or the parser result if provided.
|
|
455
|
+
*
|
|
456
|
+
* @example
|
|
457
|
+
* ```ts
|
|
458
|
+
* const fields = modalFieldsToRecord(interaction.fields);
|
|
459
|
+
* console.log(fields.username); // "JohnDoe"
|
|
460
|
+
* ```
|
|
461
|
+
*
|
|
462
|
+
* @example With parsing
|
|
463
|
+
* ```ts
|
|
464
|
+
* const result = modalFieldsToRecord(interaction.fields, fields => ({
|
|
465
|
+
* name: fields.username.trim(),
|
|
466
|
+
* age: Number.parseInt(fields.age),
|
|
467
|
+
* }));
|
|
468
|
+
* ```
|
|
469
|
+
*/
|
|
470
|
+
declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData): T;
|
|
471
|
+
declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
|
|
442
472
|
type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
|
|
443
473
|
declare function createModalFields(...components: ModalComponents[]): ModalFields;
|
|
444
474
|
|
|
@@ -688,6 +718,16 @@ type ThumbAreaData = {
|
|
|
688
718
|
declare function createThumbArea(content: string, thumbnail?: ThumbAreaThumbnail): SectionBuilder | TextDisplayBuilder;
|
|
689
719
|
declare function createThumbArea(data: ThumbAreaData): SectionBuilder | TextDisplayBuilder;
|
|
690
720
|
|
|
721
|
+
interface FileUploadData {
|
|
722
|
+
customId?: string;
|
|
723
|
+
minValues?: number;
|
|
724
|
+
maxValues?: number;
|
|
725
|
+
required?: boolean;
|
|
726
|
+
id?: number;
|
|
727
|
+
}
|
|
728
|
+
declare function createFileUpload(data: FileUploadData): FileUploadBuilder;
|
|
729
|
+
declare function createFileUpload(customId: string): FileUploadBuilder;
|
|
730
|
+
|
|
691
731
|
type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
|
|
692
732
|
type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
|
|
693
733
|
declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
@@ -1095,5 +1135,5 @@ declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
|
|
|
1095
1135
|
*/
|
|
1096
1136
|
declare function isMessage(value: unknown): value is Message;
|
|
1097
1137
|
|
|
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 };
|
|
1138
|
+
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, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
|
|
1139
|
+
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 };
|
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, 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, 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';
|
|
3
3
|
export * from '@magicyan/core';
|
|
4
4
|
|
|
5
5
|
declare const chars: {
|
|
@@ -437,8 +437,38 @@ type ResolveModalData = {
|
|
|
437
437
|
fields: Collection<string, ModalData>;
|
|
438
438
|
} | Collection<string, ModalData>;
|
|
439
439
|
type ModalFieldsRecord = Record<string, string | string[]>;
|
|
440
|
-
|
|
441
|
-
|
|
440
|
+
/**
|
|
441
|
+
* Converts modal submitted fields into a plain record object, mapping each component `customId` to its value.
|
|
442
|
+
*
|
|
443
|
+
* This function supports multiple modal submission data shapes coming from Discord.js,
|
|
444
|
+
* automatically extracting and normalizing values from:
|
|
445
|
+
* - Text input fields (`ComponentType.TextInput`) → string
|
|
446
|
+
* - Select menus & other multi-value components → string[]
|
|
447
|
+
* - File upload fields (`ComponentType.FileUpload`) → string[] of attachment URLs
|
|
448
|
+
*
|
|
449
|
+
* Optionally, a parser callback may be provided to transform the resulting record before returning it.
|
|
450
|
+
*
|
|
451
|
+
* @template T The expected return type after optional parsing.
|
|
452
|
+
* @param {ResolveModalData} data - The modal submission data, usually from an interaction.
|
|
453
|
+
* @param {(record: ModalFieldsRecord) => T} [parse] - Optional transform function applied to the resulting record.
|
|
454
|
+
* @returns {ModalFieldsRecord | T} The processed fields as a record, or the parser result if provided.
|
|
455
|
+
*
|
|
456
|
+
* @example
|
|
457
|
+
* ```ts
|
|
458
|
+
* const fields = modalFieldsToRecord(interaction.fields);
|
|
459
|
+
* console.log(fields.username); // "JohnDoe"
|
|
460
|
+
* ```
|
|
461
|
+
*
|
|
462
|
+
* @example With parsing
|
|
463
|
+
* ```ts
|
|
464
|
+
* const result = modalFieldsToRecord(interaction.fields, fields => ({
|
|
465
|
+
* name: fields.username.trim(),
|
|
466
|
+
* age: Number.parseInt(fields.age),
|
|
467
|
+
* }));
|
|
468
|
+
* ```
|
|
469
|
+
*/
|
|
470
|
+
declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData): T;
|
|
471
|
+
declare function modalFieldsToRecord<const T = ModalFieldsRecord>(data: ResolveModalData, parse: (record: ModalFieldsRecord) => T): T;
|
|
442
472
|
type ModalFields = (LabelComponentData | TextDisplayComponentData)[];
|
|
443
473
|
declare function createModalFields(...components: ModalComponents[]): ModalFields;
|
|
444
474
|
|
|
@@ -688,6 +718,16 @@ type ThumbAreaData = {
|
|
|
688
718
|
declare function createThumbArea(content: string, thumbnail?: ThumbAreaThumbnail): SectionBuilder | TextDisplayBuilder;
|
|
689
719
|
declare function createThumbArea(data: ThumbAreaData): SectionBuilder | TextDisplayBuilder;
|
|
690
720
|
|
|
721
|
+
interface FileUploadData {
|
|
722
|
+
customId?: string;
|
|
723
|
+
minValues?: number;
|
|
724
|
+
maxValues?: number;
|
|
725
|
+
required?: boolean;
|
|
726
|
+
id?: number;
|
|
727
|
+
}
|
|
728
|
+
declare function createFileUpload(data: FileUploadData): FileUploadBuilder;
|
|
729
|
+
declare function createFileUpload(customId: string): FileUploadBuilder;
|
|
730
|
+
|
|
691
731
|
type EmbedPlusAssetData = string | Attachment | AttachmentBuilder | EmbedAssetData | undefined | null;
|
|
692
732
|
type EmbedAssetOptions = Omit<EmbedAssetData, "url">;
|
|
693
733
|
declare function createEmbedAsset(source: EmbedPlusAssetData, options?: EmbedAssetOptions): EmbedAssetData | undefined;
|
|
@@ -1095,5 +1135,5 @@ declare function isTextInputBuilder(value: unknown): value is TextInputBuilder;
|
|
|
1095
1135
|
*/
|
|
1096
1136
|
declare function isMessage(value: unknown): value is Message;
|
|
1097
1137
|
|
|
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 };
|
|
1138
|
+
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, isMediaGalleryBuilder, isMediaGalleryItemBuilder, isMentionableSelectMenuBuilder, isMessage, isModalBuilder, isRoleSelectMenuBuilder, isSectionBuilder, isSeparatorBuilder, isStringSelectMenuBuilder, isTextDisplayBuilder, isTextInputBuilder, isUserSelectMenuBuilder, modalFieldsToRecord, setMobileStatus, wrapButtons };
|
|
1139
|
+
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 };
|
package/dist/index.mjs
CHANGED
|
@@ -25,6 +25,7 @@ export { createSeparator } from './functions/components/separator.mjs';
|
|
|
25
25
|
export { createTextDisplay } from './functions/components/text.mjs';
|
|
26
26
|
export { createThumbArea } from './functions/components/thumbarea.mjs';
|
|
27
27
|
export { createThumbnail } from './functions/components/thumbnail.mjs';
|
|
28
|
+
export { createFileUpload } from './functions/components/upload.mjs';
|
|
28
29
|
export { createEmbedAsset } from './functions/embeds/assets.mjs';
|
|
29
30
|
export { createEmbedAuthor } from './functions/embeds/author.mjs';
|
|
30
31
|
export { EmbedPlusBuilder, createEmbed } from './functions/embeds/embedplus.mjs';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@magicyan/discord",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.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.
|
|
42
|
+
"discord.js": "^14.24.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@magicyan/config": "*",
|