commandkit 1.2.0-dev.20250819020008 → 1.2.0-dev.20250820015805
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/{EventWorkerContext-C7CG7hIP.d.ts → EventWorkerContext-DiMpRt1P.d.ts} +2 -2
- package/dist/analytics/analytics-engine.d.ts +1 -1
- package/dist/analytics/analytics-engine.js +1 -1
- package/dist/analytics/analytics-provider.d.ts +1 -1
- package/dist/analytics/utils.js +1 -1
- package/dist/{analytics-engine-nkyqvYAE.d.ts → analytics-engine-Ddw9axi4.d.ts} +82 -10
- package/dist/app/commands/AppCommandRunner.d.ts +1 -1
- package/dist/app/commands/AppCommandRunner.js +1 -1
- package/dist/app/commands/Context.d.ts +1 -1
- package/dist/app/commands/Context.js +1 -1
- package/dist/app/events/EventWorkerContext.d.ts +2 -2
- package/dist/app/handlers/AppCommandHandler.d.ts +1 -1
- package/dist/app/handlers/AppCommandHandler.js +1 -1
- package/dist/app/handlers/AppEventsHandler.d.ts +1 -1
- package/dist/app/handlers/AppEventsHandler.js +1 -1
- package/dist/app/index.d.ts +1 -1
- package/dist/app/index.js +1 -1
- package/dist/app/middlewares/permissions.d.ts +42 -0
- package/dist/app/middlewares/permissions.js +38 -0
- package/dist/app/register/CommandRegistrar.d.ts +1 -1
- package/dist/app/register/CommandRegistrar.js +1 -1
- package/dist/{build-BoGqWPIS.js → build-BmDzPe4V.js} +2 -2
- package/dist/{build-BoGqWPIS.js.map → build-BmDzPe4V.js.map} +1 -1
- package/dist/cli/build.d.ts +1 -1
- package/dist/cli/build.js +2 -2
- package/dist/cli/common.d.ts +1 -1
- package/dist/cli/development.js +2 -2
- package/dist/cli/information.js +1 -1
- package/dist/cli/init.js +2 -2
- package/dist/cli/production.js +2 -2
- package/dist/{commandkit-5VMG2thU.js → commandkit-C0BuNRSN.js} +185 -29
- package/dist/commandkit-C0BuNRSN.js.map +1 -0
- package/dist/commandkit.d.ts +1 -1
- package/dist/commandkit.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/v1/button/Button.js +1 -1
- package/dist/components/v1/button/ButtonKit.js +1 -1
- package/dist/components/v1/modal/Modal.js +1 -1
- package/dist/components/v1/modal/ModalKit.js +1 -1
- package/dist/components/v1/select-menu/ChannelSelectMenuKit.js +1 -1
- package/dist/components/v1/select-menu/MentionableSelectMenuKit.js +1 -1
- package/dist/components/v1/select-menu/RoleSelectMenuKit.js +1 -1
- package/dist/components/v1/select-menu/SelectMenu.js +1 -1
- package/dist/components/v1/select-menu/StringSelectMenuKit.js +1 -1
- package/dist/components/v1/select-menu/UserSelectMenuKit.js +1 -1
- package/dist/config/config.d.ts +2 -2
- package/dist/config/config.js +1 -1
- package/dist/config/default.d.ts +1 -1
- package/dist/config/default.js +1 -1
- package/dist/config/loader.d.ts +1 -1
- package/dist/config/loader.js +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/config/utils.d.ts +1 -1
- package/dist/{config-C1msSu1G.d.ts → config-C4nHXErw.d.ts} +2 -2
- package/dist/context/async-context.d.ts +1 -1
- package/dist/context/async-context.js +1 -1
- package/dist/context/environment.d.ts +1 -1
- package/dist/context/environment.js +1 -1
- package/dist/events/CommandKitEventsChannel.d.ts +1 -1
- package/dist/{feature-flags-C44dggkN.js → feature-flags-BZMExGfA.js} +2 -2
- package/dist/{feature-flags-C44dggkN.js.map → feature-flags-BZMExGfA.js.map} +1 -1
- package/dist/flags/FlagProvider.d.ts +1 -1
- package/dist/flags/feature-flags.d.ts +1 -1
- package/dist/flags/feature-flags.js +2 -2
- package/dist/flags/store.d.ts +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/{init-ZjceQTSt.js → init-D20FhDjn.js} +2 -2
- package/dist/{init-ZjceQTSt.js.map → init-D20FhDjn.js.map} +1 -1
- package/dist/logger/DefaultLogger.js +1 -1
- package/dist/logger/Logger.js +1 -1
- package/dist/plugins/CompilerPlugin.d.ts +1 -1
- package/dist/plugins/PluginCommon.d.ts +1 -1
- package/dist/plugins/RuntimePlugin.d.ts +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +1 -1
- package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +1 -1
- package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +1 -1
- package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +1 -1
- package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +1 -1
- package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +1 -1
- package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +1 -1
- package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +1 -1
- package/dist/plugins/plugin-runtime/runtime.d.ts +1 -1
- package/dist/plugins/types.d.ts +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/utils/dev-hooks.d.ts +1 -1
- package/dist/utils/dev-hooks.js +1 -1
- package/dist/utils/utilities.js +1 -1
- package/dist/{version-eRVLZxyL.js → version-CsNAUaEt.js} +2 -2
- package/dist/{version-eRVLZxyL.js.map → version-CsNAUaEt.js.map} +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/dist/commandkit-5VMG2thU.js.map +0 -1
|
@@ -1723,6 +1723,7 @@ const defaultConfig = {
|
|
|
1723
1723
|
},
|
|
1724
1724
|
typedCommands: true,
|
|
1725
1725
|
disablePrefixCommands: false,
|
|
1726
|
+
disablePermissionsMiddleware: false,
|
|
1726
1727
|
showUnknownPrefixCommandsWarning: true,
|
|
1727
1728
|
antiCrashScript: {
|
|
1728
1729
|
development: true,
|
|
@@ -1781,7 +1782,8 @@ function defineConfig(config = {}) {
|
|
|
1781
1782
|
antiCrashScript: {
|
|
1782
1783
|
...defaultConfig.antiCrashScript,
|
|
1783
1784
|
...config.antiCrashScript
|
|
1784
|
-
}
|
|
1785
|
+
},
|
|
1786
|
+
disablePermissionsMiddleware: config.disablePermissionsMiddleware ?? defaultConfig.disablePermissionsMiddleware
|
|
1785
1787
|
};
|
|
1786
1788
|
return defined;
|
|
1787
1789
|
}
|
|
@@ -2650,20 +2652,26 @@ var CommandRegistrar = class {
|
|
|
2650
2652
|
const commands = handler.getCommandsArray();
|
|
2651
2653
|
return commands.flatMap((cmd) => {
|
|
2652
2654
|
const json$1 = "toJSON" in cmd.data.command ? cmd.data.command.toJSON() : cmd.data.command;
|
|
2653
|
-
const
|
|
2655
|
+
const __metadata = cmd.metadata ?? cmd.data.metadata;
|
|
2656
|
+
const collections = [{
|
|
2657
|
+
...json$1,
|
|
2658
|
+
__metadata
|
|
2659
|
+
}];
|
|
2654
2660
|
if (cmd.data.userContextMenu && json$1.type !== discord_js.ApplicationCommandType.User) collections.push({
|
|
2655
2661
|
...json$1,
|
|
2656
2662
|
type: discord_js.ApplicationCommandType.User,
|
|
2657
2663
|
options: void 0,
|
|
2658
2664
|
description_localizations: void 0,
|
|
2659
|
-
description: void 0
|
|
2665
|
+
description: void 0,
|
|
2666
|
+
__metadata
|
|
2660
2667
|
});
|
|
2661
2668
|
if (cmd.data.messageContextMenu && json$1.type !== discord_js.ApplicationCommandType.Message) collections.push({
|
|
2662
2669
|
...json$1,
|
|
2663
2670
|
type: discord_js.ApplicationCommandType.Message,
|
|
2664
2671
|
description_localizations: void 0,
|
|
2665
2672
|
description: void 0,
|
|
2666
|
-
options: void 0
|
|
2673
|
+
options: void 0,
|
|
2674
|
+
__metadata
|
|
2667
2675
|
});
|
|
2668
2676
|
return collections;
|
|
2669
2677
|
});
|
|
@@ -2687,18 +2695,18 @@ var CommandRegistrar = class {
|
|
|
2687
2695
|
if (preRegistrationPrevented) return;
|
|
2688
2696
|
if (!this.commandkit.client.isReady()) throw new Error("Cannot register commands before the client is ready");
|
|
2689
2697
|
const guildCommands = commands.filter((command) => {
|
|
2690
|
-
var _command$
|
|
2691
|
-
return (_command$
|
|
2698
|
+
var _command$__metadata;
|
|
2699
|
+
return (_command$__metadata = command.__metadata) === null || _command$__metadata === void 0 || (_command$__metadata = _command$__metadata.guilds) === null || _command$__metadata === void 0 ? void 0 : _command$__metadata.filter(Boolean).length;
|
|
2692
2700
|
}).map((c) => {
|
|
2693
|
-
var _c$
|
|
2701
|
+
var _c$__metadata;
|
|
2694
2702
|
return {
|
|
2695
2703
|
...c,
|
|
2696
|
-
guilds: Array.from(new Set((_c$
|
|
2704
|
+
guilds: Array.from(new Set((_c$__metadata = c.__metadata) === null || _c$__metadata === void 0 || (_c$__metadata = _c$__metadata.guilds) === null || _c$__metadata === void 0 ? void 0 : _c$__metadata.filter(Boolean)))
|
|
2697
2705
|
};
|
|
2698
2706
|
});
|
|
2699
2707
|
const globalCommands = commands.filter((command) => {
|
|
2700
|
-
var _command$
|
|
2701
|
-
return !((_command$
|
|
2708
|
+
var _command$__metadata2;
|
|
2709
|
+
return !((_command$__metadata2 = command.__metadata) === null || _command$__metadata2 === void 0 || (_command$__metadata2 = _command$__metadata2.guilds) === null || _command$__metadata2 === void 0 ? void 0 : _command$__metadata2.filter(Boolean).length);
|
|
2702
2710
|
});
|
|
2703
2711
|
await this.updateGlobalCommands(globalCommands);
|
|
2704
2712
|
await this.updateGuildCommands(guildCommands);
|
|
@@ -2722,7 +2730,7 @@ var CommandRegistrar = class {
|
|
|
2722
2730
|
try {
|
|
2723
2731
|
const data = await this.api.put(discord_js.Routes.applicationCommands(this.commandkit.client.user.id), { body: commands.map((c) => ({
|
|
2724
2732
|
...c,
|
|
2725
|
-
|
|
2733
|
+
__metadata: void 0
|
|
2726
2734
|
})) });
|
|
2727
2735
|
Logger.info(`✨ Refreshed ${data.length} global application (/) commands`);
|
|
2728
2736
|
} catch (e) {
|
|
@@ -2749,9 +2757,9 @@ var CommandRegistrar = class {
|
|
|
2749
2757
|
try {
|
|
2750
2758
|
const guildCommandsMap = /* @__PURE__ */ new Map();
|
|
2751
2759
|
commands.forEach((command) => {
|
|
2752
|
-
var _command$
|
|
2753
|
-
if (!((_command$
|
|
2754
|
-
command.guilds.forEach((guild) => {
|
|
2760
|
+
var _command$__metadata3, _command$__metadata4;
|
|
2761
|
+
if (!((_command$__metadata3 = command.__metadata) === null || _command$__metadata3 === void 0 || (_command$__metadata3 = _command$__metadata3.guilds) === null || _command$__metadata3 === void 0 ? void 0 : _command$__metadata3.length)) return;
|
|
2762
|
+
(_command$__metadata4 = command.__metadata) === null || _command$__metadata4 === void 0 || (_command$__metadata4 = _command$__metadata4.guilds) === null || _command$__metadata4 === void 0 || _command$__metadata4.forEach((guild) => {
|
|
2755
2763
|
if (!guildCommandsMap.has(guild)) guildCommandsMap.set(guild, []);
|
|
2756
2764
|
guildCommandsMap.get(guild).push(command);
|
|
2757
2765
|
});
|
|
@@ -2773,7 +2781,7 @@ var CommandRegistrar = class {
|
|
|
2773
2781
|
if (prevented$1) continue;
|
|
2774
2782
|
const data = await this.api.put(discord_js.Routes.applicationGuildCommands(this.commandkit.client.user.id, guild), { body: guildCommands.map((b) => ({
|
|
2775
2783
|
...b,
|
|
2776
|
-
|
|
2784
|
+
__metadata: void 0
|
|
2777
2785
|
})) });
|
|
2778
2786
|
count += data.length;
|
|
2779
2787
|
}
|
|
@@ -2784,8 +2792,91 @@ var CommandRegistrar = class {
|
|
|
2784
2792
|
}
|
|
2785
2793
|
};
|
|
2786
2794
|
|
|
2795
|
+
//#endregion
|
|
2796
|
+
//#region src/app/middlewares/permissions.ts
|
|
2797
|
+
const middlewareId = crypto.randomUUID();
|
|
2798
|
+
/**
|
|
2799
|
+
* @private
|
|
2800
|
+
* @ignore
|
|
2801
|
+
*/
|
|
2802
|
+
async function beforeExecute(ctx) {
|
|
2803
|
+
var _interaction$channel, _message$channel, _message$member, _command$metadata, _interaction$guild, _message$guild, _command$metadata2;
|
|
2804
|
+
if (getConfig().disablePermissionsMiddleware) return;
|
|
2805
|
+
const { interaction, message, command } = ctx;
|
|
2806
|
+
if (interaction && !interaction.isCommand()) return;
|
|
2807
|
+
if (interaction && ((_interaction$channel = interaction.channel) === null || _interaction$channel === void 0 ? void 0 : _interaction$channel.isDMBased()) || message && ((_message$channel = message.channel) === null || _message$channel === void 0 ? void 0 : _message$channel.isDMBased())) {
|
|
2808
|
+
const channel = (interaction === null || interaction === void 0 ? void 0 : interaction.channel) ?? (message === null || message === void 0 ? void 0 : message.channel);
|
|
2809
|
+
const embed$1 = new discord_js.EmbedBuilder().setTitle(":x: Server-only command!").setDescription("This command can only be used in a server.").setColor("Red");
|
|
2810
|
+
try {
|
|
2811
|
+
if (channel === null || channel === void 0 ? void 0 : channel.isSendable()) if (interaction && interaction.isRepliable()) await interaction.reply({
|
|
2812
|
+
embeds: [embed$1],
|
|
2813
|
+
flags: discord_js.MessageFlags.Ephemeral
|
|
2814
|
+
});
|
|
2815
|
+
else await message.reply({ embeds: [embed$1] });
|
|
2816
|
+
} catch (error) {
|
|
2817
|
+
Logger.error(`Could not send 'Server-only command' DM to user ${(interaction === null || interaction === void 0 ? void 0 : interaction.user.id) ?? (message === null || message === void 0 ? void 0 : message.author.id)} for command ${command.command.name}.`, error);
|
|
2818
|
+
}
|
|
2819
|
+
return ctx.cancel();
|
|
2820
|
+
}
|
|
2821
|
+
const userPermissions = (interaction === null || interaction === void 0 ? void 0 : interaction.memberPermissions) ?? (message === null || message === void 0 || (_message$member = message.member) === null || _message$member === void 0 ? void 0 : _message$member.permissions);
|
|
2822
|
+
let userPermissionsRequired = ((_command$metadata = command.metadata) === null || _command$metadata === void 0 ? void 0 : _command$metadata.userPermissions) ?? [];
|
|
2823
|
+
let missingUserPermissions = [];
|
|
2824
|
+
if (typeof userPermissionsRequired === "string") userPermissionsRequired = [userPermissionsRequired];
|
|
2825
|
+
const botPermissions = (interaction === null || interaction === void 0 || (_interaction$guild = interaction.guild) === null || _interaction$guild === void 0 || (_interaction$guild = _interaction$guild.members.me) === null || _interaction$guild === void 0 ? void 0 : _interaction$guild.permissions) ?? (message === null || message === void 0 || (_message$guild = message.guild) === null || _message$guild === void 0 || (_message$guild = _message$guild.members.me) === null || _message$guild === void 0 ? void 0 : _message$guild.permissions);
|
|
2826
|
+
let botPermissionsRequired = ((_command$metadata2 = command.metadata) === null || _command$metadata2 === void 0 ? void 0 : _command$metadata2.botPermissions) ?? [];
|
|
2827
|
+
let missingBotPermissions = [];
|
|
2828
|
+
if (typeof botPermissionsRequired === "string") botPermissionsRequired = [botPermissionsRequired];
|
|
2829
|
+
if (!userPermissionsRequired.length && !botPermissionsRequired.length) return;
|
|
2830
|
+
if (userPermissionsRequired.length) for (const permission of userPermissionsRequired) {
|
|
2831
|
+
const hasPermission = userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.has(permission);
|
|
2832
|
+
if (!hasPermission) missingUserPermissions.push(permission);
|
|
2833
|
+
}
|
|
2834
|
+
if (botPermissionsRequired.length) for (const permission of botPermissionsRequired) {
|
|
2835
|
+
const hasPermission = botPermissions === null || botPermissions === void 0 ? void 0 : botPermissions.has(permission);
|
|
2836
|
+
if (!hasPermission) missingBotPermissions.push(permission);
|
|
2837
|
+
}
|
|
2838
|
+
if (!missingUserPermissions.length && !missingBotPermissions.length) return;
|
|
2839
|
+
const pattern = /([a-z])([A-Z])|([A-Z]+)([A-Z][a-z])/g;
|
|
2840
|
+
missingUserPermissions = missingUserPermissions.map((str) => str.replace(pattern, "$1$3 $2$4"));
|
|
2841
|
+
missingBotPermissions = missingBotPermissions.map((str) => str.replace(pattern, "$1$3 $2$4"));
|
|
2842
|
+
let embedDescription = "";
|
|
2843
|
+
const formatter = new Intl.ListFormat("en", {
|
|
2844
|
+
style: "long",
|
|
2845
|
+
type: "conjunction"
|
|
2846
|
+
});
|
|
2847
|
+
const getPermissionWord = (permissions) => permissions.length === 1 ? "permission" : "permissions";
|
|
2848
|
+
if (missingUserPermissions.length) {
|
|
2849
|
+
const formattedPermissions = missingUserPermissions.map((p) => `\`${p}\``);
|
|
2850
|
+
const permissionsString = formatter.format(formattedPermissions);
|
|
2851
|
+
embedDescription += `- You must have the ${permissionsString} ${getPermissionWord(missingUserPermissions)} to be able to run this command.\n`;
|
|
2852
|
+
}
|
|
2853
|
+
if (missingBotPermissions.length) {
|
|
2854
|
+
const formattedPermissions = missingBotPermissions.map((p) => `\`${p}\``);
|
|
2855
|
+
const permissionsString = formatter.format(formattedPermissions);
|
|
2856
|
+
embedDescription += `- I must have the ${permissionsString} ${getPermissionWord(missingBotPermissions)} to be able to execute this command.\n`;
|
|
2857
|
+
}
|
|
2858
|
+
const embed = new discord_js.EmbedBuilder().setTitle(`:x: Missing permissions!`).setDescription(embedDescription).setColor("Red");
|
|
2859
|
+
try {
|
|
2860
|
+
var _message$channel2;
|
|
2861
|
+
if (interaction && interaction.isRepliable()) await interaction.reply({
|
|
2862
|
+
embeds: [embed],
|
|
2863
|
+
flags: discord_js.MessageFlags.Ephemeral
|
|
2864
|
+
});
|
|
2865
|
+
else if (message && ((_message$channel2 = message.channel) === null || _message$channel2 === void 0 ? void 0 : _message$channel2.isSendable())) await message.reply({ embeds: [embed] });
|
|
2866
|
+
} catch (error) {
|
|
2867
|
+
Logger.error(`Could not send 'Not enough permissions' reply to user ${(interaction === null || interaction === void 0 ? void 0 : interaction.user.id) ?? (message === null || message === void 0 ? void 0 : message.author.id)} for command ${command.command.name}.`, error);
|
|
2868
|
+
}
|
|
2869
|
+
return ctx.cancel();
|
|
2870
|
+
}
|
|
2871
|
+
|
|
2787
2872
|
//#endregion
|
|
2788
2873
|
//#region src/app/handlers/AppCommandHandler.ts
|
|
2874
|
+
const KNOWN_NON_HANDLER_KEYS = [
|
|
2875
|
+
"command",
|
|
2876
|
+
"generateMetadata",
|
|
2877
|
+
"metadata",
|
|
2878
|
+
"aiConfig"
|
|
2879
|
+
];
|
|
2789
2880
|
/**
|
|
2790
2881
|
* @private
|
|
2791
2882
|
* @internal
|
|
@@ -2975,7 +3066,7 @@ var AppCommandHandler = class {
|
|
|
2975
3066
|
* @returns Prepared command execution data or null if command not found
|
|
2976
3067
|
*/
|
|
2977
3068
|
async prepareCommandRun(source, cmdName) {
|
|
2978
|
-
var _loadedCommand$
|
|
3069
|
+
var _loadedCommand$metada3, _loadedCommand$metada4;
|
|
2979
3070
|
const config = getConfig();
|
|
2980
3071
|
if (config.disablePrefixCommands && source instanceof discord_js.Message) return null;
|
|
2981
3072
|
let parser;
|
|
@@ -2984,13 +3075,13 @@ var AppCommandHandler = class {
|
|
|
2984
3075
|
const prefix = await this.commandkit.appConfig.getMessageCommandPrefix(source);
|
|
2985
3076
|
if (!prefix || !prefix.length) return null;
|
|
2986
3077
|
parser = new require_MessageCommandParser.MessageCommandParser(source, Array.isArray(prefix) ? prefix : [prefix], (command) => {
|
|
2987
|
-
var _loadedCommand$
|
|
3078
|
+
var _loadedCommand$metada, _loadedCommand$metada2, _json$options;
|
|
2988
3079
|
const loadedCommand$1 = this.findCommandByName(command);
|
|
2989
3080
|
if (!loadedCommand$1) {
|
|
2990
3081
|
if (require_constants.COMMANDKIT_IS_DEV && this.commandkit.config.showUnknownPrefixCommandsWarning) Logger.error(`Prefix command "${command}" was not found.\nNote: This warning is only shown in development mode as an alert to help you find the command. If you wish to remove this warning, set \`showUnknownPrefixCommandsWarning\` to \`false\` in your commandkit config.`);
|
|
2991
3082
|
return null;
|
|
2992
3083
|
}
|
|
2993
|
-
if (source.guildId && ((_loadedCommand$
|
|
3084
|
+
if (source.guildId && ((_loadedCommand$metada = loadedCommand$1.metadata) === null || _loadedCommand$metada === void 0 || (_loadedCommand$metada = _loadedCommand$metada.guilds) === null || _loadedCommand$metada === void 0 ? void 0 : _loadedCommand$metada.length) && !((_loadedCommand$metada2 = loadedCommand$1.metadata) === null || _loadedCommand$metada2 === void 0 ? void 0 : _loadedCommand$metada2.guilds.includes(source.guildId))) return null;
|
|
2994
3085
|
const json$1 = "toJSON" in loadedCommand$1.data.command ? loadedCommand$1.data.command.toJSON() : loadedCommand$1.data.command;
|
|
2995
3086
|
return ((_json$options = json$1.options) === null || _json$options === void 0 ? void 0 : _json$options.reduce((acc, opt) => {
|
|
2996
3087
|
acc[opt.name] = opt.type;
|
|
@@ -3013,12 +3104,24 @@ var AppCommandHandler = class {
|
|
|
3013
3104
|
}
|
|
3014
3105
|
const loadedCommand = this.findCommandByName(cmdName);
|
|
3015
3106
|
if (!loadedCommand) return null;
|
|
3016
|
-
if ((source instanceof discord_js.CommandInteraction || source instanceof discord_js.AutocompleteInteraction) && source.guildId && ((_loadedCommand$
|
|
3107
|
+
if ((source instanceof discord_js.CommandInteraction || source instanceof discord_js.AutocompleteInteraction) && source.guildId && ((_loadedCommand$metada3 = loadedCommand.metadata) === null || _loadedCommand$metada3 === void 0 || (_loadedCommand$metada3 = _loadedCommand$metada3.guilds) === null || _loadedCommand$metada3 === void 0 ? void 0 : _loadedCommand$metada3.length) && !((_loadedCommand$metada4 = loadedCommand.metadata) === null || _loadedCommand$metada4 === void 0 ? void 0 : _loadedCommand$metada4.guilds.includes(source.guildId))) return null;
|
|
3017
3108
|
const middlewares = [];
|
|
3018
|
-
for (const middlewareId of loadedCommand.command.middlewares) {
|
|
3019
|
-
const middleware = this.loadedMiddlewares.get(middlewareId);
|
|
3109
|
+
for (const middlewareId$1 of loadedCommand.command.middlewares) {
|
|
3110
|
+
const middleware = this.loadedMiddlewares.get(middlewareId$1);
|
|
3020
3111
|
if (middleware) middlewares.push(middleware);
|
|
3021
3112
|
}
|
|
3113
|
+
if (!getConfig().disablePermissionsMiddleware) middlewares.push({
|
|
3114
|
+
data: { beforeExecute },
|
|
3115
|
+
middleware: {
|
|
3116
|
+
command: null,
|
|
3117
|
+
global: true,
|
|
3118
|
+
id: middlewareId,
|
|
3119
|
+
name: "permissions",
|
|
3120
|
+
parentPath: "",
|
|
3121
|
+
path: "",
|
|
3122
|
+
relativePath: ""
|
|
3123
|
+
}
|
|
3124
|
+
});
|
|
3022
3125
|
return {
|
|
3023
3126
|
command: loadedCommand,
|
|
3024
3127
|
middlewares,
|
|
@@ -3032,8 +3135,9 @@ var AppCommandHandler = class {
|
|
|
3032
3135
|
*/
|
|
3033
3136
|
findCommandByName(name) {
|
|
3034
3137
|
for (const [, loadedCommand] of this.loadedCommands) {
|
|
3138
|
+
var _loadedCommand$data$m;
|
|
3035
3139
|
if (loadedCommand.data.command.name === name) return loadedCommand;
|
|
3036
|
-
const aliases = loadedCommand.data.
|
|
3140
|
+
const aliases = (_loadedCommand$data$m = loadedCommand.data.metadata) === null || _loadedCommand$data$m === void 0 ? void 0 : _loadedCommand$data$m.aliases;
|
|
3037
3141
|
if (aliases && Array.isArray(aliases) && aliases.includes(name)) return loadedCommand;
|
|
3038
3142
|
}
|
|
3039
3143
|
return null;
|
|
@@ -3098,7 +3202,7 @@ var AppCommandHandler = class {
|
|
|
3098
3202
|
for (const [id, command] of combinedCommands) await this.loadCommand(id, command);
|
|
3099
3203
|
if (require_constants.COMMANDKIT_IS_DEV) {
|
|
3100
3204
|
const commandNames = Array.from(this.loadedCommands.values()).map((v) => v.data.command.name);
|
|
3101
|
-
const aliases = Array.from(this.loadedCommands.values()).flatMap((v) => v.
|
|
3205
|
+
const aliases = Array.from(this.loadedCommands.values()).flatMap((v) => v.metadata.aliases || []);
|
|
3102
3206
|
const allNames = [...commandNames, ...aliases];
|
|
3103
3207
|
await require_types_package.rewriteCommandDeclaration(`type CommandTypeData = ${allNames.map((name) => JSON.stringify(name)).join(" | ")}`);
|
|
3104
3208
|
}
|
|
@@ -3136,6 +3240,12 @@ var AppCommandHandler = class {
|
|
|
3136
3240
|
if (command.path === null) {
|
|
3137
3241
|
this.loadedCommands.set(id, {
|
|
3138
3242
|
command,
|
|
3243
|
+
metadata: {
|
|
3244
|
+
guilds: [],
|
|
3245
|
+
aliases: [],
|
|
3246
|
+
userPermissions: [],
|
|
3247
|
+
botPermissions: []
|
|
3248
|
+
},
|
|
3139
3249
|
data: { command: {
|
|
3140
3250
|
name: command.name,
|
|
3141
3251
|
description: `${command.name} command`,
|
|
@@ -3146,20 +3256,28 @@ var AppCommandHandler = class {
|
|
|
3146
3256
|
}
|
|
3147
3257
|
const commandFileData = await import(`${require_resolve_file_url.toFileURL(command.path)}?t=${Date.now()}`);
|
|
3148
3258
|
if (!commandFileData.command) throw new Error(`Invalid export for command ${command.name}: no command definition found`);
|
|
3259
|
+
const metadataFunc = commandFileData.generateMetadata;
|
|
3260
|
+
const metadataObj = commandFileData.metadata;
|
|
3261
|
+
if (metadataFunc && metadataObj) throw new Error("A command may only export either `generateMetadata` or `metadata`, not both");
|
|
3262
|
+
const metadata = (metadataFunc ? await metadataFunc() : metadataObj) ?? {
|
|
3263
|
+
aliases: [],
|
|
3264
|
+
guilds: [],
|
|
3265
|
+
userPermissions: [],
|
|
3266
|
+
botPermissions: []
|
|
3267
|
+
};
|
|
3149
3268
|
const commandName = commandFileData.command.name || command.name;
|
|
3150
3269
|
const commandDescription = commandFileData.command.description || `${commandName} command`;
|
|
3151
3270
|
const updatedCommandData = {
|
|
3152
3271
|
...commandFileData.command,
|
|
3153
3272
|
name: commandName,
|
|
3154
|
-
description: commandDescription
|
|
3155
|
-
aliases: commandFileData.command.aliases
|
|
3273
|
+
description: commandDescription
|
|
3156
3274
|
};
|
|
3157
3275
|
let handlerCount = 0;
|
|
3158
3276
|
for (const [key, propValidator] of Object.entries(commandDataSchema)) {
|
|
3159
3277
|
const exportedProp = commandFileData[key];
|
|
3160
3278
|
if (exportedProp) {
|
|
3161
3279
|
if (!await propValidator(exportedProp)) throw new Error(`Invalid export for command ${command.name}: ${key} does not match expected value`);
|
|
3162
|
-
if (key
|
|
3280
|
+
if (!KNOWN_NON_HANDLER_KEYS.includes(key)) handlerCount++;
|
|
3163
3281
|
}
|
|
3164
3282
|
}
|
|
3165
3283
|
if (handlerCount === 0) throw new Error(`Invalid export for command ${command.name}: at least one handler function must be provided`);
|
|
@@ -3168,18 +3286,44 @@ var AppCommandHandler = class {
|
|
|
3168
3286
|
const res = await plugin.prepareCommand(ctx, lastUpdated);
|
|
3169
3287
|
if (res) lastUpdated = res;
|
|
3170
3288
|
});
|
|
3289
|
+
const commandJson = "toJSON" in lastUpdated && typeof lastUpdated.toJSON === "function" ? lastUpdated.toJSON() : lastUpdated;
|
|
3290
|
+
if ("guilds" in commandJson || "aliases" in commandJson) Logger.warn(`Command \`${command.name}\` uses deprecated metadata properties. Please update to use the new \`metadata\` object or \`generateMetadata\` function.`);
|
|
3171
3291
|
this.loadedCommands.set(id, {
|
|
3172
3292
|
command,
|
|
3173
|
-
|
|
3293
|
+
metadata: {
|
|
3294
|
+
guilds: commandJson.guilds,
|
|
3295
|
+
aliases: commandJson.aliases,
|
|
3296
|
+
...metadata
|
|
3297
|
+
},
|
|
3174
3298
|
data: {
|
|
3175
3299
|
...commandFileData,
|
|
3176
|
-
|
|
3300
|
+
metadata: {
|
|
3301
|
+
guilds: commandJson.guilds,
|
|
3302
|
+
aliases: commandJson.aliases,
|
|
3303
|
+
...metadata
|
|
3304
|
+
},
|
|
3305
|
+
command: commandJson
|
|
3177
3306
|
}
|
|
3178
3307
|
});
|
|
3179
3308
|
} catch (error) {
|
|
3180
3309
|
Logger.error(`Failed to load command ${command.name} (${id})`, error);
|
|
3181
3310
|
}
|
|
3182
3311
|
}
|
|
3312
|
+
/**
|
|
3313
|
+
* Gets the metadata for a command.
|
|
3314
|
+
* @param command - The command name to get metadata for
|
|
3315
|
+
* @returns The command metadata or null if not found
|
|
3316
|
+
*/
|
|
3317
|
+
getMetadataFor(command) {
|
|
3318
|
+
const loadedCommand = this.findCommandByName(command);
|
|
3319
|
+
if (!loadedCommand) return null;
|
|
3320
|
+
return loadedCommand.metadata ??= {
|
|
3321
|
+
aliases: [],
|
|
3322
|
+
guilds: [],
|
|
3323
|
+
userPermissions: [],
|
|
3324
|
+
botPermissions: []
|
|
3325
|
+
};
|
|
3326
|
+
}
|
|
3183
3327
|
};
|
|
3184
3328
|
|
|
3185
3329
|
//#endregion
|
|
@@ -4150,6 +4294,12 @@ Object.defineProperty(exports, 'after', {
|
|
|
4150
4294
|
return after;
|
|
4151
4295
|
}
|
|
4152
4296
|
});
|
|
4297
|
+
Object.defineProperty(exports, 'beforeExecute', {
|
|
4298
|
+
enumerable: true,
|
|
4299
|
+
get: function () {
|
|
4300
|
+
return beforeExecute;
|
|
4301
|
+
}
|
|
4302
|
+
});
|
|
4153
4303
|
Object.defineProperty(exports, 'cancelAfter', {
|
|
4154
4304
|
enumerable: true,
|
|
4155
4305
|
get: function () {
|
|
@@ -4276,6 +4426,12 @@ Object.defineProperty(exports, 'makeContextAwareFunction', {
|
|
|
4276
4426
|
return makeContextAwareFunction;
|
|
4277
4427
|
}
|
|
4278
4428
|
});
|
|
4429
|
+
Object.defineProperty(exports, 'middlewareId', {
|
|
4430
|
+
enumerable: true,
|
|
4431
|
+
get: function () {
|
|
4432
|
+
return middlewareId;
|
|
4433
|
+
}
|
|
4434
|
+
});
|
|
4279
4435
|
Object.defineProperty(exports, 'noAnalytics', {
|
|
4280
4436
|
enumerable: true,
|
|
4281
4437
|
get: function () {
|
|
@@ -4312,4 +4468,4 @@ Object.defineProperty(exports, 'useEnvironment', {
|
|
|
4312
4468
|
return useEnvironment;
|
|
4313
4469
|
}
|
|
4314
4470
|
});
|
|
4315
|
-
//# sourceMappingURL=commandkit-
|
|
4471
|
+
//# sourceMappingURL=commandkit-C0BuNRSN.js.map
|