@azurioh/discord-kernel 0.1.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/LICENSE +21 -0
- package/README.md +77 -0
- package/dist/authz/authorizer.d.ts +45 -0
- package/dist/authz/authorizer.d.ts.map +1 -0
- package/dist/authz/authorizer.js +31 -0
- package/dist/authz/authorizer.js.map +1 -0
- package/dist/authz/require-level-guard.d.ts +23 -0
- package/dist/authz/require-level-guard.d.ts.map +1 -0
- package/dist/authz/require-level-guard.js +37 -0
- package/dist/authz/require-level-guard.js.map +1 -0
- package/dist/clock.d.ts +13 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +13 -0
- package/dist/clock.js.map +1 -0
- package/dist/concurrency/keyed-queue.d.ts +18 -0
- package/dist/concurrency/keyed-queue.d.ts.map +1 -0
- package/dist/concurrency/keyed-queue.js +37 -0
- package/dist/concurrency/keyed-queue.js.map +1 -0
- package/dist/concurrency/run-with-concurrency.d.ts +15 -0
- package/dist/concurrency/run-with-concurrency.d.ts.map +1 -0
- package/dist/concurrency/run-with-concurrency.js +40 -0
- package/dist/concurrency/run-with-concurrency.js.map +1 -0
- package/dist/config/env.d.ts +17 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +49 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/errors.d.ts +14 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/errors.js +25 -0
- package/dist/config/errors.js.map +1 -0
- package/dist/datetime.d.ts +34 -0
- package/dist/datetime.d.ts.map +1 -0
- package/dist/datetime.js +188 -0
- package/dist/datetime.js.map +1 -0
- package/dist/discord/api-errors.d.ts +20 -0
- package/dist/discord/api-errors.d.ts.map +1 -0
- package/dist/discord/api-errors.js +90 -0
- package/dist/discord/api-errors.js.map +1 -0
- package/dist/discord/channel-exporter.d.ts +42 -0
- package/dist/discord/channel-exporter.d.ts.map +1 -0
- package/dist/discord/channel-exporter.js +3 -0
- package/dist/discord/channel-exporter.js.map +1 -0
- package/dist/discord/command/autocomplete-dispatcher.d.ts +26 -0
- package/dist/discord/command/autocomplete-dispatcher.d.ts.map +1 -0
- package/dist/discord/command/autocomplete-dispatcher.js +41 -0
- package/dist/discord/command/autocomplete-dispatcher.js.map +1 -0
- package/dist/discord/command/autocomplete.d.ts +18 -0
- package/dist/discord/command/autocomplete.d.ts.map +1 -0
- package/dist/discord/command/autocomplete.js +65 -0
- package/dist/discord/command/autocomplete.js.map +1 -0
- package/dist/discord/command/context.d.ts +33 -0
- package/dist/discord/command/context.d.ts.map +1 -0
- package/dist/discord/command/context.js +48 -0
- package/dist/discord/command/context.js.map +1 -0
- package/dist/discord/command/cooldown-guard.d.ts +25 -0
- package/dist/discord/command/cooldown-guard.d.ts.map +1 -0
- package/dist/discord/command/cooldown-guard.js +60 -0
- package/dist/discord/command/cooldown-guard.js.map +1 -0
- package/dist/discord/command/create-command.d.ts +100 -0
- package/dist/discord/command/create-command.d.ts.map +1 -0
- package/dist/discord/command/create-command.js +245 -0
- package/dist/discord/command/create-command.js.map +1 -0
- package/dist/discord/command/create-context-menu-command.d.ts +51 -0
- package/dist/discord/command/create-context-menu-command.d.ts.map +1 -0
- package/dist/discord/command/create-context-menu-command.js +128 -0
- package/dist/discord/command/create-context-menu-command.js.map +1 -0
- package/dist/discord/command/errors.d.ts +19 -0
- package/dist/discord/command/errors.d.ts.map +1 -0
- package/dist/discord/command/errors.js +27 -0
- package/dist/discord/command/errors.js.map +1 -0
- package/dist/discord/command/guard.d.ts +30 -0
- package/dist/discord/command/guard.d.ts.map +1 -0
- package/dist/discord/command/guard.js +34 -0
- package/dist/discord/command/guard.js.map +1 -0
- package/dist/discord/command/localization.d.ts +9 -0
- package/dist/discord/command/localization.d.ts.map +1 -0
- package/dist/discord/command/localization.js +13 -0
- package/dist/discord/command/localization.js.map +1 -0
- package/dist/discord/command/options.d.ts +113 -0
- package/dist/discord/command/options.d.ts.map +1 -0
- package/dist/discord/command/options.js +509 -0
- package/dist/discord/command/options.js.map +1 -0
- package/dist/discord/command/permission-guard.d.ts +21 -0
- package/dist/discord/command/permission-guard.d.ts.map +1 -0
- package/dist/discord/command/permission-guard.js +69 -0
- package/dist/discord/command/permission-guard.js.map +1 -0
- package/dist/discord/command/router.d.ts +48 -0
- package/dist/discord/command/router.d.ts.map +1 -0
- package/dist/discord/command/router.js +118 -0
- package/dist/discord/command/router.js.map +1 -0
- package/dist/discord/command/types.d.ts +51 -0
- package/dist/discord/command/types.d.ts.map +1 -0
- package/dist/discord/command/types.js +3 -0
- package/dist/discord/command/types.js.map +1 -0
- package/dist/discord/components/component-router.d.ts +116 -0
- package/dist/discord/components/component-router.d.ts.map +1 -0
- package/dist/discord/components/component-router.js +123 -0
- package/dist/discord/components/component-router.js.map +1 -0
- package/dist/discord/components/interactive-message/index.d.ts +3 -0
- package/dist/discord/components/interactive-message/index.d.ts.map +1 -0
- package/dist/discord/components/interactive-message/index.js +11 -0
- package/dist/discord/components/interactive-message/index.js.map +1 -0
- package/dist/discord/components/interactive-message/interactive-message-collector.d.ts +195 -0
- package/dist/discord/components/interactive-message/interactive-message-collector.d.ts.map +1 -0
- package/dist/discord/components/interactive-message/interactive-message-collector.js +151 -0
- package/dist/discord/components/interactive-message/interactive-message-collector.js.map +1 -0
- package/dist/discord/components/interactive-message/mount-interactive-message.d.ts +30 -0
- package/dist/discord/components/interactive-message/mount-interactive-message.d.ts.map +1 -0
- package/dist/discord/components/interactive-message/mount-interactive-message.js +44 -0
- package/dist/discord/components/interactive-message/mount-interactive-message.js.map +1 -0
- package/dist/discord/components/paginator/index.d.ts +5 -0
- package/dist/discord/components/paginator/index.d.ts.map +1 -0
- package/dist/discord/components/paginator/index.js +15 -0
- package/dist/discord/components/paginator/index.js.map +1 -0
- package/dist/discord/components/paginator/mount-paginator.d.ts +25 -0
- package/dist/discord/components/paginator/mount-paginator.d.ts.map +1 -0
- package/dist/discord/components/paginator/mount-paginator.js +41 -0
- package/dist/discord/components/paginator/mount-paginator.js.map +1 -0
- package/dist/discord/components/paginator/page-state.d.ts +21 -0
- package/dist/discord/components/paginator/page-state.d.ts.map +1 -0
- package/dist/discord/components/paginator/page-state.js +44 -0
- package/dist/discord/components/paginator/page-state.js.map +1 -0
- package/dist/discord/components/paginator/paginator-buttons.d.ts +17 -0
- package/dist/discord/components/paginator/paginator-buttons.d.ts.map +1 -0
- package/dist/discord/components/paginator/paginator-buttons.js +45 -0
- package/dist/discord/components/paginator/paginator-buttons.js.map +1 -0
- package/dist/discord/components/paginator/paginator-view.d.ts +26 -0
- package/dist/discord/components/paginator/paginator-view.d.ts.map +1 -0
- package/dist/discord/components/paginator/paginator-view.js +28 -0
- package/dist/discord/components/paginator/paginator-view.js.map +1 -0
- package/dist/discord/components/persistent-paginator.d.ts +47 -0
- package/dist/discord/components/persistent-paginator.d.ts.map +1 -0
- package/dist/discord/components/persistent-paginator.js +137 -0
- package/dist/discord/components/persistent-paginator.js.map +1 -0
- package/dist/discord/components/settings-editor/index.d.ts +7 -0
- package/dist/discord/components/settings-editor/index.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/index.js +22 -0
- package/dist/discord/components/settings-editor/index.js.map +1 -0
- package/dist/discord/components/settings-editor/mount-settings-editor.d.ts +140 -0
- package/dist/discord/components/settings-editor/mount-settings-editor.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/mount-settings-editor.js +344 -0
- package/dist/discord/components/settings-editor/mount-settings-editor.js.map +1 -0
- package/dist/discord/components/settings-editor/navigation.d.ts +49 -0
- package/dist/discord/components/settings-editor/navigation.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/navigation.js +39 -0
- package/dist/discord/components/settings-editor/navigation.js.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts +56 -0
- package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-card.view.js +284 -0
- package/dist/discord/components/settings-editor/settings-editor-card.view.js.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts +69 -0
- package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-field-modal.js +353 -0
- package/dist/discord/components/settings-editor/settings-editor-field-modal.js.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-fields.d.ts +216 -0
- package/dist/discord/components/settings-editor/settings-editor-fields.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor-fields.js +66 -0
- package/dist/discord/components/settings-editor/settings-editor-fields.js.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor.view.d.ts +303 -0
- package/dist/discord/components/settings-editor/settings-editor.view.d.ts.map +1 -0
- package/dist/discord/components/settings-editor/settings-editor.view.js +316 -0
- package/dist/discord/components/settings-editor/settings-editor.view.js.map +1 -0
- package/dist/discord/events/create-event.d.ts +5 -0
- package/dist/discord/events/create-event.d.ts.map +1 -0
- package/dist/discord/events/create-event.js +8 -0
- package/dist/discord/events/create-event.js.map +1 -0
- package/dist/discord/events/event-router.d.ts +16 -0
- package/dist/discord/events/event-router.d.ts.map +1 -0
- package/dist/discord/events/event-router.js +51 -0
- package/dist/discord/events/event-router.js.map +1 -0
- package/dist/discord/events/types.d.ts +16 -0
- package/dist/discord/events/types.d.ts.map +1 -0
- package/dist/discord/events/types.js +3 -0
- package/dist/discord/events/types.js.map +1 -0
- package/dist/discord/i18n.d.ts +58 -0
- package/dist/discord/i18n.d.ts.map +1 -0
- package/dist/discord/i18n.js +173 -0
- package/dist/discord/i18n.js.map +1 -0
- package/dist/discord/interaction/button.d.ts +39 -0
- package/dist/discord/interaction/button.d.ts.map +1 -0
- package/dist/discord/interaction/button.js +36 -0
- package/dist/discord/interaction/button.js.map +1 -0
- package/dist/discord/interaction/interaction-router.d.ts +21 -0
- package/dist/discord/interaction/interaction-router.d.ts.map +1 -0
- package/dist/discord/interaction/interaction-router.js +24 -0
- package/dist/discord/interaction/interaction-router.js.map +1 -0
- package/dist/discord/interaction/modal.d.ts +171 -0
- package/dist/discord/interaction/modal.d.ts.map +1 -0
- package/dist/discord/interaction/modal.js +264 -0
- package/dist/discord/interaction/modal.js.map +1 -0
- package/dist/discord/interaction/select-menu.d.ts +104 -0
- package/dist/discord/interaction/select-menu.d.ts.map +1 -0
- package/dist/discord/interaction/select-menu.js +126 -0
- package/dist/discord/interaction/select-menu.js.map +1 -0
- package/dist/discord/permissions.d.ts +32 -0
- package/dist/discord/permissions.d.ts.map +1 -0
- package/dist/discord/permissions.js +40 -0
- package/dist/discord/permissions.js.map +1 -0
- package/dist/discord/placeholder-registry-errors.d.ts +10 -0
- package/dist/discord/placeholder-registry-errors.d.ts.map +1 -0
- package/dist/discord/placeholder-registry-errors.js +18 -0
- package/dist/discord/placeholder-registry-errors.js.map +1 -0
- package/dist/discord/placeholder-registry.d.ts +53 -0
- package/dist/discord/placeholder-registry.d.ts.map +1 -0
- package/dist/discord/placeholder-registry.js +52 -0
- package/dist/discord/placeholder-registry.js.map +1 -0
- package/dist/discord/presenter.d.ts +26 -0
- package/dist/discord/presenter.d.ts.map +1 -0
- package/dist/discord/presenter.js +3 -0
- package/dist/discord/presenter.js.map +1 -0
- package/dist/discord/ui/card.d.ts +114 -0
- package/dist/discord/ui/card.d.ts.map +1 -0
- package/dist/discord/ui/card.js +162 -0
- package/dist/discord/ui/card.js.map +1 -0
- package/dist/discord/ui/color-input-errors.d.ts +12 -0
- package/dist/discord/ui/color-input-errors.d.ts.map +1 -0
- package/dist/discord/ui/color-input-errors.js +21 -0
- package/dist/discord/ui/color-input-errors.js.map +1 -0
- package/dist/discord/ui/color-input.d.ts +37 -0
- package/dist/discord/ui/color-input.d.ts.map +1 -0
- package/dist/discord/ui/color-input.js +166 -0
- package/dist/discord/ui/color-input.js.map +1 -0
- package/dist/discord/ui/colors.d.ts +44 -0
- package/dist/discord/ui/colors.d.ts.map +1 -0
- package/dist/discord/ui/colors.js +45 -0
- package/dist/discord/ui/colors.js.map +1 -0
- package/dist/discord/ui/embed.d.ts +16 -0
- package/dist/discord/ui/embed.d.ts.map +1 -0
- package/dist/discord/ui/embed.js +53 -0
- package/dist/discord/ui/embed.js.map +1 -0
- package/dist/discord/ui/message-attachments.d.ts +40 -0
- package/dist/discord/ui/message-attachments.d.ts.map +1 -0
- package/dist/discord/ui/message-attachments.js +27 -0
- package/dist/discord/ui/message-attachments.js.map +1 -0
- package/dist/errors/business-error.d.ts +41 -0
- package/dist/errors/business-error.d.ts.map +1 -0
- package/dist/errors/business-error.js +39 -0
- package/dist/errors/business-error.js.map +1 -0
- package/dist/errors/describe-error.d.ts +29 -0
- package/dist/errors/describe-error.d.ts.map +1 -0
- package/dist/errors/describe-error.js +49 -0
- package/dist/errors/describe-error.js.map +1 -0
- package/dist/errors/incident-ref.d.ts +7 -0
- package/dist/errors/incident-ref.d.ts.map +1 -0
- package/dist/errors/incident-ref.js +13 -0
- package/dist/errors/incident-ref.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +15 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/i18n/business-message.d.ts +14 -0
- package/dist/i18n/business-message.d.ts.map +1 -0
- package/dist/i18n/business-message.js +19 -0
- package/dist/i18n/business-message.js.map +1 -0
- package/dist/i18n/catalog.d.ts +27 -0
- package/dist/i18n/catalog.d.ts.map +1 -0
- package/dist/i18n/catalog.js +25 -0
- package/dist/i18n/catalog.js.map +1 -0
- package/dist/i18n/errors.d.ts +10 -0
- package/dist/i18n/errors.d.ts.map +1 -0
- package/dist/i18n/errors.js +18 -0
- package/dist/i18n/errors.js.map +1 -0
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +16 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locale.d.ts +22 -0
- package/dist/i18n/locale.d.ts.map +1 -0
- package/dist/i18n/locale.js +40 -0
- package/dist/i18n/locale.js.map +1 -0
- package/dist/i18n/translator.d.ts +35 -0
- package/dist/i18n/translator.d.ts.map +1 -0
- package/dist/i18n/translator.js +40 -0
- package/dist/i18n/translator.js.map +1 -0
- package/dist/logger.d.ts +28 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -0
- package/dist/module/module.d.ts +42 -0
- package/dist/module/module.d.ts.map +1 -0
- package/dist/module/module.js +3 -0
- package/dist/module/module.js.map +1 -0
- package/dist/persistence/database.d.ts +24 -0
- package/dist/persistence/database.d.ts.map +1 -0
- package/dist/persistence/database.js +3 -0
- package/dist/persistence/database.js.map +1 -0
- package/dist/resilience/retry.d.ts +36 -0
- package/dist/resilience/retry.d.ts.map +1 -0
- package/dist/resilience/retry.js +78 -0
- package/dist/resilience/retry.js.map +1 -0
- package/dist/scheduler/errors.d.ts +25 -0
- package/dist/scheduler/errors.d.ts.map +1 -0
- package/dist/scheduler/errors.js +45 -0
- package/dist/scheduler/errors.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +68 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/scheduler.js +162 -0
- package/dist/scheduler/scheduler.js.map +1 -0
- package/package.json +89 -0
- package/src/authz/authorizer.ts +76 -0
- package/src/authz/require-level-guard.ts +42 -0
- package/src/clock.ts +18 -0
- package/src/concurrency/keyed-queue.ts +50 -0
- package/src/concurrency/run-with-concurrency.ts +44 -0
- package/src/config/env.ts +58 -0
- package/src/config/errors.ts +21 -0
- package/src/datetime.ts +221 -0
- package/src/discord/api-errors.ts +91 -0
- package/src/discord/channel-exporter.ts +48 -0
- package/src/discord/command/autocomplete-dispatcher.ts +54 -0
- package/src/discord/command/autocomplete.ts +76 -0
- package/src/discord/command/context.ts +85 -0
- package/src/discord/command/cooldown-guard.ts +81 -0
- package/src/discord/command/create-command.ts +431 -0
- package/src/discord/command/create-context-menu-command.ts +227 -0
- package/src/discord/command/errors.ts +22 -0
- package/src/discord/command/guard.ts +54 -0
- package/src/discord/command/localization.ts +11 -0
- package/src/discord/command/options.ts +847 -0
- package/src/discord/command/permission-guard.ts +74 -0
- package/src/discord/command/router.ts +142 -0
- package/src/discord/command/types.ts +52 -0
- package/src/discord/components/component-router.ts +213 -0
- package/src/discord/components/interactive-message/index.ts +18 -0
- package/src/discord/components/interactive-message/interactive-message-collector.ts +374 -0
- package/src/discord/components/interactive-message/mount-interactive-message.ts +71 -0
- package/src/discord/components/paginator/index.ts +17 -0
- package/src/discord/components/paginator/mount-paginator.ts +69 -0
- package/src/discord/components/paginator/page-state.ts +45 -0
- package/src/discord/components/paginator/paginator-buttons.ts +60 -0
- package/src/discord/components/paginator/paginator-view.ts +61 -0
- package/src/discord/components/persistent-paginator.ts +197 -0
- package/src/discord/components/settings-editor/index.ts +41 -0
- package/src/discord/components/settings-editor/mount-settings-editor.ts +646 -0
- package/src/discord/components/settings-editor/navigation.ts +67 -0
- package/src/discord/components/settings-editor/settings-editor-card.view.ts +344 -0
- package/src/discord/components/settings-editor/settings-editor-field-modal.ts +538 -0
- package/src/discord/components/settings-editor/settings-editor-fields.ts +290 -0
- package/src/discord/components/settings-editor/settings-editor.view.ts +654 -0
- package/src/discord/events/create-event.ts +7 -0
- package/src/discord/events/event-router.ts +53 -0
- package/src/discord/events/types.ts +17 -0
- package/src/discord/i18n.ts +173 -0
- package/src/discord/interaction/button.ts +75 -0
- package/src/discord/interaction/interaction-router.ts +28 -0
- package/src/discord/interaction/modal.ts +505 -0
- package/src/discord/interaction/select-menu.ts +246 -0
- package/src/discord/permissions.ts +57 -0
- package/src/discord/placeholder-registry-errors.ts +11 -0
- package/src/discord/placeholder-registry.ts +77 -0
- package/src/discord/presenter.ts +26 -0
- package/src/discord/ui/card.ts +303 -0
- package/src/discord/ui/color-input-errors.ts +17 -0
- package/src/discord/ui/color-input.ts +179 -0
- package/src/discord/ui/colors.ts +58 -0
- package/src/discord/ui/embed.ts +64 -0
- package/src/discord/ui/message-attachments.ts +57 -0
- package/src/errors/business-error.ts +49 -0
- package/src/errors/describe-error.ts +73 -0
- package/src/errors/incident-ref.ts +10 -0
- package/src/errors/index.ts +12 -0
- package/src/i18n/business-message.ts +23 -0
- package/src/i18n/catalog.ts +41 -0
- package/src/i18n/errors.ts +11 -0
- package/src/i18n/index.ts +11 -0
- package/src/i18n/locale.ts +41 -0
- package/src/i18n/translator.ts +78 -0
- package/src/logger.ts +28 -0
- package/src/module/module.ts +42 -0
- package/src/persistence/database.ts +23 -0
- package/src/resilience/retry.ts +102 -0
- package/src/scheduler/errors.ts +40 -0
- package/src/scheduler/scheduler.ts +248 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ClientEvents } from "discord.js";
|
|
2
|
+
import type { DiscordEvent } from "../../discord/events/types";
|
|
3
|
+
/** Helper to declare a {@link DiscordEvent} with full type inference on `args`. */
|
|
4
|
+
export declare function createEvent<K extends keyof ClientEvents>(event: DiscordEvent<K>): DiscordEvent<K>;
|
|
5
|
+
//# sourceMappingURL=create-event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-event.d.ts","sourceRoot":"","sources":["../../../src/discord/events/create-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAEjG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEvent = createEvent;
|
|
4
|
+
/** Helper to declare a {@link DiscordEvent} with full type inference on `args`. */
|
|
5
|
+
function createEvent(event) {
|
|
6
|
+
return event;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=create-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-event.js","sourceRoot":"","sources":["../../../src/discord/events/create-event.ts"],"names":[],"mappings":";;AAIA,kCAEC;AAHD,mFAAmF;AACnF,SAAgB,WAAW,CAA+B,KAAsB;IAC/E,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Client } from "discord.js";
|
|
2
|
+
import type { DiscordEvent } from "../../discord/events/types";
|
|
3
|
+
import type { Logger } from "../../logger";
|
|
4
|
+
/**
|
|
5
|
+
* Binds registered {@link DiscordEvent}s to a client. This is the only place in
|
|
6
|
+
* the app that calls `client.on`/`client.once`.
|
|
7
|
+
*/
|
|
8
|
+
export declare class EventRouter {
|
|
9
|
+
private readonly logger;
|
|
10
|
+
private readonly events;
|
|
11
|
+
constructor(logger: Logger);
|
|
12
|
+
register(event: DiscordEvent): this;
|
|
13
|
+
registerAll(events: Iterable<DiscordEvent>): this;
|
|
14
|
+
bind(client: Client): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=event-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-router.d.ts","sourceRoot":"","sources":["../../../src/discord/events/event-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAmBvC;;;GAGG;AACH,qBAAa,WAAW;IAGX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAEhB,MAAM,EAAE,MAAM;IAE3C,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI;IAOjD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAU1B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventRouter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Wrap a handler so a thrown error is logged instead of escaping to the
|
|
6
|
+
* process-level `error` event: a failing handler must never take the bot down.
|
|
7
|
+
*/
|
|
8
|
+
function createEventListener(event, logger) {
|
|
9
|
+
return async (...args) => {
|
|
10
|
+
try {
|
|
11
|
+
await event.execute(...args);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
logger.error({ event: event.name, err: error instanceof Error ? error.message : String(error) }, "Event handler failed");
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Binds registered {@link DiscordEvent}s to a client. This is the only place in
|
|
20
|
+
* the app that calls `client.on`/`client.once`.
|
|
21
|
+
*/
|
|
22
|
+
class EventRouter {
|
|
23
|
+
logger;
|
|
24
|
+
events = [];
|
|
25
|
+
constructor(logger) {
|
|
26
|
+
this.logger = logger;
|
|
27
|
+
}
|
|
28
|
+
register(event) {
|
|
29
|
+
this.events.push(event);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
registerAll(events) {
|
|
33
|
+
for (const event of events) {
|
|
34
|
+
this.register(event);
|
|
35
|
+
}
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
bind(client) {
|
|
39
|
+
for (const event of this.events) {
|
|
40
|
+
const listener = createEventListener(event, this.logger);
|
|
41
|
+
if (event.once) {
|
|
42
|
+
client.once(event.name, listener);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
client.on(event.name, listener);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.EventRouter = EventRouter;
|
|
51
|
+
//# sourceMappingURL=event-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-router.js","sourceRoot":"","sources":["../../../src/discord/events/event-router.ts"],"names":[],"mappings":";;;AAIA;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAmB,EAAE,MAAc;IAC/D,OAAO,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;QACxB,IAAI,CAAC;YACJ,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CACX,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,sBAAsB,CACtB,CAAC;QACH,CAAC;IACF,CAAC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAa,WAAW;IAGM;IAFZ,MAAM,GAAmB,EAAE,CAAC;IAE7C,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,QAAQ,CAAC,KAAmB;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,WAAW,CAAC,MAA8B;QACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC,MAAc;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACzD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;QACF,CAAC;IACF,CAAC;CACD;AA3BD,kCA2BC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ClientEvents } from "discord.js";
|
|
2
|
+
/**
|
|
3
|
+
* A typed Discord gateway event handler. `name` is keyed to discord.js'
|
|
4
|
+
* {@link ClientEvents}, so `args` are inferred per event with no `any`.
|
|
5
|
+
*/
|
|
6
|
+
export interface DiscordEvent<K extends keyof ClientEvents = keyof ClientEvents> {
|
|
7
|
+
readonly name: K;
|
|
8
|
+
readonly once?: boolean;
|
|
9
|
+
execute(...args: ClientEvents[K]): Promise<void> | void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The listener actually handed to discord.js. It is type-erased over every event
|
|
13
|
+
* name because the router holds heterogeneous events in a single collection.
|
|
14
|
+
*/
|
|
15
|
+
export type EventListener = (...args: ClientEvents[keyof ClientEvents]) => Promise<void>;
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/discord/events/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,YAAY,GAAG,MAAM,YAAY;IAC9E,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACxD;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,MAAM,YAAY,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/discord/events/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Catalog } from "../i18n";
|
|
2
|
+
/** Catalog keys for the framework's own feedback, under the `core.` namespace. */
|
|
3
|
+
export declare const CORE_MESSAGES: {
|
|
4
|
+
readonly presenterSuccessTitle: "core.presenter.success-title";
|
|
5
|
+
readonly presenterWarningTitle: "core.presenter.warning-title";
|
|
6
|
+
readonly presenterErrorTitle: "core.presenter.error-title";
|
|
7
|
+
readonly presenterDenialTitle: "core.presenter.denial-title";
|
|
8
|
+
readonly presenterIncidentFooter: "core.presenter.incident-footer";
|
|
9
|
+
readonly unknownSubcommand: "core.command.unknown-subcommand";
|
|
10
|
+
readonly genericError: "core.command.generic-error";
|
|
11
|
+
readonly cooldownWait: "core.cooldown.wait";
|
|
12
|
+
readonly guardPermissionDenied: "core.guard.permission-denied";
|
|
13
|
+
readonly guardRoleDenied: "core.guard.role-denied";
|
|
14
|
+
readonly guardGuildOnly: "core.guard.guild-only";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Catalog keys for the settings editor's own chrome — the wording that is the
|
|
18
|
+
* same whatever is being edited.
|
|
19
|
+
*
|
|
20
|
+
* Deliberately *not* the wording of the settings themselves: a field's label and
|
|
21
|
+
* its one-line hint name something only the calling module knows about, so those
|
|
22
|
+
* stay in that module's catalog and reach the editor as keys.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SETTINGS_EDITOR_MESSAGES: {
|
|
25
|
+
readonly modalTitle: "core.settings-editor.modal-title";
|
|
26
|
+
readonly modalHelper: "core.settings-editor.modal-helper";
|
|
27
|
+
readonly modalUploadLabel: "core.settings-editor.modal-upload-label";
|
|
28
|
+
readonly modalUploadHelper: "core.settings-editor.modal-upload-helper";
|
|
29
|
+
readonly modalImageUrlLabel: "core.settings-editor.modal-image-url-label";
|
|
30
|
+
readonly modalImageHelper: "core.settings-editor.modal-image-helper";
|
|
31
|
+
readonly modalImageHelperUploaded: "core.settings-editor.modal-image-helper-uploaded";
|
|
32
|
+
readonly fieldSaved: "core.settings-editor.field-saved";
|
|
33
|
+
readonly fieldCleared: "core.settings-editor.field-cleared";
|
|
34
|
+
readonly fieldUploaded: "core.settings-editor.field-uploaded";
|
|
35
|
+
readonly resetButton: "core.settings-editor.reset-button";
|
|
36
|
+
readonly resetConfirmTitle: "core.settings-editor.reset-confirm-title";
|
|
37
|
+
readonly resetConfirmDescription: "core.settings-editor.reset-confirm-description";
|
|
38
|
+
readonly resetConfirmButton: "core.settings-editor.reset-confirm-button";
|
|
39
|
+
readonly resetCancelButton: "core.settings-editor.reset-cancel-button";
|
|
40
|
+
readonly resetDone: "core.settings-editor.reset-done";
|
|
41
|
+
readonly resetCancelled: "core.settings-editor.reset-cancelled";
|
|
42
|
+
readonly backButton: "core.settings-editor.back-button";
|
|
43
|
+
/**
|
|
44
|
+
* A card screen's per-entry button: what selecting the entry from the old
|
|
45
|
+
* field menu used to do, now spelled on the button that replaces it. One
|
|
46
|
+
* wording for a field that opens a modal, another for one that descends a
|
|
47
|
+
* level — both generic enough that no card screen has ever needed its own.
|
|
48
|
+
*/
|
|
49
|
+
readonly editFieldButton: "core.settings-editor.edit-field-button";
|
|
50
|
+
readonly openLevelButton: "core.settings-editor.open-level-button";
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* The framework's own strings: presenter titles, the incident footer, dispatch
|
|
54
|
+
* fallbacks and the default cooldown notice. Registered by the composition root
|
|
55
|
+
* before any module catalog.
|
|
56
|
+
*/
|
|
57
|
+
export declare const CORE_CATALOG: Catalog;
|
|
58
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/discord/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,kFAAkF;AAClF,eAAO,MAAM,aAAa;;;;;;;;;;;;CAYhB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;IAmBpC;;;;;OAKG;;;CAGM,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,OAiH1B,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CORE_CATALOG = exports.SETTINGS_EDITOR_MESSAGES = exports.CORE_MESSAGES = void 0;
|
|
4
|
+
/** Catalog keys for the framework's own feedback, under the `core.` namespace. */
|
|
5
|
+
exports.CORE_MESSAGES = {
|
|
6
|
+
presenterSuccessTitle: "core.presenter.success-title",
|
|
7
|
+
presenterWarningTitle: "core.presenter.warning-title",
|
|
8
|
+
presenterErrorTitle: "core.presenter.error-title",
|
|
9
|
+
presenterDenialTitle: "core.presenter.denial-title",
|
|
10
|
+
presenterIncidentFooter: "core.presenter.incident-footer",
|
|
11
|
+
unknownSubcommand: "core.command.unknown-subcommand",
|
|
12
|
+
genericError: "core.command.generic-error",
|
|
13
|
+
cooldownWait: "core.cooldown.wait",
|
|
14
|
+
guardPermissionDenied: "core.guard.permission-denied",
|
|
15
|
+
guardRoleDenied: "core.guard.role-denied",
|
|
16
|
+
guardGuildOnly: "core.guard.guild-only",
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Catalog keys for the settings editor's own chrome — the wording that is the
|
|
20
|
+
* same whatever is being edited.
|
|
21
|
+
*
|
|
22
|
+
* Deliberately *not* the wording of the settings themselves: a field's label and
|
|
23
|
+
* its one-line hint name something only the calling module knows about, so those
|
|
24
|
+
* stay in that module's catalog and reach the editor as keys.
|
|
25
|
+
*/
|
|
26
|
+
exports.SETTINGS_EDITOR_MESSAGES = {
|
|
27
|
+
modalTitle: "core.settings-editor.modal-title",
|
|
28
|
+
modalHelper: "core.settings-editor.modal-helper",
|
|
29
|
+
modalUploadLabel: "core.settings-editor.modal-upload-label",
|
|
30
|
+
modalUploadHelper: "core.settings-editor.modal-upload-helper",
|
|
31
|
+
modalImageUrlLabel: "core.settings-editor.modal-image-url-label",
|
|
32
|
+
modalImageHelper: "core.settings-editor.modal-image-helper",
|
|
33
|
+
modalImageHelperUploaded: "core.settings-editor.modal-image-helper-uploaded",
|
|
34
|
+
fieldSaved: "core.settings-editor.field-saved",
|
|
35
|
+
fieldCleared: "core.settings-editor.field-cleared",
|
|
36
|
+
fieldUploaded: "core.settings-editor.field-uploaded",
|
|
37
|
+
resetButton: "core.settings-editor.reset-button",
|
|
38
|
+
resetConfirmTitle: "core.settings-editor.reset-confirm-title",
|
|
39
|
+
resetConfirmDescription: "core.settings-editor.reset-confirm-description",
|
|
40
|
+
resetConfirmButton: "core.settings-editor.reset-confirm-button",
|
|
41
|
+
resetCancelButton: "core.settings-editor.reset-cancel-button",
|
|
42
|
+
resetDone: "core.settings-editor.reset-done",
|
|
43
|
+
resetCancelled: "core.settings-editor.reset-cancelled",
|
|
44
|
+
backButton: "core.settings-editor.back-button",
|
|
45
|
+
/**
|
|
46
|
+
* A card screen's per-entry button: what selecting the entry from the old
|
|
47
|
+
* field menu used to do, now spelled on the button that replaces it. One
|
|
48
|
+
* wording for a field that opens a modal, another for one that descends a
|
|
49
|
+
* level — both generic enough that no card screen has ever needed its own.
|
|
50
|
+
*/
|
|
51
|
+
editFieldButton: "core.settings-editor.edit-field-button",
|
|
52
|
+
openLevelButton: "core.settings-editor.open-level-button",
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* The framework's own strings: presenter titles, the incident footer, dispatch
|
|
56
|
+
* fallbacks and the default cooldown notice. Registered by the composition root
|
|
57
|
+
* before any module catalog.
|
|
58
|
+
*/
|
|
59
|
+
exports.CORE_CATALOG = {
|
|
60
|
+
[exports.CORE_MESSAGES.presenterSuccessTitle]: { en: "Success", fr: "Succès" },
|
|
61
|
+
[exports.CORE_MESSAGES.presenterWarningTitle]: { en: "Warning", fr: "Avertissement" },
|
|
62
|
+
[exports.CORE_MESSAGES.presenterErrorTitle]: { en: "Error", fr: "Erreur" },
|
|
63
|
+
[exports.CORE_MESSAGES.presenterDenialTitle]: { en: "Access denied", fr: "Accès refusé" },
|
|
64
|
+
[exports.CORE_MESSAGES.presenterIncidentFooter]: {
|
|
65
|
+
en: "Ref: {reference} · contact an admin if this persists",
|
|
66
|
+
fr: "Réf : {reference} · contactez un admin si le problème persiste",
|
|
67
|
+
},
|
|
68
|
+
[exports.CORE_MESSAGES.unknownSubcommand]: {
|
|
69
|
+
en: "Unknown subcommand.",
|
|
70
|
+
fr: "Sous-commande inconnue.",
|
|
71
|
+
},
|
|
72
|
+
[exports.CORE_MESSAGES.genericError]: {
|
|
73
|
+
en: "Something went wrong.",
|
|
74
|
+
fr: "Une erreur est survenue.",
|
|
75
|
+
},
|
|
76
|
+
[exports.CORE_MESSAGES.cooldownWait]: {
|
|
77
|
+
en: "Slow down — try again in {seconds}s.",
|
|
78
|
+
fr: "Doucement — réessayez dans {seconds}s.",
|
|
79
|
+
},
|
|
80
|
+
[exports.CORE_MESSAGES.guardPermissionDenied]: {
|
|
81
|
+
en: "You do not have permission to use this command. Missing: {missing}.",
|
|
82
|
+
fr: "Vous n'avez pas la permission d'utiliser cette commande. Manquant : {missing}.",
|
|
83
|
+
},
|
|
84
|
+
[exports.CORE_MESSAGES.guardRoleDenied]: {
|
|
85
|
+
en: "You do not have the role required to use this command.",
|
|
86
|
+
fr: "Vous n'avez pas le rôle requis pour utiliser cette commande.",
|
|
87
|
+
},
|
|
88
|
+
[exports.CORE_MESSAGES.guardGuildOnly]: {
|
|
89
|
+
en: "This command can only be used in a server.",
|
|
90
|
+
fr: "Cette commande ne peut être utilisée que sur un serveur.",
|
|
91
|
+
},
|
|
92
|
+
[exports.SETTINGS_EDITOR_MESSAGES.modalTitle]: {
|
|
93
|
+
en: "Edit: {field}",
|
|
94
|
+
fr: "Modifier : {field}",
|
|
95
|
+
},
|
|
96
|
+
[exports.SETTINGS_EDITOR_MESSAGES.modalHelper]: {
|
|
97
|
+
en: "Leave empty to clear your customisation and go back to the default.",
|
|
98
|
+
fr: "Laisse vide pour effacer ta personnalisation et revenir à la valeur par défaut.",
|
|
99
|
+
},
|
|
100
|
+
[exports.SETTINGS_EDITOR_MESSAGES.modalUploadLabel]: {
|
|
101
|
+
en: "Upload an image",
|
|
102
|
+
fr: "Envoyer une image",
|
|
103
|
+
},
|
|
104
|
+
[exports.SETTINGS_EDITOR_MESSAGES.modalUploadHelper]: {
|
|
105
|
+
en: "PNG, JPEG, GIF or WebP, up to {max} MiB. An upload wins over the address below.",
|
|
106
|
+
fr: "PNG, JPEG, GIF ou WebP, jusqu'à {max} Mio. Un envoi l'emporte sur l'adresse ci-dessous.",
|
|
107
|
+
},
|
|
108
|
+
[exports.SETTINGS_EDITOR_MESSAGES.modalImageUrlLabel]: {
|
|
109
|
+
en: "…or an image address",
|
|
110
|
+
fr: "…ou une adresse d'image",
|
|
111
|
+
},
|
|
112
|
+
[exports.SETTINGS_EDITOR_MESSAGES.modalImageHelper]: {
|
|
113
|
+
en: "An http(s) address. Leave both empty to restore the default.",
|
|
114
|
+
fr: "Une adresse http(s). Laisse les deux vides pour revenir au défaut.",
|
|
115
|
+
},
|
|
116
|
+
[exports.SETTINGS_EDITOR_MESSAGES.modalImageHelperUploaded]: {
|
|
117
|
+
en: "An image is uploaded; it cannot be shown here. Empty both to restore the default.",
|
|
118
|
+
fr: "Une image est envoyée ; impossible de la réafficher. Vide les deux pour le défaut.",
|
|
119
|
+
},
|
|
120
|
+
[exports.SETTINGS_EDITOR_MESSAGES.fieldSaved]: {
|
|
121
|
+
en: "✅ {field} updated.",
|
|
122
|
+
fr: "✅ {field} mis à jour.",
|
|
123
|
+
},
|
|
124
|
+
[exports.SETTINGS_EDITOR_MESSAGES.fieldCleared]: {
|
|
125
|
+
en: "✅ {field} cleared — the default is used again.",
|
|
126
|
+
fr: "✅ {field} effacé — la valeur par défaut est de nouveau utilisée.",
|
|
127
|
+
},
|
|
128
|
+
[exports.SETTINGS_EDITOR_MESSAGES.fieldUploaded]: {
|
|
129
|
+
en: "✅ {field} updated with your upload.",
|
|
130
|
+
fr: "✅ {field} mis à jour avec ton envoi.",
|
|
131
|
+
},
|
|
132
|
+
[exports.SETTINGS_EDITOR_MESSAGES.resetButton]: {
|
|
133
|
+
en: "Reset everything",
|
|
134
|
+
fr: "Tout réinitialiser",
|
|
135
|
+
},
|
|
136
|
+
[exports.SETTINGS_EDITOR_MESSAGES.resetConfirmTitle]: {
|
|
137
|
+
en: "Reset every field?",
|
|
138
|
+
fr: "Réinitialiser tous les champs ?",
|
|
139
|
+
},
|
|
140
|
+
[exports.SETTINGS_EDITOR_MESSAGES.resetConfirmDescription]: {
|
|
141
|
+
en: "Every field goes back to its default. An uploaded image is not merely unset — its file is deleted for good and cannot be recovered. The preview below is what you are about to lose.",
|
|
142
|
+
fr: "Chaque champ revient à sa valeur par défaut. Une image envoyée n'est pas simplement retirée : le fichier est supprimé définitivement et ne pourra pas être récupéré. L'aperçu ci-dessous est ce que tu es sur le point de perdre.",
|
|
143
|
+
},
|
|
144
|
+
[exports.SETTINGS_EDITOR_MESSAGES.resetConfirmButton]: {
|
|
145
|
+
en: "Reset for good",
|
|
146
|
+
fr: "Réinitialiser définitivement",
|
|
147
|
+
},
|
|
148
|
+
[exports.SETTINGS_EDITOR_MESSAGES.resetCancelButton]: {
|
|
149
|
+
en: "Cancel",
|
|
150
|
+
fr: "Annuler",
|
|
151
|
+
},
|
|
152
|
+
[exports.SETTINGS_EDITOR_MESSAGES.resetDone]: {
|
|
153
|
+
en: "✅ Every field is back to its default.",
|
|
154
|
+
fr: "✅ Tous les champs sont revenus à leur valeur par défaut.",
|
|
155
|
+
},
|
|
156
|
+
[exports.SETTINGS_EDITOR_MESSAGES.resetCancelled]: {
|
|
157
|
+
en: "Nothing was reset. Your customisation is untouched.",
|
|
158
|
+
fr: "Rien n'a été réinitialisé. Ta personnalisation est intacte.",
|
|
159
|
+
},
|
|
160
|
+
[exports.SETTINGS_EDITOR_MESSAGES.backButton]: {
|
|
161
|
+
en: "Back",
|
|
162
|
+
fr: "Retour",
|
|
163
|
+
},
|
|
164
|
+
[exports.SETTINGS_EDITOR_MESSAGES.editFieldButton]: {
|
|
165
|
+
en: "Edit",
|
|
166
|
+
fr: "Modifier",
|
|
167
|
+
},
|
|
168
|
+
[exports.SETTINGS_EDITOR_MESSAGES.openLevelButton]: {
|
|
169
|
+
en: "Open",
|
|
170
|
+
fr: "Ouvrir",
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/discord/i18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ActionRowBuilder, ButtonBuilder, type ButtonInteraction } from "discord.js";
|
|
2
|
+
export type ButtonStyleName = "primary" | "secondary" | "success" | "danger";
|
|
3
|
+
/**
|
|
4
|
+
* Interaction context handed to a button's `onClick`, mirroring the command
|
|
5
|
+
* {@link import("../../discord/command/context").Context}: it exposes the
|
|
6
|
+
* triggering interaction, the current state, and an `update` that re-renders the
|
|
7
|
+
* message with the next state.
|
|
8
|
+
*/
|
|
9
|
+
export interface ComponentContext<S> {
|
|
10
|
+
readonly interaction: ButtonInteraction;
|
|
11
|
+
readonly state: S;
|
|
12
|
+
update(next: S): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export interface ButtonDef<S> {
|
|
15
|
+
id: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
emoji?: string;
|
|
18
|
+
style?: ButtonStyleName;
|
|
19
|
+
disabled?: (state: S) => boolean;
|
|
20
|
+
onClick?: (ctx: ComponentContext<S>) => Promise<void> | void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Type-erased compiled button: knows how to render itself for a given state
|
|
24
|
+
* (`apply`) and how to react to a click (`onClick`) — the component analogue of
|
|
25
|
+
* a compiled subcommand. A button is *behaviour*, not a passive widget, which is
|
|
26
|
+
* why it lives in the interaction layer rather than a UI/embed module.
|
|
27
|
+
*/
|
|
28
|
+
export interface Button<S> {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly onClick?: (ctx: ComponentContext<S>) => Promise<void> | void;
|
|
31
|
+
apply(state: S, forceDisabled?: boolean): ButtonBuilder;
|
|
32
|
+
}
|
|
33
|
+
/** Declare a button: a definition bundling construction (`apply`) and behaviour (`onClick`). */
|
|
34
|
+
export declare function createButton<S>(def: ButtonDef<S>): Button<S>;
|
|
35
|
+
/** Group buttons into a single action row, applying each against the current state. */
|
|
36
|
+
export declare function createActionRow<S>(buttons: Button<S>[], state: S, options?: {
|
|
37
|
+
disableAll?: boolean;
|
|
38
|
+
}): ActionRowBuilder<ButtonBuilder>;
|
|
39
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/discord/interaction/button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAe,MAAM,YAAY,CAAC;AAElG,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAS7E;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7D;AAED;;;;;GAKG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACtE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CACxD;AAED,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAiB5D;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EACpB,KAAK,EAAE,CAAC,EACR,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACpC,gBAAgB,CAAC,aAAa,CAAC,CAKjC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createButton = createButton;
|
|
4
|
+
exports.createActionRow = createActionRow;
|
|
5
|
+
const discord_js_1 = require("discord.js");
|
|
6
|
+
const BUTTON_STYLES = {
|
|
7
|
+
primary: discord_js_1.ButtonStyle.Primary,
|
|
8
|
+
secondary: discord_js_1.ButtonStyle.Secondary,
|
|
9
|
+
success: discord_js_1.ButtonStyle.Success,
|
|
10
|
+
danger: discord_js_1.ButtonStyle.Danger,
|
|
11
|
+
};
|
|
12
|
+
/** Declare a button: a definition bundling construction (`apply`) and behaviour (`onClick`). */
|
|
13
|
+
function createButton(def) {
|
|
14
|
+
const style = BUTTON_STYLES[def.style ?? "secondary"];
|
|
15
|
+
return {
|
|
16
|
+
id: def.id,
|
|
17
|
+
onClick: def.onClick,
|
|
18
|
+
apply(state, forceDisabled = false) {
|
|
19
|
+
const builder = new discord_js_1.ButtonBuilder().setCustomId(def.id).setStyle(style);
|
|
20
|
+
if (def.label !== undefined) {
|
|
21
|
+
builder.setLabel(def.label);
|
|
22
|
+
}
|
|
23
|
+
if (def.emoji !== undefined) {
|
|
24
|
+
builder.setEmoji(def.emoji);
|
|
25
|
+
}
|
|
26
|
+
builder.setDisabled(forceDisabled || (def.disabled?.(state) ?? false));
|
|
27
|
+
return builder;
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** Group buttons into a single action row, applying each against the current state. */
|
|
32
|
+
function createActionRow(buttons, state, options = {}) {
|
|
33
|
+
const disableAll = options.disableAll ?? false;
|
|
34
|
+
return new discord_js_1.ActionRowBuilder().addComponents(...buttons.map((entry) => entry.apply(state, disableAll)));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/discord/interaction/button.ts"],"names":[],"mappings":";;AA6CA,oCAiBC;AAGD,0CASC;AA1ED,2CAAkG;AAIlG,MAAM,aAAa,GAAyC;IAC3D,OAAO,EAAE,wBAAW,CAAC,OAAO;IAC5B,SAAS,EAAE,wBAAW,CAAC,SAAS;IAChC,OAAO,EAAE,wBAAW,CAAC,OAAO;IAC5B,MAAM,EAAE,wBAAW,CAAC,MAAM;CAC1B,CAAC;AAmCF,gGAAgG;AAChG,SAAgB,YAAY,CAAI,GAAiB;IAChD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC;IACtD,OAAO;QACN,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,KAAK;YACjC,MAAM,OAAO,GAAG,IAAI,0BAAa,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxE,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YACvE,OAAO,OAAO,CAAC;QAChB,CAAC;KACD,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,SAAgB,eAAe,CAC9B,OAAoB,EACpB,KAAQ,EACR,UAAoC,EAAE;IAEtC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAC/C,OAAO,IAAI,6BAAgB,EAAiB,CAAC,aAAa,CACzD,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CACzD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Interaction } from "discord.js";
|
|
2
|
+
/**
|
|
3
|
+
* Anything that can consume a gateway interaction. `handle` returns `true` when
|
|
4
|
+
* it claimed the interaction, `false` to let the next dispatcher try. This is the
|
|
5
|
+
* seam that lets the whole app share a single `interactionCreate` listener.
|
|
6
|
+
*/
|
|
7
|
+
export interface InteractionDispatcher {
|
|
8
|
+
handle(interaction: Interaction): Promise<boolean>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Aggregates {@link InteractionDispatcher}s behind one entry point so the app
|
|
12
|
+
* registers a *single* `interactionCreate` listener (wired at the composition
|
|
13
|
+
* root, attached in `bootstrap/lifecycle`). Dispatchers are tried in order and
|
|
14
|
+
* the first to claim the interaction wins — no global state, no singleton.
|
|
15
|
+
*/
|
|
16
|
+
export declare class InteractionRouter {
|
|
17
|
+
private readonly dispatchers;
|
|
18
|
+
constructor(dispatchers: readonly InteractionDispatcher[]);
|
|
19
|
+
dispatch(interaction: Interaction): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=interaction-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-router.d.ts","sourceRoot":"","sources":["../../../src/discord/interaction/interaction-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACrC,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,SAAS,qBAAqB,EAAE;IAEpE,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAOvD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InteractionRouter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Aggregates {@link InteractionDispatcher}s behind one entry point so the app
|
|
6
|
+
* registers a *single* `interactionCreate` listener (wired at the composition
|
|
7
|
+
* root, attached in `bootstrap/lifecycle`). Dispatchers are tried in order and
|
|
8
|
+
* the first to claim the interaction wins — no global state, no singleton.
|
|
9
|
+
*/
|
|
10
|
+
class InteractionRouter {
|
|
11
|
+
dispatchers;
|
|
12
|
+
constructor(dispatchers) {
|
|
13
|
+
this.dispatchers = dispatchers;
|
|
14
|
+
}
|
|
15
|
+
async dispatch(interaction) {
|
|
16
|
+
for (const dispatcher of this.dispatchers) {
|
|
17
|
+
if (await dispatcher.handle(interaction)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.InteractionRouter = InteractionRouter;
|
|
24
|
+
//# sourceMappingURL=interaction-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-router.js","sourceRoot":"","sources":["../../../src/discord/interaction/interaction-router.ts"],"names":[],"mappings":";;;AAWA;;;;;GAKG;AACH,MAAa,iBAAiB;IACA;IAA7B,YAA6B,WAA6C;QAA7C,gBAAW,GAAX,WAAW,CAAkC;IAAG,CAAC;IAE9E,KAAK,CAAC,QAAQ,CAAC,WAAwB;QACtC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC1C,OAAO;YACR,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAVD,8CAUC"}
|