@azurioh/discord-kernel 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +318 -1
- package/dist/authz/require-level-guard.d.ts +1 -1
- package/dist/authz/require-level-guard.d.ts.map +1 -1
- package/dist/color.d.ts +42 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +130 -0
- package/dist/color.js.map +1 -0
- package/dist/discord/command/all-required.d.ts +8 -0
- package/dist/discord/command/all-required.d.ts.map +1 -0
- package/dist/discord/command/all-required.js +12 -0
- package/dist/discord/command/all-required.js.map +1 -0
- package/dist/discord/command/autocomplete-dispatcher.d.ts.map +1 -1
- package/dist/discord/command/autocomplete-dispatcher.js +2 -1
- package/dist/discord/command/autocomplete-dispatcher.js.map +1 -1
- package/dist/discord/command/autocomplete-limits.d.ts +3 -0
- package/dist/discord/command/autocomplete-limits.d.ts.map +1 -0
- package/dist/discord/command/autocomplete-limits.js +6 -0
- package/dist/discord/command/autocomplete-limits.js.map +1 -0
- package/dist/discord/command/autocomplete.d.ts +6 -1
- package/dist/discord/command/autocomplete.d.ts.map +1 -1
- package/dist/discord/command/autocomplete.js +6 -6
- package/dist/discord/command/autocomplete.js.map +1 -1
- package/dist/discord/command/command-responders.d.ts +26 -0
- package/dist/discord/command/command-responders.d.ts.map +1 -0
- package/dist/discord/command/command-responders.js +16 -0
- package/dist/discord/command/command-responders.js.map +1 -0
- package/dist/discord/command/context.d.ts +8 -17
- package/dist/discord/command/context.d.ts.map +1 -1
- package/dist/discord/command/context.js +8 -37
- package/dist/discord/command/context.js.map +1 -1
- package/dist/discord/command/cooldown-guard.d.ts +1 -1
- package/dist/discord/command/cooldown-guard.d.ts.map +1 -1
- package/dist/discord/command/create-command.d.ts +1 -8
- package/dist/discord/command/create-command.d.ts.map +1 -1
- package/dist/discord/command/create-command.js +17 -65
- package/dist/discord/command/create-command.js.map +1 -1
- package/dist/discord/command/create-context-menu-command.d.ts +3 -9
- package/dist/discord/command/create-context-menu-command.d.ts.map +1 -1
- package/dist/discord/command/create-context-menu-command.js +14 -65
- package/dist/discord/command/create-context-menu-command.js.map +1 -1
- package/dist/discord/command/errors.d.ts +1 -1
- package/dist/discord/command/errors.d.ts.map +1 -1
- package/dist/discord/command/errors.js +2 -2
- package/dist/discord/command/errors.js.map +1 -1
- package/dist/discord/command/guard.d.ts +15 -8
- package/dist/discord/command/guard.d.ts.map +1 -1
- package/dist/discord/command/guard.js +4 -4
- package/dist/discord/command/guard.js.map +1 -1
- package/dist/discord/command/options.d.ts +1 -10
- package/dist/discord/command/options.d.ts.map +1 -1
- package/dist/discord/command/options.js +127 -320
- package/dist/discord/command/options.js.map +1 -1
- package/dist/discord/command/passes-guard.d.ts +14 -0
- package/dist/discord/command/passes-guard.d.ts.map +1 -0
- package/dist/discord/command/passes-guard.js +27 -0
- package/dist/discord/command/passes-guard.js.map +1 -0
- package/dist/discord/command/permission-guard.d.ts +1 -1
- package/dist/discord/command/permission-guard.d.ts.map +1 -1
- package/dist/discord/command/render-command-failure.d.ts +23 -0
- package/dist/discord/command/render-command-failure.d.ts.map +1 -0
- package/dist/discord/command/render-command-failure.js +40 -0
- package/dist/discord/command/render-command-failure.js.map +1 -0
- package/dist/discord/command/route-key.d.ts +8 -0
- package/dist/discord/command/route-key.d.ts.map +1 -0
- package/dist/discord/command/route-key.js +13 -0
- package/dist/discord/command/route-key.js.map +1 -0
- package/dist/discord/command/router.d.ts +32 -7
- package/dist/discord/command/router.d.ts.map +1 -1
- package/dist/discord/command/router.js +48 -10
- package/dist/discord/command/router.js.map +1 -1
- package/dist/discord/command/send-embed.d.ts +14 -0
- package/dist/discord/command/send-embed.d.ts.map +1 -0
- package/dist/discord/command/send-embed.js +37 -0
- package/dist/discord/command/send-embed.js.map +1 -0
- package/dist/discord/command/types.d.ts +7 -1
- package/dist/discord/command/types.d.ts.map +1 -1
- package/dist/discord/components/component-access.d.ts +12 -0
- package/dist/discord/components/component-access.d.ts.map +1 -0
- package/dist/discord/components/component-access.js +21 -0
- package/dist/discord/components/component-access.js.map +1 -0
- package/dist/discord/components/component-router.d.ts +37 -15
- package/dist/discord/components/component-router.d.ts.map +1 -1
- package/dist/discord/components/component-router.js +44 -32
- package/dist/discord/components/component-router.js.map +1 -1
- package/dist/discord/components/interactive-message/index.d.ts +3 -1
- package/dist/discord/components/interactive-message/index.d.ts.map +1 -1
- package/dist/discord/components/interactive-message/index.js +5 -3
- package/dist/discord/components/interactive-message/index.js.map +1 -1
- package/dist/discord/components/interactive-message/interactive-message-collector.d.ts +3 -28
- package/dist/discord/components/interactive-message/interactive-message-collector.d.ts.map +1 -1
- package/dist/discord/components/interactive-message/interactive-message-collector.js +6 -53
- package/dist/discord/components/interactive-message/interactive-message-collector.js.map +1 -1
- package/dist/discord/components/interactive-message/message-edit-options.d.ts +18 -0
- package/dist/discord/components/interactive-message/message-edit-options.d.ts.map +1 -0
- package/dist/discord/components/interactive-message/message-edit-options.js +40 -0
- package/dist/discord/components/interactive-message/message-edit-options.js.map +1 -0
- package/dist/discord/components/interactive-message/mount-interactive-message.d.ts +2 -1
- package/dist/discord/components/interactive-message/mount-interactive-message.d.ts.map +1 -1
- package/dist/discord/components/interactive-message/mount-interactive-message.js +4 -2
- package/dist/discord/components/interactive-message/mount-interactive-message.js.map +1 -1
- package/dist/discord/components/interactive-message/state-store.d.ts +12 -0
- package/dist/discord/components/interactive-message/state-store.d.ts.map +1 -0
- package/dist/discord/components/interactive-message/state-store.js +14 -0
- package/dist/discord/components/interactive-message/state-store.js.map +1 -0
- package/dist/discord/components/paginator/mount-paginator.js +7 -5
- package/dist/discord/components/paginator/mount-paginator.js.map +1 -1
- package/dist/discord/components/paginator/paginator-view.d.ts +1 -1
- package/dist/discord/components/paginator/paginator-view.d.ts.map +1 -1
- package/dist/discord/components/persistent-paginator.d.ts +1 -1
- package/dist/discord/components/persistent-paginator.d.ts.map +1 -1
- package/dist/discord/components/persistent-paginator.js +6 -6
- package/dist/discord/components/persistent-paginator.js.map +1 -1
- package/dist/discord/components/settings-editor/from-declaration-controls.d.ts +67 -0
- package/dist/discord/components/settings-editor/from-declaration-controls.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-controls.js +245 -0
- package/dist/discord/components/settings-editor/from-declaration-controls.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-display.d.ts +23 -0
- package/dist/discord/components/settings-editor/from-declaration-display.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-display.js +114 -0
- package/dist/discord/components/settings-editor/from-declaration-display.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.d.ts +33 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.js +178 -0
- package/dist/discord/components/settings-editor/from-declaration-layout.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-search.d.ts +27 -0
- package/dist/discord/components/settings-editor/from-declaration-search.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-search.js +58 -0
- package/dist/discord/components/settings-editor/from-declaration-search.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.d.ts +21 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.js +37 -0
- package/dist/discord/components/settings-editor/from-declaration-stored.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.d.ts +32 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.js +65 -0
- package/dist/discord/components/settings-editor/from-declaration-subject.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-values.d.ts +57 -0
- package/dist/discord/components/settings-editor/from-declaration-values.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration-values.js +187 -0
- package/dist/discord/components/settings-editor/from-declaration-values.js.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration.d.ts +39 -0
- package/dist/discord/components/settings-editor/from-declaration.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/from-declaration.js +132 -0
- package/dist/discord/components/settings-editor/from-declaration.js.map +1 -0
- package/dist/discord/components/settings-editor/index.d.ts +3 -1
- package/dist/discord/components/settings-editor/index.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/index.js +6 -3
- package/dist/discord/components/settings-editor/index.js.map +1 -1
- package/dist/discord/components/settings-editor/mount-settings-editor.d.ts +16 -2
- package/dist/discord/components/settings-editor/mount-settings-editor.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/mount-settings-editor.js +14 -10
- package/dist/discord/components/settings-editor/mount-settings-editor.js.map +1 -1
- package/dist/discord/components/settings-editor/navigation.d.ts +20 -0
- package/dist/discord/components/settings-editor/navigation.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/navigation.js +22 -0
- package/dist/discord/components/settings-editor/navigation.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts +4 -3
- package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-card.view.js +60 -34
- package/dist/discord/components/settings-editor/settings-editor-card.view.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts +2 -1
- package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-field-modal.js +48 -72
- package/dist/discord/components/settings-editor/settings-editor-field-modal.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts +6 -0
- package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-field-values.js +13 -0
- package/dist/discord/components/settings-editor/settings-editor-field-values.js.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-fields.d.ts +6 -5
- package/dist/discord/components/settings-editor/settings-editor-fields.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor-fields.js +0 -10
- package/dist/discord/components/settings-editor/settings-editor-fields.js.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor.view.d.ts +3 -2
- package/dist/discord/components/settings-editor/settings-editor.view.d.ts.map +1 -1
- package/dist/discord/components/settings-editor/settings-editor.view.js +4 -21
- package/dist/discord/components/settings-editor/settings-editor.view.js.map +1 -1
- package/dist/discord/events/event-guild-id.d.ts +10 -0
- package/dist/discord/events/event-guild-id.d.ts.map +1 -0
- package/dist/discord/events/event-guild-id.js +37 -0
- package/dist/discord/events/event-guild-id.js.map +1 -0
- package/dist/discord/events/event-router.d.ts +17 -3
- package/dist/discord/events/event-router.d.ts.map +1 -1
- package/dist/discord/events/event-router.js +33 -9
- package/dist/discord/events/event-router.js.map +1 -1
- package/dist/discord/i18n.d.ts +17 -2
- package/dist/discord/i18n.d.ts.map +1 -1
- package/dist/discord/i18n.js +43 -6
- package/dist/discord/i18n.js.map +1 -1
- package/dist/discord/interaction/interaction-locale.d.ts +14 -0
- package/dist/discord/interaction/interaction-locale.d.ts.map +1 -0
- package/dist/discord/interaction/interaction-locale.js +12 -0
- package/dist/discord/interaction/interaction-locale.js.map +1 -0
- package/dist/discord/interaction/locale-resolver.d.ts +27 -0
- package/dist/discord/interaction/locale-resolver.d.ts.map +1 -0
- package/dist/discord/interaction/locale-resolver.js +3 -0
- package/dist/discord/interaction/locale-resolver.js.map +1 -0
- package/dist/discord/interaction/modal.d.ts.map +1 -1
- package/dist/discord/interaction/modal.js +5 -40
- package/dist/discord/interaction/modal.js.map +1 -1
- package/dist/discord/interaction/reply-locale.d.ts +18 -0
- package/dist/discord/interaction/reply-locale.d.ts.map +1 -0
- package/dist/discord/interaction/reply-locale.js +25 -0
- package/dist/discord/interaction/reply-locale.js.map +1 -0
- package/dist/discord/interaction/select-bounds.d.ts +19 -0
- package/dist/discord/interaction/select-bounds.d.ts.map +1 -0
- package/dist/discord/interaction/select-bounds.js +17 -0
- package/dist/discord/interaction/select-bounds.js.map +1 -0
- package/dist/discord/interaction/select-menu.d.ts.map +1 -1
- package/dist/discord/interaction/select-menu.js +2 -9
- package/dist/discord/interaction/select-menu.js.map +1 -1
- package/dist/discord/placeholder-registry.d.ts +1 -1
- package/dist/discord/placeholder-registry.d.ts.map +1 -1
- package/dist/discord/presenter.d.ts +1 -1
- package/dist/discord/presenter.d.ts.map +1 -1
- package/dist/discord/settings/discord-guild-directory.d.ts +28 -0
- package/dist/discord/settings/discord-guild-directory.d.ts.map +1 -0
- package/dist/discord/settings/discord-guild-directory.js +171 -0
- package/dist/discord/settings/discord-guild-directory.js.map +1 -0
- package/dist/discord/settings/guild-locale-resolver.d.ts +25 -0
- package/dist/discord/settings/guild-locale-resolver.d.ts.map +1 -0
- package/dist/discord/settings/guild-locale-resolver.js +33 -0
- package/dist/discord/settings/guild-locale-resolver.js.map +1 -0
- package/dist/discord/settings/is-module-disabled.d.ts +16 -0
- package/dist/discord/settings/is-module-disabled.d.ts.map +1 -0
- package/dist/discord/settings/is-module-disabled.js +20 -0
- package/dist/discord/settings/is-module-disabled.js.map +1 -0
- package/dist/discord/settings/module-disabled-embed.d.ts +13 -0
- package/dist/discord/settings/module-disabled-embed.d.ts.map +1 -0
- package/dist/discord/settings/module-disabled-embed.js +16 -0
- package/dist/discord/settings/module-disabled-embed.js.map +1 -0
- package/dist/discord/settings/require-configured.d.ts +26 -0
- package/dist/discord/settings/require-configured.d.ts.map +1 -0
- package/dist/discord/settings/require-configured.js +62 -0
- package/dist/discord/settings/require-configured.js.map +1 -0
- package/dist/discord/ui/color-aliases.d.ts +31 -0
- package/dist/discord/ui/color-aliases.d.ts.map +1 -0
- package/dist/discord/ui/color-aliases.js +66 -0
- package/dist/discord/ui/color-aliases.js.map +1 -0
- package/dist/discord/ui/color-input.d.ts +5 -32
- package/dist/discord/ui/color-input.d.ts.map +1 -1
- package/dist/discord/ui/color-input.js +8 -157
- package/dist/discord/ui/color-input.js.map +1 -1
- package/dist/discord/ui/colors.d.ts +0 -2
- package/dist/discord/ui/colors.d.ts.map +1 -1
- package/dist/discord/ui/colors.js +4 -5
- package/dist/discord/ui/colors.js.map +1 -1
- package/dist/discord/ui/embed.d.ts.map +1 -1
- package/dist/discord/ui/embed.js +3 -8
- package/dist/discord/ui/embed.js.map +1 -1
- package/dist/discord/ui/truncate-text.d.ts +11 -0
- package/dist/discord/ui/truncate-text.d.ts.map +1 -0
- package/dist/discord/ui/truncate-text.js +19 -0
- package/dist/discord/ui/truncate-text.js.map +1 -0
- package/dist/errors/error-message.d.ts +9 -0
- package/dist/errors/error-message.d.ts.map +1 -0
- package/dist/errors/error-message.js +14 -0
- package/dist/errors/error-message.js.map +1 -0
- package/dist/i18n/business-message.d.ts +1 -1
- package/dist/i18n/business-message.d.ts.map +1 -1
- package/dist/i18n/catalog.d.ts +9 -0
- package/dist/i18n/catalog.d.ts.map +1 -1
- package/dist/i18n/catalog.js +4 -0
- package/dist/i18n/catalog.js.map +1 -1
- package/dist/i18n/locale.d.ts +2 -0
- package/dist/i18n/locale.d.ts.map +1 -1
- package/dist/i18n/locale.js +3 -1
- package/dist/i18n/locale.js.map +1 -1
- package/dist/i18n/translator.d.ts +2 -0
- package/dist/i18n/translator.d.ts.map +1 -1
- package/dist/i18n/translator.js.map +1 -1
- package/dist/module/module.d.ts +15 -1
- package/dist/module/module.d.ts.map +1 -1
- package/dist/resilience/retry.js +2 -2
- package/dist/resilience/retry.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/dist/scheduler/scheduler.js +2 -4
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/settings/cache.d.ts +29 -0
- package/dist/settings/cache.d.ts.map +1 -0
- package/dist/settings/cache.js +47 -0
- package/dist/settings/cache.js.map +1 -0
- package/dist/settings/choice.d.ts +10 -0
- package/dist/settings/choice.d.ts.map +1 -0
- package/dist/settings/choice.js +3 -0
- package/dist/settings/choice.js.map +1 -0
- package/dist/settings/decode-stored.d.ts +20 -0
- package/dist/settings/decode-stored.d.ts.map +1 -0
- package/dist/settings/decode-stored.js +35 -0
- package/dist/settings/decode-stored.js.map +1 -0
- package/dist/settings/define-settings.d.ts +52 -0
- package/dist/settings/define-settings.d.ts.map +1 -0
- package/dist/settings/define-settings.js +141 -0
- package/dist/settings/define-settings.js.map +1 -0
- package/dist/settings/describe-field.d.ts +19 -0
- package/dist/settings/describe-field.d.ts.map +1 -0
- package/dist/settings/describe-field.js +131 -0
- package/dist/settings/describe-field.js.map +1 -0
- package/dist/settings/describe.d.ts +27 -0
- package/dist/settings/describe.d.ts.map +1 -0
- package/dist/settings/describe.js +62 -0
- package/dist/settings/describe.js.map +1 -0
- package/dist/settings/duration.d.ts +16 -0
- package/dist/settings/duration.d.ts.map +1 -0
- package/dist/settings/duration.js +56 -0
- package/dist/settings/duration.js.map +1 -0
- package/dist/settings/field-order.d.ts +37 -0
- package/dist/settings/field-order.d.ts.map +1 -0
- package/dist/settings/field-order.js +100 -0
- package/dist/settings/field-order.js.map +1 -0
- package/dist/settings/field-search.d.ts +10 -0
- package/dist/settings/field-search.d.ts.map +1 -0
- package/dist/settings/field-search.js +18 -0
- package/dist/settings/field-search.js.map +1 -0
- package/dist/settings/fields/builders.d.ts +41 -0
- package/dist/settings/fields/builders.d.ts.map +1 -0
- package/dist/settings/fields/builders.js +83 -0
- package/dist/settings/fields/builders.js.map +1 -0
- package/dist/settings/fields/field.d.ts +199 -0
- package/dist/settings/fields/field.d.ts.map +1 -0
- package/dist/settings/fields/field.js +33 -0
- package/dist/settings/fields/field.js.map +1 -0
- package/dist/settings/fields/zod-schema.d.ts +67 -0
- package/dist/settings/fields/zod-schema.d.ts.map +1 -0
- package/dist/settings/fields/zod-schema.js +281 -0
- package/dist/settings/fields/zod-schema.js.map +1 -0
- package/dist/settings/in-memory/in-memory-guild-directory.d.ts +24 -0
- package/dist/settings/in-memory/in-memory-guild-directory.d.ts.map +1 -0
- package/dist/settings/in-memory/in-memory-guild-directory.js +42 -0
- package/dist/settings/in-memory/in-memory-guild-directory.js.map +1 -0
- package/dist/settings/in-memory/in-memory-settings-store.d.ts +8 -0
- package/dist/settings/in-memory/in-memory-settings-store.d.ts.map +1 -0
- package/dist/settings/in-memory/in-memory-settings-store.js +43 -0
- package/dist/settings/in-memory/in-memory-settings-store.js.map +1 -0
- package/dist/settings/in-memory/in-process-notifier.d.ts +9 -0
- package/dist/settings/in-memory/in-process-notifier.d.ts.map +1 -0
- package/dist/settings/in-memory/in-process-notifier.js +32 -0
- package/dist/settings/in-memory/in-process-notifier.js.map +1 -0
- package/dist/settings/index.d.ts +22 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +31 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/is-plain-object.d.ts +6 -0
- package/dist/settings/is-plain-object.d.ts.map +1 -0
- package/dist/settings/is-plain-object.js +15 -0
- package/dist/settings/is-plain-object.js.map +1 -0
- package/dist/settings/messages.d.ts +61 -0
- package/dist/settings/messages.d.ts.map +1 -0
- package/dist/settings/messages.js +155 -0
- package/dist/settings/messages.js.map +1 -0
- package/dist/settings/migrate.d.ts +35 -0
- package/dist/settings/migrate.d.ts.map +1 -0
- package/dist/settings/migrate.js +42 -0
- package/dist/settings/migrate.js.map +1 -0
- package/dist/settings/ports/guild-directory.d.ts +61 -0
- package/dist/settings/ports/guild-directory.d.ts.map +1 -0
- package/dist/settings/ports/guild-directory.js +3 -0
- package/dist/settings/ports/guild-directory.js.map +1 -0
- package/dist/settings/ports/settings-changed-notifier.d.ts +20 -0
- package/dist/settings/ports/settings-changed-notifier.d.ts.map +1 -0
- package/dist/settings/ports/settings-changed-notifier.js +3 -0
- package/dist/settings/ports/settings-changed-notifier.js.map +1 -0
- package/dist/settings/ports/settings-store.d.ts +76 -0
- package/dist/settings/ports/settings-store.d.ts.map +1 -0
- package/dist/settings/ports/settings-store.js +3 -0
- package/dist/settings/ports/settings-store.js.map +1 -0
- package/dist/settings/registry.d.ts +31 -0
- package/dist/settings/registry.d.ts.map +1 -0
- package/dist/settings/registry.js +102 -0
- package/dist/settings/registry.js.map +1 -0
- package/dist/settings/settings-declaration-error.d.ts +13 -0
- package/dist/settings/settings-declaration-error.d.ts.map +1 -0
- package/dist/settings/settings-declaration-error.js +22 -0
- package/dist/settings/settings-declaration-error.js.map +1 -0
- package/dist/settings/settings-service.d.ts +148 -0
- package/dist/settings/settings-service.d.ts.map +1 -0
- package/dist/settings/settings-service.js +279 -0
- package/dist/settings/settings-service.js.map +1 -0
- package/dist/settings/settings-validation-error.d.ts +23 -0
- package/dist/settings/settings-validation-error.d.ts.map +1 -0
- package/dist/settings/settings-validation-error.js +17 -0
- package/dist/settings/settings-validation-error.js.map +1 -0
- package/dist/settings/status.d.ts +16 -0
- package/dist/settings/status.d.ts.map +1 -0
- package/dist/settings/status.js +18 -0
- package/dist/settings/status.js.map +1 -0
- package/dist/settings/suggest.d.ts +77 -0
- package/dist/settings/suggest.d.ts.map +1 -0
- package/dist/settings/suggest.js +192 -0
- package/dist/settings/suggest.js.map +1 -0
- package/dist/settings/system/kernel-settings.d.ts +43 -0
- package/dist/settings/system/kernel-settings.d.ts.map +1 -0
- package/dist/settings/system/kernel-settings.js +53 -0
- package/dist/settings/system/kernel-settings.js.map +1 -0
- package/dist/settings/system/module-gate.d.ts +31 -0
- package/dist/settings/system/module-gate.d.ts.map +1 -0
- package/dist/settings/system/module-gate.js +34 -0
- package/dist/settings/system/module-gate.js.map +1 -0
- package/dist/settings/testing/index.d.ts +2 -0
- package/dist/settings/testing/index.d.ts.map +1 -0
- package/dist/settings/testing/index.js +6 -0
- package/dist/settings/testing/index.js.map +1 -0
- package/dist/settings/testing/settings-store-contract.d.ts +29 -0
- package/dist/settings/testing/settings-store-contract.d.ts.map +1 -0
- package/dist/settings/testing/settings-store-contract.js +192 -0
- package/dist/settings/testing/settings-store-contract.js.map +1 -0
- package/dist/settings/timed-search.d.ts +26 -0
- package/dist/settings/timed-search.d.ts.map +1 -0
- package/dist/settings/timed-search.js +48 -0
- package/dist/settings/timed-search.js.map +1 -0
- package/dist/settings/types.d.ts +37 -0
- package/dist/settings/types.d.ts.map +1 -0
- package/dist/settings/types.js +3 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/settings/validate.d.ts +55 -0
- package/dist/settings/validate.d.ts.map +1 -0
- package/dist/settings/validate.js +196 -0
- package/dist/settings/validate.js.map +1 -0
- package/package.json +463 -88
- package/src/authz/require-level-guard.ts +1 -1
- package/src/color.ts +134 -0
- package/src/discord/command/all-required.ts +12 -0
- package/src/discord/command/autocomplete-dispatcher.ts +2 -1
- package/src/discord/command/autocomplete-limits.ts +2 -0
- package/src/discord/command/autocomplete.ts +8 -7
- package/src/discord/command/command-responders.ts +39 -0
- package/src/discord/command/context.ts +14 -54
- package/src/discord/command/cooldown-guard.ts +1 -1
- package/src/discord/command/create-command.ts +19 -94
- package/src/discord/command/create-context-menu-command.ts +19 -97
- package/src/discord/command/errors.ts +1 -1
- package/src/discord/command/guard.ts +24 -12
- package/src/discord/command/options.ts +202 -412
- package/src/discord/command/passes-guard.ts +37 -0
- package/src/discord/command/permission-guard.ts +1 -1
- package/src/discord/command/render-command-failure.ts +71 -0
- package/src/discord/command/route-key.ts +9 -0
- package/src/discord/command/router.ts +73 -12
- package/src/discord/command/send-embed.ts +42 -0
- package/src/discord/command/types.ts +7 -1
- package/src/discord/components/component-access.ts +20 -0
- package/src/discord/components/component-router.ts +73 -36
- package/src/discord/components/interactive-message/index.ts +5 -3
- package/src/discord/components/interactive-message/interactive-message-collector.ts +4 -68
- package/src/discord/components/interactive-message/message-edit-options.ts +47 -0
- package/src/discord/components/interactive-message/mount-interactive-message.ts +5 -3
- package/src/discord/components/interactive-message/state-store.ts +20 -0
- package/src/discord/components/paginator/mount-paginator.ts +3 -3
- package/src/discord/components/paginator/paginator-view.ts +1 -1
- package/src/discord/components/persistent-paginator.ts +8 -9
- package/src/discord/components/settings-editor/from-declaration-controls.ts +371 -0
- package/src/discord/components/settings-editor/from-declaration-display.ts +155 -0
- package/src/discord/components/settings-editor/from-declaration-layout.ts +247 -0
- package/src/discord/components/settings-editor/from-declaration-search.ts +77 -0
- package/src/discord/components/settings-editor/from-declaration-stored.ts +39 -0
- package/src/discord/components/settings-editor/from-declaration-subject.ts +110 -0
- package/src/discord/components/settings-editor/from-declaration-values.ts +240 -0
- package/src/discord/components/settings-editor/from-declaration.ts +218 -0
- package/src/discord/components/settings-editor/index.ts +5 -2
- package/src/discord/components/settings-editor/mount-settings-editor.ts +28 -10
- package/src/discord/components/settings-editor/navigation.ts +41 -0
- package/src/discord/components/settings-editor/settings-editor-card.view.ts +79 -36
- package/src/discord/components/settings-editor/settings-editor-field-modal.ts +76 -68
- package/src/discord/components/settings-editor/settings-editor-field-values.ts +11 -0
- package/src/discord/components/settings-editor/settings-editor-fields.ts +6 -11
- package/src/discord/components/settings-editor/settings-editor.view.ts +11 -24
- package/src/discord/events/event-guild-id.ts +35 -0
- package/src/discord/events/event-router.ts +46 -13
- package/src/discord/i18n.ts +47 -8
- package/src/discord/interaction/interaction-locale.ts +19 -0
- package/src/discord/interaction/locale-resolver.ts +28 -0
- package/src/discord/interaction/modal.ts +5 -40
- package/src/discord/interaction/reply-locale.ts +35 -0
- package/src/discord/interaction/select-bounds.ts +33 -0
- package/src/discord/interaction/select-menu.ts +2 -9
- package/src/discord/placeholder-registry.ts +1 -1
- package/src/discord/presenter.ts +1 -1
- package/src/discord/settings/discord-guild-directory.ts +214 -0
- package/src/discord/settings/guild-locale-resolver.ts +38 -0
- package/src/discord/settings/is-module-disabled.ts +22 -0
- package/src/discord/settings/module-disabled-embed.ts +19 -0
- package/src/discord/settings/require-configured.ts +68 -0
- package/src/discord/ui/color-aliases.ts +70 -0
- package/src/discord/ui/color-input.ts +8 -173
- package/src/discord/ui/colors.ts +2 -3
- package/src/discord/ui/embed.ts +3 -9
- package/src/discord/ui/truncate-text.ts +15 -0
- package/src/errors/error-message.ts +10 -0
- package/src/i18n/business-message.ts +1 -1
- package/src/i18n/catalog.ts +14 -0
- package/src/i18n/locale.ts +3 -0
- package/src/i18n/translator.ts +3 -0
- package/src/module/module.ts +15 -1
- package/src/resilience/retry.ts +1 -1
- package/src/scheduler/scheduler.ts +2 -5
- package/src/settings/cache.ts +70 -0
- package/src/settings/choice.ts +9 -0
- package/src/settings/decode-stored.ts +40 -0
- package/src/settings/define-settings.ts +214 -0
- package/src/settings/describe-field.ts +155 -0
- package/src/settings/describe.ts +90 -0
- package/src/settings/duration.ts +54 -0
- package/src/settings/field-order.ts +128 -0
- package/src/settings/field-search.ts +16 -0
- package/src/settings/fields/builders.ts +161 -0
- package/src/settings/fields/field.ts +205 -0
- package/src/settings/fields/zod-schema.ts +300 -0
- package/src/settings/in-memory/in-memory-guild-directory.ts +69 -0
- package/src/settings/in-memory/in-memory-settings-store.ts +46 -0
- package/src/settings/in-memory/in-process-notifier.ts +40 -0
- package/src/settings/index.ts +72 -0
- package/src/settings/is-plain-object.ts +11 -0
- package/src/settings/messages.ts +161 -0
- package/src/settings/migrate.ts +58 -0
- package/src/settings/ports/guild-directory.ts +48 -0
- package/src/settings/ports/settings-changed-notifier.ts +20 -0
- package/src/settings/ports/settings-store.ts +74 -0
- package/src/settings/registry.ts +137 -0
- package/src/settings/settings-declaration-error.ts +16 -0
- package/src/settings/settings-service.ts +535 -0
- package/src/settings/settings-validation-error.ts +41 -0
- package/src/settings/status.ts +25 -0
- package/src/settings/suggest.ts +267 -0
- package/src/settings/system/kernel-settings.ts +74 -0
- package/src/settings/system/module-gate.ts +49 -0
- package/src/settings/testing/index.ts +7 -0
- package/src/settings/testing/settings-store-contract.ts +278 -0
- package/src/settings/timed-search.ts +56 -0
- package/src/settings/types.ts +42 -0
- package/src/settings/validate.ts +298 -0
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.respondWithSuggestions = respondWithSuggestions;
|
|
4
4
|
exports.resolveRouteOptions = resolveRouteOptions;
|
|
5
|
-
const
|
|
5
|
+
const autocomplete_limits_1 = require("../../discord/command/autocomplete-limits");
|
|
6
|
+
const route_key_1 = require("../../discord/command/route-key");
|
|
6
7
|
/**
|
|
7
8
|
* Serving option autocomplete. Kept beside the DSL because resolving *which*
|
|
8
9
|
* option is focused needs the same route table `createCommand` builds — the
|
|
9
10
|
* dispatcher only decides that an interaction is an autocomplete request.
|
|
10
11
|
*/
|
|
11
|
-
/** Discord refuses more than this many suggestions in one response. */
|
|
12
|
-
const MAX_CHOICES = 25;
|
|
13
12
|
/**
|
|
14
13
|
* Answer a focused option's autocomplete request.
|
|
15
14
|
*
|
|
@@ -40,12 +39,13 @@ async function respondWithSuggestions(interaction, options) {
|
|
|
40
39
|
await interaction.respond(truncate(choices));
|
|
41
40
|
}
|
|
42
41
|
/**
|
|
43
|
-
* Discord rejects the whole response when it carries more than
|
|
42
|
+
* Discord rejects the whole response when it carries more than
|
|
43
|
+
* {@link MAX_AUTOCOMPLETE_CHOICES} choices, so a
|
|
44
44
|
* resolver returning more is trimmed rather than failing outright — a partial
|
|
45
45
|
* list is still useful to the user typing.
|
|
46
46
|
*/
|
|
47
47
|
function truncate(choices) {
|
|
48
|
-
return choices.slice(0,
|
|
48
|
+
return choices.slice(0, autocomplete_limits_1.MAX_AUTOCOMPLETE_CHOICES);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* The options a given autocomplete interaction applies to: the focused option
|
|
@@ -60,6 +60,6 @@ function resolveRouteOptions(interaction, routes, flatOptions) {
|
|
|
60
60
|
if (name === null) {
|
|
61
61
|
return {};
|
|
62
62
|
}
|
|
63
|
-
return routes.get((0,
|
|
63
|
+
return routes.get((0, route_key_1.routeKey)(group, name))?.options ?? {};
|
|
64
64
|
}
|
|
65
65
|
//# sourceMappingURL=autocomplete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/discord/command/autocomplete.ts"],"names":[],"mappings":";;AAqBA,wDAyBC;
|
|
1
|
+
{"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/discord/command/autocomplete.ts"],"names":[],"mappings":";;AAqBA,wDAyBC;AAgBD,kDAcC;AA3ED,+EAAiF;AAGjF,2DAAuD;AAGvD;;;;GAIG;AAEH;;;;;;;GAOG;AACI,KAAK,UAAU,sBAAsB,CAC3C,WAAoC,EACpC,OAAgB;IAEhB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,EAAE,YAAY,CAAC;IAEtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO;IACR,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,+EAA+E;IAC/E,IAAI,OAA0B,CAAC;IAC/B,IAAI,CAAC;QACJ,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC;IACb,CAAC;IAED,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,OAA0B;IAC3C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,8CAAwB,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAClC,WAAoC,EACpC,MAAuC,EACvC,WAA2B;IAE3B,IAAI,WAAW,EAAE,CAAC;QACjB,OAAO,WAAW,CAAC;IACpB,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAA,oBAAQ,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CommandInteraction } from "discord.js";
|
|
2
|
+
import type { Presenter } from "../../discord/presenter";
|
|
3
|
+
import type { Locale } from "../../i18n/locale";
|
|
4
|
+
import type { TranslationParams, Translator } from "../../i18n/translator";
|
|
5
|
+
import type { Logger } from "../../logger";
|
|
6
|
+
/**
|
|
7
|
+
* What every command handler's context offers, whatever kind of command it
|
|
8
|
+
* serves: the reply language, a translate helper bound to it, and responders
|
|
9
|
+
* that route through the injected {@link Presenter}.
|
|
10
|
+
*/
|
|
11
|
+
export interface CommandResponders {
|
|
12
|
+
/** Reply language: user's client locale → guild locale → configured default. */
|
|
13
|
+
readonly locale: Locale;
|
|
14
|
+
/** Translate a catalog key for this interaction's locale. */
|
|
15
|
+
t(key: string, params?: TranslationParams): string;
|
|
16
|
+
confirm(message: string): Promise<void>;
|
|
17
|
+
error(message: string): Promise<void>;
|
|
18
|
+
deny(message: string): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
/** Bind the shared responders to one interaction, its locale and its visibility. */
|
|
21
|
+
export declare function createCommandResponders(interaction: CommandInteraction, locale: Locale, ephemeral: boolean, deps: {
|
|
22
|
+
readonly presenter: Presenter;
|
|
23
|
+
readonly logger: Logger;
|
|
24
|
+
readonly translator: Translator;
|
|
25
|
+
}): CommandResponders;
|
|
26
|
+
//# sourceMappingURL=command-responders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-responders.d.ts","sourceRoot":"","sources":["../../../src/discord/command/command-responders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC;IACnD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC/F,iBAAiB,CAUnB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCommandResponders = createCommandResponders;
|
|
4
|
+
const send_embed_1 = require("../../discord/command/send-embed");
|
|
5
|
+
/** Bind the shared responders to one interaction, its locale and its visibility. */
|
|
6
|
+
function createCommandResponders(interaction, locale, ephemeral, deps) {
|
|
7
|
+
const { presenter, logger, translator } = deps;
|
|
8
|
+
return {
|
|
9
|
+
locale,
|
|
10
|
+
t: (key, params) => translator.translate(locale, key, params),
|
|
11
|
+
confirm: (message) => (0, send_embed_1.sendEmbed)(interaction, presenter.confirmation(message, locale), ephemeral, logger),
|
|
12
|
+
error: (message) => (0, send_embed_1.sendEmbed)(interaction, presenter.error(message, locale), ephemeral, logger),
|
|
13
|
+
deny: (message) => (0, send_embed_1.sendEmbed)(interaction, presenter.denial(message, locale), ephemeral, logger),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=command-responders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-responders.js","sourceRoot":"","sources":["../../../src/discord/command/command-responders.ts"],"names":[],"mappings":";;AAuBA,0DAeC;AArCD,6DAAyD;AAqBzD,oFAAoF;AACpF,SAAgB,uBAAuB,CACtC,WAA+B,EAC/B,MAAc,EACd,SAAkB,EAClB,IAAiG;IAEjG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC/C,OAAO;QACN,MAAM;QACN,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;QAC7D,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACpB,IAAA,sBAAS,EAAC,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC;QACnF,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,sBAAS,EAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC;QAC/F,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,sBAAS,EAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC;KAC/F,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ChatInputCommandInteraction, EmbedBuilder } from "discord.js";
|
|
2
|
+
import { type CommandResponders } from "../../discord/command/command-responders";
|
|
2
3
|
import type { Options, Values } from "../../discord/command/options";
|
|
3
4
|
import type { Presenter } from "../../discord/presenter";
|
|
4
|
-
import {
|
|
5
|
+
import type { Locale } from "../../i18n/locale";
|
|
6
|
+
import type { Translator } from "../../i18n/translator";
|
|
5
7
|
import type { Logger } from "../../logger";
|
|
6
8
|
/**
|
|
7
9
|
* The handler-facing surface of a dispatched subcommand: the raw interaction,
|
|
@@ -9,25 +11,14 @@ import type { Logger } from "../../logger";
|
|
|
9
11
|
* translate helper bound to it, and convenience responders that route through
|
|
10
12
|
* the injected {@link Presenter}.
|
|
11
13
|
*/
|
|
12
|
-
export interface Context<O extends Options> {
|
|
14
|
+
export interface Context<O extends Options> extends CommandResponders {
|
|
13
15
|
readonly interaction: ChatInputCommandInteraction;
|
|
14
16
|
readonly options: Values<O>;
|
|
15
|
-
/** Reply language: user's client locale → guild locale → configured default. */
|
|
16
|
-
readonly locale: Locale;
|
|
17
|
-
/** Translate a catalog key for this interaction's locale. */
|
|
18
|
-
t(key: string, params?: TranslationParams): string;
|
|
19
17
|
reply(embed: EmbedBuilder): Promise<void>;
|
|
20
|
-
confirm(message: string): Promise<void>;
|
|
21
|
-
error(message: string): Promise<void>;
|
|
22
|
-
deny(message: string): Promise<void>;
|
|
23
18
|
}
|
|
24
19
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* must not escape a handler and reach the client's unhandled `error` event,
|
|
28
|
-
* which would crash the process. Visibility on a deferred interaction is fixed
|
|
29
|
-
* at deferReply time, so editReply carries no flags.
|
|
20
|
+
* @param locale - the reply language the pipeline already resolved (through
|
|
21
|
+
* the bot's `LocaleResolver`); omitted, the interaction's own locales are used.
|
|
30
22
|
*/
|
|
31
|
-
export declare function
|
|
32
|
-
export declare function createContext<O extends Options>(interaction: ChatInputCommandInteraction, options: Values<O>, ephemeral: boolean, presenter: Presenter, logger: Logger, translator: Translator): Context<O>;
|
|
23
|
+
export declare function createContext<O extends Options>(interaction: ChatInputCommandInteraction, options: Values<O>, ephemeral: boolean, presenter: Presenter, logger: Logger, translator: Translator, locale?: Locale): Context<O>;
|
|
33
24
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/discord/command/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/discord/command/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EACN,KAAK,iBAAiB,EAEtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,OAAO,CAAE,SAAQ,iBAAiB;IACpE,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,EAC9C,WAAW,EAAE,2BAA2B,EACxC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,MAAmD,GACzD,OAAO,CAAC,CAAC,CAAC,CAOZ"}
|
|
@@ -1,48 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sendEmbed = sendEmbed;
|
|
4
3
|
exports.createContext = createContext;
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const command_responders_1 = require("../../discord/command/command-responders");
|
|
5
|
+
const send_embed_1 = require("../../discord/command/send-embed");
|
|
6
|
+
const interaction_locale_1 = require("../../discord/interaction/interaction-locale");
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* must not escape a handler and reach the client's unhandled `error` event,
|
|
11
|
-
* which would crash the process. Visibility on a deferred interaction is fixed
|
|
12
|
-
* at deferReply time, so editReply carries no flags.
|
|
8
|
+
* @param locale - the reply language the pipeline already resolved (through
|
|
9
|
+
* the bot's `LocaleResolver`); omitted, the interaction's own locales are used.
|
|
13
10
|
*/
|
|
14
|
-
|
|
15
|
-
const flags = ephemeral ? discord_js_1.MessageFlags.Ephemeral : undefined;
|
|
16
|
-
try {
|
|
17
|
-
if (interaction.deferred) {
|
|
18
|
-
await interaction.editReply({ embeds: [embed] });
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (interaction.replied) {
|
|
22
|
-
await interaction.followUp({ embeds: [embed], flags });
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
await interaction.reply({ embeds: [embed], flags });
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
logger.error({
|
|
29
|
-
commandName: interaction.commandName,
|
|
30
|
-
interactionId: interaction.id,
|
|
31
|
-
err: error instanceof Error ? error.message : String(error),
|
|
32
|
-
}, "Failed to deliver interaction response");
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function createContext(interaction, options, ephemeral, presenter, logger, translator) {
|
|
36
|
-
const locale = (0, i18n_1.resolveLocale)([interaction.locale, interaction.guildLocale], translator.defaultLocale);
|
|
11
|
+
function createContext(interaction, options, ephemeral, presenter, logger, translator, locale = (0, interaction_locale_1.interactionLocale)(interaction, translator)) {
|
|
37
12
|
return {
|
|
13
|
+
...(0, command_responders_1.createCommandResponders)(interaction, locale, ephemeral, { presenter, logger, translator }),
|
|
38
14
|
interaction,
|
|
39
15
|
options,
|
|
40
|
-
|
|
41
|
-
t: (key, params) => translator.translate(locale, key, params),
|
|
42
|
-
reply: (embed) => sendEmbed(interaction, embed, ephemeral, logger),
|
|
43
|
-
confirm: (message) => sendEmbed(interaction, presenter.confirmation(message, locale), ephemeral, logger),
|
|
44
|
-
error: (message) => sendEmbed(interaction, presenter.error(message, locale), ephemeral, logger),
|
|
45
|
-
deny: (message) => sendEmbed(interaction, presenter.denial(message, locale), ephemeral, logger),
|
|
16
|
+
reply: (embed) => (0, send_embed_1.sendEmbed)(interaction, embed, ephemeral, logger),
|
|
46
17
|
};
|
|
47
18
|
}
|
|
48
19
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/discord/command/context.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/discord/command/context.ts"],"names":[],"mappings":";;AA6BA,sCAeC;AA3CD,6EAG8C;AAE9C,6DAAyD;AACzD,iFAA6E;AAkB7E;;;GAGG;AACH,SAAgB,aAAa,CAC5B,WAAwC,EACxC,OAAkB,EAClB,SAAkB,EAClB,SAAoB,EACpB,MAAc,EACd,UAAsB,EACtB,SAAiB,IAAA,sCAAiB,EAAC,WAAW,EAAE,UAAU,CAAC;IAE3D,OAAO;QACN,GAAG,IAAA,4CAAuB,EAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC7F,WAAW;QACX,OAAO;QACP,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,sBAAS,EAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC;KAClE,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Clock } from "../../clock";
|
|
2
2
|
import type { Guard } from "../../discord/command/guard";
|
|
3
|
-
import type { LocalizedText } from "../../i18n";
|
|
3
|
+
import type { LocalizedText } from "../../i18n/translator";
|
|
4
4
|
/** How a cooldown window is shared between callers. */
|
|
5
5
|
export type CooldownScope = "user" | "guild" | "global";
|
|
6
6
|
export interface CooldownOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cooldown-guard.d.ts","sourceRoot":"","sources":["../../../src/discord/command/cooldown-guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cooldown-guard.d.ts","sourceRoot":"","sources":["../../../src/discord/command/cooldown-guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,uDAAuD;AACvD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,eAAe;IAC/B,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,aAAa,CAAC;IACjD,wDAAwD;IACxD,KAAK,CAAC,EAAE,KAAK,CAAC;CACd;AAsBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,KAAK,CAoBnE"}
|
|
@@ -4,7 +4,7 @@ import type { Guard } from "../../discord/command/guard";
|
|
|
4
4
|
import type { Options } from "../../discord/command/options";
|
|
5
5
|
import type { SlashCommand } from "../../discord/command/types";
|
|
6
6
|
import { type PermissionBit } from "../../discord/permissions";
|
|
7
|
-
import {
|
|
7
|
+
import type { LocalizedText } from "../../i18n/translator";
|
|
8
8
|
export interface SubcommandDef<O extends Options> {
|
|
9
9
|
description: string;
|
|
10
10
|
/** Translated names, keyed by Discord locale (e.g. `{ fr: "ajouter" }`). */
|
|
@@ -83,13 +83,6 @@ export interface CommandDef<O extends Options = Options> {
|
|
|
83
83
|
/** Grouped command: named subcommand groups. */
|
|
84
84
|
groups?: Record<string, GroupDef>;
|
|
85
85
|
}
|
|
86
|
-
/**
|
|
87
|
-
* The key a subcommand is stored and looked up under. Exported because dispatch
|
|
88
|
-
* and autocomplete must agree on it: if they ever built it differently, an
|
|
89
|
-
* autocomplete inside a group would silently resolve to no options instead of
|
|
90
|
-
* failing loudly.
|
|
91
|
-
*/
|
|
92
|
-
export declare function routeKey(group: string | null, name: string): string;
|
|
93
86
|
/**
|
|
94
87
|
* Build a {@link SlashCommand} from a declarative definition: it produces the
|
|
95
88
|
* discord.js builder *and* the routing/guard/error pipeline. The runtime
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-command.d.ts","sourceRoot":"","sources":["../../../src/discord/command/create-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,eAAe,EAIpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"create-command.d.ts","sourceRoot":"","sources":["../../../src/discord/command/create-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSubCommand = createSubCommand;
|
|
4
|
-
exports.routeKey = routeKey;
|
|
5
4
|
exports.createCommand = createCommand;
|
|
6
5
|
const discord_js_1 = require("discord.js");
|
|
7
6
|
const autocomplete_1 = require("../../discord/command/autocomplete");
|
|
8
7
|
const context_1 = require("../../discord/command/context");
|
|
8
|
+
const passes_guard_1 = require("../../discord/command/passes-guard");
|
|
9
|
+
const render_command_failure_1 = require("../../discord/command/render-command-failure");
|
|
10
|
+
const route_key_1 = require("../../discord/command/route-key");
|
|
9
11
|
const i18n_1 = require("../../discord/i18n");
|
|
12
|
+
const reply_locale_1 = require("../../discord/interaction/reply-locale");
|
|
10
13
|
const permissions_1 = require("../../discord/permissions");
|
|
11
|
-
const errors_1 = require("../../errors");
|
|
12
|
-
const i18n_2 = require("../../i18n");
|
|
13
14
|
function createSubCommand(def) {
|
|
14
15
|
return {
|
|
15
16
|
description: def.description,
|
|
@@ -23,19 +24,6 @@ function createSubCommand(def) {
|
|
|
23
24
|
invoke: (ctx) => def.handler(ctx),
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
|
-
/** Resolve the reply locale for an interaction handled outside `createContext`. */
|
|
27
|
-
function interactionLocale(interaction, runtime) {
|
|
28
|
-
return (0, i18n_2.resolveLocale)([interaction.locale, interaction.guildLocale], runtime.translator.defaultLocale);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* The key a subcommand is stored and looked up under. Exported because dispatch
|
|
32
|
-
* and autocomplete must agree on it: if they ever built it differently, an
|
|
33
|
-
* autocomplete inside a group would silently resolve to no options instead of
|
|
34
|
-
* failing loudly.
|
|
35
|
-
*/
|
|
36
|
-
function routeKey(group, name) {
|
|
37
|
-
return group ? `${group}/${name}` : name;
|
|
38
|
-
}
|
|
39
27
|
/**
|
|
40
28
|
* Apply the settings that only exist on the root command: localisations, the
|
|
41
29
|
* visibility filter and the context restriction.
|
|
@@ -86,24 +74,6 @@ function ephemeralReplyOptions(ephemeral) {
|
|
|
86
74
|
}
|
|
87
75
|
return {};
|
|
88
76
|
}
|
|
89
|
-
/** Run a guard if present; reply with a denial and return `false` when it fails. */
|
|
90
|
-
async function passesGuard(interaction, guard, runtime) {
|
|
91
|
-
if (!guard) {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
const result = await guard.check(interaction);
|
|
95
|
-
if (!result.ok) {
|
|
96
|
-
const locale = interactionLocale(interaction, runtime);
|
|
97
|
-
await interaction.reply({
|
|
98
|
-
embeds: [
|
|
99
|
-
runtime.presenter.denial(runtime.translator.resolve(locale, result.message), locale),
|
|
100
|
-
],
|
|
101
|
-
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
102
|
-
});
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
77
|
/** Read options, optionally defer, build the context and invoke the handler. */
|
|
108
78
|
async function executeRoute(interaction, route, label, runtime) {
|
|
109
79
|
const { presenter, logger, translator } = runtime;
|
|
@@ -112,15 +82,21 @@ async function executeRoute(interaction, route, label, runtime) {
|
|
|
112
82
|
if (route.defer) {
|
|
113
83
|
await interaction.deferReply(ephemeralReplyOptions(route.ephemeral));
|
|
114
84
|
}
|
|
115
|
-
const ctx = (0, context_1.createContext)(interaction, values, route.ephemeral, presenter, logger, translator);
|
|
85
|
+
const ctx = (0, context_1.createContext)(interaction, values, route.ephemeral, presenter, logger, translator, await (0, reply_locale_1.replyLocale)(interaction, runtime));
|
|
116
86
|
await route.invoke(ctx);
|
|
117
87
|
}
|
|
118
88
|
catch (error) {
|
|
119
|
-
await
|
|
89
|
+
await (0, render_command_failure_1.renderCommandFailure)(interaction, {
|
|
90
|
+
error,
|
|
91
|
+
ephemeral: route.ephemeral,
|
|
92
|
+
fallbackError: route.fallbackError,
|
|
93
|
+
logFields: { subcommand: label },
|
|
94
|
+
logMessage: "Command handler failed",
|
|
95
|
+
}, runtime);
|
|
120
96
|
}
|
|
121
97
|
}
|
|
122
98
|
async function dispatchFlat(interaction, root, runtime) {
|
|
123
|
-
if (!(await passesGuard(interaction, root.guard, runtime))) {
|
|
99
|
+
if (!(await (0, passes_guard_1.passesGuard)(interaction, root.guard, runtime))) {
|
|
124
100
|
return;
|
|
125
101
|
}
|
|
126
102
|
await executeRoute(interaction, root, interaction.commandName, runtime);
|
|
@@ -128,10 +104,10 @@ async function dispatchFlat(interaction, root, runtime) {
|
|
|
128
104
|
async function dispatchGrouped(interaction, routes, commandGuard, runtime) {
|
|
129
105
|
const group = interaction.options.getSubcommandGroup(false);
|
|
130
106
|
const name = interaction.options.getSubcommand();
|
|
131
|
-
const label = routeKey(group, name);
|
|
107
|
+
const label = (0, route_key_1.routeKey)(group, name);
|
|
132
108
|
const route = routes.get(label);
|
|
133
109
|
if (!route) {
|
|
134
|
-
const locale =
|
|
110
|
+
const locale = await (0, reply_locale_1.replyLocale)(interaction, runtime);
|
|
135
111
|
await interaction.reply({
|
|
136
112
|
embeds: [
|
|
137
113
|
runtime.presenter.error(runtime.translator.translate(locale, i18n_1.CORE_MESSAGES.unknownSubcommand), locale),
|
|
@@ -140,35 +116,11 @@ async function dispatchGrouped(interaction, routes, commandGuard, runtime) {
|
|
|
140
116
|
});
|
|
141
117
|
return;
|
|
142
118
|
}
|
|
143
|
-
if (!(await passesGuard(interaction, route.guard ?? commandGuard, runtime))) {
|
|
119
|
+
if (!(await (0, passes_guard_1.passesGuard)(interaction, route.guard ?? commandGuard, runtime))) {
|
|
144
120
|
return;
|
|
145
121
|
}
|
|
146
122
|
await executeRoute(interaction, route, label, runtime);
|
|
147
123
|
}
|
|
148
|
-
async function renderError(interaction, route, label, error, runtime) {
|
|
149
|
-
const { presenter, logger, translator } = runtime;
|
|
150
|
-
const locale = interactionLocale(interaction, runtime);
|
|
151
|
-
if (error instanceof errors_1.BusinessError) {
|
|
152
|
-
const text = error.translation
|
|
153
|
-
? translator.translate(locale, error.translation.key, error.translation.params)
|
|
154
|
-
: error.message;
|
|
155
|
-
const embed = error.severity === "warning"
|
|
156
|
-
? presenter.warning(text, locale)
|
|
157
|
-
: presenter.error(text, locale);
|
|
158
|
-
await (0, context_1.sendEmbed)(interaction, embed, route.ephemeral, logger);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
const ref = (0, errors_1.createIncidentRef)();
|
|
162
|
-
logger.error({
|
|
163
|
-
command: interaction.commandName,
|
|
164
|
-
subcommand: label,
|
|
165
|
-
userId: interaction.user.id,
|
|
166
|
-
ref,
|
|
167
|
-
err: error instanceof Error ? error.message : String(error),
|
|
168
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
169
|
-
}, "Command handler failed");
|
|
170
|
-
await (0, context_1.sendEmbed)(interaction, presenter.systemError(translator.resolve(locale, route.fallbackError ?? { key: i18n_1.CORE_MESSAGES.genericError }), ref, locale), route.ephemeral, logger);
|
|
171
|
-
}
|
|
172
124
|
/**
|
|
173
125
|
* Build a {@link SlashCommand} from a declarative definition: it produces the
|
|
174
126
|
* discord.js builder *and* the routing/guard/error pipeline. The runtime
|
|
@@ -225,7 +177,7 @@ function createCommand(def) {
|
|
|
225
177
|
return groupBuilder;
|
|
226
178
|
});
|
|
227
179
|
for (const [name, subDef] of Object.entries(group.subcommands)) {
|
|
228
|
-
routes.set(routeKey(groupName, name), subDef);
|
|
180
|
+
routes.set((0, route_key_1.routeKey)(groupName, name), subDef);
|
|
229
181
|
}
|
|
230
182
|
}
|
|
231
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-command.js","sourceRoot":"","sources":["../../../src/discord/command/create-command.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"create-command.js","sourceRoot":"","sources":["../../../src/discord/command/create-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type ContextMenuCommandInteraction, type LocalizationMap, type Message, type User } from "discord.js";
|
|
2
|
+
import { type CommandResponders } from "../../discord/command/command-responders";
|
|
2
3
|
import type { Guard } from "../../discord/command/guard";
|
|
3
4
|
import type { ContextMenuCommand } from "../../discord/command/types";
|
|
4
5
|
import { type PermissionBit } from "../../discord/permissions";
|
|
5
|
-
import
|
|
6
|
+
import type { LocalizedText } from "../../i18n/translator";
|
|
6
7
|
/**
|
|
7
8
|
* Context-menu commands: the entries a user reaches by right-clicking a member
|
|
8
9
|
* ("user" target) or a message ("message" target), under the Apps submenu.
|
|
@@ -18,17 +19,10 @@ export interface ContextMenuTarget {
|
|
|
18
19
|
readonly user: User;
|
|
19
20
|
readonly message: Message;
|
|
20
21
|
}
|
|
21
|
-
export interface ContextMenuContext<K extends keyof ContextMenuTarget> {
|
|
22
|
+
export interface ContextMenuContext<K extends keyof ContextMenuTarget> extends CommandResponders {
|
|
22
23
|
readonly interaction: ContextMenuCommandInteraction;
|
|
23
24
|
/** The right-clicked member or message. */
|
|
24
25
|
readonly target: ContextMenuTarget[K];
|
|
25
|
-
/** Reply language: user's client locale → guild locale → configured default. */
|
|
26
|
-
readonly locale: Locale;
|
|
27
|
-
/** Translate a catalog key for this interaction's locale. */
|
|
28
|
-
t(key: string, params?: TranslationParams): string;
|
|
29
|
-
confirm(message: string): Promise<void>;
|
|
30
|
-
error(message: string): Promise<void>;
|
|
31
|
-
deny(message: string): Promise<void>;
|
|
32
26
|
}
|
|
33
27
|
export interface ContextMenuCommandDef<K extends keyof ContextMenuTarget> {
|
|
34
28
|
/** Displayed verbatim in the context menu, so spaces and capitals are allowed. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-context-menu-command.d.ts","sourceRoot":"","sources":["../../../src/discord/command/create-context-menu-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,6BAA6B,
|
|
1
|
+
{"version":3,"file":"create-context-menu-command.d.ts","sourceRoot":"","sources":["../../../src/discord/command/create-context-menu-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,6BAA6B,EAElC,KAAK,eAAe,EACpB,KAAK,OAAO,EAEZ,KAAK,IAAI,EACT,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,KAAK,iBAAiB,EAEtB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElF,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;GASG;AAEH,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,iBAAiB,CAAE,SAAQ,iBAAiB;IAC/F,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC;IACpD,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,iBAAiB;IACvE,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,MAAM,EAAE,CAAC,CAAC;IACV,iBAAiB,CAAC,EAAE,eAAe,CAAC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,4EAA4E;IAC5E,wBAAwB,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AA6BD,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,iBAAiB,EACzE,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC3B,kBAAkB,CAqBpB"}
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createContextMenuCommand = createContextMenuCommand;
|
|
4
4
|
const discord_js_1 = require("discord.js");
|
|
5
|
+
const command_responders_1 = require("../../discord/command/command-responders");
|
|
5
6
|
const errors_1 = require("../../discord/command/errors");
|
|
6
|
-
const
|
|
7
|
+
const passes_guard_1 = require("../../discord/command/passes-guard");
|
|
8
|
+
const render_command_failure_1 = require("../../discord/command/render-command-failure");
|
|
9
|
+
const reply_locale_1 = require("../../discord/interaction/reply-locale");
|
|
7
10
|
const permissions_1 = require("../../discord/permissions");
|
|
8
|
-
const errors_2 = require("../../errors");
|
|
9
|
-
const i18n_2 = require("../../i18n");
|
|
10
11
|
const COMMAND_TYPES = {
|
|
11
12
|
user: discord_js_1.ApplicationCommandType.User,
|
|
12
13
|
message: discord_js_1.ApplicationCommandType.Message,
|
|
@@ -50,79 +51,27 @@ function createContextMenuCommand(def) {
|
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
53
|
async function dispatch(interaction, def, ephemeral, runtime) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (def.guard) {
|
|
56
|
-
const result = await def.guard.check(interaction);
|
|
57
|
-
if (!result.ok) {
|
|
58
|
-
await interaction.reply({
|
|
59
|
-
embeds: [presenter.denial(translator.resolve(locale, result.message), locale)],
|
|
60
|
-
flags: discord_js_1.MessageFlags.Ephemeral,
|
|
61
|
-
});
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
54
|
+
if (!(await (0, passes_guard_1.passesGuard)(interaction, def.guard, runtime))) {
|
|
55
|
+
return;
|
|
64
56
|
}
|
|
57
|
+
const locale = await (0, reply_locale_1.replyLocale)(interaction, runtime);
|
|
65
58
|
try {
|
|
66
59
|
if (def.defer) {
|
|
67
60
|
await interaction.deferReply(ephemeral ? { flags: discord_js_1.MessageFlags.Ephemeral } : {});
|
|
68
61
|
}
|
|
69
62
|
await def.handler({
|
|
63
|
+
...(0, command_responders_1.createCommandResponders)(interaction, locale, ephemeral, runtime),
|
|
70
64
|
interaction,
|
|
71
65
|
target: resolveTarget(interaction, def.target),
|
|
72
|
-
locale,
|
|
73
|
-
t: (key, params) => translator.translate(locale, key, params),
|
|
74
|
-
confirm: (message) => send(interaction, presenter.confirmation(message, locale), ephemeral, logger),
|
|
75
|
-
error: (message) => send(interaction, presenter.error(message, locale), ephemeral, logger),
|
|
76
|
-
deny: (message) => send(interaction, presenter.denial(message, locale), ephemeral, logger),
|
|
77
66
|
});
|
|
78
67
|
}
|
|
79
68
|
catch (error) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
: presenter.error(text, locale);
|
|
87
|
-
await send(interaction, embed, ephemeral, logger);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const ref = (0, errors_2.createIncidentRef)();
|
|
91
|
-
logger.error({
|
|
92
|
-
command: interaction.commandName,
|
|
93
|
-
userId: interaction.user.id,
|
|
94
|
-
ref,
|
|
95
|
-
err: error instanceof Error ? error.message : String(error),
|
|
96
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
97
|
-
}, "Context menu handler failed");
|
|
98
|
-
await send(interaction, presenter.systemError(translator.resolve(locale, def.fallbackError ?? { key: i18n_1.CORE_MESSAGES.genericError }), ref, locale), ephemeral, logger);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Deliver an embed whatever the interaction's lifecycle state, and never throw:
|
|
103
|
-
* a failed delivery (e.g. an expired interaction) must not escape into the
|
|
104
|
-
* client's unhandled `error` event. Mirrors the command pipeline's `sendEmbed`,
|
|
105
|
-
* which is typed for chat-input interactions only.
|
|
106
|
-
*/
|
|
107
|
-
async function send(interaction, embed, ephemeral, logger) {
|
|
108
|
-
const flags = ephemeral ? discord_js_1.MessageFlags.Ephemeral : undefined;
|
|
109
|
-
try {
|
|
110
|
-
if (interaction.deferred) {
|
|
111
|
-
await interaction.editReply({ embeds: [embed] });
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
if (interaction.replied) {
|
|
115
|
-
await interaction.followUp({ embeds: [embed], flags });
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
await interaction.reply({ embeds: [embed], flags });
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
logger.error({
|
|
122
|
-
commandName: interaction.commandName,
|
|
123
|
-
interactionId: interaction.id,
|
|
124
|
-
err: error instanceof Error ? error.message : String(error),
|
|
125
|
-
}, "Failed to deliver interaction response");
|
|
69
|
+
await (0, render_command_failure_1.renderCommandFailure)(interaction, {
|
|
70
|
+
error,
|
|
71
|
+
ephemeral,
|
|
72
|
+
fallbackError: def.fallbackError,
|
|
73
|
+
logMessage: "Context menu handler failed",
|
|
74
|
+
}, runtime);
|
|
126
75
|
}
|
|
127
76
|
}
|
|
128
77
|
//# sourceMappingURL=create-context-menu-command.js.map
|