commandkit 1.2.0-rc.1 → 1.2.0-rc.11
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/COPYING.md +684 -0
- package/README.md +4 -12
- package/dist/{ActionRow-CmTHbo2t.js → ActionRow-CbdGFWMT.js} +3 -2
- package/dist/{ActionRow-CmTHbo2t.js.map → ActionRow-CbdGFWMT.js.map} +1 -1
- package/dist/{CommandKitEventsChannel-Bgw0XCOl.js → CommandKitEventsChannel-BtRzr3Tz.js} +3 -2
- package/dist/{CommandKitEventsChannel-Bgw0XCOl.js.map → CommandKitEventsChannel-BtRzr3Tz.js.map} +1 -1
- package/dist/{CommandsRouter-Ci1Pe8Vd.js → CommandsRouter-Dmzw-ikm.js} +18 -13
- package/dist/{CommandsRouter-Ci1Pe8Vd.js.map → CommandsRouter-Dmzw-ikm.js.map} +1 -1
- package/dist/{CompilerPlugin-CjoZAAR8.js → CompilerPlugin-M8r3yNAl.js} +2 -2
- package/dist/{CompilerPlugin-CjoZAAR8.js.map → CompilerPlugin-M8r3yNAl.js.map} +1 -1
- package/dist/{DefaultLogger-Cy55-uPl.d.ts → DefaultLogger-XCOl5nLd.d.ts} +19 -12
- package/dist/{EventInterceptor-CQ4PBpBJ.js → EventInterceptor-CQEXyUTp.js} +3 -5
- package/dist/{EventInterceptor-CQ4PBpBJ.js.map → EventInterceptor-CQEXyUTp.js.map} +1 -1
- package/dist/{EventWorkerContext-CSlD9rbx.js → EventWorkerContext-Dq29tieI.js} +3 -2
- package/dist/{EventWorkerContext-CSlD9rbx.js.map → EventWorkerContext-Dq29tieI.js.map} +1 -1
- package/dist/{EventWorkerContext-DJUi1W3T.d.ts → EventWorkerContext-XNgriym3.d.ts} +2 -2
- package/dist/{EventsRouter-C_J0M3uO.js → EventsRouter-3Gygh-km.js} +9 -5
- package/dist/{EventsRouter-C_J0M3uO.js.map → EventsRouter-3Gygh-km.js.map} +1 -1
- package/dist/ILogger-BW8GM-YZ.d.ts +64 -0
- package/dist/{Logger-iSjA-DWN.d.ts → Logger-DyfkPk7u.d.ts} +2 -2
- package/dist/{MessageCommandParser-ROLibZPX.d.ts → MessageCommandParser-BsGMOTDo.d.ts} +3 -3
- package/dist/{MessageCommandParser-B_BEQ3p8.js → MessageCommandParser-Dl0xxtdr.js} +9 -4
- package/dist/MessageCommandParser-Dl0xxtdr.js.map +1 -0
- package/dist/{PluginCommon-Di1xIa8d.js → PluginCommon-Cvl5yYM_.js} +3 -2
- package/dist/{PluginCommon-Di1xIa8d.js.map → PluginCommon-Cvl5yYM_.js.map} +1 -1
- package/dist/{RuntimePlugin-CBgBLXTG.js → RuntimePlugin-BUecuBIU.js} +3 -2
- package/dist/RuntimePlugin-BUecuBIU.js.map +1 -0
- package/dist/analytics/analytics-engine.d.ts +6 -6
- package/dist/analytics/analytics-engine.js +29 -28
- package/dist/analytics/analytics-provider.d.ts +6 -6
- package/dist/analytics/constants.js +1 -1
- package/dist/analytics/utils.js +29 -28
- package/dist/{analytics-engine-vA4MaJYx.d.ts → analytics-engine-AaAl3kQM.d.ts} +97 -32
- package/dist/app/commands/AppCommandRunner.d.ts +6 -6
- package/dist/app/commands/AppCommandRunner.js +29 -28
- package/dist/app/commands/Context.d.ts +6 -6
- package/dist/app/commands/Context.js +29 -28
- package/dist/app/commands/MessageCommandParser.d.ts +1 -1
- package/dist/app/commands/MessageCommandParser.js +2 -2
- package/dist/app/commands/helpers.js +1 -1
- package/dist/app/events/EventWorkerContext.d.ts +7 -7
- package/dist/app/events/EventWorkerContext.js +1 -1
- package/dist/app/handlers/AppCommandHandler.d.ts +6 -6
- package/dist/app/handlers/AppCommandHandler.js +29 -28
- package/dist/app/handlers/AppEventsHandler.d.ts +6 -6
- package/dist/app/handlers/AppEventsHandler.js +29 -28
- package/dist/app/index.d.ts +7 -7
- package/dist/app/index.js +31 -31
- package/dist/app/interrupt/signals.d.ts +2 -2
- package/dist/app/interrupt/signals.js +5 -5
- package/dist/app/middlewares/permissions.d.ts +42 -0
- package/dist/app/middlewares/permissions.js +39 -0
- package/dist/app/register/CommandRegistrar.d.ts +6 -6
- package/dist/app/register/CommandRegistrar.js +29 -28
- package/dist/app/router/CommandsRouter.js +1 -1
- package/dist/app/router/EventsRouter.js +1 -1
- package/dist/app/router/index.d.ts +1 -1
- package/dist/app/router/index.js +3 -3
- package/dist/{app-process-CjMovpoZ.js → app-process-cj2vF12T.js} +8 -5
- package/dist/{app-process-CjMovpoZ.js.map → app-process-cj2vF12T.js.map} +1 -1
- package/dist/{build-DXl8uEv4.js → build-B5qTswWF.js} +18 -14
- package/dist/build-B5qTswWF.js.map +1 -0
- package/dist/cli/app-process.js +4 -4
- package/dist/cli/build.d.ts +6 -6
- package/dist/cli/build.js +31 -30
- package/dist/cli/common.d.ts +13 -7
- package/dist/cli/common.js +4 -3
- package/dist/cli/development.js +45 -44
- package/dist/cli/development.js.map +1 -1
- package/dist/cli/generators.js +42 -11
- package/dist/cli/generators.js.map +1 -1
- package/dist/cli/information.js +14 -19
- package/dist/cli/information.js.map +1 -1
- package/dist/cli/init.js +30 -29
- package/dist/cli/production.js +34 -32
- package/dist/cli/production.js.map +1 -1
- package/dist/cli/type-checker.js +4 -4
- package/dist/{colors-Cd4Oz-r-.js → colors-DL3ucTiT.js} +3 -2
- package/dist/{colors-Cd4Oz-r-.js.map → colors-DL3ucTiT.js.map} +1 -1
- package/dist/{commandkit-DMEW0kJg.js → commandkit-ZoBBh0Q_.js} +528 -359
- package/dist/commandkit-ZoBBh0Q_.js.map +1 -0
- package/dist/commandkit.d.ts +6 -6
- package/dist/commandkit.js +29 -28
- package/dist/{common-DNADUU3_.js → common-CrqwC-sx.js} +33 -18
- package/dist/common-CrqwC-sx.js.map +1 -0
- package/dist/common-vnMIelAE.js.map +1 -1
- package/dist/components/common/EventInterceptor.js +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.js +29 -28
- package/dist/components/v1/action-row/ActionRow.js +1 -1
- package/dist/components/v1/button/Button.js +29 -28
- package/dist/components/v1/button/ButtonKit.js +29 -28
- package/dist/components/v1/modal/Modal.js +29 -28
- package/dist/components/v1/modal/ModalKit.js +29 -28
- package/dist/components/v1/select-menu/ChannelSelectMenuKit.js +29 -28
- package/dist/components/v1/select-menu/MentionableSelectMenuKit.js +29 -28
- package/dist/components/v1/select-menu/RoleSelectMenuKit.js +29 -28
- package/dist/components/v1/select-menu/SelectMenu.js +29 -28
- package/dist/components/v1/select-menu/StringSelectMenuKit.js +29 -28
- package/dist/components/v1/select-menu/UserSelectMenuKit.js +29 -28
- package/dist/components/v2/container.js +1 -1
- package/dist/components/v2/file.js +1 -1
- package/dist/components/v2/index.d.ts +1 -1
- package/dist/components/v2/index.js +6 -6
- package/dist/components/v2/media-gallery.js +1 -1
- package/dist/components/v2/section.js +1 -1
- package/dist/components/v2/separator.js +1 -1
- package/dist/components/v2/text-display.js +1 -1
- package/dist/config/config.d.ts +7 -7
- package/dist/config/config.js +29 -28
- package/dist/config/default.d.ts +6 -6
- package/dist/config/default.js +29 -28
- package/dist/config/loader.d.ts +6 -6
- package/dist/config/loader.js +29 -28
- package/dist/config/types.d.ts +6 -6
- package/dist/config/utils.d.ts +6 -6
- package/dist/config/utils.js +1 -1
- package/dist/{config-CcWJ-vz5.d.ts → config-D-JMp2IO.d.ts} +2 -2
- package/dist/constants-4oxxvaJA.js.map +1 -1
- package/dist/constants-B5_Ta7PR.js.map +1 -1
- package/dist/{constants-CUND8XkG.js → constants-BOOGN85p.js} +3 -2
- package/dist/{constants-CUND8XkG.js.map → constants-BOOGN85p.js.map} +1 -1
- package/dist/{constants-DrjIvQd6.d.ts → constants-D8PMA9on.d.ts} +1 -1
- package/dist/{container-z621KfH5.js → container-C6GtfAPW.js} +3 -2
- package/dist/{container-z621KfH5.js.map → container-C6GtfAPW.js.map} +1 -1
- package/dist/context/async-context.d.ts +7 -7
- package/dist/context/async-context.js +31 -29
- package/dist/context/environment.d.ts +6 -6
- package/dist/context/environment.js +29 -28
- package/dist/{dotprops-C_4L7RPD.js → dotprops-tnhpnszJ.js} +2 -2
- package/dist/{dotprops-C_4L7RPD.js.map → dotprops-tnhpnszJ.js.map} +1 -1
- package/dist/element-Bak9llw_.js.map +1 -1
- package/dist/env-_68PRRoA.js.map +1 -1
- package/dist/error-codes-B4TyW4Ct.d.ts +54 -0
- package/dist/{error-codes-C-ViHyu-.js → error-codes-Ds0bnPvT.js} +2 -2
- package/dist/error-codes-Ds0bnPvT.js.map +1 -0
- package/dist/events/CommandKitEventsChannel.d.ts +6 -6
- package/dist/events/CommandKitEventsChannel.js +1 -1
- package/dist/{feature-flags-Cxl9JtVG.js → feature-flags-CKNrjgqg.js} +11 -16
- package/dist/{feature-flags-Cxl9JtVG.js.map → feature-flags-CKNrjgqg.js.map} +1 -1
- package/dist/{file-DVZC0QXI.js → file-DVOELoNv.js} +3 -2
- package/dist/{file-DVZC0QXI.js.map → file-DVOELoNv.js.map} +1 -1
- package/dist/flags/FlagProvider.d.ts +6 -6
- package/dist/flags/FlagProvider.js.map +1 -1
- package/dist/flags/feature-flags.d.ts +6 -6
- package/dist/flags/feature-flags.js +30 -29
- package/dist/flags/store.d.ts +6 -6
- package/dist/flags/store.js +1 -1
- package/dist/{helpers-BUlN3lIz.js → helpers-Dl8wW6aO.js} +3 -2
- package/dist/{helpers-BUlN3lIz.js.map → helpers-Dl8wW6aO.js.map} +1 -1
- package/dist/index-CUPkUUOR.d.ts +1 -0
- package/dist/index-Dw5cCt-A.d.ts +1 -0
- package/dist/index-E7Wvm5uX.d.ts +1 -0
- package/dist/index.d.ts +13 -12
- package/dist/index.js +47 -38
- package/dist/index.js.map +1 -0
- package/dist/{init-DTBFphOg.js → init-_7_QDifv.js} +11 -8
- package/dist/{init-DTBFphOg.js.map → init-_7_QDifv.js.map} +1 -1
- package/dist/kv/constants.d.ts +1 -1
- package/dist/kv/dotprops.js +1 -1
- package/dist/kv/kv.d.ts +2 -2
- package/dist/kv/kv.js +8 -10
- package/dist/kv/kv.js.map +1 -1
- package/dist/kv/serde.d.ts +2 -2
- package/dist/kv/serde.js +1 -1
- package/dist/logger/DefaultLogger.d.ts +2 -2
- package/dist/logger/DefaultLogger.js +29 -28
- package/dist/logger/ILogger.d.ts +1 -1
- package/dist/logger/Logger.d.ts +2 -2
- package/dist/logger/Logger.js +29 -28
- package/dist/logger/NoopLogger.d.ts +41 -11
- package/dist/logger/NoopLogger.js +5 -25
- package/dist/logger/NoopLogger.js.map +1 -1
- package/dist/{media-gallery-CIKypjbJ.js → media-gallery-zDtJ3kxb.js} +3 -2
- package/dist/{media-gallery-CIKypjbJ.js.map → media-gallery-zDtJ3kxb.js.map} +1 -1
- package/dist/plugins/CompilerPlugin.d.ts +6 -6
- package/dist/plugins/CompilerPlugin.js +2 -2
- package/dist/plugins/PluginCommon.d.ts +6 -6
- package/dist/plugins/PluginCommon.js +1 -1
- package/dist/plugins/RuntimePlugin.d.ts +6 -6
- package/dist/plugins/RuntimePlugin.js +2 -2
- package/dist/plugins/index.d.ts +6 -6
- package/dist/plugins/index.js +29 -28
- package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +6 -6
- package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +29 -28
- package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +6 -6
- package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +29 -28
- package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +6 -6
- package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +29 -28
- package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +6 -6
- package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +29 -28
- package/dist/plugins/plugin-runtime/runtime.d.ts +6 -6
- package/dist/plugins/plugin-runtime/runtime.js +1 -1
- package/dist/plugins/types.d.ts +6 -6
- package/dist/{resolve-file-url-DHTQj2mU.js → resolve-file-url-ChIyw-Vf.js} +4 -4
- package/dist/{resolve-file-url-DHTQj2mU.js.map → resolve-file-url-ChIyw-Vf.js.map} +1 -1
- package/dist/{section-CuYr0Inu.js → section-DlvrDoJK.js} +4 -4
- package/dist/{section-CuYr0Inu.js.map → section-DlvrDoJK.js.map} +1 -1
- package/dist/{separator-DLdWBjSN.js → separator-DL6QH5H1.js} +4 -4
- package/dist/{separator-DLdWBjSN.js.map → separator-DL6QH5H1.js.map} +1 -1
- package/dist/{serde-BUDI03pX.d.ts → serde-BYaKrsOV.d.ts} +2 -2
- package/dist/{serde-CHySNpFr.js → serde-Cc8iUa9J.js} +2 -2
- package/dist/{serde-CHySNpFr.js.map → serde-Cc8iUa9J.js.map} +1 -1
- package/dist/{signals-DHdYrd-n.js → signals-ChFMD7mB.js} +12 -15
- package/dist/signals-ChFMD7mB.js.map +1 -0
- package/dist/{signals-BQbEfy3X.d.ts → signals-SHg7J1U_.d.ts} +4 -7
- package/dist/{store-CiqLHedg.js → store-CM6pWVZh.js} +3 -2
- package/dist/{store-CiqLHedg.js.map → store-CM6pWVZh.js.map} +1 -1
- package/dist/{text-display--p2-BoUa.js → text-display-DbMumig_.js} +3 -2
- package/dist/{text-display--p2-BoUa.js.map → text-display-DbMumig_.js.map} +1 -1
- package/dist/{type-checker-1Iu1jJcy.js → type-checker-ocNSZh0W.js} +7 -5
- package/dist/{type-checker-1Iu1jJcy.js.map → type-checker-ocNSZh0W.js.map} +1 -1
- package/dist/{types-package-DrnIdWLg.js → types-package-BWArjyBF.js} +7 -4
- package/dist/{types-package-DrnIdWLg.js.map → types-package-BWArjyBF.js.map} +1 -1
- package/dist/types.d.ts +7 -7
- package/dist/utils/colors.js +1 -1
- package/dist/utils/dev-hooks.d.ts +6 -6
- package/dist/utils/dev-hooks.js +29 -28
- package/dist/utils/error-codes.d.ts +2 -54
- package/dist/utils/error-codes.js +1 -1
- package/dist/utils/resolve-file-url.js +1 -1
- package/dist/utils/types-package.js +1 -1
- package/dist/utils/useful-stuff/async-queue.js.map +1 -1
- package/dist/utils/useful-stuff/mutex.js +1 -2
- package/dist/utils/useful-stuff/mutex.js.map +1 -1
- package/dist/utils/useful-stuff/ratelimiter.js +2 -4
- package/dist/utils/useful-stuff/ratelimiter.js.map +1 -1
- package/dist/utils/useful-stuff/semaphore.js +2 -4
- package/dist/utils/useful-stuff/semaphore.js.map +1 -1
- package/dist/utils/utilities.js +29 -28
- package/dist/utils/warn-unstable.js.map +1 -1
- package/dist/utils-DCSnVAZ6.js.map +1 -1
- package/dist/{utils-BnXM4eKk.js → utils-KsNof0Xz.js} +1 -1
- package/dist/{utils-BnXM4eKk.js.map → utils-KsNof0Xz.js.map} +1 -1
- package/dist/{version-rfStvlqX.js → version--Q1nmlBz.js} +2 -2
- package/dist/{version-rfStvlqX.js.map → version--Q1nmlBz.js.map} +1 -1
- package/dist/version.js +1 -1
- package/hooks.cjs +2 -0
- package/hooks.d.ts +3 -1
- package/package.json +61 -60
- package/LICENSE +0 -5
- package/dist/ILogger-DBGON5wx.d.ts +0 -34
- package/dist/MessageCommandParser-B_BEQ3p8.js.map +0 -1
- package/dist/RuntimePlugin-CBgBLXTG.js.map +0 -1
- package/dist/build-DXl8uEv4.js.map +0 -1
- package/dist/commandkit-DMEW0kJg.js.map +0 -1
- package/dist/common-DNADUU3_.js.map +0 -1
- package/dist/error-codes-C-ViHyu-.js.map +0 -1
- package/dist/index-DKcmsWXw.d.ts +0 -1
- package/dist/index-DSBMRX9A.d.ts +0 -1
- package/dist/index-DdqikUQD.d.ts +0 -1
- package/dist/signals-DHdYrd-n.js.map +0 -1
- /package/dist/{router-DHnFRADH.js → router-Dn35v30f.js} +0 -0
- /package/dist/{runtime-5fxB4uhe.js → runtime-DB9CiPfe.js} +0 -0
|
@@ -1,30 +1,38 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-nOFOJqeH.js');
|
|
2
|
-
const require_colors = require('./colors-
|
|
3
|
-
const require_error_codes = require('./error-codes-
|
|
2
|
+
const require_colors = require('./colors-DL3ucTiT.js');
|
|
3
|
+
const require_error_codes = require('./error-codes-Ds0bnPvT.js');
|
|
4
4
|
const require_element = require('./element-Bak9llw_.js');
|
|
5
|
-
const require_EventInterceptor = require('./EventInterceptor-
|
|
5
|
+
const require_EventInterceptor = require('./EventInterceptor-CQEXyUTp.js');
|
|
6
6
|
const require_constants = require('./constants-B5_Ta7PR.js');
|
|
7
|
-
const require_CompilerPlugin = require('./CompilerPlugin-
|
|
8
|
-
const require_RuntimePlugin = require('./RuntimePlugin-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const require_types_package = require('./types-package-
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
7
|
+
const require_CompilerPlugin = require('./CompilerPlugin-M8r3yNAl.js');
|
|
8
|
+
const require_RuntimePlugin = require('./RuntimePlugin-BUecuBIU.js');
|
|
9
|
+
const require_resolve_file_url = require('./resolve-file-url-ChIyw-Vf.js');
|
|
10
|
+
const require_utils = require('./utils-KsNof0Xz.js');
|
|
11
|
+
const require_types_package = require('./types-package-BWArjyBF.js');
|
|
12
|
+
const require_constants$1 = require('./constants-BOOGN85p.js');
|
|
13
|
+
const require_EventWorkerContext = require('./EventWorkerContext-Dq29tieI.js');
|
|
14
|
+
const require_signals = require('./signals-ChFMD7mB.js');
|
|
15
|
+
const require_helpers = require('./helpers-Dl8wW6aO.js');
|
|
16
|
+
const require_MessageCommandParser = require('./MessageCommandParser-Dl0xxtdr.js');
|
|
17
|
+
const require_CommandsRouter = require('./CommandsRouter-Dmzw-ikm.js');
|
|
18
|
+
const require_EventsRouter = require('./EventsRouter-3Gygh-km.js');
|
|
19
|
+
const require_common = require('./common-CrqwC-sx.js');
|
|
20
|
+
const require_CommandKitEventsChannel = require('./CommandKitEventsChannel-BtRzr3Tz.js');
|
|
21
|
+
const require_store = require('./store-CM6pWVZh.js');
|
|
22
|
+
let node_events = require("node:events");
|
|
23
|
+
node_events = require_chunk.__toESM(node_events);
|
|
24
|
+
let discord_js = require("discord.js");
|
|
25
|
+
discord_js = require_chunk.__toESM(discord_js);
|
|
26
|
+
let node_async_hooks = require("node:async_hooks");
|
|
27
|
+
node_async_hooks = require_chunk.__toESM(node_async_hooks);
|
|
28
|
+
let node_fs = require("node:fs");
|
|
29
|
+
node_fs = require_chunk.__toESM(node_fs);
|
|
30
|
+
let node_path = require("node:path");
|
|
31
|
+
node_path = require_chunk.__toESM(node_path);
|
|
32
|
+
let node_crypto = require("node:crypto");
|
|
33
|
+
node_crypto = require_chunk.__toESM(node_crypto);
|
|
34
|
+
let util = require("util");
|
|
35
|
+
util = require_chunk.__toESM(util);
|
|
28
36
|
|
|
29
37
|
//#region src/context/async-context.ts
|
|
30
38
|
const kCommandWorker = Symbol("commandkitCommandWorker");
|
|
@@ -61,10 +69,10 @@ function makeContextAwareFunction(env, fn, finalizer) {
|
|
|
61
69
|
const _fn = (...args) => {
|
|
62
70
|
return provideContext(env, async () => {
|
|
63
71
|
try {
|
|
64
|
-
|
|
65
|
-
return result;
|
|
72
|
+
return await fn(...args);
|
|
66
73
|
} catch (e) {
|
|
67
74
|
if (!require_error_codes.isCommandKitError(e)) env.setExecutionError(e);
|
|
75
|
+
else throw e;
|
|
68
76
|
} finally {
|
|
69
77
|
if (typeof finalizer === "function") setImmediate(async () => {
|
|
70
78
|
try {
|
|
@@ -87,8 +95,7 @@ function getCommandKit(strict = false) {
|
|
|
87
95
|
* @internal
|
|
88
96
|
*/
|
|
89
97
|
function getContext() {
|
|
90
|
-
|
|
91
|
-
return ctx;
|
|
98
|
+
return context.getStore();
|
|
92
99
|
}
|
|
93
100
|
/**
|
|
94
101
|
* Use current commandkit context. Throws an error if no context is found.
|
|
@@ -98,6 +105,12 @@ function useEnvironment() {
|
|
|
98
105
|
if (!ctx) throw new Error("No commandkit environment found. Please make sure you are inside commandkit handler.");
|
|
99
106
|
return ctx;
|
|
100
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Use the shared data store in the current environment. Throws an error if no context is found.
|
|
110
|
+
*/
|
|
111
|
+
function useStore() {
|
|
112
|
+
return useEnvironment().store;
|
|
113
|
+
}
|
|
101
114
|
|
|
102
115
|
//#endregion
|
|
103
116
|
//#region src/components/v1/button/ButtonKit.ts
|
|
@@ -194,15 +207,13 @@ var ButtonKit = class extends discord_js.ButtonBuilder {
|
|
|
194
207
|
}
|
|
195
208
|
#setupInteractionCollector() {
|
|
196
209
|
if (this.data.style === discord_js.ButtonStyle.Link || !this.#contextData || !this.#onClickHandler) return;
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const interceptor = this.#getEventInterceptor();
|
|
200
|
-
this.#unsub = interceptor.subscribe(discord_js.Events.InteractionCreate, async (interaction) => {
|
|
210
|
+
if ((this.customId ?? null) === null) throw new TypeError("Cannot setup \"onClick\" handler on a button without a custom id.");
|
|
211
|
+
this.#unsub = this.#getEventInterceptor().subscribe(discord_js.Events.InteractionCreate, async (interaction) => {
|
|
201
212
|
var _this$contextData5, _this$unsub;
|
|
202
213
|
if (!interaction.isButton()) return;
|
|
203
|
-
const myCustomId
|
|
214
|
+
const myCustomId = this.customId ?? null;
|
|
204
215
|
const interactionCustomId = interaction.customId;
|
|
205
|
-
if (myCustomId
|
|
216
|
+
if (myCustomId && interactionCustomId !== myCustomId) return;
|
|
206
217
|
const filter = (_this$contextData5 = this.#contextData) === null || _this$contextData5 === void 0 ? void 0 : _this$contextData5.filter;
|
|
207
218
|
if (filter && !await filter(interaction)) return;
|
|
208
219
|
const handler = this.#onClickHandler;
|
|
@@ -1277,55 +1288,63 @@ var DefaultLogger = class {
|
|
|
1277
1288
|
break;
|
|
1278
1289
|
default: label = "[LOG]";
|
|
1279
1290
|
}
|
|
1280
|
-
|
|
1281
|
-
return `${coloredLabel} `;
|
|
1291
|
+
return `${TextBgColorMap[level](require_colors.colors_default.whiteBright(` ${label} `))} `;
|
|
1282
1292
|
}
|
|
1283
1293
|
_getPrefix(level) {
|
|
1284
1294
|
const timestamp = this._formatTime(/* @__PURE__ */ new Date());
|
|
1285
|
-
|
|
1286
|
-
return `${label}${require_colors.colors_default.dim(BoxChars.vertical)} ${require_colors.colors_default.dim(timestamp)}`;
|
|
1295
|
+
return `${this._getLevelLabel(level)}${require_colors.colors_default.dim(BoxChars.vertical)} ${require_colors.colors_default.dim(timestamp)}`;
|
|
1287
1296
|
}
|
|
1288
|
-
_log(level,
|
|
1297
|
+
_log(level, message) {
|
|
1289
1298
|
const prefix = this._getPrefix(level);
|
|
1290
1299
|
const context$1 = this._getContext();
|
|
1291
1300
|
const colorFn = TextColorMap[level];
|
|
1292
|
-
|
|
1293
|
-
|
|
1301
|
+
let processedMessage = message;
|
|
1302
|
+
if (message instanceof Error) processedMessage = `${message.message}\n${message.stack}`;
|
|
1303
|
+
if (context$1) this.logger.log(`${prefix}\n${context$1} ${require_colors.colors_default.dim(BoxChars.corner)}`, colorFn(processedMessage));
|
|
1304
|
+
else this.logger.log(`${prefix} ${require_colors.colors_default.dim(BoxChars.corner)}`, colorFn(processedMessage));
|
|
1294
1305
|
}
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1306
|
+
_logTemplate(level, strings, ...values) {
|
|
1307
|
+
const prefix = this._getPrefix(level);
|
|
1308
|
+
const context$1 = this._getContext();
|
|
1309
|
+
const colorFn = TextColorMap[level];
|
|
1310
|
+
let result = "";
|
|
1311
|
+
for (let i = 0; i < strings.length; i++) {
|
|
1312
|
+
result += strings[i];
|
|
1313
|
+
if (i < values.length) {
|
|
1314
|
+
const value = values[i];
|
|
1315
|
+
if (value instanceof Error) result += `${value.message}\n${value.stack}`;
|
|
1316
|
+
else if (value !== null && typeof value === "object") result += (0, util.inspect)(value, {
|
|
1317
|
+
colors: true,
|
|
1318
|
+
depth: 2
|
|
1319
|
+
});
|
|
1320
|
+
else result += value;
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
if (context$1) this.logger.log(`${prefix}\n${context$1} ${require_colors.colors_default.dim(BoxChars.corner)}`, colorFn(result));
|
|
1324
|
+
else this.logger.log(`${prefix} ${require_colors.colors_default.dim(BoxChars.corner)}`, colorFn(result));
|
|
1301
1325
|
}
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
*/
|
|
1306
|
-
error(...args) {
|
|
1307
|
-
this._log(LogLevel.ERROR, ...args);
|
|
1326
|
+
debug(messageOrStrings, ...values) {
|
|
1327
|
+
if (this._isTemplateStringsArray(messageOrStrings)) this._logTemplate(LogLevel.DEBUG, messageOrStrings, ...values);
|
|
1328
|
+
else this._log(LogLevel.DEBUG, messageOrStrings);
|
|
1308
1329
|
}
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
*/
|
|
1313
|
-
log(...args) {
|
|
1314
|
-
this._log(LogLevel.DEFAULT, ...args);
|
|
1330
|
+
error(messageOrStrings, ...values) {
|
|
1331
|
+
if (this._isTemplateStringsArray(messageOrStrings)) this._logTemplate(LogLevel.ERROR, messageOrStrings, ...values);
|
|
1332
|
+
else this._log(LogLevel.ERROR, messageOrStrings);
|
|
1315
1333
|
}
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
*/
|
|
1320
|
-
info(...args) {
|
|
1321
|
-
this._log(LogLevel.INFO, ...args);
|
|
1334
|
+
log(messageOrStrings, ...values) {
|
|
1335
|
+
if (this._isTemplateStringsArray(messageOrStrings)) this._logTemplate(LogLevel.DEFAULT, messageOrStrings, ...values);
|
|
1336
|
+
else this._log(LogLevel.DEFAULT, messageOrStrings);
|
|
1322
1337
|
}
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
warn(...
|
|
1328
|
-
this.
|
|
1338
|
+
info(messageOrStrings, ...values) {
|
|
1339
|
+
if (this._isTemplateStringsArray(messageOrStrings)) this._logTemplate(LogLevel.INFO, messageOrStrings, ...values);
|
|
1340
|
+
else this._log(LogLevel.INFO, messageOrStrings);
|
|
1341
|
+
}
|
|
1342
|
+
warn(messageOrStrings, ...values) {
|
|
1343
|
+
if (this._isTemplateStringsArray(messageOrStrings)) this._logTemplate(LogLevel.WARN, messageOrStrings, ...values);
|
|
1344
|
+
else this._log(LogLevel.WARN, messageOrStrings);
|
|
1345
|
+
}
|
|
1346
|
+
_isTemplateStringsArray(value) {
|
|
1347
|
+
return Array.isArray(value) && "raw" in value && Array.isArray(value.raw);
|
|
1329
1348
|
}
|
|
1330
1349
|
};
|
|
1331
1350
|
|
|
@@ -1349,8 +1368,8 @@ function createLogger(options) {
|
|
|
1349
1368
|
const impl = { configure(options$1) {
|
|
1350
1369
|
opt = options$1;
|
|
1351
1370
|
} };
|
|
1352
|
-
for (const method of methods) impl[method] = (...
|
|
1353
|
-
opt.provider[method](...
|
|
1371
|
+
for (const method of methods) impl[method] = (...message) => {
|
|
1372
|
+
opt.provider[method](...message);
|
|
1354
1373
|
};
|
|
1355
1374
|
return impl;
|
|
1356
1375
|
}
|
|
@@ -1394,8 +1413,14 @@ var CommandKitPluginRuntime = class {
|
|
|
1394
1413
|
* @param plugin The plugin to be fetched.
|
|
1395
1414
|
*/
|
|
1396
1415
|
get(plugin) {
|
|
1397
|
-
|
|
1398
|
-
|
|
1416
|
+
return this.plugins.find((p) => p instanceof plugin) ?? null;
|
|
1417
|
+
}
|
|
1418
|
+
/**
|
|
1419
|
+
* Pre-loads the specified entrypoints for the given plugin.
|
|
1420
|
+
* @param plugin The plugin to pre-load.
|
|
1421
|
+
*/
|
|
1422
|
+
async preload(plugin) {
|
|
1423
|
+
for (const entrypoint of plugin.preload) await import(require_resolve_file_url.toFileURL(`${getCurrentDirectory()}/${entrypoint}`));
|
|
1399
1424
|
}
|
|
1400
1425
|
/**
|
|
1401
1426
|
* Soft registers a plugin in the runtime.
|
|
@@ -1405,9 +1430,11 @@ var CommandKitPluginRuntime = class {
|
|
|
1405
1430
|
const pluginName = plugin.name;
|
|
1406
1431
|
if (this.plugins.has(pluginName)) return;
|
|
1407
1432
|
try {
|
|
1433
|
+
await this.preload(plugin);
|
|
1408
1434
|
await plugin.activate(this);
|
|
1409
1435
|
this.plugins.set(pluginName, plugin);
|
|
1410
1436
|
} catch (e) {
|
|
1437
|
+
this.plugins.delete(pluginName);
|
|
1411
1438
|
throw new Error(`Failed to activate plugin "${pluginName}": ${(e === null || e === void 0 ? void 0 : e.stack) || e}`);
|
|
1412
1439
|
}
|
|
1413
1440
|
}
|
|
@@ -1420,9 +1447,11 @@ var CommandKitPluginRuntime = class {
|
|
|
1420
1447
|
const pluginName = plugin.name;
|
|
1421
1448
|
if (this.plugins.has(pluginName)) throw new Error(`Plugin with name "${pluginName}" already exists.`);
|
|
1422
1449
|
try {
|
|
1450
|
+
await this.preload(plugin);
|
|
1423
1451
|
await plugin.activate(this);
|
|
1424
1452
|
this.plugins.set(pluginName, plugin);
|
|
1425
1453
|
} catch (e) {
|
|
1454
|
+
this.plugins.delete(pluginName);
|
|
1426
1455
|
throw new Error(`Failed to activate plugin "${pluginName}": ${(e === null || e === void 0 ? void 0 : e.stack) || e}`);
|
|
1427
1456
|
}
|
|
1428
1457
|
}
|
|
@@ -1464,7 +1493,7 @@ var CommandKitPluginRuntime = class {
|
|
|
1464
1493
|
result = await f(this, plugin);
|
|
1465
1494
|
} catch (e) {
|
|
1466
1495
|
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.PluginCaptureHandle)) return true;
|
|
1467
|
-
Logger.error
|
|
1496
|
+
Logger.error`Plugin "${plugin.name}" failed: ${(e === null || e === void 0 ? void 0 : e.stack) || e}`;
|
|
1468
1497
|
}
|
|
1469
1498
|
return result;
|
|
1470
1499
|
}
|
|
@@ -1602,7 +1631,7 @@ var CompilerPluginRuntime = class {
|
|
|
1602
1631
|
await ((_plugin$activate = plugin.activate) === null || _plugin$activate === void 0 ? void 0 : _plugin$activate.call(plugin, this));
|
|
1603
1632
|
});
|
|
1604
1633
|
} catch (e) {
|
|
1605
|
-
|
|
1634
|
+
Logger.error`Plugin ${plugin.name} failed to activate with ${e}`;
|
|
1606
1635
|
}
|
|
1607
1636
|
this.initialized = true;
|
|
1608
1637
|
}
|
|
@@ -1621,7 +1650,7 @@ var CompilerPluginRuntime = class {
|
|
|
1621
1650
|
await ((_plugin$deactivate = plugin.deactivate) === null || _plugin$deactivate === void 0 ? void 0 : _plugin$deactivate.call(plugin, this));
|
|
1622
1651
|
});
|
|
1623
1652
|
} catch (e) {
|
|
1624
|
-
|
|
1653
|
+
Logger.error`Plugin ${plugin.name} failed to deactivate with ${e}`;
|
|
1625
1654
|
}
|
|
1626
1655
|
this.initialized = false;
|
|
1627
1656
|
}
|
|
@@ -1656,9 +1685,8 @@ var CommonDirectiveTransformer = class extends require_CompilerPlugin.CompilerPl
|
|
|
1656
1685
|
if (!this.options.enabled) return null;
|
|
1657
1686
|
if (!this.transformer) return null;
|
|
1658
1687
|
if (/\.json$/.test(params.id)) return null;
|
|
1659
|
-
const result = await this.transformer(params.code.toString(), params.id);
|
|
1660
1688
|
return {
|
|
1661
|
-
code:
|
|
1689
|
+
code: (await this.transformer(params.code.toString(), params.id)).contents,
|
|
1662
1690
|
map: null
|
|
1663
1691
|
};
|
|
1664
1692
|
}
|
|
@@ -1682,8 +1710,7 @@ var MacroPlugin = class extends require_CompilerPlugin.CompilerPlugin {
|
|
|
1682
1710
|
name = "MacroPlugin";
|
|
1683
1711
|
macroTransformer;
|
|
1684
1712
|
async activate() {
|
|
1685
|
-
|
|
1686
|
-
this.macroTransformer = new transform.MacroTransformer();
|
|
1713
|
+
this.macroTransformer = new (await (import("use-macro"))).MacroTransformer();
|
|
1687
1714
|
}
|
|
1688
1715
|
async deactivate() {
|
|
1689
1716
|
this.macroTransformer = null;
|
|
@@ -1706,7 +1733,7 @@ var MacroPlugin = class extends require_CompilerPlugin.CompilerPlugin {
|
|
|
1706
1733
|
*/
|
|
1707
1734
|
const defaultConfig = {
|
|
1708
1735
|
plugins: [new MacroPlugin({ enabled: true })],
|
|
1709
|
-
rolldownPlugins: [
|
|
1736
|
+
rolldownPlugins: [],
|
|
1710
1737
|
compilerOptions: {
|
|
1711
1738
|
macro: { development: false },
|
|
1712
1739
|
tsdown: {},
|
|
@@ -1723,6 +1750,7 @@ const defaultConfig = {
|
|
|
1723
1750
|
},
|
|
1724
1751
|
typedCommands: true,
|
|
1725
1752
|
disablePrefixCommands: false,
|
|
1753
|
+
disablePermissionsMiddleware: false,
|
|
1726
1754
|
showUnknownPrefixCommandsWarning: true,
|
|
1727
1755
|
antiCrashScript: {
|
|
1728
1756
|
development: true,
|
|
@@ -1781,7 +1809,8 @@ function defineConfig(config = {}) {
|
|
|
1781
1809
|
antiCrashScript: {
|
|
1782
1810
|
...defaultConfig.antiCrashScript,
|
|
1783
1811
|
...config.antiCrashScript
|
|
1784
|
-
}
|
|
1812
|
+
},
|
|
1813
|
+
disablePermissionsMiddleware: config.disablePermissionsMiddleware ?? defaultConfig.disablePermissionsMiddleware
|
|
1785
1814
|
};
|
|
1786
1815
|
return defined;
|
|
1787
1816
|
}
|
|
@@ -1813,13 +1842,11 @@ function getCurrentDirectory() {
|
|
|
1813
1842
|
* @returns An array of possible source directories.
|
|
1814
1843
|
*/
|
|
1815
1844
|
function getSourceDirectories() {
|
|
1816
|
-
|
|
1817
|
-
const locations = [
|
|
1845
|
+
return [
|
|
1818
1846
|
"src",
|
|
1819
1847
|
".commandkit",
|
|
1820
|
-
|
|
1848
|
+
getConfig().distDir
|
|
1821
1849
|
].map((dir) => (0, node_path.join)(require_constants.COMMANDKIT_CWD, dir));
|
|
1822
|
-
return locations;
|
|
1823
1850
|
}
|
|
1824
1851
|
/**
|
|
1825
1852
|
* Returns the path to the app directory.
|
|
@@ -1923,49 +1950,48 @@ function devOnly(fn) {
|
|
|
1923
1950
|
*/
|
|
1924
1951
|
function createProxy(target) {
|
|
1925
1952
|
let _target = target;
|
|
1926
|
-
const proxy = new Proxy(_target, {
|
|
1927
|
-
get(target$1, prop, receiver) {
|
|
1928
|
-
return Reflect.get(_target, prop, receiver);
|
|
1929
|
-
},
|
|
1930
|
-
set(target$1, prop, value, receiver) {
|
|
1931
|
-
return Reflect.set(_target, prop, value, receiver);
|
|
1932
|
-
},
|
|
1933
|
-
deleteProperty(target$1, prop) {
|
|
1934
|
-
return Reflect.deleteProperty(_target, prop);
|
|
1935
|
-
},
|
|
1936
|
-
has(target$1, prop) {
|
|
1937
|
-
return Reflect.has(_target, prop);
|
|
1938
|
-
},
|
|
1939
|
-
ownKeys(target$1) {
|
|
1940
|
-
return Reflect.ownKeys(_target);
|
|
1941
|
-
},
|
|
1942
|
-
getOwnPropertyDescriptor(target$1, prop) {
|
|
1943
|
-
return Reflect.getOwnPropertyDescriptor(_target, prop);
|
|
1944
|
-
},
|
|
1945
|
-
defineProperty(target$1, prop, attributes) {
|
|
1946
|
-
return Reflect.defineProperty(_target, prop, attributes);
|
|
1947
|
-
},
|
|
1948
|
-
getPrototypeOf(target$1) {
|
|
1949
|
-
return Reflect.getPrototypeOf(_target);
|
|
1950
|
-
},
|
|
1951
|
-
setPrototypeOf(target$1, proto) {
|
|
1952
|
-
return Reflect.setPrototypeOf(_target, proto);
|
|
1953
|
-
},
|
|
1954
|
-
isExtensible(target$1) {
|
|
1955
|
-
return Reflect.isExtensible(_target);
|
|
1956
|
-
},
|
|
1957
|
-
preventExtensions(target$1) {
|
|
1958
|
-
return Reflect.preventExtensions(_target);
|
|
1959
|
-
},
|
|
1960
|
-
apply(target$1, thisArg, args) {
|
|
1961
|
-
return Reflect.apply(_target, thisArg, args);
|
|
1962
|
-
},
|
|
1963
|
-
construct(target$1, args, newTarget) {
|
|
1964
|
-
return Reflect.construct(_target, args, newTarget);
|
|
1965
|
-
}
|
|
1966
|
-
});
|
|
1967
1953
|
return {
|
|
1968
|
-
proxy,
|
|
1954
|
+
proxy: new Proxy(_target, {
|
|
1955
|
+
get(target$1, prop, receiver) {
|
|
1956
|
+
return Reflect.get(_target, prop, receiver);
|
|
1957
|
+
},
|
|
1958
|
+
set(target$1, prop, value, receiver) {
|
|
1959
|
+
return Reflect.set(_target, prop, value, receiver);
|
|
1960
|
+
},
|
|
1961
|
+
deleteProperty(target$1, prop) {
|
|
1962
|
+
return Reflect.deleteProperty(_target, prop);
|
|
1963
|
+
},
|
|
1964
|
+
has(target$1, prop) {
|
|
1965
|
+
return Reflect.has(_target, prop);
|
|
1966
|
+
},
|
|
1967
|
+
ownKeys(target$1) {
|
|
1968
|
+
return Reflect.ownKeys(_target);
|
|
1969
|
+
},
|
|
1970
|
+
getOwnPropertyDescriptor(target$1, prop) {
|
|
1971
|
+
return Reflect.getOwnPropertyDescriptor(_target, prop);
|
|
1972
|
+
},
|
|
1973
|
+
defineProperty(target$1, prop, attributes) {
|
|
1974
|
+
return Reflect.defineProperty(_target, prop, attributes);
|
|
1975
|
+
},
|
|
1976
|
+
getPrototypeOf(target$1) {
|
|
1977
|
+
return Reflect.getPrototypeOf(_target);
|
|
1978
|
+
},
|
|
1979
|
+
setPrototypeOf(target$1, proto) {
|
|
1980
|
+
return Reflect.setPrototypeOf(_target, proto);
|
|
1981
|
+
},
|
|
1982
|
+
isExtensible(target$1) {
|
|
1983
|
+
return Reflect.isExtensible(_target);
|
|
1984
|
+
},
|
|
1985
|
+
preventExtensions(target$1) {
|
|
1986
|
+
return Reflect.preventExtensions(_target);
|
|
1987
|
+
},
|
|
1988
|
+
apply(target$1, thisArg, args) {
|
|
1989
|
+
return Reflect.apply(_target, thisArg, args);
|
|
1990
|
+
},
|
|
1991
|
+
construct(target$1, args, newTarget) {
|
|
1992
|
+
return Reflect.construct(_target, args, newTarget);
|
|
1993
|
+
}
|
|
1994
|
+
}),
|
|
1969
1995
|
setTarget(newTarget) {
|
|
1970
1996
|
_target = newTarget;
|
|
1971
1997
|
}
|
|
@@ -1986,7 +2012,8 @@ var CommandKitEnvironment = class {
|
|
|
1986
2012
|
marker: "",
|
|
1987
2013
|
markStart: 0,
|
|
1988
2014
|
markEnd: 0,
|
|
1989
|
-
context: null
|
|
2015
|
+
context: null,
|
|
2016
|
+
store: new discord_js.Collection()
|
|
1990
2017
|
};
|
|
1991
2018
|
/**
|
|
1992
2019
|
* Creates the commandkit execution environment.
|
|
@@ -2048,6 +2075,12 @@ var CommandKitEnvironment = class {
|
|
|
2048
2075
|
return this.#data.variables;
|
|
2049
2076
|
}
|
|
2050
2077
|
/**
|
|
2078
|
+
* The shared store for this environment
|
|
2079
|
+
*/
|
|
2080
|
+
get store() {
|
|
2081
|
+
return this.#data.store;
|
|
2082
|
+
}
|
|
2083
|
+
/**
|
|
2051
2084
|
* Register a deferred function.
|
|
2052
2085
|
* @param fn - The deferred function to register.
|
|
2053
2086
|
* @returns The deferred function id.
|
|
@@ -2226,12 +2259,13 @@ var Context = class Context {
|
|
|
2226
2259
|
* @param config The context parameters.
|
|
2227
2260
|
*/
|
|
2228
2261
|
constructor(commandkit$1, config) {
|
|
2262
|
+
var _config$environment;
|
|
2229
2263
|
this.commandkit = commandkit$1;
|
|
2230
2264
|
this.config = config;
|
|
2231
2265
|
this.interaction = config.interaction;
|
|
2232
2266
|
this.message = config.message;
|
|
2233
2267
|
this.client = commandkit$1.client;
|
|
2234
|
-
this.#store = config.store ??
|
|
2268
|
+
this.#store = ((_config$environment = config.environment) === null || _config$environment === void 0 ? void 0 : _config$environment.store) ?? config.store ?? new discord_js.Collection();
|
|
2235
2269
|
this.command = config.command;
|
|
2236
2270
|
if (config.interaction) {
|
|
2237
2271
|
this.guild = config.interaction.guild;
|
|
@@ -2252,7 +2286,8 @@ var Context = class Context {
|
|
|
2252
2286
|
* This store is shared across all contexts in the same command execution, including the cloned contexts and middleware contexts.
|
|
2253
2287
|
*/
|
|
2254
2288
|
get store() {
|
|
2255
|
-
|
|
2289
|
+
var _this$config$environm;
|
|
2290
|
+
return ((_this$config$environm = this.config.environment) === null || _this$config$environm === void 0 ? void 0 : _this$config$environm.store) ?? this.#store;
|
|
2256
2291
|
}
|
|
2257
2292
|
/**
|
|
2258
2293
|
* Gets the name of the current command.
|
|
@@ -2265,13 +2300,8 @@ var Context = class Context {
|
|
|
2265
2300
|
* Gets the command options based on the execution mode.
|
|
2266
2301
|
*/
|
|
2267
2302
|
get options() {
|
|
2268
|
-
if (this.isMessage())
|
|
2269
|
-
|
|
2270
|
-
return parser.options;
|
|
2271
|
-
} else {
|
|
2272
|
-
const interaction = this.interaction;
|
|
2273
|
-
return interaction.options;
|
|
2274
|
-
}
|
|
2303
|
+
if (this.isMessage()) return this.config.messageCommandParser.options;
|
|
2304
|
+
else return this.interaction.options;
|
|
2275
2305
|
}
|
|
2276
2306
|
/**
|
|
2277
2307
|
* Whether this context was forwarded from another context. This happens when a command forwards its context to another command.
|
|
@@ -2394,12 +2424,11 @@ var Context = class Context {
|
|
|
2394
2424
|
*/
|
|
2395
2425
|
clone(config) {
|
|
2396
2426
|
if (!config) return new Context(this.commandkit, this.config);
|
|
2397
|
-
|
|
2427
|
+
return new Context(this.commandkit, {
|
|
2398
2428
|
...this.config,
|
|
2399
2429
|
...config,
|
|
2400
2430
|
store: this.#store
|
|
2401
2431
|
});
|
|
2402
|
-
return ctx;
|
|
2403
2432
|
}
|
|
2404
2433
|
/**
|
|
2405
2434
|
* Checks if this context is a middleware context.
|
|
@@ -2415,37 +2444,11 @@ var Context = class Context {
|
|
|
2415
2444
|
if (this.isMessage()) return this.config.messageCommandParser.getArgs();
|
|
2416
2445
|
return [];
|
|
2417
2446
|
}
|
|
2418
|
-
/**
|
|
2419
|
-
* Stops upcoming middleware or current command execution.
|
|
2420
|
-
* If this is called inside pre-stage middleware, the next run will be the actual command, skipping all other pre-stage middlewares.
|
|
2421
|
-
* If this is called inside a command itself, it will skip all post-stage middlewares.
|
|
2422
|
-
* If this is called inside post-stage middleware, it will skip all other post-stage middlewares.
|
|
2423
|
-
*/
|
|
2424
|
-
exit() {
|
|
2425
|
-
require_signals.exitMiddleware();
|
|
2426
|
-
}
|
|
2427
2447
|
};
|
|
2428
2448
|
/**
|
|
2429
2449
|
* Extended context class for middleware execution with additional control methods.
|
|
2430
2450
|
*/
|
|
2431
2451
|
var MiddlewareContext = class extends Context {
|
|
2432
|
-
/**
|
|
2433
|
-
* @private
|
|
2434
|
-
* @internal
|
|
2435
|
-
*/
|
|
2436
|
-
#cancel = false;
|
|
2437
|
-
/**
|
|
2438
|
-
* Whether the command execution was cancelled.
|
|
2439
|
-
*/
|
|
2440
|
-
get cancelled() {
|
|
2441
|
-
return this.#cancel;
|
|
2442
|
-
}
|
|
2443
|
-
/**
|
|
2444
|
-
* Cancels the command execution.
|
|
2445
|
-
*/
|
|
2446
|
-
cancel() {
|
|
2447
|
-
this.#cancel = true;
|
|
2448
|
-
}
|
|
2449
2452
|
/**
|
|
2450
2453
|
* Sets command runner function to wrap the command execution.
|
|
2451
2454
|
* @param fn The function to set.
|
|
@@ -2480,6 +2483,7 @@ var AppCommandRunner = class {
|
|
|
2480
2483
|
* Handles the complete command lifecycle including before/after middleware execution.
|
|
2481
2484
|
* @param prepared - The prepared command execution data
|
|
2482
2485
|
* @param source - The source interaction or message that triggered the command
|
|
2486
|
+
* @param options - The options for running the command
|
|
2483
2487
|
*/
|
|
2484
2488
|
async runCommand(prepared, source, options) {
|
|
2485
2489
|
const { commandkit: commandkit$1 } = this.handler;
|
|
@@ -2492,119 +2496,124 @@ var AppCommandRunner = class {
|
|
|
2492
2496
|
env.variables.set("currentCommandName", prepared.command.command.name);
|
|
2493
2497
|
env.variables.set("execHandlerKind", executionMode);
|
|
2494
2498
|
env.variables.set("customHandler", (options === null || options === void 0 ? void 0 : options.handler) ?? null);
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
try {
|
|
2512
|
-
await middleware.data.beforeExecute(
|
|
2499
|
+
try {
|
|
2500
|
+
const middlewareCtx = new MiddlewareContext(commandkit$1, {
|
|
2501
|
+
command: prepared.command,
|
|
2502
|
+
environment: env,
|
|
2503
|
+
executionMode,
|
|
2504
|
+
interaction: !(source instanceof discord_js.Message) ? source : null,
|
|
2505
|
+
message: source instanceof discord_js.Message ? source : null,
|
|
2506
|
+
forwarded: false,
|
|
2507
|
+
customArgs: { setCommandRunner: (fn) => {
|
|
2508
|
+
runCommand = fn;
|
|
2509
|
+
} },
|
|
2510
|
+
messageCommandParser: prepared.messageCommandParser
|
|
2511
|
+
});
|
|
2512
|
+
const beforeMiddlewares = prepared.middlewares.filter((m) => m.data.beforeExecute);
|
|
2513
|
+
let beforeMiddlewaresStopped = false;
|
|
2514
|
+
if (beforeMiddlewares.length) await provideContext(env, async () => {
|
|
2515
|
+
for (const middleware of beforeMiddlewares) try {
|
|
2516
|
+
await middleware.data.beforeExecute(middlewareCtx);
|
|
2513
2517
|
} catch (e) {
|
|
2514
|
-
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.
|
|
2515
|
-
|
|
2516
|
-
|
|
2518
|
+
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.StopMiddlewares)) {
|
|
2519
|
+
beforeMiddlewaresStopped = true;
|
|
2520
|
+
Logger.debug(`Middleware propagation stopped for command "${middlewareCtx.commandName}". stopMiddlewares() was called inside a beforeExecute function at "${middleware.middleware.relativePath}"`);
|
|
2521
|
+
break;
|
|
2517
2522
|
}
|
|
2518
2523
|
if (require_error_codes.isErrorType(e, [require_error_codes.CommandKitErrorCodes.ForwardedCommand, require_error_codes.CommandKitErrorCodes.InvalidCommandPrefix])) continue;
|
|
2519
2524
|
throw e;
|
|
2520
2525
|
}
|
|
2521
|
-
}
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2526
|
+
});
|
|
2527
|
+
let result;
|
|
2528
|
+
let stopMiddlewaresCalledInCmd = false;
|
|
2529
|
+
if (!beforeMiddlewaresStopped) {
|
|
2530
|
+
const fn = prepared.command.data[(options === null || options === void 0 ? void 0 : options.handler) || executionMode];
|
|
2531
|
+
if (!fn) Logger.warn(`Command ${prepared.command.command.name} has no handler for ${executionMode}`);
|
|
2532
|
+
const analytics = commandkit$1.analytics;
|
|
2533
|
+
if (fn) try {
|
|
2534
|
+
const _executeCommand = makeContextAwareFunction(env, async () => {
|
|
2535
|
+
env.registerDeferredFunction(async (env$1) => {
|
|
2536
|
+
var _prepared$command2;
|
|
2537
|
+
env$1.markEnd();
|
|
2538
|
+
const error = env$1.getExecutionError();
|
|
2539
|
+
const marker = env$1.getMarker();
|
|
2540
|
+
const time = `${env$1.getExecutionTime().toFixed(2)}ms`;
|
|
2541
|
+
if (error) {
|
|
2542
|
+
var _prepared$command;
|
|
2543
|
+
Logger.error`[${marker} - ${time}] Error executing command: ${error}`;
|
|
2544
|
+
const commandName$1 = ((_prepared$command = prepared.command) === null || _prepared$command === void 0 || (_prepared$command = _prepared$command.data) === null || _prepared$command === void 0 || (_prepared$command = _prepared$command.command) === null || _prepared$command === void 0 ? void 0 : _prepared$command.name) ?? prepared.command.command.name;
|
|
2545
|
+
await analytics.track({
|
|
2546
|
+
name: require_constants$1.AnalyticsEvents.COMMAND_EXECUTION,
|
|
2547
|
+
id: commandName$1,
|
|
2548
|
+
data: {
|
|
2549
|
+
error: true,
|
|
2550
|
+
executionTime: env$1.getExecutionTime().toFixed(2),
|
|
2551
|
+
type: executionMode,
|
|
2552
|
+
command: commandName$1
|
|
2553
|
+
}
|
|
2554
|
+
});
|
|
2555
|
+
return;
|
|
2556
|
+
}
|
|
2557
|
+
Logger.info(`[${marker} - ${time}] Command executed successfully`);
|
|
2558
|
+
const commandName = ((_prepared$command2 = prepared.command) === null || _prepared$command2 === void 0 || (_prepared$command2 = _prepared$command2.data) === null || _prepared$command2 === void 0 || (_prepared$command2 = _prepared$command2.command) === null || _prepared$command2 === void 0 ? void 0 : _prepared$command2.name) ?? prepared.command.command.name;
|
|
2541
2559
|
await analytics.track({
|
|
2542
2560
|
name: require_constants$1.AnalyticsEvents.COMMAND_EXECUTION,
|
|
2543
|
-
id: commandName
|
|
2561
|
+
id: commandName,
|
|
2544
2562
|
data: {
|
|
2545
|
-
error:
|
|
2563
|
+
error: false,
|
|
2546
2564
|
executionTime: env$1.getExecutionTime().toFixed(2),
|
|
2547
2565
|
type: executionMode,
|
|
2548
|
-
command: commandName
|
|
2566
|
+
command: commandName
|
|
2549
2567
|
}
|
|
2550
2568
|
});
|
|
2551
|
-
return;
|
|
2552
|
-
}
|
|
2553
|
-
Logger.info(`[${marker} - ${time}] Command executed successfully`);
|
|
2554
|
-
const commandName = ((_prepared$command2 = prepared.command) === null || _prepared$command2 === void 0 || (_prepared$command2 = _prepared$command2.data) === null || _prepared$command2 === void 0 || (_prepared$command2 = _prepared$command2.command) === null || _prepared$command2 === void 0 ? void 0 : _prepared$command2.name) ?? prepared.command.command.name;
|
|
2555
|
-
await analytics.track({
|
|
2556
|
-
name: require_constants$1.AnalyticsEvents.COMMAND_EXECUTION,
|
|
2557
|
-
id: commandName,
|
|
2558
|
-
data: {
|
|
2559
|
-
error: false,
|
|
2560
|
-
executionTime: env$1.getExecutionTime().toFixed(2),
|
|
2561
|
-
type: executionMode,
|
|
2562
|
-
command: commandName
|
|
2563
|
-
}
|
|
2564
2569
|
});
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
})
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2570
|
+
return fn(middlewareCtx.clone());
|
|
2571
|
+
}, this.#finalizer.bind(this));
|
|
2572
|
+
const executeCommand = runCommand != null ? runCommand(_executeCommand) : _executeCommand;
|
|
2573
|
+
env.markStart(prepared.command.data.command.name);
|
|
2574
|
+
if (!await commandkit$1.plugins.execute(async (ctx, plugin) => {
|
|
2575
|
+
return plugin.executeCommand(ctx, env, source, prepared, executeCommand);
|
|
2576
|
+
})) result = await executeCommand();
|
|
2577
|
+
} catch (e) {
|
|
2578
|
+
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.StopMiddlewares)) {
|
|
2579
|
+
stopMiddlewaresCalledInCmd = true;
|
|
2580
|
+
Logger.debug(`Middleware propagation stopped for command "${middlewareCtx.commandName}". stopMiddlewares() was called by the command itself`);
|
|
2581
|
+
} else if (!require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.ForwardedCommand)) {
|
|
2582
|
+
if (shouldThrowOnError) throw e;
|
|
2583
|
+
Logger.error`${e}`;
|
|
2584
|
+
}
|
|
2579
2585
|
}
|
|
2580
|
-
}
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
try {
|
|
2589
|
-
await middleware.data.afterExecute(ctx);
|
|
2586
|
+
} else result = {
|
|
2587
|
+
error: true,
|
|
2588
|
+
message: "Command execution was cancelled by a beforeExecute middleware."
|
|
2589
|
+
};
|
|
2590
|
+
const afterMiddlewares = prepared.middlewares.filter((m) => m.data.afterExecute);
|
|
2591
|
+
if (!beforeMiddlewaresStopped && !stopMiddlewaresCalledInCmd && afterMiddlewares.length) await provideContext(env, async () => {
|
|
2592
|
+
for (const middleware of afterMiddlewares) try {
|
|
2593
|
+
await middleware.data.afterExecute(middlewareCtx);
|
|
2590
2594
|
} catch (e) {
|
|
2591
|
-
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.
|
|
2595
|
+
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.StopMiddlewares)) {
|
|
2596
|
+
Logger.debug(`Middleware propagation stopped for command "${middlewareCtx.commandName}". stopMiddlewares() was called inside an afterExecute function at "${middleware.middleware.relativePath}"`);
|
|
2597
|
+
break;
|
|
2598
|
+
}
|
|
2592
2599
|
throw e;
|
|
2593
2600
|
}
|
|
2594
|
-
}
|
|
2595
|
-
|
|
2596
|
-
|
|
2601
|
+
});
|
|
2602
|
+
return result;
|
|
2603
|
+
} finally {
|
|
2604
|
+
await this.#finalizer(env, false);
|
|
2605
|
+
}
|
|
2597
2606
|
}
|
|
2598
2607
|
/**
|
|
2599
2608
|
* @private
|
|
2600
2609
|
* @internal
|
|
2601
2610
|
* Finalizes command execution by running deferred functions and plugin cleanup.
|
|
2602
2611
|
*/
|
|
2603
|
-
async #finalizer() {
|
|
2604
|
-
|
|
2612
|
+
async #finalizer(env, runPlugins = true) {
|
|
2613
|
+
env ??= useEnvironment();
|
|
2605
2614
|
await env.runDeferredFunctions();
|
|
2606
2615
|
env.clearAllDeferredFunctions();
|
|
2607
|
-
await this.handler.commandkit.plugins.execute(async (ctx, plugin) => {
|
|
2616
|
+
if (runPlugins) await this.handler.commandkit.plugins.execute(async (ctx, plugin) => {
|
|
2608
2617
|
await plugin.onAfterCommand(ctx, env);
|
|
2609
2618
|
});
|
|
2610
2619
|
}
|
|
@@ -2623,6 +2632,81 @@ var AppCommandRunner = class {
|
|
|
2623
2632
|
}
|
|
2624
2633
|
};
|
|
2625
2634
|
|
|
2635
|
+
//#endregion
|
|
2636
|
+
//#region src/app/middlewares/permissions.ts
|
|
2637
|
+
const middlewareId = crypto.randomUUID();
|
|
2638
|
+
/**
|
|
2639
|
+
* @private
|
|
2640
|
+
* @ignore
|
|
2641
|
+
*/
|
|
2642
|
+
async function beforeExecute(ctx) {
|
|
2643
|
+
var _interaction$channel, _message$channel, _message$member, _command$metadata, _interaction$guild, _message$guild, _command$metadata2;
|
|
2644
|
+
if (getConfig().disablePermissionsMiddleware) return;
|
|
2645
|
+
const { interaction, message, command } = ctx;
|
|
2646
|
+
if (interaction && !interaction.isCommand()) return;
|
|
2647
|
+
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())) {
|
|
2648
|
+
const channel = (interaction === null || interaction === void 0 ? void 0 : interaction.channel) ?? (message === null || message === void 0 ? void 0 : message.channel);
|
|
2649
|
+
const embed$1 = new discord_js.EmbedBuilder().setTitle(":x: Server-only command!").setDescription("This command can only be used in a server.").setColor("Red");
|
|
2650
|
+
try {
|
|
2651
|
+
if (channel === null || channel === void 0 ? void 0 : channel.isSendable()) if (interaction && interaction.isRepliable()) await interaction.reply({
|
|
2652
|
+
embeds: [embed$1],
|
|
2653
|
+
flags: discord_js.MessageFlags.Ephemeral
|
|
2654
|
+
});
|
|
2655
|
+
else await message.reply({ embeds: [embed$1] });
|
|
2656
|
+
} catch (error) {
|
|
2657
|
+
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}`;
|
|
2658
|
+
}
|
|
2659
|
+
require_signals.stopMiddlewares();
|
|
2660
|
+
}
|
|
2661
|
+
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);
|
|
2662
|
+
let userPermissionsRequired = ((_command$metadata = command.metadata) === null || _command$metadata === void 0 ? void 0 : _command$metadata.userPermissions) ?? [];
|
|
2663
|
+
let missingUserPermissions = [];
|
|
2664
|
+
if (typeof userPermissionsRequired === "string") userPermissionsRequired = [userPermissionsRequired];
|
|
2665
|
+
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);
|
|
2666
|
+
let botPermissionsRequired = ((_command$metadata2 = command.metadata) === null || _command$metadata2 === void 0 ? void 0 : _command$metadata2.botPermissions) ?? [];
|
|
2667
|
+
let missingBotPermissions = [];
|
|
2668
|
+
if (typeof botPermissionsRequired === "string") botPermissionsRequired = [botPermissionsRequired];
|
|
2669
|
+
if (!userPermissionsRequired.length && !botPermissionsRequired.length) return;
|
|
2670
|
+
if (userPermissionsRequired.length) {
|
|
2671
|
+
for (const permission of userPermissionsRequired) if (!(userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.has(permission))) missingUserPermissions.push(permission);
|
|
2672
|
+
}
|
|
2673
|
+
if (botPermissionsRequired.length) {
|
|
2674
|
+
for (const permission of botPermissionsRequired) if (!(botPermissions === null || botPermissions === void 0 ? void 0 : botPermissions.has(permission))) missingBotPermissions.push(permission);
|
|
2675
|
+
}
|
|
2676
|
+
if (!missingUserPermissions.length && !missingBotPermissions.length) return;
|
|
2677
|
+
const pattern = /([a-z])([A-Z])|([A-Z]+)([A-Z][a-z])/g;
|
|
2678
|
+
missingUserPermissions = missingUserPermissions.map((str) => str.replace(pattern, "$1$3 $2$4"));
|
|
2679
|
+
missingBotPermissions = missingBotPermissions.map((str) => str.replace(pattern, "$1$3 $2$4"));
|
|
2680
|
+
let embedDescription = "";
|
|
2681
|
+
const formatter = new Intl.ListFormat("en", {
|
|
2682
|
+
style: "long",
|
|
2683
|
+
type: "conjunction"
|
|
2684
|
+
});
|
|
2685
|
+
const getPermissionWord = (permissions) => permissions.length === 1 ? "permission" : "permissions";
|
|
2686
|
+
if (missingUserPermissions.length) {
|
|
2687
|
+
const formattedPermissions = missingUserPermissions.map((p) => `\`${p}\``);
|
|
2688
|
+
const permissionsString = formatter.format(formattedPermissions);
|
|
2689
|
+
embedDescription += `- You must have the ${permissionsString} ${getPermissionWord(missingUserPermissions)} to be able to run this command.\n`;
|
|
2690
|
+
}
|
|
2691
|
+
if (missingBotPermissions.length) {
|
|
2692
|
+
const formattedPermissions = missingBotPermissions.map((p) => `\`${p}\``);
|
|
2693
|
+
const permissionsString = formatter.format(formattedPermissions);
|
|
2694
|
+
embedDescription += `- I must have the ${permissionsString} ${getPermissionWord(missingBotPermissions)} to be able to execute this command.\n`;
|
|
2695
|
+
}
|
|
2696
|
+
const embed = new discord_js.EmbedBuilder().setTitle(`:x: Missing permissions!`).setDescription(embedDescription).setColor("Red");
|
|
2697
|
+
try {
|
|
2698
|
+
var _message$channel2;
|
|
2699
|
+
if (interaction && interaction.isRepliable()) await interaction.reply({
|
|
2700
|
+
embeds: [embed],
|
|
2701
|
+
flags: discord_js.MessageFlags.Ephemeral
|
|
2702
|
+
});
|
|
2703
|
+
else if (message && ((_message$channel2 = message.channel) === null || _message$channel2 === void 0 ? void 0 : _message$channel2.isSendable())) await message.reply({ embeds: [embed] });
|
|
2704
|
+
} catch (error) {
|
|
2705
|
+
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}`;
|
|
2706
|
+
}
|
|
2707
|
+
require_signals.stopMiddlewares();
|
|
2708
|
+
}
|
|
2709
|
+
|
|
2626
2710
|
//#endregion
|
|
2627
2711
|
//#region src/app/register/CommandRegistrar.ts
|
|
2628
2712
|
/**
|
|
@@ -2646,25 +2730,40 @@ var CommandRegistrar = class {
|
|
|
2646
2730
|
* Gets the commands data.
|
|
2647
2731
|
*/
|
|
2648
2732
|
getCommandsData() {
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
const
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
description_localizations: void 0,
|
|
2659
|
-
description: void 0
|
|
2660
|
-
});
|
|
2661
|
-
if (cmd.data.messageContextMenu && json$1.type !== discord_js.ApplicationCommandType.Message) collections.push({
|
|
2662
|
-
...json$1,
|
|
2663
|
-
type: discord_js.ApplicationCommandType.Message,
|
|
2664
|
-
description_localizations: void 0,
|
|
2665
|
-
description: void 0,
|
|
2666
|
-
options: void 0
|
|
2733
|
+
return this.commandkit.commandHandler.getCommandsArray().flatMap((cmd) => {
|
|
2734
|
+
const json = "toJSON" in cmd.data.command ? cmd.data.command.toJSON() : cmd.data.command;
|
|
2735
|
+
const __metadata = cmd.metadata ?? cmd.data.metadata;
|
|
2736
|
+
const collections = [];
|
|
2737
|
+
if (cmd.data.chatInput) collections.push({
|
|
2738
|
+
...json,
|
|
2739
|
+
type: discord_js.ApplicationCommandType.ChatInput,
|
|
2740
|
+
description: json.description ?? "No command description set.",
|
|
2741
|
+
__metadata
|
|
2667
2742
|
});
|
|
2743
|
+
if (cmd.data.userContextMenu) {
|
|
2744
|
+
var _metadata$nameAliases;
|
|
2745
|
+
collections.push({
|
|
2746
|
+
...json,
|
|
2747
|
+
name: (__metadata === null || __metadata === void 0 || (_metadata$nameAliases = __metadata.nameAliases) === null || _metadata$nameAliases === void 0 ? void 0 : _metadata$nameAliases.user) ?? json.name,
|
|
2748
|
+
type: discord_js.ApplicationCommandType.User,
|
|
2749
|
+
options: void 0,
|
|
2750
|
+
description_localizations: void 0,
|
|
2751
|
+
description: void 0,
|
|
2752
|
+
__metadata
|
|
2753
|
+
});
|
|
2754
|
+
}
|
|
2755
|
+
if (cmd.data.messageContextMenu) {
|
|
2756
|
+
var _metadata$nameAliases2;
|
|
2757
|
+
collections.push({
|
|
2758
|
+
...json,
|
|
2759
|
+
name: (__metadata === null || __metadata === void 0 || (_metadata$nameAliases2 = __metadata.nameAliases) === null || _metadata$nameAliases2 === void 0 ? void 0 : _metadata$nameAliases2.message) ?? json.name,
|
|
2760
|
+
type: discord_js.ApplicationCommandType.Message,
|
|
2761
|
+
description_localizations: void 0,
|
|
2762
|
+
description: void 0,
|
|
2763
|
+
options: void 0,
|
|
2764
|
+
__metadata
|
|
2765
|
+
});
|
|
2766
|
+
}
|
|
2668
2767
|
return collections;
|
|
2669
2768
|
});
|
|
2670
2769
|
}
|
|
@@ -2687,18 +2786,18 @@ var CommandRegistrar = class {
|
|
|
2687
2786
|
if (preRegistrationPrevented) return;
|
|
2688
2787
|
if (!this.commandkit.client.isReady()) throw new Error("Cannot register commands before the client is ready");
|
|
2689
2788
|
const guildCommands = commands.filter((command) => {
|
|
2690
|
-
var _command$
|
|
2691
|
-
return (_command$
|
|
2789
|
+
var _command$__metadata;
|
|
2790
|
+
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
2791
|
}).map((c) => {
|
|
2693
|
-
var _c$
|
|
2792
|
+
var _c$__metadata;
|
|
2694
2793
|
return {
|
|
2695
2794
|
...c,
|
|
2696
|
-
guilds: Array.from(new Set((_c$
|
|
2795
|
+
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
2796
|
};
|
|
2698
2797
|
});
|
|
2699
2798
|
const globalCommands = commands.filter((command) => {
|
|
2700
|
-
var _command$
|
|
2701
|
-
return !((_command$
|
|
2799
|
+
var _command$__metadata2;
|
|
2800
|
+
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
2801
|
});
|
|
2703
2802
|
await this.updateGlobalCommands(globalCommands);
|
|
2704
2803
|
await this.updateGuildCommands(guildCommands);
|
|
@@ -2722,11 +2821,11 @@ var CommandRegistrar = class {
|
|
|
2722
2821
|
try {
|
|
2723
2822
|
const data = await this.api.put(discord_js.Routes.applicationCommands(this.commandkit.client.user.id), { body: commands.map((c) => ({
|
|
2724
2823
|
...c,
|
|
2725
|
-
|
|
2824
|
+
__metadata: void 0
|
|
2726
2825
|
})) });
|
|
2727
2826
|
Logger.info(`✨ Refreshed ${data.length} global application (/) commands`);
|
|
2728
2827
|
} catch (e) {
|
|
2729
|
-
Logger.error
|
|
2828
|
+
Logger.error`Failed to update global application (/) commands: ${e}`;
|
|
2730
2829
|
}
|
|
2731
2830
|
}
|
|
2732
2831
|
/**
|
|
@@ -2749,9 +2848,9 @@ var CommandRegistrar = class {
|
|
|
2749
2848
|
try {
|
|
2750
2849
|
const guildCommandsMap = /* @__PURE__ */ new Map();
|
|
2751
2850
|
commands.forEach((command) => {
|
|
2752
|
-
var _command$
|
|
2753
|
-
if (!((_command$
|
|
2754
|
-
command.guilds.forEach((guild) => {
|
|
2851
|
+
var _command$__metadata3, _command$__metadata4;
|
|
2852
|
+
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;
|
|
2853
|
+
(_command$__metadata4 = command.__metadata) === null || _command$__metadata4 === void 0 || (_command$__metadata4 = _command$__metadata4.guilds) === null || _command$__metadata4 === void 0 || _command$__metadata4.forEach((guild) => {
|
|
2755
2854
|
if (!guildCommandsMap.has(guild)) guildCommandsMap.set(guild, []);
|
|
2756
2855
|
guildCommandsMap.get(guild).push(command);
|
|
2757
2856
|
});
|
|
@@ -2773,19 +2872,25 @@ var CommandRegistrar = class {
|
|
|
2773
2872
|
if (prevented$1) continue;
|
|
2774
2873
|
const data = await this.api.put(discord_js.Routes.applicationGuildCommands(this.commandkit.client.user.id, guild), { body: guildCommands.map((b) => ({
|
|
2775
2874
|
...b,
|
|
2776
|
-
|
|
2875
|
+
__metadata: void 0
|
|
2777
2876
|
})) });
|
|
2778
2877
|
count += data.length;
|
|
2779
2878
|
}
|
|
2780
2879
|
Logger.info(`✨ Refreshed ${count} guild application (/) commands`);
|
|
2781
2880
|
} catch (e) {
|
|
2782
|
-
Logger.error
|
|
2881
|
+
Logger.error`Failed to update guild application (/) commands: ${e}`;
|
|
2783
2882
|
}
|
|
2784
2883
|
}
|
|
2785
2884
|
};
|
|
2786
2885
|
|
|
2787
2886
|
//#endregion
|
|
2788
2887
|
//#region src/app/handlers/AppCommandHandler.ts
|
|
2888
|
+
const KNOWN_NON_HANDLER_KEYS = [
|
|
2889
|
+
"command",
|
|
2890
|
+
"generateMetadata",
|
|
2891
|
+
"metadata",
|
|
2892
|
+
"aiConfig"
|
|
2893
|
+
];
|
|
2789
2894
|
/**
|
|
2790
2895
|
* @private
|
|
2791
2896
|
* @internal
|
|
@@ -2900,12 +3005,10 @@ var AppCommandHandler = class {
|
|
|
2900
3005
|
console.log(require_colors.colors_default.cyan(`${indent}${thisPrefix} ${require_colors.colors_default.bold(displayName)}`));
|
|
2901
3006
|
}
|
|
2902
3007
|
commands.forEach((cmd, cmdIndex) => {
|
|
2903
|
-
const
|
|
2904
|
-
const cmdPrefix = cmdIsLast ? "└─" : "├─";
|
|
3008
|
+
const cmdPrefix = cmdIndex === commands.length - 1 && !hasChildren ? "└─" : "├─";
|
|
2905
3009
|
const cmdIndent = category !== uncategorized ? childIndent : indent;
|
|
2906
3010
|
const name = cmd.data.command.name;
|
|
2907
|
-
const
|
|
2908
|
-
const middlewareIcon = hasMw ? require_colors.colors_default.magenta(" (λ)") : "";
|
|
3011
|
+
const middlewareIcon = cmd.command.middlewares.length > 0 ? require_colors.colors_default.magenta(" (λ)") : "";
|
|
2909
3012
|
console.log(`${require_colors.colors_default.green(`${cmdIndent}${cmdPrefix}`)} ${require_colors.colors_default.yellow(name)}${middlewareIcon}`);
|
|
2910
3013
|
});
|
|
2911
3014
|
if (hasChildren) {
|
|
@@ -2945,21 +3048,18 @@ var AppCommandHandler = class {
|
|
|
2945
3048
|
*/
|
|
2946
3049
|
registerCommandHandler() {
|
|
2947
3050
|
this.onInteraction ??= async (interaction) => {
|
|
2948
|
-
|
|
3051
|
+
if (await this.commandkit.plugins.execute(async (ctx, plugin) => {
|
|
2949
3052
|
return plugin.onBeforeInteraction(ctx, interaction);
|
|
2950
|
-
});
|
|
2951
|
-
if (
|
|
2952
|
-
const isCommandLike = interaction.isCommand() || interaction.isAutocomplete() || interaction.isUserContextMenuCommand() || interaction.isMessageContextMenuCommand();
|
|
2953
|
-
if (!isCommandLike) return;
|
|
3053
|
+
})) return;
|
|
3054
|
+
if (!(interaction.isCommand() || interaction.isAutocomplete() || interaction.isUserContextMenuCommand() || interaction.isMessageContextMenuCommand())) return;
|
|
2954
3055
|
const prepared = await this.prepareCommandRun(interaction);
|
|
2955
3056
|
if (!prepared) return;
|
|
2956
3057
|
return this.commandRunner.runCommand(prepared, interaction);
|
|
2957
3058
|
};
|
|
2958
3059
|
this.onMessageCreate ??= async (message) => {
|
|
2959
|
-
|
|
3060
|
+
if (await this.commandkit.plugins.execute(async (ctx, plugin) => {
|
|
2960
3061
|
return plugin.onBeforeMessageCommand(ctx, message);
|
|
2961
|
-
});
|
|
2962
|
-
if (success) return;
|
|
3062
|
+
})) return;
|
|
2963
3063
|
if (message.author.bot) return;
|
|
2964
3064
|
const prepared = await this.prepareCommandRun(message);
|
|
2965
3065
|
if (!prepared) return;
|
|
@@ -2975,50 +3075,63 @@ var AppCommandHandler = class {
|
|
|
2975
3075
|
* @returns Prepared command execution data or null if command not found
|
|
2976
3076
|
*/
|
|
2977
3077
|
async prepareCommandRun(source, cmdName) {
|
|
2978
|
-
var _loadedCommand$
|
|
2979
|
-
|
|
2980
|
-
if (config.disablePrefixCommands && source instanceof discord_js.Message) return null;
|
|
3078
|
+
var _loadedCommand$metada3, _loadedCommand$metada4;
|
|
3079
|
+
if (getConfig().disablePrefixCommands && source instanceof discord_js.Message) return null;
|
|
2981
3080
|
let parser;
|
|
2982
3081
|
if (!cmdName) if (source instanceof discord_js.Message) {
|
|
2983
3082
|
if (source.author.bot) return null;
|
|
2984
3083
|
const prefix = await this.commandkit.appConfig.getMessageCommandPrefix(source);
|
|
2985
|
-
if (!prefix || !prefix.length) return null;
|
|
2986
|
-
parser = new require_MessageCommandParser.MessageCommandParser(source, Array.isArray(prefix) ? prefix : [prefix], (command) => {
|
|
2987
|
-
var _loadedCommand$
|
|
3084
|
+
if (!prefix || (typeof prefix === "string" || Array.isArray(prefix)) && !prefix.length) return null;
|
|
3085
|
+
parser = new require_MessageCommandParser.MessageCommandParser(source, prefix instanceof RegExp ? prefix : Array.isArray(prefix) ? prefix : [prefix], (command) => {
|
|
3086
|
+
var _loadedCommand$metada, _loadedCommand$metada2, _json$options;
|
|
2988
3087
|
const loadedCommand$1 = this.findCommandByName(command);
|
|
2989
3088
|
if (!loadedCommand$1) {
|
|
2990
|
-
if (require_constants.COMMANDKIT_IS_DEV && this.commandkit.config.showUnknownPrefixCommandsWarning) Logger.error
|
|
3089
|
+
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
3090
|
return null;
|
|
2992
3091
|
}
|
|
2993
|
-
if (source.guildId && ((_loadedCommand$
|
|
2994
|
-
|
|
2995
|
-
return ((_json$options = json$1.options) === null || _json$options === void 0 ? void 0 : _json$options.reduce((acc, opt) => {
|
|
3092
|
+
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;
|
|
3093
|
+
return ((_json$options = ("toJSON" in loadedCommand$1.data.command ? loadedCommand$1.data.command.toJSON() : loadedCommand$1.data.command).options) === null || _json$options === void 0 ? void 0 : _json$options.reduce((acc, opt) => {
|
|
2996
3094
|
acc[opt.name] = opt.type;
|
|
2997
3095
|
return acc;
|
|
2998
3096
|
}, {})) ?? {};
|
|
2999
3097
|
});
|
|
3000
3098
|
try {
|
|
3001
|
-
|
|
3002
|
-
const parts = fullCommand.split(" ");
|
|
3003
|
-
cmdName = parts[0];
|
|
3099
|
+
cmdName = parser.getFullCommand().split(" ")[0];
|
|
3004
3100
|
} catch (e) {
|
|
3005
3101
|
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.InvalidCommandPrefix)) return null;
|
|
3006
|
-
Logger.error
|
|
3102
|
+
Logger.error`${e}`;
|
|
3007
3103
|
return null;
|
|
3008
3104
|
}
|
|
3009
3105
|
} else {
|
|
3010
|
-
|
|
3011
|
-
if (!isAnyCommand) return null;
|
|
3106
|
+
if (!(source.isChatInputCommand() || source.isAutocomplete() || source.isContextMenuCommand())) return null;
|
|
3012
3107
|
cmdName = source.commandName;
|
|
3013
3108
|
}
|
|
3014
|
-
const
|
|
3109
|
+
const hint = require_helpers.isInteractionSource(source) ? source.isUserContextMenuCommand() ? "user" : source.isMessageContextMenuCommand() ? "message" : void 0 : void 0;
|
|
3110
|
+
const loadedCommand = this.findCommandByName(cmdName, hint);
|
|
3015
3111
|
if (!loadedCommand) return null;
|
|
3016
|
-
if ((source instanceof discord_js.CommandInteraction || source instanceof discord_js.AutocompleteInteraction) && source.guildId && ((_loadedCommand$
|
|
3112
|
+
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;
|
|
3113
|
+
if (source instanceof discord_js.Message) {
|
|
3114
|
+
var _loadedCommand$metada5;
|
|
3115
|
+
if (!source.guildId) return null;
|
|
3116
|
+
if (((_loadedCommand$metada5 = loadedCommand.metadata) === null || _loadedCommand$metada5 === void 0 || (_loadedCommand$metada5 = _loadedCommand$metada5.guilds) === null || _loadedCommand$metada5 === void 0 ? void 0 : _loadedCommand$metada5.length) && !loadedCommand.metadata.guilds.includes(source.guildId)) return null;
|
|
3117
|
+
}
|
|
3017
3118
|
const middlewares = [];
|
|
3018
|
-
for (const middlewareId of loadedCommand.command.middlewares) {
|
|
3019
|
-
const middleware = this.loadedMiddlewares.get(middlewareId);
|
|
3119
|
+
for (const middlewareId$1 of loadedCommand.command.middlewares) {
|
|
3120
|
+
const middleware = this.loadedMiddlewares.get(middlewareId$1);
|
|
3020
3121
|
if (middleware) middlewares.push(middleware);
|
|
3021
3122
|
}
|
|
3123
|
+
if (!getConfig().disablePermissionsMiddleware) middlewares.push({
|
|
3124
|
+
data: { beforeExecute },
|
|
3125
|
+
middleware: {
|
|
3126
|
+
command: null,
|
|
3127
|
+
global: true,
|
|
3128
|
+
id: middlewareId,
|
|
3129
|
+
name: "permissions",
|
|
3130
|
+
parentPath: "",
|
|
3131
|
+
path: "",
|
|
3132
|
+
relativePath: ""
|
|
3133
|
+
}
|
|
3134
|
+
});
|
|
3022
3135
|
return {
|
|
3023
3136
|
command: loadedCommand,
|
|
3024
3137
|
middlewares,
|
|
@@ -3028,12 +3141,19 @@ var AppCommandHandler = class {
|
|
|
3028
3141
|
/**
|
|
3029
3142
|
* Finds a command by name.
|
|
3030
3143
|
* @param name - The command name to search for
|
|
3144
|
+
* @param hint - The hint for the command type (user or message)
|
|
3031
3145
|
* @returns The loaded command or null if not found
|
|
3032
3146
|
*/
|
|
3033
|
-
findCommandByName(name) {
|
|
3147
|
+
findCommandByName(name, hint) {
|
|
3034
3148
|
for (const [, loadedCommand] of this.loadedCommands) {
|
|
3149
|
+
var _loadedCommand$data$m2;
|
|
3150
|
+
if (hint) {
|
|
3151
|
+
var _loadedCommand$data$m;
|
|
3152
|
+
const nameAliases = (_loadedCommand$data$m = loadedCommand.data.metadata) === null || _loadedCommand$data$m === void 0 ? void 0 : _loadedCommand$data$m.nameAliases;
|
|
3153
|
+
if (nameAliases && nameAliases[hint] === name) return loadedCommand;
|
|
3154
|
+
}
|
|
3035
3155
|
if (loadedCommand.data.command.name === name) return loadedCommand;
|
|
3036
|
-
const aliases = loadedCommand.data.
|
|
3156
|
+
const aliases = (_loadedCommand$data$m2 = loadedCommand.data.metadata) === null || _loadedCommand$data$m2 === void 0 ? void 0 : _loadedCommand$data$m2.aliases;
|
|
3037
3157
|
if (aliases && Array.isArray(aliases) && aliases.includes(name)) return loadedCommand;
|
|
3038
3158
|
}
|
|
3039
3159
|
return null;
|
|
@@ -3098,7 +3218,7 @@ var AppCommandHandler = class {
|
|
|
3098
3218
|
for (const [id, command] of combinedCommands) await this.loadCommand(id, command);
|
|
3099
3219
|
if (require_constants.COMMANDKIT_IS_DEV) {
|
|
3100
3220
|
const commandNames = Array.from(this.loadedCommands.values()).map((v) => v.data.command.name);
|
|
3101
|
-
const aliases = Array.from(this.loadedCommands.values()).flatMap((v) => v.
|
|
3221
|
+
const aliases = Array.from(this.loadedCommands.values()).flatMap((v) => v.metadata.aliases || []);
|
|
3102
3222
|
const allNames = [...commandNames, ...aliases];
|
|
3103
3223
|
await require_types_package.rewriteCommandDeclaration(`type CommandTypeData = ${allNames.map((name) => JSON.stringify(name)).join(" | ")}`);
|
|
3104
3224
|
}
|
|
@@ -3124,7 +3244,7 @@ var AppCommandHandler = class {
|
|
|
3124
3244
|
data
|
|
3125
3245
|
});
|
|
3126
3246
|
} catch (error) {
|
|
3127
|
-
Logger.error
|
|
3247
|
+
Logger.error`Failed to load middleware ${id}: ${error}`;
|
|
3128
3248
|
}
|
|
3129
3249
|
}
|
|
3130
3250
|
/**
|
|
@@ -3136,30 +3256,41 @@ var AppCommandHandler = class {
|
|
|
3136
3256
|
if (command.path === null) {
|
|
3137
3257
|
this.loadedCommands.set(id, {
|
|
3138
3258
|
command,
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3259
|
+
metadata: {
|
|
3260
|
+
guilds: [],
|
|
3261
|
+
aliases: [],
|
|
3262
|
+
userPermissions: [],
|
|
3263
|
+
botPermissions: []
|
|
3264
|
+
},
|
|
3265
|
+
data: { command: { name: command.name } }
|
|
3144
3266
|
});
|
|
3145
3267
|
return;
|
|
3146
3268
|
}
|
|
3147
3269
|
const commandFileData = await import(`${require_resolve_file_url.toFileURL(command.path)}?t=${Date.now()}`);
|
|
3148
3270
|
if (!commandFileData.command) throw new Error(`Invalid export for command ${command.name}: no command definition found`);
|
|
3271
|
+
const metadataFunc = commandFileData.generateMetadata;
|
|
3272
|
+
const metadataObj = commandFileData.metadata;
|
|
3273
|
+
if (metadataFunc && metadataObj) throw new Error("A command may only export either `generateMetadata` or `metadata`, not both");
|
|
3274
|
+
const metadata = (metadataFunc ? await metadataFunc() : metadataObj) ?? {
|
|
3275
|
+
aliases: [],
|
|
3276
|
+
guilds: [],
|
|
3277
|
+
userPermissions: [],
|
|
3278
|
+
botPermissions: []
|
|
3279
|
+
};
|
|
3149
3280
|
const commandName = commandFileData.command.name || command.name;
|
|
3150
|
-
|
|
3281
|
+
let commandDescription = commandFileData.command.description;
|
|
3282
|
+
if (!commandDescription && commandFileData.chatInput) commandDescription = "No command description set.";
|
|
3151
3283
|
const updatedCommandData = {
|
|
3152
3284
|
...commandFileData.command,
|
|
3153
3285
|
name: commandName,
|
|
3154
|
-
description: commandDescription
|
|
3155
|
-
aliases: commandFileData.command.aliases
|
|
3286
|
+
description: commandDescription
|
|
3156
3287
|
};
|
|
3157
3288
|
let handlerCount = 0;
|
|
3158
3289
|
for (const [key, propValidator] of Object.entries(commandDataSchema)) {
|
|
3159
3290
|
const exportedProp = commandFileData[key];
|
|
3160
3291
|
if (exportedProp) {
|
|
3161
3292
|
if (!await propValidator(exportedProp)) throw new Error(`Invalid export for command ${command.name}: ${key} does not match expected value`);
|
|
3162
|
-
if (key
|
|
3293
|
+
if (!KNOWN_NON_HANDLER_KEYS.includes(key)) handlerCount++;
|
|
3163
3294
|
}
|
|
3164
3295
|
}
|
|
3165
3296
|
if (handlerCount === 0) throw new Error(`Invalid export for command ${command.name}: at least one handler function must be provided`);
|
|
@@ -3168,18 +3299,45 @@ var AppCommandHandler = class {
|
|
|
3168
3299
|
const res = await plugin.prepareCommand(ctx, lastUpdated);
|
|
3169
3300
|
if (res) lastUpdated = res;
|
|
3170
3301
|
});
|
|
3302
|
+
const commandJson = "toJSON" in lastUpdated && typeof lastUpdated.toJSON === "function" ? lastUpdated.toJSON() : lastUpdated;
|
|
3303
|
+
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
3304
|
this.loadedCommands.set(id, {
|
|
3172
3305
|
command,
|
|
3173
|
-
|
|
3306
|
+
metadata: {
|
|
3307
|
+
guilds: commandJson.guilds,
|
|
3308
|
+
aliases: commandJson.aliases,
|
|
3309
|
+
...metadata
|
|
3310
|
+
},
|
|
3174
3311
|
data: {
|
|
3175
3312
|
...commandFileData,
|
|
3176
|
-
|
|
3313
|
+
metadata: {
|
|
3314
|
+
guilds: commandJson.guilds,
|
|
3315
|
+
aliases: commandJson.aliases,
|
|
3316
|
+
...metadata
|
|
3317
|
+
},
|
|
3318
|
+
command: commandJson
|
|
3177
3319
|
}
|
|
3178
3320
|
});
|
|
3179
3321
|
} catch (error) {
|
|
3180
|
-
Logger.error
|
|
3322
|
+
Logger.error`Failed to load command ${command.name} (${id}): ${error}`;
|
|
3181
3323
|
}
|
|
3182
3324
|
}
|
|
3325
|
+
/**
|
|
3326
|
+
* Gets the metadata for a command.
|
|
3327
|
+
* @param command - The command name to get metadata for
|
|
3328
|
+
* @param hint - The hint for the command type (user or message)
|
|
3329
|
+
* @returns The command metadata or null if not found
|
|
3330
|
+
*/
|
|
3331
|
+
getMetadataFor(command, hint) {
|
|
3332
|
+
const loadedCommand = this.findCommandByName(command, hint);
|
|
3333
|
+
if (!loadedCommand) return null;
|
|
3334
|
+
return loadedCommand.metadata ??= {
|
|
3335
|
+
aliases: [],
|
|
3336
|
+
guilds: [],
|
|
3337
|
+
userPermissions: [],
|
|
3338
|
+
botPermissions: []
|
|
3339
|
+
};
|
|
3340
|
+
}
|
|
3183
3341
|
};
|
|
3184
3342
|
|
|
3185
3343
|
//#endregion
|
|
@@ -3206,8 +3364,7 @@ var AppEventsHandler = class {
|
|
|
3206
3364
|
*/
|
|
3207
3365
|
getEvents() {
|
|
3208
3366
|
if (this.loadedEvents.size === 0) return [];
|
|
3209
|
-
|
|
3210
|
-
return events.map((event) => ({
|
|
3367
|
+
return this.loadedEvents.toJSON().map((event) => ({
|
|
3211
3368
|
name: event.name,
|
|
3212
3369
|
namespace: event.namespace,
|
|
3213
3370
|
onceListeners: event.listeners.filter((listener) => listener.once).length,
|
|
@@ -3229,13 +3386,12 @@ var AppEventsHandler = class {
|
|
|
3229
3386
|
await this.commandkit.plugins.execute((ctx, plugin) => {
|
|
3230
3387
|
return plugin.onBeforeEventsLoad(ctx);
|
|
3231
3388
|
});
|
|
3232
|
-
const
|
|
3233
|
-
const events = await router.scan();
|
|
3389
|
+
const events = await this.commandkit.eventsRouter.scan();
|
|
3234
3390
|
for (const event of Object.values(events)) {
|
|
3235
3391
|
const listeners = [];
|
|
3236
3392
|
for (const listener of event.listeners) {
|
|
3237
3393
|
const handler = await import(require_resolve_file_url.toFileURL(listener, true));
|
|
3238
|
-
if (!handler.default || typeof handler.default !== "function") Logger.error
|
|
3394
|
+
if (!handler.default || typeof handler.default !== "function") Logger.error`Event handler for ${event.event}${event.namespace ? ` of namespace ${event.namespace}` : ""} does not have a default export or is not a function`;
|
|
3239
3395
|
listeners.push({
|
|
3240
3396
|
handler: handler.default,
|
|
3241
3397
|
once: !!handler.once
|
|
@@ -3301,13 +3457,13 @@ var AppEventsHandler = class {
|
|
|
3301
3457
|
variables: /* @__PURE__ */ new Map()
|
|
3302
3458
|
}, async () => {
|
|
3303
3459
|
for (const listener of onListeners) try {
|
|
3304
|
-
await listener.handler(...args);
|
|
3460
|
+
await listener.handler(...args, client, this.commandkit);
|
|
3305
3461
|
} catch (e) {
|
|
3306
3462
|
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.StopEvents)) {
|
|
3307
3463
|
Logger.debug(`Event propagation stopped for ${name}${namespace ? ` of namespace ${namespace}` : ""}`);
|
|
3308
3464
|
break;
|
|
3309
3465
|
}
|
|
3310
|
-
Logger.error
|
|
3466
|
+
Logger.error`Error handling event ${name}${namespace ? ` of namespace ${namespace}` : ""}: ${e}`;
|
|
3311
3467
|
}
|
|
3312
3468
|
});
|
|
3313
3469
|
};
|
|
@@ -3342,14 +3498,14 @@ var AppEventsHandler = class {
|
|
|
3342
3498
|
}, async () => {
|
|
3343
3499
|
try {
|
|
3344
3500
|
if (executedOnceListeners.has(listener.handler)) return;
|
|
3345
|
-
await listener.handler(...args);
|
|
3501
|
+
await listener.handler(...args, client, this.commandkit);
|
|
3346
3502
|
executedOnceListeners.add(listener.handler);
|
|
3347
3503
|
} catch (e) {
|
|
3348
3504
|
if (require_error_codes.isErrorType(e, require_error_codes.CommandKitErrorCodes.StopEvents)) {
|
|
3349
3505
|
Logger.debug(`Event propagation stopped for ${name}${namespace ? ` of namespace ${namespace}` : ""}`);
|
|
3350
3506
|
broken = true;
|
|
3351
3507
|
}
|
|
3352
|
-
Logger.error
|
|
3508
|
+
Logger.error`Error handling event ${name}${namespace ? ` of namespace ${namespace}` : ""}: ${e}`;
|
|
3353
3509
|
}
|
|
3354
3510
|
});
|
|
3355
3511
|
}
|
|
@@ -3495,8 +3651,7 @@ function registerDevHooks(commandkit$1) {
|
|
|
3495
3651
|
function getVariableStore() {
|
|
3496
3652
|
const ctx = getContext();
|
|
3497
3653
|
if (!ctx) try {
|
|
3498
|
-
|
|
3499
|
-
return eventContext.variables;
|
|
3654
|
+
return require_EventWorkerContext.getEventWorkerContext().variables;
|
|
3500
3655
|
} catch {
|
|
3501
3656
|
return null;
|
|
3502
3657
|
}
|
|
@@ -3585,7 +3740,7 @@ var AnalyticsEngine = class {
|
|
|
3585
3740
|
var _identify, _ref;
|
|
3586
3741
|
await ((_identify = (_ref = this.#provider).identify) === null || _identify === void 0 ? void 0 : _identify.call(_ref, this, event));
|
|
3587
3742
|
} catch (error) {
|
|
3588
|
-
Logger.error
|
|
3743
|
+
Logger.error`Error identifying with provider ${this.#provider.name}: ${error}`;
|
|
3589
3744
|
}
|
|
3590
3745
|
}
|
|
3591
3746
|
/**
|
|
@@ -3600,12 +3755,11 @@ var AnalyticsEngine = class {
|
|
|
3600
3755
|
if (await this.#doNotTrack(event)) return;
|
|
3601
3756
|
await this.#provider.track(this, event);
|
|
3602
3757
|
} catch (error) {
|
|
3603
|
-
Logger.error
|
|
3758
|
+
Logger.error`Error tracking ${event.name} event with provider ${this.#provider.name}: ${error}`;
|
|
3604
3759
|
}
|
|
3605
3760
|
}
|
|
3606
3761
|
async #doNotTrack(event) {
|
|
3607
|
-
|
|
3608
|
-
if (dnt) return true;
|
|
3762
|
+
if (getDoNotTrack()) return true;
|
|
3609
3763
|
if (this.#filter) return !this.#filter(this, event);
|
|
3610
3764
|
return false;
|
|
3611
3765
|
}
|
|
@@ -3723,7 +3877,6 @@ var CommandKit = class CommandKit extends node_events.default {
|
|
|
3723
3877
|
/**
|
|
3724
3878
|
* Create a new command and event handler with CommandKit.
|
|
3725
3879
|
* @param options - The default CommandKit configuration.
|
|
3726
|
-
* @see {@link https://commandkit.js.org/docs/guide/commandkit-setup}
|
|
3727
3880
|
*/
|
|
3728
3881
|
constructor(options = {}) {
|
|
3729
3882
|
if (CommandKit.instance) process.emitWarning("CommandKit instance already exists. Having multiple instance in same project is discouraged and it may lead to unexpected behavior.", { code: "MultiInstanceWarning" });
|
|
@@ -3739,7 +3892,7 @@ var CommandKit = class CommandKit extends node_events.default {
|
|
|
3739
3892
|
for (const hook of bootstrapHooks) try {
|
|
3740
3893
|
await hook(this);
|
|
3741
3894
|
} catch (e) {
|
|
3742
|
-
Logger.error
|
|
3895
|
+
Logger.error`Error while executing bootstrap hook: ${e}`;
|
|
3743
3896
|
} finally {
|
|
3744
3897
|
bootstrapHooks.delete(hook);
|
|
3745
3898
|
}
|
|
@@ -3749,7 +3902,7 @@ var CommandKit = class CommandKit extends node_events.default {
|
|
|
3749
3902
|
for (const hook of onApplicationBootstrapHooks) try {
|
|
3750
3903
|
await hook(this);
|
|
3751
3904
|
} catch (e) {
|
|
3752
|
-
Logger.error
|
|
3905
|
+
Logger.error`Error while executing application bootstrap hook: ${e}`;
|
|
3753
3906
|
} finally {
|
|
3754
3907
|
onApplicationBootstrapHooks.delete(hook);
|
|
3755
3908
|
}
|
|
@@ -3767,7 +3920,7 @@ var CommandKit = class CommandKit extends node_events.default {
|
|
|
3767
3920
|
registerDevHooks(this);
|
|
3768
3921
|
await require_types_package.generateTypesPackage();
|
|
3769
3922
|
} catch (e) {
|
|
3770
|
-
if (process.env.COMMANDKIT_DEBUG_TYPEGEN) Logger.error
|
|
3923
|
+
if (process.env.COMMANDKIT_DEBUG_TYPEGEN) Logger.error`${e}`;
|
|
3771
3924
|
}
|
|
3772
3925
|
await this.loadPlugins();
|
|
3773
3926
|
await this.#init();
|
|
@@ -3795,8 +3948,7 @@ var CommandKit = class CommandKit extends node_events.default {
|
|
|
3795
3948
|
* Loads all the plugins.
|
|
3796
3949
|
*/
|
|
3797
3950
|
async loadPlugins() {
|
|
3798
|
-
const
|
|
3799
|
-
const plugins = config.plugins.flat(2).filter((p) => require_RuntimePlugin.isRuntimePlugin(p));
|
|
3951
|
+
const plugins = (await loadConfigFile()).plugins.flat(2).filter((p) => require_RuntimePlugin.isRuntimePlugin(p));
|
|
3800
3952
|
if (!plugins.length) return;
|
|
3801
3953
|
for (const plugin of plugins) await this.plugins.softRegisterPlugin(plugin);
|
|
3802
3954
|
}
|
|
@@ -3844,8 +3996,7 @@ var CommandKit = class CommandKit extends node_events.default {
|
|
|
3844
3996
|
return this;
|
|
3845
3997
|
}
|
|
3846
3998
|
async #init() {
|
|
3847
|
-
|
|
3848
|
-
if (!appDir$1) return;
|
|
3999
|
+
if (!this.getAppDirectory()) throw new Error("CommandKit could not determine the application directory. This issue is common when you are not using the `commandkit dev` command to start the project. You can either use `commandkit dev` to start the project, or set the `COMMANDKIT_IS_CLI=true` environment variable (Note that adding this to `.env` file may not work). If you are trying to start the production build, make sure your current working directory is the directory where `commandkit.config.ts` file is located.");
|
|
3849
4000
|
const commandsPath = this.getPath("commands");
|
|
3850
4001
|
const events = this.getPath("events");
|
|
3851
4002
|
this.commandHandler = new AppCommandHandler(this);
|
|
@@ -4150,6 +4301,12 @@ Object.defineProperty(exports, 'after', {
|
|
|
4150
4301
|
return after;
|
|
4151
4302
|
}
|
|
4152
4303
|
});
|
|
4304
|
+
Object.defineProperty(exports, 'beforeExecute', {
|
|
4305
|
+
enumerable: true,
|
|
4306
|
+
get: function () {
|
|
4307
|
+
return beforeExecute;
|
|
4308
|
+
}
|
|
4309
|
+
});
|
|
4153
4310
|
Object.defineProperty(exports, 'cancelAfter', {
|
|
4154
4311
|
enumerable: true,
|
|
4155
4312
|
get: function () {
|
|
@@ -4276,6 +4433,12 @@ Object.defineProperty(exports, 'makeContextAwareFunction', {
|
|
|
4276
4433
|
return makeContextAwareFunction;
|
|
4277
4434
|
}
|
|
4278
4435
|
});
|
|
4436
|
+
Object.defineProperty(exports, 'middlewareId', {
|
|
4437
|
+
enumerable: true,
|
|
4438
|
+
get: function () {
|
|
4439
|
+
return middlewareId;
|
|
4440
|
+
}
|
|
4441
|
+
});
|
|
4279
4442
|
Object.defineProperty(exports, 'noAnalytics', {
|
|
4280
4443
|
enumerable: true,
|
|
4281
4444
|
get: function () {
|
|
@@ -4312,4 +4475,10 @@ Object.defineProperty(exports, 'useEnvironment', {
|
|
|
4312
4475
|
return useEnvironment;
|
|
4313
4476
|
}
|
|
4314
4477
|
});
|
|
4315
|
-
|
|
4478
|
+
Object.defineProperty(exports, 'useStore', {
|
|
4479
|
+
enumerable: true,
|
|
4480
|
+
get: function () {
|
|
4481
|
+
return useStore;
|
|
4482
|
+
}
|
|
4483
|
+
});
|
|
4484
|
+
//# sourceMappingURL=commandkit-ZoBBh0Q_.js.map
|