seedcord 0.11.0 → 0.12.0-next.1
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/Components-Drs0KoOi.d.mts +151 -0
- package/dist/{Database-CqvL4DO2.mjs → Database-DAWd3hyw.mjs} +9 -7
- package/dist/Database-DAWd3hyw.mjs.map +1 -0
- package/dist/{Database-Xu_qxdiF.cjs → Database-DTVbdvLZ.cjs} +8 -6
- package/dist/Database-DTVbdvLZ.cjs.map +1 -0
- package/dist/index.cjs +1174 -332
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +845 -229
- package/dist/index.mjs +1169 -333
- package/dist/index.mjs.map +1 -1
- package/dist/internal.index.cjs +1 -1
- package/dist/internal.index.d.mts +1 -1
- package/dist/internal.index.mjs +1 -1
- package/package.json +4 -5
- package/dist/Components-D-AZ6ESx.d.mts +0 -244
- package/dist/Database-CqvL4DO2.mjs.map +0 -1
- package/dist/Database-Xu_qxdiF.cjs.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { ActionRowBuilder, ButtonBuilder, ChannelSelectMenuBuilder, CheckboxBuilder, CheckboxGroupBuilder, CheckboxGroupOptionBuilder, ContainerBuilder, ContextMenuCommandBuilder, EmbedBuilder, FileBuilder, FileUploadBuilder, LabelBuilder, MediaGalleryBuilder, MentionableSelectMenuBuilder, ModalBuilder, RadioGroupBuilder, RadioGroupOptionBuilder, RoleSelectMenuBuilder, SectionBuilder, SeparatorBuilder, SlashCommandBuilder, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, TextInputBuilder, UserSelectMenuBuilder } from "discord.js";
|
|
2
|
+
|
|
3
|
+
//#region src/interfaces/Components.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Available Discord.js builder classes for use with BuilderComponent for commands, embeds, modals, etc.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
declare const BuilderTypes: {
|
|
10
|
+
command: typeof SlashCommandBuilder;
|
|
11
|
+
context_menu: typeof ContextMenuCommandBuilder;
|
|
12
|
+
subcommand: typeof SlashCommandSubcommandBuilder;
|
|
13
|
+
group: typeof SlashCommandSubcommandGroupBuilder;
|
|
14
|
+
embed: typeof EmbedBuilder;
|
|
15
|
+
modal: typeof ModalBuilder;
|
|
16
|
+
label: typeof LabelBuilder;
|
|
17
|
+
text_input: typeof TextInputBuilder;
|
|
18
|
+
file_upload: typeof FileUploadBuilder;
|
|
19
|
+
checkbox: typeof CheckboxBuilder;
|
|
20
|
+
checkbox_group: typeof CheckboxGroupBuilder;
|
|
21
|
+
checkbox_group_option: typeof CheckboxGroupOptionBuilder;
|
|
22
|
+
radio_group: typeof RadioGroupBuilder;
|
|
23
|
+
radio_group_option: typeof RadioGroupOptionBuilder;
|
|
24
|
+
button: typeof ButtonBuilder;
|
|
25
|
+
menu_string: typeof StringSelectMenuBuilder;
|
|
26
|
+
menu_option_string: typeof StringSelectMenuOptionBuilder;
|
|
27
|
+
menu_user: typeof UserSelectMenuBuilder;
|
|
28
|
+
menu_channel: typeof ChannelSelectMenuBuilder;
|
|
29
|
+
menu_mentionable: typeof MentionableSelectMenuBuilder;
|
|
30
|
+
menu_role: typeof RoleSelectMenuBuilder;
|
|
31
|
+
container: typeof ContainerBuilder;
|
|
32
|
+
text_display: typeof TextDisplayBuilder;
|
|
33
|
+
file: typeof FileBuilder;
|
|
34
|
+
media: typeof MediaGalleryBuilder;
|
|
35
|
+
section: typeof SectionBuilder;
|
|
36
|
+
separator: typeof SeparatorBuilder;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Available Discord.js action row classes for use with RowComponent for Select Menus and Buttons
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
declare const RowTypes: {
|
|
44
|
+
button: typeof ActionRowBuilder<ButtonBuilder>;
|
|
45
|
+
menu_string: typeof ActionRowBuilder<StringSelectMenuBuilder>;
|
|
46
|
+
menu_user: typeof ActionRowBuilder<UserSelectMenuBuilder>;
|
|
47
|
+
menu_channel: typeof ActionRowBuilder<ChannelSelectMenuBuilder>;
|
|
48
|
+
menu_mentionable: typeof ActionRowBuilder<MentionableSelectMenuBuilder>;
|
|
49
|
+
menu_role: typeof ActionRowBuilder<RoleSelectMenuBuilder>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Available Discord.js builder types for use with BuilderComponent
|
|
53
|
+
*/
|
|
54
|
+
type BuilderType = keyof typeof BuilderTypes;
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
type InstantiatedBuilder<BuilderKey extends BuilderType> = InstanceType<(typeof BuilderTypes)[BuilderKey]>;
|
|
59
|
+
/**
|
|
60
|
+
* Available Discord.js action row types for use with RowComponent
|
|
61
|
+
*/
|
|
62
|
+
type RowType = keyof typeof RowTypes;
|
|
63
|
+
/**
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
type InstantiatedActionRow<RowKey extends RowType> = InstanceType<(typeof RowTypes)[RowKey]>;
|
|
67
|
+
/**
|
|
68
|
+
* Base class for Discord component wrappers
|
|
69
|
+
*
|
|
70
|
+
* Provides common functionality for building Discord components with proper typing.
|
|
71
|
+
*
|
|
72
|
+
* @typeParam TComponent - The Discord.js component type being wrapped
|
|
73
|
+
*
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
declare abstract class BaseComponent<TComponent> {
|
|
77
|
+
private readonly _component;
|
|
78
|
+
protected constructor(ComponentClass: new () => TComponent);
|
|
79
|
+
/**
|
|
80
|
+
* Gets the built component (should be considered read-only)
|
|
81
|
+
*
|
|
82
|
+
* Returns the finalized component ready for use in Discord messages.
|
|
83
|
+
*
|
|
84
|
+
* Please do not use for further configuration, use `this.instance` for that.
|
|
85
|
+
* @example new SomeComponent().component
|
|
86
|
+
*/
|
|
87
|
+
abstract get component(): InstantiatedBuilder<BuilderType> | InstantiatedActionRow<RowType>;
|
|
88
|
+
/**
|
|
89
|
+
* Gets the component instance for configuration
|
|
90
|
+
*
|
|
91
|
+
* Use this to access Discord.js builder methods like setTitle(), setDescription(), etc.
|
|
92
|
+
*
|
|
93
|
+
* Use this in your component classes to configure the builder
|
|
94
|
+
* @example this.instance.setTitle('My Modal')
|
|
95
|
+
*/
|
|
96
|
+
protected get instance(): TComponent;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Base class for Discord.js builder components
|
|
100
|
+
*
|
|
101
|
+
* Wraps Discord.js builders (SlashCommandBuilder, EmbedBuilder, etc.) with
|
|
102
|
+
* Seedcord-specific defaults and helper methods.
|
|
103
|
+
*
|
|
104
|
+
* @typeParam BuilderKey - The type of Discord.js builder being wrapped
|
|
105
|
+
*/
|
|
106
|
+
declare abstract class BuilderComponent<BuilderKey extends BuilderType> extends BaseComponent<InstantiatedBuilder<BuilderKey>> {
|
|
107
|
+
readonly type: BuilderKey;
|
|
108
|
+
private colorApplied;
|
|
109
|
+
protected constructor(type: BuilderKey);
|
|
110
|
+
get component(): InstantiatedBuilder<BuilderKey>;
|
|
111
|
+
private applyBotColor;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Base class for Discord action row components
|
|
115
|
+
*
|
|
116
|
+
* Wraps Discord.js action row builder with Seedcord-specific defaults and helper methods.
|
|
117
|
+
*
|
|
118
|
+
* @typeParam RowKey - The Discord.js action row type being wrapped
|
|
119
|
+
*/
|
|
120
|
+
declare abstract class RowComponent<RowKey extends RowType> extends BaseComponent<InstantiatedActionRow<RowKey>> {
|
|
121
|
+
readonly type: RowKey;
|
|
122
|
+
protected constructor(type: RowKey);
|
|
123
|
+
get component(): InstantiatedActionRow<RowKey>;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Base class for custom error types with Discord embed responses
|
|
127
|
+
*
|
|
128
|
+
* Errors extending CustomError should be used with the `Catchable` decorators to implement a control flow. These errors will be caught and handled by the framework to show the user the configured response.
|
|
129
|
+
*/
|
|
130
|
+
declare abstract class CustomError extends Error {
|
|
131
|
+
message: string;
|
|
132
|
+
private _emit;
|
|
133
|
+
readonly response: EmbedBuilder;
|
|
134
|
+
protected constructor(message: string);
|
|
135
|
+
/**
|
|
136
|
+
* Whether this error should be emitted to logs
|
|
137
|
+
*
|
|
138
|
+
* Controls logging behavior. Errors with emit=true will always be logged,
|
|
139
|
+
* while emit=false errors may be suppressed in production.
|
|
140
|
+
*
|
|
141
|
+
* @returns True if the error should be logged
|
|
142
|
+
*/
|
|
143
|
+
get emit(): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Sets whether this error should be emitted to logs
|
|
146
|
+
*/
|
|
147
|
+
set emit(value: boolean);
|
|
148
|
+
}
|
|
149
|
+
//#endregion
|
|
150
|
+
export { RowType as a, RowComponent as i, BuilderType as n, CustomError as r, BuilderComponent as t };
|
|
151
|
+
//# sourceMappingURL=Components-Drs0KoOi.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActionRowBuilder, ButtonBuilder, ChannelSelectMenuBuilder, ContainerBuilder, ContextMenuCommandBuilder, EmbedBuilder, FileBuilder, FileUploadBuilder, InteractionContextType, LabelBuilder, MediaGalleryBuilder, MentionableSelectMenuBuilder, ModalBuilder, RoleSelectMenuBuilder, SectionBuilder, SeparatorBuilder, SlashCommandBuilder, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, TextInputBuilder, UserSelectMenuBuilder, resolveColor } from "discord.js";
|
|
1
|
+
import { ActionRowBuilder, ButtonBuilder, ChannelSelectMenuBuilder, CheckboxBuilder, CheckboxGroupBuilder, CheckboxGroupOptionBuilder, ContainerBuilder, ContextMenuCommandBuilder, EmbedBuilder, FileBuilder, FileUploadBuilder, InteractionContextType, LabelBuilder, MediaGalleryBuilder, MentionableSelectMenuBuilder, ModalBuilder, RadioGroupBuilder, RadioGroupOptionBuilder, RoleSelectMenuBuilder, SectionBuilder, SeparatorBuilder, SlashCommandBuilder, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, TextInputBuilder, UserSelectMenuBuilder, resolveColor } from "discord.js";
|
|
2
2
|
|
|
3
3
|
//#region src/miscellaneous/botColorHolder.ts
|
|
4
4
|
const DEFAULT_COLOR = "Default";
|
|
@@ -15,7 +15,7 @@ function getBotColor() {
|
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/interfaces/Components.ts
|
|
17
17
|
/**
|
|
18
|
-
* Available Discord.js builder classes for use with BuilderComponent
|
|
18
|
+
* Available Discord.js builder classes for use with BuilderComponent for commands, embeds, modals, etc.
|
|
19
19
|
*
|
|
20
20
|
* @internal
|
|
21
21
|
*/
|
|
@@ -29,6 +29,11 @@ const BuilderTypes = {
|
|
|
29
29
|
label: LabelBuilder,
|
|
30
30
|
text_input: TextInputBuilder,
|
|
31
31
|
file_upload: FileUploadBuilder,
|
|
32
|
+
checkbox: CheckboxBuilder,
|
|
33
|
+
checkbox_group: CheckboxGroupBuilder,
|
|
34
|
+
checkbox_group_option: CheckboxGroupOptionBuilder,
|
|
35
|
+
radio_group: RadioGroupBuilder,
|
|
36
|
+
radio_group_option: RadioGroupOptionBuilder,
|
|
32
37
|
button: ButtonBuilder,
|
|
33
38
|
menu_string: StringSelectMenuBuilder,
|
|
34
39
|
menu_option_string: StringSelectMenuOptionBuilder,
|
|
@@ -44,7 +49,7 @@ const BuilderTypes = {
|
|
|
44
49
|
separator: SeparatorBuilder
|
|
45
50
|
};
|
|
46
51
|
/**
|
|
47
|
-
* Available Discord.js action row classes for use with RowComponent
|
|
52
|
+
* Available Discord.js action row classes for use with RowComponent for Select Menus and Buttons
|
|
48
53
|
*
|
|
49
54
|
* @internal
|
|
50
55
|
*/
|
|
@@ -81,9 +86,6 @@ var BaseComponent = class {
|
|
|
81
86
|
get instance() {
|
|
82
87
|
return this._component;
|
|
83
88
|
}
|
|
84
|
-
buildCustomId(prefix, ...args) {
|
|
85
|
-
return args.length === 0 ? prefix : `${prefix}:${args.join("-")}`;
|
|
86
|
-
}
|
|
87
89
|
};
|
|
88
90
|
/**
|
|
89
91
|
* Base class for Discord.js builder components
|
|
@@ -214,4 +216,4 @@ var DatabaseError = class extends CustomError {
|
|
|
214
216
|
|
|
215
217
|
//#endregion
|
|
216
218
|
export { setBotColor as a, RowComponent as i, BuilderComponent as n, CustomError as r, DatabaseError as t };
|
|
217
|
-
//# sourceMappingURL=Database-
|
|
219
|
+
//# sourceMappingURL=Database-DAWd3hyw.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Database-DAWd3hyw.mjs","names":[],"sources":["../src/miscellaneous/botColorHolder.ts","../src/interfaces/Components.ts","../src/bot/defaults/errors/Database.ts"],"sourcesContent":["import type { ColorResolvable } from 'discord.js';\n\n// 'Default' is Discord.js's own sentinel for \"no explicit color\".\nconst DEFAULT_COLOR: ColorResolvable = 'Default';\n\nlet current: ColorResolvable = DEFAULT_COLOR;\n\n/** @internal */\nexport function setBotColor(color: ColorResolvable | undefined): void {\n current = color ?? DEFAULT_COLOR;\n}\n\n/** @internal */\nexport function getBotColor(): ColorResolvable {\n return current;\n}\n","import {\n ActionRowBuilder,\n ButtonBuilder,\n ChannelSelectMenuBuilder,\n CheckboxBuilder,\n CheckboxGroupBuilder,\n CheckboxGroupOptionBuilder,\n ContainerBuilder,\n ContextMenuCommandBuilder,\n EmbedBuilder,\n FileBuilder,\n FileUploadBuilder,\n InteractionContextType,\n LabelBuilder,\n MediaGalleryBuilder,\n MentionableSelectMenuBuilder,\n ModalBuilder,\n RadioGroupBuilder,\n RadioGroupOptionBuilder,\n RoleSelectMenuBuilder,\n SectionBuilder,\n SeparatorBuilder,\n SlashCommandBuilder,\n SlashCommandSubcommandBuilder,\n SlashCommandSubcommandGroupBuilder,\n StringSelectMenuBuilder,\n StringSelectMenuOptionBuilder,\n TextDisplayBuilder,\n TextInputBuilder,\n UserSelectMenuBuilder,\n resolveColor\n} from 'discord.js';\n\nimport { getBotColor } from '@miscellaneous/botColorHolder';\n\n/**\n * Available Discord.js builder classes for use with BuilderComponent for commands, embeds, modals, etc.\n *\n * @internal\n */\nexport const BuilderTypes = {\n // Command Components\n command: SlashCommandBuilder,\n context_menu: ContextMenuCommandBuilder,\n subcommand: SlashCommandSubcommandBuilder,\n group: SlashCommandSubcommandGroupBuilder,\n\n // Embed Components\n embed: EmbedBuilder,\n\n // Modal Components\n modal: ModalBuilder,\n label: LabelBuilder,\n text_input: TextInputBuilder,\n file_upload: FileUploadBuilder,\n checkbox: CheckboxBuilder,\n checkbox_group: CheckboxGroupBuilder,\n checkbox_group_option: CheckboxGroupOptionBuilder,\n radio_group: RadioGroupBuilder,\n radio_group_option: RadioGroupOptionBuilder,\n\n // Action Row Components\n button: ButtonBuilder,\n menu_string: StringSelectMenuBuilder,\n menu_option_string: StringSelectMenuOptionBuilder,\n menu_user: UserSelectMenuBuilder,\n menu_channel: ChannelSelectMenuBuilder,\n menu_mentionable: MentionableSelectMenuBuilder,\n menu_role: RoleSelectMenuBuilder,\n\n // ComponentsV2\n container: ContainerBuilder,\n text_display: TextDisplayBuilder,\n file: FileBuilder,\n media: MediaGalleryBuilder,\n section: SectionBuilder,\n separator: SeparatorBuilder\n};\n\n/**\n * Available Discord.js action row classes for use with RowComponent for Select Menus and Buttons\n *\n * @internal\n */\nexport const RowTypes: {\n button: typeof ActionRowBuilder<ButtonBuilder>;\n menu_string: typeof ActionRowBuilder<StringSelectMenuBuilder>;\n menu_user: typeof ActionRowBuilder<UserSelectMenuBuilder>;\n menu_channel: typeof ActionRowBuilder<ChannelSelectMenuBuilder>;\n menu_mentionable: typeof ActionRowBuilder<MentionableSelectMenuBuilder>;\n menu_role: typeof ActionRowBuilder<RoleSelectMenuBuilder>;\n} = {\n button: ActionRowBuilder<ButtonBuilder>,\n menu_string: ActionRowBuilder<StringSelectMenuBuilder>,\n menu_user: ActionRowBuilder<UserSelectMenuBuilder>,\n menu_channel: ActionRowBuilder<ChannelSelectMenuBuilder>,\n menu_mentionable: ActionRowBuilder<MentionableSelectMenuBuilder>,\n menu_role: ActionRowBuilder<RoleSelectMenuBuilder>\n};\n\n/**\n * Available Discord.js builder types for use with BuilderComponent\n */\nexport type BuilderType = keyof typeof BuilderTypes;\n\n/**\n * @internal\n */\nexport type InstantiatedBuilder<BuilderKey extends BuilderType> = InstanceType<(typeof BuilderTypes)[BuilderKey]>;\n\n/**\n * Available Discord.js action row types for use with RowComponent\n */\nexport type RowType = keyof typeof RowTypes;\n\n/**\n * @internal\n */\nexport type InstantiatedActionRow<RowKey extends RowType> = InstanceType<(typeof RowTypes)[RowKey]>;\n\n/**\n * Base class for Discord component wrappers\n *\n * Provides common functionality for building Discord components with proper typing.\n *\n * @typeParam TComponent - The Discord.js component type being wrapped\n *\n * @internal\n */\nexport abstract class BaseComponent<TComponent> {\n private readonly _component: TComponent;\n\n protected constructor(ComponentClass: new () => TComponent) {\n this._component = new ComponentClass();\n }\n\n /**\n * Gets the built component (should be considered read-only)\n *\n * Returns the finalized component ready for use in Discord messages.\n *\n * Please do not use for further configuration, use `this.instance` for that.\n * @example new SomeComponent().component\n */\n public abstract get component(): InstantiatedBuilder<BuilderType> | InstantiatedActionRow<RowType>;\n\n /**\n * Gets the component instance for configuration\n *\n * Use this to access Discord.js builder methods like setTitle(), setDescription(), etc.\n *\n * Use this in your component classes to configure the builder\n * @example this.instance.setTitle('My Modal')\n */\n protected get instance(): TComponent {\n return this._component;\n }\n}\n\n/**\n * Base class for Discord.js builder components\n *\n * Wraps Discord.js builders (SlashCommandBuilder, EmbedBuilder, etc.) with\n * Seedcord-specific defaults and helper methods.\n *\n * @typeParam BuilderKey - The type of Discord.js builder being wrapped\n */\nexport abstract class BuilderComponent<BuilderKey extends BuilderType> extends BaseComponent<\n InstantiatedBuilder<BuilderKey>\n> {\n private colorApplied = false;\n\n protected constructor(public readonly type: BuilderKey) {\n const ComponentClass = BuilderTypes[type] as unknown;\n super(ComponentClass as new () => InstantiatedBuilder<BuilderKey>);\n\n if (this.instance instanceof SlashCommandBuilder || this.instance instanceof ContextMenuCommandBuilder) {\n this.instance.setContexts(InteractionContextType.Guild);\n }\n }\n\n get component(): InstantiatedBuilder<BuilderKey> {\n this.applyBotColor();\n return this.instance;\n }\n\n // Resolving in the constructor would capture the default for a component built before setBotColor()\n // ran. The unset check keeps a color the subclass set for itself.\n private applyBotColor(): void {\n if (this.colorApplied) return;\n this.colorApplied = true;\n\n const color = getBotColor();\n if (this.instance instanceof EmbedBuilder) {\n if (this.instance.data.color === undefined) this.instance.setColor(color);\n } else if (this.instance instanceof ContainerBuilder) {\n const accent = this.instance.data.accent_color;\n if (accent === null || accent === undefined) {\n this.instance.setAccentColor(color === 'Default' ? undefined : resolveColor(color));\n }\n }\n }\n}\n\n/**\n * Base class for Discord action row components\n *\n * Wraps Discord.js action row builder with Seedcord-specific defaults and helper methods.\n *\n * @typeParam RowKey - The Discord.js action row type being wrapped\n */\nexport abstract class RowComponent<RowKey extends RowType> extends BaseComponent<InstantiatedActionRow<RowKey>> {\n protected constructor(public readonly type: RowKey) {\n const ComponentClass = RowTypes[type] as unknown;\n super(ComponentClass as new () => InstantiatedActionRow<RowKey>);\n }\n\n get component(): InstantiatedActionRow<RowKey> {\n return this.instance;\n }\n}\n\n/**\n * Pre-configured error embed with default styling\n *\n * This is bundled in {@link CustomError}s as the response.\n *\n * @internal\n */\nexport class BaseErrorEmbed extends BuilderComponent<'embed'> {\n /**\n * Creates a new error embed with default configuration.\n */\n public constructor() {\n super('embed');\n this.instance.setTitle('Cannot Proceed');\n }\n}\n\n/**\n * Base class for custom error types with Discord embed responses\n *\n * Errors extending CustomError should be used with the `Catchable` decorators to implement a control flow. These errors will be caught and handled by the framework to show the user the configured response.\n */\nexport abstract class CustomError extends Error {\n private _emit = false;\n public readonly response = new BaseErrorEmbed().component;\n\n protected constructor(public override message: string) {\n super(message);\n\n Error.captureStackTrace(this, this.constructor);\n }\n\n /**\n * Whether this error should be emitted to logs\n *\n * Controls logging behavior. Errors with emit=true will always be logged,\n * while emit=false errors may be suppressed in production.\n *\n * @returns True if the error should be logged\n */\n public get emit(): boolean {\n return this._emit;\n }\n\n /**\n * Sets whether this error should be emitted to logs\n */\n public set emit(value: boolean) {\n this._emit = value;\n }\n}\n","import { CustomError } from '@interfaces/Components';\n\nimport type { UUID } from 'crypto';\n\n/**\n * Generic database operation error with UUID tracking.\n *\n * Thrown for various database operation failures and includes\n * a UUID for error tracking and debugging purposes.\n *\n * @internal\n */\nexport class DatabaseError extends CustomError {\n /**\n * Creates a new DatabaseError.\n *\n * @param message - The error message describing what went wrong\n * @param uuid - A unique identifier for this specific error instance\n */\n constructor(\n message: string,\n public uuid: UUID\n ) {\n super(message);\n this.emit = true; // Emit in logs regardless of environment\n this.name = 'DatabaseError';\n\n this.response\n .setTitle('Database Error')\n .setDescription(`An error occurred while interacting with the database.\\n### UUID: \\`${this.uuid}\\``);\n }\n}\n"],"mappings":";;;AAGA,MAAM,gBAAiC;AAEvC,IAAI,UAA2B;;AAG/B,SAAgB,YAAY,OAA0C;CAClE,UAAU,SAAS;AACvB;;AAGA,SAAgB,cAA+B;CAC3C,OAAO;AACX;;;;;;;;;ACyBA,MAAa,eAAe;CAExB,SAAS;CACT,cAAc;CACd,YAAY;CACZ,OAAO;CAGP,OAAO;CAGP,OAAO;CACP,OAAO;CACP,YAAY;CACZ,aAAa;CACb,UAAU;CACV,gBAAgB;CAChB,uBAAuB;CACvB,aAAa;CACb,oBAAoB;CAGpB,QAAQ;CACR,aAAa;CACb,oBAAoB;CACpB,WAAW;CACX,cAAc;CACd,kBAAkB;CAClB,WAAW;CAGX,WAAW;CACX,cAAc;CACd,MAAM;CACN,OAAO;CACP,SAAS;CACT,WAAW;AACf;;;;;;AAOA,MAAa,WAOT;CACA,QAAQ;CACR,aAAa;CACb,WAAW;CACX,cAAc;CACd,kBAAkB;CAClB,WAAW;AACf;;;;;;;;;;AA+BA,IAAsB,gBAAtB,MAAgD;CAC5C,AAAiB;CAEjB,AAAU,YAAY,gBAAsC;EACxD,KAAK,aAAa,IAAI,eAAe;CACzC;;;;;;;;;CAoBA,IAAc,WAAuB;EACjC,OAAO,KAAK;CAChB;AACJ;;;;;;;;;AAUA,IAAsB,mBAAtB,cAA+E,cAE7E;CAGwC;CAFtC,AAAQ,eAAe;CAEvB,AAAU,YAAY,AAAgB,MAAkB;EACpD,MAAM,iBAAiB,aAAa;EACpC,MAAM,cAA2D;EAF/B;EAIlC,IAAI,KAAK,oBAAoB,uBAAuB,KAAK,oBAAoB,2BACzE,KAAK,SAAS,YAAY,uBAAuB,KAAK;CAE9D;CAEA,IAAI,YAA6C;EAC7C,KAAK,cAAc;EACnB,OAAO,KAAK;CAChB;CAIA,AAAQ,gBAAsB;EAC1B,IAAI,KAAK,cAAc;EACvB,KAAK,eAAe;EAEpB,MAAM,QAAQ,YAAY;EAC1B,IAAI,KAAK,oBAAoB,cACzB;OAAI,KAAK,SAAS,KAAK,UAAU,QAAW,KAAK,SAAS,SAAS,KAAK;EAAC,OACtE,IAAI,KAAK,oBAAoB,kBAAkB;GAClD,MAAM,SAAS,KAAK,SAAS,KAAK;GAClC,IAAI,WAAW,QAAQ,WAAW,QAC9B,KAAK,SAAS,eAAe,UAAU,YAAY,SAAY,aAAa,KAAK,CAAC;EAE1F;CACJ;AACJ;;;;;;;;AASA,IAAsB,eAAtB,cAAmE,cAA6C;CACtE;CAAtC,AAAU,YAAY,AAAgB,MAAc;EAChD,MAAM,iBAAiB,SAAS;EAChC,MAAM,cAAyD;EAF7B;CAGtC;CAEA,IAAI,YAA2C;EAC3C,OAAO,KAAK;CAChB;AACJ;;;;;;;;AASA,IAAa,iBAAb,cAAoC,iBAA0B;;;;CAI1D,AAAO,cAAc;EACjB,MAAM,OAAO;EACb,KAAK,SAAS,SAAS,gBAAgB;CAC3C;AACJ;;;;;;AAOA,IAAsB,cAAtB,cAA0C,MAAM;CAIN;CAHtC,AAAQ,QAAQ;CAChB,AAAgB,WAAW,IAAI,eAAe,EAAE;CAEhD,AAAU,YAAY,AAAgB,SAAiB;EACnD,MAAM,OAAO;EADqB;EAGlC,MAAM,kBAAkB,MAAM,KAAK,WAAW;CAClD;;;;;;;;;CAUA,IAAW,OAAgB;EACvB,OAAO,KAAK;CAChB;;;;CAKA,IAAW,KAAK,OAAgB;EAC5B,KAAK,QAAQ;CACjB;AACJ;;;;;;;;;;;;ACpQA,IAAa,gBAAb,cAAmC,YAAY;CAShC;;;;;;;CAFX,YACI,SACA,AAAO,MACT;EACE,MAAM,OAAO;EAFN;EAGP,KAAK,OAAO;EACZ,KAAK,OAAO;EAEZ,KAAK,SACA,SAAS,gBAAgB,EACzB,eAAe,uEAAuE,KAAK,KAAK,GAAG;CAC5G;AACJ"}
|
|
@@ -15,7 +15,7 @@ function getBotColor() {
|
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/interfaces/Components.ts
|
|
17
17
|
/**
|
|
18
|
-
* Available Discord.js builder classes for use with BuilderComponent
|
|
18
|
+
* Available Discord.js builder classes for use with BuilderComponent for commands, embeds, modals, etc.
|
|
19
19
|
*
|
|
20
20
|
* @internal
|
|
21
21
|
*/
|
|
@@ -29,6 +29,11 @@ const BuilderTypes = {
|
|
|
29
29
|
label: discord_js.LabelBuilder,
|
|
30
30
|
text_input: discord_js.TextInputBuilder,
|
|
31
31
|
file_upload: discord_js.FileUploadBuilder,
|
|
32
|
+
checkbox: discord_js.CheckboxBuilder,
|
|
33
|
+
checkbox_group: discord_js.CheckboxGroupBuilder,
|
|
34
|
+
checkbox_group_option: discord_js.CheckboxGroupOptionBuilder,
|
|
35
|
+
radio_group: discord_js.RadioGroupBuilder,
|
|
36
|
+
radio_group_option: discord_js.RadioGroupOptionBuilder,
|
|
32
37
|
button: discord_js.ButtonBuilder,
|
|
33
38
|
menu_string: discord_js.StringSelectMenuBuilder,
|
|
34
39
|
menu_option_string: discord_js.StringSelectMenuOptionBuilder,
|
|
@@ -44,7 +49,7 @@ const BuilderTypes = {
|
|
|
44
49
|
separator: discord_js.SeparatorBuilder
|
|
45
50
|
};
|
|
46
51
|
/**
|
|
47
|
-
* Available Discord.js action row classes for use with RowComponent
|
|
52
|
+
* Available Discord.js action row classes for use with RowComponent for Select Menus and Buttons
|
|
48
53
|
*
|
|
49
54
|
* @internal
|
|
50
55
|
*/
|
|
@@ -81,9 +86,6 @@ var BaseComponent = class {
|
|
|
81
86
|
get instance() {
|
|
82
87
|
return this._component;
|
|
83
88
|
}
|
|
84
|
-
buildCustomId(prefix, ...args) {
|
|
85
|
-
return args.length === 0 ? prefix : `${prefix}:${args.join("-")}`;
|
|
86
|
-
}
|
|
87
89
|
};
|
|
88
90
|
/**
|
|
89
91
|
* Base class for Discord.js builder components
|
|
@@ -243,4 +245,4 @@ Object.defineProperty(exports, 'setBotColor', {
|
|
|
243
245
|
return setBotColor;
|
|
244
246
|
}
|
|
245
247
|
});
|
|
246
|
-
//# sourceMappingURL=Database-
|
|
248
|
+
//# sourceMappingURL=Database-DTVbdvLZ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Database-DTVbdvLZ.cjs","names":["SlashCommandBuilder","ContextMenuCommandBuilder","SlashCommandSubcommandBuilder","SlashCommandSubcommandGroupBuilder","EmbedBuilder","ModalBuilder","LabelBuilder","TextInputBuilder","FileUploadBuilder","CheckboxBuilder","CheckboxGroupBuilder","CheckboxGroupOptionBuilder","RadioGroupBuilder","RadioGroupOptionBuilder","ButtonBuilder","StringSelectMenuBuilder","StringSelectMenuOptionBuilder","UserSelectMenuBuilder","ChannelSelectMenuBuilder","MentionableSelectMenuBuilder","RoleSelectMenuBuilder","ContainerBuilder","TextDisplayBuilder","FileBuilder","MediaGalleryBuilder","SectionBuilder","SeparatorBuilder","ActionRowBuilder","InteractionContextType"],"sources":["../src/miscellaneous/botColorHolder.ts","../src/interfaces/Components.ts","../src/bot/defaults/errors/Database.ts"],"sourcesContent":["import type { ColorResolvable } from 'discord.js';\n\n// 'Default' is Discord.js's own sentinel for \"no explicit color\".\nconst DEFAULT_COLOR: ColorResolvable = 'Default';\n\nlet current: ColorResolvable = DEFAULT_COLOR;\n\n/** @internal */\nexport function setBotColor(color: ColorResolvable | undefined): void {\n current = color ?? DEFAULT_COLOR;\n}\n\n/** @internal */\nexport function getBotColor(): ColorResolvable {\n return current;\n}\n","import {\n ActionRowBuilder,\n ButtonBuilder,\n ChannelSelectMenuBuilder,\n CheckboxBuilder,\n CheckboxGroupBuilder,\n CheckboxGroupOptionBuilder,\n ContainerBuilder,\n ContextMenuCommandBuilder,\n EmbedBuilder,\n FileBuilder,\n FileUploadBuilder,\n InteractionContextType,\n LabelBuilder,\n MediaGalleryBuilder,\n MentionableSelectMenuBuilder,\n ModalBuilder,\n RadioGroupBuilder,\n RadioGroupOptionBuilder,\n RoleSelectMenuBuilder,\n SectionBuilder,\n SeparatorBuilder,\n SlashCommandBuilder,\n SlashCommandSubcommandBuilder,\n SlashCommandSubcommandGroupBuilder,\n StringSelectMenuBuilder,\n StringSelectMenuOptionBuilder,\n TextDisplayBuilder,\n TextInputBuilder,\n UserSelectMenuBuilder,\n resolveColor\n} from 'discord.js';\n\nimport { getBotColor } from '@miscellaneous/botColorHolder';\n\n/**\n * Available Discord.js builder classes for use with BuilderComponent for commands, embeds, modals, etc.\n *\n * @internal\n */\nexport const BuilderTypes = {\n // Command Components\n command: SlashCommandBuilder,\n context_menu: ContextMenuCommandBuilder,\n subcommand: SlashCommandSubcommandBuilder,\n group: SlashCommandSubcommandGroupBuilder,\n\n // Embed Components\n embed: EmbedBuilder,\n\n // Modal Components\n modal: ModalBuilder,\n label: LabelBuilder,\n text_input: TextInputBuilder,\n file_upload: FileUploadBuilder,\n checkbox: CheckboxBuilder,\n checkbox_group: CheckboxGroupBuilder,\n checkbox_group_option: CheckboxGroupOptionBuilder,\n radio_group: RadioGroupBuilder,\n radio_group_option: RadioGroupOptionBuilder,\n\n // Action Row Components\n button: ButtonBuilder,\n menu_string: StringSelectMenuBuilder,\n menu_option_string: StringSelectMenuOptionBuilder,\n menu_user: UserSelectMenuBuilder,\n menu_channel: ChannelSelectMenuBuilder,\n menu_mentionable: MentionableSelectMenuBuilder,\n menu_role: RoleSelectMenuBuilder,\n\n // ComponentsV2\n container: ContainerBuilder,\n text_display: TextDisplayBuilder,\n file: FileBuilder,\n media: MediaGalleryBuilder,\n section: SectionBuilder,\n separator: SeparatorBuilder\n};\n\n/**\n * Available Discord.js action row classes for use with RowComponent for Select Menus and Buttons\n *\n * @internal\n */\nexport const RowTypes: {\n button: typeof ActionRowBuilder<ButtonBuilder>;\n menu_string: typeof ActionRowBuilder<StringSelectMenuBuilder>;\n menu_user: typeof ActionRowBuilder<UserSelectMenuBuilder>;\n menu_channel: typeof ActionRowBuilder<ChannelSelectMenuBuilder>;\n menu_mentionable: typeof ActionRowBuilder<MentionableSelectMenuBuilder>;\n menu_role: typeof ActionRowBuilder<RoleSelectMenuBuilder>;\n} = {\n button: ActionRowBuilder<ButtonBuilder>,\n menu_string: ActionRowBuilder<StringSelectMenuBuilder>,\n menu_user: ActionRowBuilder<UserSelectMenuBuilder>,\n menu_channel: ActionRowBuilder<ChannelSelectMenuBuilder>,\n menu_mentionable: ActionRowBuilder<MentionableSelectMenuBuilder>,\n menu_role: ActionRowBuilder<RoleSelectMenuBuilder>\n};\n\n/**\n * Available Discord.js builder types for use with BuilderComponent\n */\nexport type BuilderType = keyof typeof BuilderTypes;\n\n/**\n * @internal\n */\nexport type InstantiatedBuilder<BuilderKey extends BuilderType> = InstanceType<(typeof BuilderTypes)[BuilderKey]>;\n\n/**\n * Available Discord.js action row types for use with RowComponent\n */\nexport type RowType = keyof typeof RowTypes;\n\n/**\n * @internal\n */\nexport type InstantiatedActionRow<RowKey extends RowType> = InstanceType<(typeof RowTypes)[RowKey]>;\n\n/**\n * Base class for Discord component wrappers\n *\n * Provides common functionality for building Discord components with proper typing.\n *\n * @typeParam TComponent - The Discord.js component type being wrapped\n *\n * @internal\n */\nexport abstract class BaseComponent<TComponent> {\n private readonly _component: TComponent;\n\n protected constructor(ComponentClass: new () => TComponent) {\n this._component = new ComponentClass();\n }\n\n /**\n * Gets the built component (should be considered read-only)\n *\n * Returns the finalized component ready for use in Discord messages.\n *\n * Please do not use for further configuration, use `this.instance` for that.\n * @example new SomeComponent().component\n */\n public abstract get component(): InstantiatedBuilder<BuilderType> | InstantiatedActionRow<RowType>;\n\n /**\n * Gets the component instance for configuration\n *\n * Use this to access Discord.js builder methods like setTitle(), setDescription(), etc.\n *\n * Use this in your component classes to configure the builder\n * @example this.instance.setTitle('My Modal')\n */\n protected get instance(): TComponent {\n return this._component;\n }\n}\n\n/**\n * Base class for Discord.js builder components\n *\n * Wraps Discord.js builders (SlashCommandBuilder, EmbedBuilder, etc.) with\n * Seedcord-specific defaults and helper methods.\n *\n * @typeParam BuilderKey - The type of Discord.js builder being wrapped\n */\nexport abstract class BuilderComponent<BuilderKey extends BuilderType> extends BaseComponent<\n InstantiatedBuilder<BuilderKey>\n> {\n private colorApplied = false;\n\n protected constructor(public readonly type: BuilderKey) {\n const ComponentClass = BuilderTypes[type] as unknown;\n super(ComponentClass as new () => InstantiatedBuilder<BuilderKey>);\n\n if (this.instance instanceof SlashCommandBuilder || this.instance instanceof ContextMenuCommandBuilder) {\n this.instance.setContexts(InteractionContextType.Guild);\n }\n }\n\n get component(): InstantiatedBuilder<BuilderKey> {\n this.applyBotColor();\n return this.instance;\n }\n\n // Resolving in the constructor would capture the default for a component built before setBotColor()\n // ran. The unset check keeps a color the subclass set for itself.\n private applyBotColor(): void {\n if (this.colorApplied) return;\n this.colorApplied = true;\n\n const color = getBotColor();\n if (this.instance instanceof EmbedBuilder) {\n if (this.instance.data.color === undefined) this.instance.setColor(color);\n } else if (this.instance instanceof ContainerBuilder) {\n const accent = this.instance.data.accent_color;\n if (accent === null || accent === undefined) {\n this.instance.setAccentColor(color === 'Default' ? undefined : resolveColor(color));\n }\n }\n }\n}\n\n/**\n * Base class for Discord action row components\n *\n * Wraps Discord.js action row builder with Seedcord-specific defaults and helper methods.\n *\n * @typeParam RowKey - The Discord.js action row type being wrapped\n */\nexport abstract class RowComponent<RowKey extends RowType> extends BaseComponent<InstantiatedActionRow<RowKey>> {\n protected constructor(public readonly type: RowKey) {\n const ComponentClass = RowTypes[type] as unknown;\n super(ComponentClass as new () => InstantiatedActionRow<RowKey>);\n }\n\n get component(): InstantiatedActionRow<RowKey> {\n return this.instance;\n }\n}\n\n/**\n * Pre-configured error embed with default styling\n *\n * This is bundled in {@link CustomError}s as the response.\n *\n * @internal\n */\nexport class BaseErrorEmbed extends BuilderComponent<'embed'> {\n /**\n * Creates a new error embed with default configuration.\n */\n public constructor() {\n super('embed');\n this.instance.setTitle('Cannot Proceed');\n }\n}\n\n/**\n * Base class for custom error types with Discord embed responses\n *\n * Errors extending CustomError should be used with the `Catchable` decorators to implement a control flow. These errors will be caught and handled by the framework to show the user the configured response.\n */\nexport abstract class CustomError extends Error {\n private _emit = false;\n public readonly response = new BaseErrorEmbed().component;\n\n protected constructor(public override message: string) {\n super(message);\n\n Error.captureStackTrace(this, this.constructor);\n }\n\n /**\n * Whether this error should be emitted to logs\n *\n * Controls logging behavior. Errors with emit=true will always be logged,\n * while emit=false errors may be suppressed in production.\n *\n * @returns True if the error should be logged\n */\n public get emit(): boolean {\n return this._emit;\n }\n\n /**\n * Sets whether this error should be emitted to logs\n */\n public set emit(value: boolean) {\n this._emit = value;\n }\n}\n","import { CustomError } from '@interfaces/Components';\n\nimport type { UUID } from 'crypto';\n\n/**\n * Generic database operation error with UUID tracking.\n *\n * Thrown for various database operation failures and includes\n * a UUID for error tracking and debugging purposes.\n *\n * @internal\n */\nexport class DatabaseError extends CustomError {\n /**\n * Creates a new DatabaseError.\n *\n * @param message - The error message describing what went wrong\n * @param uuid - A unique identifier for this specific error instance\n */\n constructor(\n message: string,\n public uuid: UUID\n ) {\n super(message);\n this.emit = true; // Emit in logs regardless of environment\n this.name = 'DatabaseError';\n\n this.response\n .setTitle('Database Error')\n .setDescription(`An error occurred while interacting with the database.\\n### UUID: \\`${this.uuid}\\``);\n }\n}\n"],"mappings":"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"}
|