@openclaw/discord 2026.5.2 → 2026.5.3-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-B9ujuUtS.js +89 -0
- package/dist/account-inspect-C2UEUhbG.js +81 -0
- package/dist/account-inspect-api.js +10 -0
- package/dist/accounts-BKnkNaoA.js +128 -0
- package/dist/action-runtime-api.js +2 -0
- package/dist/agent-components.runtime-DUhLr9hy.js +4 -0
- package/dist/allow-list-ek-1hMKN.js +336 -0
- package/dist/api-DzNBVTto.js +130 -0
- package/dist/api.js +24 -0
- package/dist/approval-handler.runtime-v8nzQHlT.js +426 -0
- package/dist/approval-native-DqWGp0bM.js +153 -0
- package/dist/approval-shared-DKnwwjZM.js +93 -0
- package/dist/audit-CJ92YD6J.js +102 -0
- package/dist/channel-B3aTtBj1.js +745 -0
- package/dist/channel-access-ewDxhd9q.js +62 -0
- package/dist/channel-actions-TNih7k3w.js +140 -0
- package/dist/channel-actions.runtime-CaPytiY4.js +236 -0
- package/dist/channel-api-CTSWMrnD.js +21 -0
- package/dist/channel-config-api.js +2 -0
- package/dist/channel-plugin-api.js +2 -0
- package/dist/channel.setup-Dt4tIDrl.js +336 -0
- package/dist/components-BapWDmDM.js +760 -0
- package/dist/config-api-CFZtoMaS.js +2 -0
- package/dist/config-schema-DwFkL904.js +252 -0
- package/dist/configured-state.js +6 -0
- package/dist/contract-api.js +8 -0
- package/dist/conversation-identity-BN9wSmxJ.js +31 -0
- package/dist/directory-cache-D93eSrpB.js +62 -0
- package/dist/directory-config-LyMP0sdv.js +49 -0
- package/dist/directory-contract-api.js +2 -0
- package/dist/directory-live-BQapdpkZ.js +101 -0
- package/dist/discord-D1kDh0X_.js +2751 -0
- package/dist/doctor-B2G7WqO0.js +244 -0
- package/dist/doctor-contract-D3pSutkb.js +383 -0
- package/dist/doctor-contract-api.js +2 -0
- package/dist/doctor-shared-DU8RcnF5.js +4 -0
- package/dist/format-D8TsaXxW.js +24 -0
- package/dist/gateway-registry-BKG4KIVC.js +74 -0
- package/dist/handle-action.guild-admin-BuqsSVXu.js +283 -0
- package/dist/inbound-context-e_oBBJtF.js +51 -0
- package/dist/index.js +26 -0
- package/dist/manager.runtime-M2aAa7qA.js +1019 -0
- package/dist/mentions-BPZUaFk7.js +88 -0
- package/dist/message-handler-D6JfFV3P.js +381 -0
- package/dist/message-handler.preflight-DqaF3vHm.js +1022 -0
- package/dist/message-handler.process-tl3Nwnhr.js +1124 -0
- package/dist/message-utils-Dmgu-7fC.js +512 -0
- package/dist/normalize-B-ktw-T_.js +275 -0
- package/dist/outbound-adapter-DJf9_sfH.js +451 -0
- package/dist/outbound-session-route-uHGLDP-Y.js +43 -0
- package/dist/pluralkit-voQvSN3g.js +22 -0
- package/dist/preflight-audio-BpYtUAT6.js +72 -0
- package/dist/preflight-audio.runtime-BAGmU6uO.js +7 -0
- package/dist/preview-streaming-C0O92Qqz.js +14 -0
- package/dist/probe-DcNEodPI.js +139 -0
- package/dist/probe.runtime-P-e4r1Hl.js +2 -0
- package/dist/provider-CMvXOp-3.js +8440 -0
- package/dist/provider-session.runtime-JFemrDZT.js +6 -0
- package/dist/provider.runtime-BO007oR2.js +2 -0
- package/dist/reply-delivery-D9So77a6.js +131 -0
- package/dist/resolve-allowlist-common-DqqFY_qa.js +34 -0
- package/dist/resolve-channels-CGPntufJ.js +265 -0
- package/dist/resolve-users-CDvSlW0V.js +120 -0
- package/dist/rolldown-runtime-C3SqQTfK.js +28 -0
- package/dist/route-resolution-BYiC-6Cc.js +236 -0
- package/dist/runtime-K9RT6Egn.js +8 -0
- package/dist/runtime-api.actions.js +3 -0
- package/dist/runtime-api.js +31 -0
- package/dist/runtime-api.lookup.js +7 -0
- package/dist/runtime-api.monitor-BC-XN0tY.js +6 -0
- package/dist/runtime-api.monitor.js +9 -0
- package/dist/runtime-api.send.js +6 -0
- package/dist/runtime-api.threads.js +6 -0
- package/dist/runtime-n5xZHW55.js +1001 -0
- package/dist/runtime-setter-api.js +2 -0
- package/dist/secret-config-contract-CoGryS5c.js +115 -0
- package/dist/secret-contract-api.js +2 -0
- package/dist/security-audit-Cdz2iq3m.js +120 -0
- package/dist/security-audit-contract-api.js +2 -0
- package/dist/security-audit.runtime-DBV1T1_N.js +2 -0
- package/dist/security-contract-api.js +2 -0
- package/dist/security-contract-ei3Mz8Sa.js +26 -0
- package/dist/security-doctor-CzTzpXV8.js +18 -0
- package/dist/send-B_frVn_Q.js +845 -0
- package/dist/send.components-B1EgHAds.js +468 -0
- package/dist/send.outbound-DlBAuW7y.js +211 -0
- package/dist/send.shared-Db0opnak.js +708 -0
- package/dist/sender-identity-BiSDAk2P.js +43 -0
- package/dist/session-contract-goJZckp2.js +6 -0
- package/dist/session-key-api.js +2 -0
- package/dist/session-key-normalization-Daag9II6.js +23 -0
- package/dist/setup-entry.js +11 -0
- package/dist/setup-plugin-api.js +2 -0
- package/dist/shared-CqlrJmSs.js +166 -0
- package/dist/shared-interactive-KgJjCqnB.js +79 -0
- package/dist/subagent-hooks-api.js +22 -0
- package/dist/subagent-hooks-mEK5ARfP.js +113 -0
- package/dist/system-events-Bu9jmO4W.js +34 -0
- package/dist/targets-kKlbZ4ai.js +3 -0
- package/dist/test-api.js +45 -0
- package/dist/thread-binding-api.js +4 -0
- package/dist/thread-bindings-Bj1R-6QH.js +256 -0
- package/dist/thread-bindings.discord-api-ClPMuIr8.js +184 -0
- package/dist/thread-bindings.manager-BaN0l4y8.js +535 -0
- package/dist/thread-bindings.session-updates-TTP020qQ.js +54 -0
- package/dist/thread-bindings.state-Dzu1gCE7.js +318 -0
- package/dist/threading-CWhdYHVx.js +475 -0
- package/dist/timeouts-C7jeTtGs.js +52 -0
- package/dist/timeouts.js +2 -0
- package/dist/token-D-w3Rigl.js +42 -0
- package/dist/typing-CJiowRTZ.js +15 -0
- package/package.json +14 -6
- package/account-inspect-api.ts +0 -6
- package/action-runtime-api.ts +0 -1
- package/api.ts +0 -132
- package/channel-config-api.ts +0 -1
- package/channel-plugin-api.ts +0 -3
- package/config-api.ts +0 -4
- package/configured-state.ts +0 -6
- package/contract-api.ts +0 -21
- package/directory-contract-api.ts +0 -4
- package/doctor-contract-api.ts +0 -1
- package/index.test.ts +0 -13
- package/index.ts +0 -24
- package/runtime-api.actions.ts +0 -15
- package/runtime-api.lookup.ts +0 -22
- package/runtime-api.monitor.ts +0 -50
- package/runtime-api.send.ts +0 -79
- package/runtime-api.threads.ts +0 -30
- package/runtime-api.ts +0 -180
- package/runtime-setter-api.ts +0 -3
- package/secret-contract-api.ts +0 -4
- package/security-audit-contract-api.ts +0 -1
- package/security-contract-api.ts +0 -4
- package/session-key-api.ts +0 -1
- package/setup-entry.ts +0 -9
- package/setup-plugin-api.ts +0 -3
- package/src/account-inspect.test.ts +0 -126
- package/src/account-inspect.ts +0 -132
- package/src/accounts.test.ts +0 -247
- package/src/accounts.ts +0 -196
- package/src/actions/handle-action.guild-admin.ts +0 -411
- package/src/actions/handle-action.test.ts +0 -306
- package/src/actions/handle-action.ts +0 -372
- package/src/actions/runtime.guild.ts +0 -446
- package/src/actions/runtime.messaging.messages.ts +0 -205
- package/src/actions/runtime.messaging.reactions.ts +0 -67
- package/src/actions/runtime.messaging.runtime.ts +0 -69
- package/src/actions/runtime.messaging.send.ts +0 -248
- package/src/actions/runtime.messaging.shared.ts +0 -97
- package/src/actions/runtime.messaging.ts +0 -37
- package/src/actions/runtime.moderation-shared.ts +0 -48
- package/src/actions/runtime.moderation.authz.test.ts +0 -151
- package/src/actions/runtime.moderation.ts +0 -116
- package/src/actions/runtime.presence.test.ts +0 -160
- package/src/actions/runtime.presence.ts +0 -117
- package/src/actions/runtime.shared.ts +0 -83
- package/src/actions/runtime.test.ts +0 -1087
- package/src/actions/runtime.ts +0 -87
- package/src/api-barrel.test.ts +0 -80
- package/src/api.test.ts +0 -130
- package/src/api.ts +0 -169
- package/src/approval-handler.runtime.test.ts +0 -41
- package/src/approval-handler.runtime.ts +0 -632
- package/src/approval-native.test.ts +0 -330
- package/src/approval-native.ts +0 -219
- package/src/approval-runtime.ts +0 -14
- package/src/approval-shared.ts +0 -53
- package/src/audit-core.ts +0 -141
- package/src/audit.test.ts +0 -145
- package/src/audit.ts +0 -32
- package/src/channel-actions.contract.test.ts +0 -45
- package/src/channel-actions.runtime.ts +0 -1
- package/src/channel-actions.test.ts +0 -275
- package/src/channel-actions.ts +0 -203
- package/src/channel-api.ts +0 -29
- package/src/channel.conversation.ts +0 -159
- package/src/channel.loaders.ts +0 -47
- package/src/channel.runtime.ts +0 -1
- package/src/channel.setup.ts +0 -12
- package/src/channel.test.ts +0 -571
- package/src/channel.ts +0 -629
- package/src/chunk.test.ts +0 -157
- package/src/chunk.ts +0 -321
- package/src/client.proxy.test.ts +0 -176
- package/src/client.test.ts +0 -76
- package/src/client.ts +0 -132
- package/src/component-custom-id.ts +0 -72
- package/src/components-registry.ts +0 -356
- package/src/components.builders.ts +0 -409
- package/src/components.modal.ts +0 -124
- package/src/components.parse.ts +0 -407
- package/src/components.test.ts +0 -312
- package/src/components.ts +0 -54
- package/src/components.types.ts +0 -187
- package/src/config-schema.test.ts +0 -325
- package/src/config-schema.ts +0 -6
- package/src/config-ui-hints.ts +0 -249
- package/src/conversation-identity.ts +0 -58
- package/src/delivery-retry.ts +0 -56
- package/src/directory-cache.ts +0 -116
- package/src/directory-config.ts +0 -58
- package/src/directory-contract.test.ts +0 -129
- package/src/directory-live.test.ts +0 -126
- package/src/directory-live.ts +0 -135
- package/src/doctor-contract.ts +0 -477
- package/src/doctor-shared.ts +0 -5
- package/src/doctor.test.ts +0 -405
- package/src/doctor.ts +0 -340
- package/src/draft-chunking.test.ts +0 -64
- package/src/draft-chunking.ts +0 -43
- package/src/draft-stream.test.ts +0 -159
- package/src/draft-stream.ts +0 -154
- package/src/error-body.ts +0 -38
- package/src/exec-approvals.test.ts +0 -88
- package/src/exec-approvals.ts +0 -110
- package/src/gateway-logging.test.ts +0 -98
- package/src/gateway-logging.ts +0 -67
- package/src/group-policy.ts +0 -113
- package/src/guilds.ts +0 -29
- package/src/inbound-context.contract.test.ts +0 -11
- package/src/interactive-dispatch.ts +0 -104
- package/src/internal/api.commands.ts +0 -51
- package/src/internal/api.guild.ts +0 -164
- package/src/internal/api.interactions.ts +0 -53
- package/src/internal/api.messages.ts +0 -113
- package/src/internal/api.reactions.ts +0 -38
- package/src/internal/api.test.ts +0 -262
- package/src/internal/api.ts +0 -61
- package/src/internal/api.users.ts +0 -19
- package/src/internal/api.webhooks.ts +0 -13
- package/src/internal/client.test.ts +0 -440
- package/src/internal/client.ts +0 -310
- package/src/internal/command-deploy.ts +0 -297
- package/src/internal/commands.ts +0 -188
- package/src/internal/components.base.ts +0 -65
- package/src/internal/components.message.ts +0 -279
- package/src/internal/components.modal.ts +0 -95
- package/src/internal/components.ts +0 -31
- package/src/internal/discord.ts +0 -11
- package/src/internal/embeds.ts +0 -35
- package/src/internal/entity-cache.ts +0 -98
- package/src/internal/event-queue.ts +0 -162
- package/src/internal/gateway-close-codes.ts +0 -25
- package/src/internal/gateway-dispatch.ts +0 -96
- package/src/internal/gateway-identify-limiter.ts +0 -26
- package/src/internal/gateway-lifecycle.ts +0 -61
- package/src/internal/gateway-rate-limit.ts +0 -104
- package/src/internal/gateway.test.ts +0 -603
- package/src/internal/gateway.ts +0 -476
- package/src/internal/interaction-dispatch.test.ts +0 -148
- package/src/internal/interaction-dispatch.ts +0 -162
- package/src/internal/interaction-options.ts +0 -98
- package/src/internal/interaction-response.ts +0 -53
- package/src/internal/interactions.test.ts +0 -325
- package/src/internal/interactions.ts +0 -378
- package/src/internal/listeners.ts +0 -85
- package/src/internal/live-smoke.live.test.ts +0 -26
- package/src/internal/modal-fields.ts +0 -95
- package/src/internal/payload.ts +0 -69
- package/src/internal/rest-body.ts +0 -115
- package/src/internal/rest-errors.ts +0 -88
- package/src/internal/rest-routes.ts +0 -50
- package/src/internal/rest-scheduler.ts +0 -557
- package/src/internal/rest.test.ts +0 -673
- package/src/internal/rest.ts +0 -322
- package/src/internal/schemas.ts +0 -36
- package/src/internal/structures.test.ts +0 -43
- package/src/internal/structures.ts +0 -280
- package/src/internal/test-builders.test-support.ts +0 -167
- package/src/internal/voice.ts +0 -49
- package/src/media-detection.ts +0 -28
- package/src/mentions.test.ts +0 -111
- package/src/mentions.ts +0 -147
- package/src/monitor/access-groups.ts +0 -55
- package/src/monitor/ack-reactions.ts +0 -70
- package/src/monitor/acp-bind-here.integration.test.ts +0 -211
- package/src/monitor/agent-components-auth.ts +0 -7
- package/src/monitor/agent-components-context.ts +0 -154
- package/src/monitor/agent-components-data.ts +0 -224
- package/src/monitor/agent-components-dm-auth.ts +0 -221
- package/src/monitor/agent-components-guild-auth.ts +0 -322
- package/src/monitor/agent-components-helpers.runtime.ts +0 -5
- package/src/monitor/agent-components-helpers.ts +0 -34
- package/src/monitor/agent-components-reply.ts +0 -10
- package/src/monitor/agent-components.deps.runtime.ts +0 -2
- package/src/monitor/agent-components.dispatch.ts +0 -366
- package/src/monitor/agent-components.handlers.ts +0 -303
- package/src/monitor/agent-components.modal.ts +0 -160
- package/src/monitor/agent-components.plugin-interactive.ts +0 -187
- package/src/monitor/agent-components.runtime.ts +0 -14
- package/src/monitor/agent-components.system-controls.ts +0 -211
- package/src/monitor/agent-components.ts +0 -70
- package/src/monitor/agent-components.types.ts +0 -58
- package/src/monitor/agent-components.wildcard-controls.ts +0 -168
- package/src/monitor/agent-components.wildcard.test.ts +0 -71
- package/src/monitor/allow-list.test.ts +0 -14
- package/src/monitor/allow-list.ts +0 -633
- package/src/monitor/auto-presence.test.ts +0 -156
- package/src/monitor/auto-presence.ts +0 -356
- package/src/monitor/channel-access.test.ts +0 -99
- package/src/monitor/channel-access.ts +0 -102
- package/src/monitor/commands.test.ts +0 -24
- package/src/monitor/commands.ts +0 -9
- package/src/monitor/dm-command-auth.test.ts +0 -197
- package/src/monitor/dm-command-auth.ts +0 -158
- package/src/monitor/dm-command-decision.test.ts +0 -113
- package/src/monitor/dm-command-decision.ts +0 -49
- package/src/monitor/exec-approvals.test.ts +0 -226
- package/src/monitor/exec-approvals.ts +0 -158
- package/src/monitor/format.ts +0 -45
- package/src/monitor/gateway-handle.ts +0 -34
- package/src/monitor/gateway-metadata.test.ts +0 -29
- package/src/monitor/gateway-metadata.ts +0 -298
- package/src/monitor/gateway-plugin.test.ts +0 -297
- package/src/monitor/gateway-plugin.ts +0 -294
- package/src/monitor/gateway-registry.ts +0 -37
- package/src/monitor/gateway-supervisor.test.ts +0 -150
- package/src/monitor/gateway-supervisor.ts +0 -206
- package/src/monitor/inbound-context.test-helpers.ts +0 -37
- package/src/monitor/inbound-context.test.ts +0 -106
- package/src/monitor/inbound-context.ts +0 -103
- package/src/monitor/inbound-dedupe.ts +0 -79
- package/src/monitor/inbound-job.test.ts +0 -203
- package/src/monitor/inbound-job.ts +0 -118
- package/src/monitor/listeners.queue.ts +0 -91
- package/src/monitor/listeners.reactions.ts +0 -610
- package/src/monitor/listeners.test.ts +0 -200
- package/src/monitor/listeners.ts +0 -150
- package/src/monitor/message-channel-info.ts +0 -96
- package/src/monitor/message-forwarded.ts +0 -107
- package/src/monitor/message-handler.batch-gate.test.ts +0 -22
- package/src/monitor/message-handler.batch-gate.ts +0 -19
- package/src/monitor/message-handler.bot-self-filter.test.ts +0 -68
- package/src/monitor/message-handler.context.ts +0 -406
- package/src/monitor/message-handler.dm-preflight.ts +0 -123
- package/src/monitor/message-handler.draft-preview.ts +0 -246
- package/src/monitor/message-handler.hydration.test.ts +0 -80
- package/src/monitor/message-handler.hydration.ts +0 -198
- package/src/monitor/message-handler.inbound-context.test.ts +0 -59
- package/src/monitor/message-handler.module-test-helpers.ts +0 -31
- package/src/monitor/message-handler.preflight-channel-access.ts +0 -86
- package/src/monitor/message-handler.preflight-channel-context.test.ts +0 -18
- package/src/monitor/message-handler.preflight-channel-context.ts +0 -58
- package/src/monitor/message-handler.preflight-context.ts +0 -54
- package/src/monitor/message-handler.preflight-helpers.ts +0 -164
- package/src/monitor/message-handler.preflight-history.ts +0 -23
- package/src/monitor/message-handler.preflight-logging.ts +0 -36
- package/src/monitor/message-handler.preflight-pluralkit.ts +0 -26
- package/src/monitor/message-handler.preflight-runtime.ts +0 -28
- package/src/monitor/message-handler.preflight-thread.ts +0 -49
- package/src/monitor/message-handler.preflight.acp-bindings.test.ts +0 -369
- package/src/monitor/message-handler.preflight.test-helpers.ts +0 -111
- package/src/monitor/message-handler.preflight.test.ts +0 -1623
- package/src/monitor/message-handler.preflight.ts +0 -679
- package/src/monitor/message-handler.preflight.types.ts +0 -110
- package/src/monitor/message-handler.process.test.ts +0 -1369
- package/src/monitor/message-handler.process.ts +0 -686
- package/src/monitor/message-handler.queue.test.ts +0 -496
- package/src/monitor/message-handler.routing-preflight.ts +0 -112
- package/src/monitor/message-handler.test-harness.ts +0 -99
- package/src/monitor/message-handler.test-helpers.ts +0 -75
- package/src/monitor/message-handler.ts +0 -274
- package/src/monitor/message-media.ts +0 -509
- package/src/monitor/message-run-queue.ts +0 -101
- package/src/monitor/message-text.ts +0 -171
- package/src/monitor/message-utils.test.ts +0 -1157
- package/src/monitor/message-utils.ts +0 -32
- package/src/monitor/model-picker-preferences.test.ts +0 -67
- package/src/monitor/model-picker-preferences.ts +0 -184
- package/src/monitor/model-picker.state.ts +0 -364
- package/src/monitor/model-picker.test-utils.ts +0 -26
- package/src/monitor/model-picker.test.ts +0 -794
- package/src/monitor/model-picker.ts +0 -38
- package/src/monitor/model-picker.view.ts +0 -695
- package/src/monitor/monitor.agent-components.test.ts +0 -375
- package/src/monitor/monitor.test.ts +0 -849
- package/src/monitor/monitor.threading-utils.test.ts +0 -598
- package/src/monitor/native-command-agent-reply.ts +0 -125
- package/src/monitor/native-command-arg-ui.ts +0 -233
- package/src/monitor/native-command-auth.ts +0 -308
- package/src/monitor/native-command-bypass.ts +0 -13
- package/src/monitor/native-command-context.test.ts +0 -98
- package/src/monitor/native-command-context.ts +0 -103
- package/src/monitor/native-command-dispatch.ts +0 -35
- package/src/monitor/native-command-model-picker-apply.ts +0 -177
- package/src/monitor/native-command-model-picker-interaction.ts +0 -461
- package/src/monitor/native-command-model-picker-ui.ts +0 -368
- package/src/monitor/native-command-reply.test.ts +0 -68
- package/src/monitor/native-command-reply.ts +0 -185
- package/src/monitor/native-command-route.ts +0 -91
- package/src/monitor/native-command-status.ts +0 -76
- package/src/monitor/native-command-ui.ts +0 -26
- package/src/monitor/native-command-ui.types.ts +0 -20
- package/src/monitor/native-command.args.ts +0 -45
- package/src/monitor/native-command.command-arg.test.ts +0 -99
- package/src/monitor/native-command.commands-allowfrom.test.ts +0 -490
- package/src/monitor/native-command.model-picker.test.ts +0 -767
- package/src/monitor/native-command.options.test.ts +0 -369
- package/src/monitor/native-command.options.ts +0 -153
- package/src/monitor/native-command.plugin-dispatch.test.ts +0 -961
- package/src/monitor/native-command.runtime.ts +0 -50
- package/src/monitor/native-command.status-direct.test.ts +0 -272
- package/src/monitor/native-command.test-helpers.ts +0 -64
- package/src/monitor/native-command.think-autocomplete.test.ts +0 -416
- package/src/monitor/native-command.ts +0 -700
- package/src/monitor/native-command.types.ts +0 -9
- package/src/monitor/native-interaction-channel-context.ts +0 -50
- package/src/monitor/preflight-audio.runtime.ts +0 -9
- package/src/monitor/preflight-audio.test.ts +0 -157
- package/src/monitor/preflight-audio.ts +0 -130
- package/src/monitor/presence-cache.ts +0 -61
- package/src/monitor/presence.test.ts +0 -44
- package/src/monitor/presence.ts +0 -50
- package/src/monitor/provider-session.runtime.ts +0 -12
- package/src/monitor/provider.acp.ts +0 -89
- package/src/monitor/provider.allowlist.test.ts +0 -149
- package/src/monitor/provider.allowlist.ts +0 -394
- package/src/monitor/provider.cleanup.ts +0 -41
- package/src/monitor/provider.commands.ts +0 -129
- package/src/monitor/provider.config-log.ts +0 -45
- package/src/monitor/provider.deploy-errors.ts +0 -362
- package/src/monitor/provider.deploy.ts +0 -221
- package/src/monitor/provider.interactions.ts +0 -160
- package/src/monitor/provider.lifecycle.test.ts +0 -713
- package/src/monitor/provider.lifecycle.ts +0 -552
- package/src/monitor/provider.proxy.test.ts +0 -745
- package/src/monitor/provider.rest-proxy.test.ts +0 -121
- package/src/monitor/provider.runtime.ts +0 -1
- package/src/monitor/provider.skill-dedupe.test.ts +0 -42
- package/src/monitor/provider.startup-log.ts +0 -32
- package/src/monitor/provider.startup.test.ts +0 -426
- package/src/monitor/provider.startup.ts +0 -330
- package/src/monitor/provider.test.ts +0 -1111
- package/src/monitor/provider.ts +0 -713
- package/src/monitor/reply-context.ts +0 -64
- package/src/monitor/reply-delivery.test.ts +0 -244
- package/src/monitor/reply-delivery.ts +0 -203
- package/src/monitor/rest-fetch.ts +0 -43
- package/src/monitor/route-resolution.test.ts +0 -204
- package/src/monitor/route-resolution.ts +0 -140
- package/src/monitor/sender-identity.ts +0 -81
- package/src/monitor/startup-status.test.ts +0 -30
- package/src/monitor/startup-status.ts +0 -10
- package/src/monitor/status.ts +0 -22
- package/src/monitor/system-events.ts +0 -55
- package/src/monitor/thread-bindings.config.ts +0 -35
- package/src/monitor/thread-bindings.discord-api.test.ts +0 -229
- package/src/monitor/thread-bindings.discord-api.ts +0 -310
- package/src/monitor/thread-bindings.lifecycle.test.ts +0 -1871
- package/src/monitor/thread-bindings.lifecycle.ts +0 -354
- package/src/monitor/thread-bindings.manager.ts +0 -553
- package/src/monitor/thread-bindings.messages.ts +0 -6
- package/src/monitor/thread-bindings.persona.test.ts +0 -34
- package/src/monitor/thread-bindings.persona.ts +0 -25
- package/src/monitor/thread-bindings.session-adapter.ts +0 -229
- package/src/monitor/thread-bindings.session-shared.ts +0 -59
- package/src/monitor/thread-bindings.session-updates.ts +0 -35
- package/src/monitor/thread-bindings.shared-state.test.ts +0 -36
- package/src/monitor/thread-bindings.state.ts +0 -540
- package/src/monitor/thread-bindings.ts +0 -48
- package/src/monitor/thread-bindings.types.ts +0 -83
- package/src/monitor/thread-channel-context.ts +0 -112
- package/src/monitor/thread-session-close.test.ts +0 -180
- package/src/monitor/thread-session-close.ts +0 -63
- package/src/monitor/thread-title.generate.test.ts +0 -197
- package/src/monitor/thread-title.test.ts +0 -31
- package/src/monitor/thread-title.ts +0 -181
- package/src/monitor/threading.auto-thread.test.ts +0 -327
- package/src/monitor/threading.auto-thread.ts +0 -287
- package/src/monitor/threading.cache.ts +0 -45
- package/src/monitor/threading.parent-info.test.ts +0 -156
- package/src/monitor/threading.starter.test.ts +0 -260
- package/src/monitor/threading.starter.ts +0 -287
- package/src/monitor/threading.ts +0 -20
- package/src/monitor/threading.types.ts +0 -102
- package/src/monitor/timeouts.ts +0 -84
- package/src/monitor/typing.test.ts +0 -42
- package/src/monitor/typing.ts +0 -17
- package/src/monitor.gateway.test.ts +0 -187
- package/src/monitor.gateway.ts +0 -75
- package/src/monitor.test.ts +0 -1397
- package/src/monitor.ts +0 -28
- package/src/normalize.test.ts +0 -56
- package/src/normalize.ts +0 -86
- package/src/outbound-adapter.interactive-order.test.ts +0 -64
- package/src/outbound-adapter.test-harness.ts +0 -207
- package/src/outbound-adapter.test.ts +0 -696
- package/src/outbound-adapter.ts +0 -291
- package/src/outbound-approval.ts +0 -29
- package/src/outbound-components.ts +0 -81
- package/src/outbound-payload.contract.test.ts +0 -38
- package/src/outbound-payload.ts +0 -134
- package/src/outbound-send-context.ts +0 -92
- package/src/outbound-session-route.test.ts +0 -34
- package/src/outbound-session-route.ts +0 -72
- package/src/pluralkit.test.ts +0 -67
- package/src/pluralkit.ts +0 -58
- package/src/preview-streaming.ts +0 -32
- package/src/probe.intents.test.ts +0 -94
- package/src/probe.parse-token.test.ts +0 -43
- package/src/probe.runtime.ts +0 -1
- package/src/probe.ts +0 -237
- package/src/proxy-fetch.ts +0 -92
- package/src/proxy-request-client.test.ts +0 -78
- package/src/proxy-request-client.ts +0 -21
- package/src/recipient-resolution.ts +0 -39
- package/src/resolve-allowlist-common.test.ts +0 -36
- package/src/resolve-allowlist-common.ts +0 -39
- package/src/resolve-channels.test.ts +0 -340
- package/src/resolve-channels.ts +0 -369
- package/src/resolve-users.test.ts +0 -222
- package/src/resolve-users.ts +0 -184
- package/src/retry.test.ts +0 -83
- package/src/retry.ts +0 -98
- package/src/runtime-api.ts +0 -64
- package/src/runtime.ts +0 -23
- package/src/secret-config-contract.ts +0 -140
- package/src/security-audit.runtime.ts +0 -1
- package/src/security-audit.test.ts +0 -246
- package/src/security-audit.ts +0 -208
- package/src/security-contract.ts +0 -47
- package/src/security-doctor.test.ts +0 -25
- package/src/security-doctor.ts +0 -20
- package/src/security.ts +0 -60
- package/src/send-target-parsing.ts +0 -14
- package/src/send.channels.ts +0 -139
- package/src/send.components.test.ts +0 -275
- package/src/send.components.ts +0 -381
- package/src/send.creates-thread.test.ts +0 -643
- package/src/send.emojis-stickers.ts +0 -57
- package/src/send.guild.ts +0 -170
- package/src/send.message-request.ts +0 -97
- package/src/send.messages.test.ts +0 -53
- package/src/send.messages.ts +0 -225
- package/src/send.outbound.ts +0 -413
- package/src/send.permissions.authz.test.ts +0 -188
- package/src/send.permissions.ts +0 -283
- package/src/send.reactions.ts +0 -155
- package/src/send.sends-basic-channel-messages.test.ts +0 -941
- package/src/send.shared.ts +0 -447
- package/src/send.test-harness.ts +0 -56
- package/src/send.ts +0 -82
- package/src/send.types.ts +0 -188
- package/src/send.typing.test.ts +0 -41
- package/src/send.typing.ts +0 -9
- package/src/send.voice.ts +0 -134
- package/src/send.webhook-activity.test.ts +0 -105
- package/src/send.webhook.proxy.test.ts +0 -191
- package/src/send.webhook.ts +0 -133
- package/src/session-contract.ts +0 -3
- package/src/session-key-normalization.test.ts +0 -44
- package/src/session-key-normalization.ts +0 -47
- package/src/setup-account-state.test.ts +0 -91
- package/src/setup-account-state.ts +0 -144
- package/src/setup-adapter.ts +0 -12
- package/src/setup-core.ts +0 -212
- package/src/setup-runtime-helpers.ts +0 -10
- package/src/setup-surface.test.ts +0 -137
- package/src/setup-surface.ts +0 -129
- package/src/shared-interactive.test.ts +0 -153
- package/src/shared-interactive.ts +0 -124
- package/src/shared.test.ts +0 -165
- package/src/shared.ts +0 -190
- package/src/status-issues.test.ts +0 -70
- package/src/status-issues.ts +0 -169
- package/src/subagent-hooks.test.ts +0 -432
- package/src/subagent-hooks.ts +0 -214
- package/src/target-parsing.ts +0 -53
- package/src/target-resolver.ts +0 -129
- package/src/targets.test.ts +0 -367
- package/src/targets.ts +0 -12
- package/src/test-http-helpers.ts +0 -10
- package/src/test-support/component-runtime.ts +0 -190
- package/src/test-support/config.ts +0 -7
- package/src/test-support/configured-binding-runtime.ts +0 -29
- package/src/test-support/partial-channel.ts +0 -26
- package/src/test-support/provider.test-support.ts +0 -545
- package/src/token.test.ts +0 -107
- package/src/token.ts +0 -60
- package/src/ui-colors.ts +0 -27
- package/src/ui.ts +0 -20
- package/src/voice/access.test.ts +0 -217
- package/src/voice/access.ts +0 -124
- package/src/voice/audio.ts +0 -173
- package/src/voice/capture-state.test.ts +0 -48
- package/src/voice/capture-state.ts +0 -120
- package/src/voice/command.test.ts +0 -164
- package/src/voice/command.ts +0 -283
- package/src/voice/config.ts +0 -8
- package/src/voice/manager.e2e.test.ts +0 -928
- package/src/voice/manager.ready-listener.test.ts +0 -37
- package/src/voice/manager.runtime.ts +0 -11
- package/src/voice/manager.ts +0 -691
- package/src/voice/prompt.test.ts +0 -16
- package/src/voice/prompt.ts +0 -17
- package/src/voice/receive-recovery.test.ts +0 -79
- package/src/voice/receive-recovery.ts +0 -159
- package/src/voice/sanitize.test.ts +0 -34
- package/src/voice/sanitize.ts +0 -32
- package/src/voice/sdk-runtime.ts +0 -14
- package/src/voice/segment.ts +0 -156
- package/src/voice/session.ts +0 -50
- package/src/voice/speaker-context.ts +0 -127
- package/src/voice/tts.ts +0 -125
- package/src/voice-message.test.ts +0 -234
- package/src/voice-message.ts +0 -444
- package/subagent-hooks-api.ts +0 -27
- package/test-api.ts +0 -4
- package/thread-binding-api.ts +0 -1
- package/timeouts.ts +0 -6
- package/tsconfig.json +0 -16
|
@@ -0,0 +1,760 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
|
|
2
|
+
import { A as Button, B as Separator, D as Modal, E as Label, F as MediaGallery, H as TextDisplay, I as MentionableSelectMenu, K as parseCustomId, L as RoleSelectMenu, M as Container, N as File, O as RadioGroup, P as LinkButton, R as Row, T as CheckboxGroup, U as Thumbnail, V as StringSelectMenu, W as UserSelectMenu, j as ChannelSelectMenu, k as TextInput, z as Section } from "./discord-D1kDh0X_.js";
|
|
3
|
+
import { t as buildDiscordInteractiveComponents } from "./shared-interactive-KgJjCqnB.js";
|
|
4
|
+
import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime";
|
|
5
|
+
import { ButtonStyle, MessageFlags, TextInputStyle } from "discord-api-types/v10";
|
|
6
|
+
import crypto from "node:crypto";
|
|
7
|
+
//#region extensions/discord/src/component-custom-id.ts
|
|
8
|
+
const DISCORD_COMPONENT_CUSTOM_ID_KEY = "occomp";
|
|
9
|
+
const DISCORD_MODAL_CUSTOM_ID_KEY = "ocmodal";
|
|
10
|
+
function buildDiscordComponentCustomId(params) {
|
|
11
|
+
const base = `${DISCORD_COMPONENT_CUSTOM_ID_KEY}:cid=${params.componentId}`;
|
|
12
|
+
return params.modalId ? `${base};mid=${params.modalId}` : base;
|
|
13
|
+
}
|
|
14
|
+
function buildDiscordModalCustomId(modalId) {
|
|
15
|
+
return `${DISCORD_MODAL_CUSTOM_ID_KEY}:mid=${modalId}`;
|
|
16
|
+
}
|
|
17
|
+
function parseDiscordComponentCustomId(id) {
|
|
18
|
+
const parsed = parseCustomId(id);
|
|
19
|
+
if (parsed.key !== "occomp") return null;
|
|
20
|
+
const componentId = parsed.data.cid;
|
|
21
|
+
if (typeof componentId !== "string" || !componentId.trim()) return null;
|
|
22
|
+
const modalId = parsed.data.mid;
|
|
23
|
+
return {
|
|
24
|
+
componentId,
|
|
25
|
+
modalId: typeof modalId === "string" && modalId.trim() ? modalId : void 0
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function parseDiscordModalCustomId(id) {
|
|
29
|
+
const parsed = parseCustomId(id);
|
|
30
|
+
if (parsed.key !== "ocmodal") return null;
|
|
31
|
+
const modalId = parsed.data.mid;
|
|
32
|
+
if (typeof modalId !== "string" || !modalId.trim()) return null;
|
|
33
|
+
return modalId;
|
|
34
|
+
}
|
|
35
|
+
function isDiscordComponentWildcardRegistrationId(id) {
|
|
36
|
+
return /^__openclaw_discord_component_[a-z_]+_wildcard__$/.test(id);
|
|
37
|
+
}
|
|
38
|
+
function parseDiscordComponentCustomIdForInteraction(id) {
|
|
39
|
+
if (id === "*" || isDiscordComponentWildcardRegistrationId(id)) return {
|
|
40
|
+
key: "*",
|
|
41
|
+
data: {}
|
|
42
|
+
};
|
|
43
|
+
const parsed = parseCustomId(id);
|
|
44
|
+
if (parsed.key !== "occomp") return parsed;
|
|
45
|
+
return {
|
|
46
|
+
key: "*",
|
|
47
|
+
data: parsed.data
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function parseDiscordModalCustomIdForInteraction(id) {
|
|
51
|
+
if (id === "*" || isDiscordComponentWildcardRegistrationId(id)) return {
|
|
52
|
+
key: "*",
|
|
53
|
+
data: {}
|
|
54
|
+
};
|
|
55
|
+
const parsed = parseCustomId(id);
|
|
56
|
+
if (parsed.key !== "ocmodal") return parsed;
|
|
57
|
+
return {
|
|
58
|
+
key: "*",
|
|
59
|
+
data: parsed.data
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region extensions/discord/src/components.parse.ts
|
|
64
|
+
const DISCORD_COMPONENT_ATTACHMENT_PREFIX = "attachment://";
|
|
65
|
+
const BLOCK_ALIASES = new Map([["row", "actions"], ["action-row", "actions"]]);
|
|
66
|
+
function requireObject(value, label) {
|
|
67
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${label} must be an object`);
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
function readString(value, label, opts) {
|
|
71
|
+
if (typeof value !== "string") throw new Error(`${label} must be a string`);
|
|
72
|
+
const trimmed = value.trim();
|
|
73
|
+
if (!opts?.allowEmpty && !trimmed) throw new Error(`${label} cannot be empty`);
|
|
74
|
+
return opts?.allowEmpty ? value : trimmed;
|
|
75
|
+
}
|
|
76
|
+
function readOptionalString(value) {
|
|
77
|
+
if (typeof value !== "string") return;
|
|
78
|
+
const trimmed = value.trim();
|
|
79
|
+
return trimmed ? trimmed : void 0;
|
|
80
|
+
}
|
|
81
|
+
function readOptionalStringArray(value, label) {
|
|
82
|
+
if (value === void 0) return;
|
|
83
|
+
if (!Array.isArray(value)) throw new Error(`${label} must be an array`);
|
|
84
|
+
if (value.length === 0) return;
|
|
85
|
+
return value.map((entry, index) => readString(entry, `${label}[${index}]`));
|
|
86
|
+
}
|
|
87
|
+
function readOptionalNumber(value) {
|
|
88
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return;
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
function readOptionalEmoji(value, label) {
|
|
92
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return;
|
|
93
|
+
const obj = value;
|
|
94
|
+
return {
|
|
95
|
+
name: readString(obj.name, `${label}.name`),
|
|
96
|
+
id: readOptionalString(obj.id),
|
|
97
|
+
animated: typeof obj.animated === "boolean" ? obj.animated : void 0
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function normalizeModalFieldName(value, index) {
|
|
101
|
+
const trimmed = value?.trim();
|
|
102
|
+
if (trimmed) return trimmed;
|
|
103
|
+
return `field_${index + 1}`;
|
|
104
|
+
}
|
|
105
|
+
function normalizeAttachmentRef(value, label) {
|
|
106
|
+
const trimmed = value.trim();
|
|
107
|
+
if (!trimmed.startsWith("attachment://")) throw new Error(`${label} must start with "${DISCORD_COMPONENT_ATTACHMENT_PREFIX}"`);
|
|
108
|
+
const attachmentName = trimmed.slice(13).trim();
|
|
109
|
+
if (!attachmentName) throw new Error(`${label} must include an attachment filename`);
|
|
110
|
+
return `${DISCORD_COMPONENT_ATTACHMENT_PREFIX}${attachmentName}`;
|
|
111
|
+
}
|
|
112
|
+
function resolveDiscordComponentAttachmentName(value) {
|
|
113
|
+
const trimmed = value.trim();
|
|
114
|
+
if (!trimmed.startsWith("attachment://")) throw new Error(`Attachment reference must start with "${DISCORD_COMPONENT_ATTACHMENT_PREFIX}"`);
|
|
115
|
+
const attachmentName = trimmed.slice(13).trim();
|
|
116
|
+
if (!attachmentName) throw new Error("Attachment reference must include a filename");
|
|
117
|
+
return attachmentName;
|
|
118
|
+
}
|
|
119
|
+
function mapButtonStyle(style) {
|
|
120
|
+
switch (normalizeLowercaseStringOrEmpty(style ?? "primary")) {
|
|
121
|
+
case "secondary": return ButtonStyle.Secondary;
|
|
122
|
+
case "success": return ButtonStyle.Success;
|
|
123
|
+
case "danger": return ButtonStyle.Danger;
|
|
124
|
+
case "link": return ButtonStyle.Link;
|
|
125
|
+
default: return ButtonStyle.Primary;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function mapTextInputStyle(style) {
|
|
129
|
+
return style === "paragraph" ? TextInputStyle.Paragraph : TextInputStyle.Short;
|
|
130
|
+
}
|
|
131
|
+
function normalizeBlockType(raw) {
|
|
132
|
+
const lowered = normalizeLowercaseStringOrEmpty(raw);
|
|
133
|
+
return BLOCK_ALIASES.get(lowered) ?? lowered;
|
|
134
|
+
}
|
|
135
|
+
function parseSelectOptions(raw, label) {
|
|
136
|
+
if (raw === void 0) return;
|
|
137
|
+
if (!Array.isArray(raw)) throw new Error(`${label} must be an array`);
|
|
138
|
+
return raw.map((entry, index) => {
|
|
139
|
+
const obj = requireObject(entry, `${label}[${index}]`);
|
|
140
|
+
return {
|
|
141
|
+
label: readString(obj.label, `${label}[${index}].label`),
|
|
142
|
+
value: readString(obj.value, `${label}[${index}].value`),
|
|
143
|
+
description: readOptionalString(obj.description),
|
|
144
|
+
emoji: readOptionalEmoji(obj.emoji, `${label}[${index}].emoji`),
|
|
145
|
+
default: typeof obj.default === "boolean" ? obj.default : void 0
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function parseButtonSpec(raw, label) {
|
|
150
|
+
const obj = requireObject(raw, label);
|
|
151
|
+
const style = readOptionalString(obj.style);
|
|
152
|
+
const url = readOptionalString(obj.url);
|
|
153
|
+
if ((style === "link" || url) && !url) throw new Error(`${label}.url is required for link buttons`);
|
|
154
|
+
return {
|
|
155
|
+
label: readString(obj.label, `${label}.label`),
|
|
156
|
+
style,
|
|
157
|
+
url,
|
|
158
|
+
callbackData: readOptionalString(obj.callbackData),
|
|
159
|
+
emoji: readOptionalEmoji(obj.emoji, `${label}.emoji`),
|
|
160
|
+
disabled: typeof obj.disabled === "boolean" ? obj.disabled : void 0,
|
|
161
|
+
allowedUsers: readOptionalStringArray(obj.allowedUsers, `${label}.allowedUsers`)
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function parseSelectSpec(raw, label) {
|
|
165
|
+
const obj = requireObject(raw, label);
|
|
166
|
+
const type = readOptionalString(obj.type);
|
|
167
|
+
const allowedTypes = [
|
|
168
|
+
"string",
|
|
169
|
+
"user",
|
|
170
|
+
"role",
|
|
171
|
+
"mentionable",
|
|
172
|
+
"channel"
|
|
173
|
+
];
|
|
174
|
+
if (type && !allowedTypes.includes(type)) throw new Error(`${label}.type must be one of ${allowedTypes.join(", ")}`);
|
|
175
|
+
return {
|
|
176
|
+
type,
|
|
177
|
+
callbackData: readOptionalString(obj.callbackData),
|
|
178
|
+
placeholder: readOptionalString(obj.placeholder),
|
|
179
|
+
minValues: readOptionalNumber(obj.minValues),
|
|
180
|
+
maxValues: readOptionalNumber(obj.maxValues),
|
|
181
|
+
options: parseSelectOptions(obj.options, `${label}.options`),
|
|
182
|
+
allowedUsers: readOptionalStringArray(obj.allowedUsers, `${label}.allowedUsers`)
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function parseModalField(raw, label, index) {
|
|
186
|
+
const obj = requireObject(raw, label);
|
|
187
|
+
const type = normalizeLowercaseStringOrEmpty(readString(obj.type, `${label}.type`));
|
|
188
|
+
const supported = [
|
|
189
|
+
"text",
|
|
190
|
+
"checkbox",
|
|
191
|
+
"radio",
|
|
192
|
+
"select",
|
|
193
|
+
"role-select",
|
|
194
|
+
"user-select"
|
|
195
|
+
];
|
|
196
|
+
if (!supported.includes(type)) throw new Error(`${label}.type must be one of ${supported.join(", ")}`);
|
|
197
|
+
const options = parseSelectOptions(obj.options, `${label}.options`);
|
|
198
|
+
if ([
|
|
199
|
+
"checkbox",
|
|
200
|
+
"radio",
|
|
201
|
+
"select"
|
|
202
|
+
].includes(type) && (!options || options.length === 0)) throw new Error(`${label}.options is required for ${type} fields`);
|
|
203
|
+
return {
|
|
204
|
+
type,
|
|
205
|
+
name: normalizeModalFieldName(readOptionalString(obj.name), index),
|
|
206
|
+
label: readString(obj.label, `${label}.label`),
|
|
207
|
+
description: readOptionalString(obj.description),
|
|
208
|
+
placeholder: readOptionalString(obj.placeholder),
|
|
209
|
+
required: typeof obj.required === "boolean" ? obj.required : void 0,
|
|
210
|
+
options,
|
|
211
|
+
minValues: readOptionalNumber(obj.minValues),
|
|
212
|
+
maxValues: readOptionalNumber(obj.maxValues),
|
|
213
|
+
minLength: readOptionalNumber(obj.minLength),
|
|
214
|
+
maxLength: readOptionalNumber(obj.maxLength),
|
|
215
|
+
style: readOptionalString(obj.style)
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function parseComponentBlock(raw, label) {
|
|
219
|
+
const obj = requireObject(raw, label);
|
|
220
|
+
switch (normalizeBlockType(normalizeLowercaseStringOrEmpty(readString(obj.type, `${label}.type`)))) {
|
|
221
|
+
case "text": return {
|
|
222
|
+
type: "text",
|
|
223
|
+
text: readString(obj.text, `${label}.text`)
|
|
224
|
+
};
|
|
225
|
+
case "section": {
|
|
226
|
+
const text = readOptionalString(obj.text);
|
|
227
|
+
const textsRaw = obj.texts;
|
|
228
|
+
const texts = Array.isArray(textsRaw) ? textsRaw.map((entry, idx) => readString(entry, `${label}.texts[${idx}]`)) : void 0;
|
|
229
|
+
if (!text && (!texts || texts.length === 0)) throw new Error(`${label}.text or ${label}.texts is required for section blocks`);
|
|
230
|
+
let accessory;
|
|
231
|
+
if (obj.accessory !== void 0) {
|
|
232
|
+
const accessoryObj = requireObject(obj.accessory, `${label}.accessory`);
|
|
233
|
+
const accessoryType = normalizeLowercaseStringOrEmpty(readString(accessoryObj.type, `${label}.accessory.type`));
|
|
234
|
+
if (accessoryType === "thumbnail") accessory = {
|
|
235
|
+
type: "thumbnail",
|
|
236
|
+
url: readString(accessoryObj.url, `${label}.accessory.url`)
|
|
237
|
+
};
|
|
238
|
+
else if (accessoryType === "button") accessory = {
|
|
239
|
+
type: "button",
|
|
240
|
+
button: parseButtonSpec(accessoryObj.button, `${label}.accessory.button`)
|
|
241
|
+
};
|
|
242
|
+
else throw new Error(`${label}.accessory.type must be "thumbnail" or "button"`);
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
type: "section",
|
|
246
|
+
text,
|
|
247
|
+
texts,
|
|
248
|
+
accessory
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
case "separator": {
|
|
252
|
+
const spacingRaw = obj.spacing;
|
|
253
|
+
let spacing;
|
|
254
|
+
if (spacingRaw === "small" || spacingRaw === "large") spacing = spacingRaw;
|
|
255
|
+
else if (spacingRaw === 1 || spacingRaw === 2) spacing = spacingRaw;
|
|
256
|
+
else if (spacingRaw !== void 0) throw new Error(`${label}.spacing must be "small", "large", 1, or 2`);
|
|
257
|
+
const divider = typeof obj.divider === "boolean" ? obj.divider : void 0;
|
|
258
|
+
return {
|
|
259
|
+
type: "separator",
|
|
260
|
+
spacing,
|
|
261
|
+
divider
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
case "actions": {
|
|
265
|
+
const buttonsRaw = obj.buttons;
|
|
266
|
+
const buttons = Array.isArray(buttonsRaw) ? buttonsRaw.map((entry, idx) => parseButtonSpec(entry, `${label}.buttons[${idx}]`)) : void 0;
|
|
267
|
+
const select = obj.select ? parseSelectSpec(obj.select, `${label}.select`) : void 0;
|
|
268
|
+
if ((!buttons || buttons.length === 0) && !select) throw new Error(`${label} requires buttons or select`);
|
|
269
|
+
if (buttons && select) throw new Error(`${label} cannot include both buttons and select`);
|
|
270
|
+
return {
|
|
271
|
+
type: "actions",
|
|
272
|
+
buttons,
|
|
273
|
+
select
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
case "media-gallery": {
|
|
277
|
+
const itemsRaw = obj.items;
|
|
278
|
+
if (!Array.isArray(itemsRaw) || itemsRaw.length === 0) throw new Error(`${label}.items must be a non-empty array`);
|
|
279
|
+
return {
|
|
280
|
+
type: "media-gallery",
|
|
281
|
+
items: itemsRaw.map((entry, idx) => {
|
|
282
|
+
const itemObj = requireObject(entry, `${label}.items[${idx}]`);
|
|
283
|
+
return {
|
|
284
|
+
url: readString(itemObj.url, `${label}.items[${idx}].url`),
|
|
285
|
+
description: readOptionalString(itemObj.description),
|
|
286
|
+
spoiler: typeof itemObj.spoiler === "boolean" ? itemObj.spoiler : void 0
|
|
287
|
+
};
|
|
288
|
+
})
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
case "file": return {
|
|
292
|
+
type: "file",
|
|
293
|
+
file: normalizeAttachmentRef(readString(obj.file, `${label}.file`), `${label}.file`),
|
|
294
|
+
spoiler: typeof obj.spoiler === "boolean" ? obj.spoiler : void 0
|
|
295
|
+
};
|
|
296
|
+
default: throw new Error(`${label}.type must be a supported component block`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
function readDiscordComponentSpec(raw) {
|
|
300
|
+
if (raw === void 0 || raw === null) return null;
|
|
301
|
+
const obj = requireObject(raw, "components");
|
|
302
|
+
const blocksRaw = obj.blocks;
|
|
303
|
+
const blocks = Array.isArray(blocksRaw) ? blocksRaw.map((entry, idx) => parseComponentBlock(entry, `components.blocks[${idx}]`)) : void 0;
|
|
304
|
+
const modalRaw = obj.modal;
|
|
305
|
+
const reusable = typeof obj.reusable === "boolean" ? obj.reusable : void 0;
|
|
306
|
+
let modal;
|
|
307
|
+
if (modalRaw !== void 0) {
|
|
308
|
+
const modalObj = requireObject(modalRaw, "components.modal");
|
|
309
|
+
const fieldsRaw = modalObj.fields;
|
|
310
|
+
if (!Array.isArray(fieldsRaw) || fieldsRaw.length === 0) throw new Error("components.modal.fields must be a non-empty array");
|
|
311
|
+
if (fieldsRaw.length > 5) throw new Error("components.modal.fields supports up to 5 inputs");
|
|
312
|
+
const fields = fieldsRaw.map((entry, idx) => parseModalField(entry, `components.modal.fields[${idx}]`, idx));
|
|
313
|
+
modal = {
|
|
314
|
+
title: readString(modalObj.title, "components.modal.title"),
|
|
315
|
+
callbackData: readOptionalString(modalObj.callbackData),
|
|
316
|
+
triggerLabel: readOptionalString(modalObj.triggerLabel),
|
|
317
|
+
triggerStyle: readOptionalString(modalObj.triggerStyle),
|
|
318
|
+
allowedUsers: readOptionalStringArray(modalObj.allowedUsers, "components.modal.allowedUsers"),
|
|
319
|
+
fields
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
text: readOptionalString(obj.text),
|
|
324
|
+
reusable,
|
|
325
|
+
container: typeof obj.container === "object" && obj.container && !Array.isArray(obj.container) ? {
|
|
326
|
+
accentColor: obj.container.accentColor,
|
|
327
|
+
spoiler: typeof obj.container.spoiler === "boolean" ? obj.container.spoiler : void 0
|
|
328
|
+
} : void 0,
|
|
329
|
+
blocks,
|
|
330
|
+
modal
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
//#endregion
|
|
334
|
+
//#region extensions/discord/src/components.builders.ts
|
|
335
|
+
function createShortId(prefix) {
|
|
336
|
+
return `${prefix}${crypto.randomBytes(6).toString("base64url")}`;
|
|
337
|
+
}
|
|
338
|
+
function buildTextDisplays(text, texts) {
|
|
339
|
+
if (texts && texts.length > 0) return texts.map((entry) => new TextDisplay(entry));
|
|
340
|
+
if (text) return [new TextDisplay(text)];
|
|
341
|
+
return [];
|
|
342
|
+
}
|
|
343
|
+
function createButtonComponent(params) {
|
|
344
|
+
const style = mapButtonStyle(params.spec.style);
|
|
345
|
+
if (style === ButtonStyle.Link || Boolean(params.spec.url)) {
|
|
346
|
+
if (!params.spec.url) throw new Error("Link buttons require a url");
|
|
347
|
+
const linkUrl = params.spec.url;
|
|
348
|
+
class DynamicLinkButton extends LinkButton {
|
|
349
|
+
constructor(..._args) {
|
|
350
|
+
super(..._args);
|
|
351
|
+
this.label = params.spec.label;
|
|
352
|
+
this.url = linkUrl;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return { component: new DynamicLinkButton() };
|
|
356
|
+
}
|
|
357
|
+
const componentId = params.componentId ?? createShortId("btn_");
|
|
358
|
+
const internalCustomId = typeof params.spec.internalCustomId === "string" && params.spec.internalCustomId.trim() ? params.spec.internalCustomId.trim() : void 0;
|
|
359
|
+
const customId = internalCustomId ?? buildDiscordComponentCustomId({
|
|
360
|
+
componentId,
|
|
361
|
+
modalId: params.modalId
|
|
362
|
+
});
|
|
363
|
+
class DynamicButton extends Button {
|
|
364
|
+
constructor(..._args2) {
|
|
365
|
+
super(..._args2);
|
|
366
|
+
this.label = params.spec.label;
|
|
367
|
+
this.customId = customId;
|
|
368
|
+
this.style = style;
|
|
369
|
+
this.emoji = params.spec.emoji;
|
|
370
|
+
this.disabled = params.spec.disabled ?? false;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
if (internalCustomId) return { component: new DynamicButton() };
|
|
374
|
+
return {
|
|
375
|
+
component: new DynamicButton(),
|
|
376
|
+
entry: {
|
|
377
|
+
id: componentId,
|
|
378
|
+
kind: params.modalId ? "modal-trigger" : "button",
|
|
379
|
+
label: params.spec.label,
|
|
380
|
+
callbackData: params.spec.callbackData,
|
|
381
|
+
modalId: params.modalId,
|
|
382
|
+
allowedUsers: params.spec.allowedUsers
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
function createSelectComponent(params) {
|
|
387
|
+
const type = normalizeLowercaseStringOrEmpty(params.spec.type ?? "string");
|
|
388
|
+
const componentId = params.componentId ?? createShortId("sel_");
|
|
389
|
+
const customId = buildDiscordComponentCustomId({ componentId });
|
|
390
|
+
const createEntry = (selectType, label, options) => ({
|
|
391
|
+
id: componentId,
|
|
392
|
+
kind: "select",
|
|
393
|
+
label,
|
|
394
|
+
callbackData: params.spec.callbackData,
|
|
395
|
+
selectType,
|
|
396
|
+
...options ? { options } : {},
|
|
397
|
+
allowedUsers: params.spec.allowedUsers
|
|
398
|
+
});
|
|
399
|
+
if (type === "string") {
|
|
400
|
+
const options = params.spec.options ?? [];
|
|
401
|
+
if (options.length === 0) throw new Error("String select menus require options");
|
|
402
|
+
class DynamicStringSelect extends StringSelectMenu {
|
|
403
|
+
constructor(..._args3) {
|
|
404
|
+
super(..._args3);
|
|
405
|
+
this.customId = customId;
|
|
406
|
+
this.options = options;
|
|
407
|
+
this.minValues = params.spec.minValues;
|
|
408
|
+
this.maxValues = params.spec.maxValues;
|
|
409
|
+
this.placeholder = params.spec.placeholder;
|
|
410
|
+
this.disabled = false;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
return {
|
|
414
|
+
component: new DynamicStringSelect(),
|
|
415
|
+
entry: createEntry("string", params.spec.placeholder ?? "select", options.map((option) => ({
|
|
416
|
+
value: option.value,
|
|
417
|
+
label: option.label
|
|
418
|
+
})))
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
if (type === "user") {
|
|
422
|
+
class DynamicUserSelect extends UserSelectMenu {
|
|
423
|
+
constructor(..._args4) {
|
|
424
|
+
super(..._args4);
|
|
425
|
+
this.customId = customId;
|
|
426
|
+
this.minValues = params.spec.minValues;
|
|
427
|
+
this.maxValues = params.spec.maxValues;
|
|
428
|
+
this.placeholder = params.spec.placeholder;
|
|
429
|
+
this.disabled = false;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return {
|
|
433
|
+
component: new DynamicUserSelect(),
|
|
434
|
+
entry: createEntry("user", params.spec.placeholder ?? "user select")
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
if (type === "role") {
|
|
438
|
+
class DynamicRoleSelect extends RoleSelectMenu {
|
|
439
|
+
constructor(..._args5) {
|
|
440
|
+
super(..._args5);
|
|
441
|
+
this.customId = customId;
|
|
442
|
+
this.minValues = params.spec.minValues;
|
|
443
|
+
this.maxValues = params.spec.maxValues;
|
|
444
|
+
this.placeholder = params.spec.placeholder;
|
|
445
|
+
this.disabled = false;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
component: new DynamicRoleSelect(),
|
|
450
|
+
entry: createEntry("role", params.spec.placeholder ?? "role select")
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
if (type === "mentionable") {
|
|
454
|
+
class DynamicMentionableSelect extends MentionableSelectMenu {
|
|
455
|
+
constructor(..._args6) {
|
|
456
|
+
super(..._args6);
|
|
457
|
+
this.customId = customId;
|
|
458
|
+
this.minValues = params.spec.minValues;
|
|
459
|
+
this.maxValues = params.spec.maxValues;
|
|
460
|
+
this.placeholder = params.spec.placeholder;
|
|
461
|
+
this.disabled = false;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
return {
|
|
465
|
+
component: new DynamicMentionableSelect(),
|
|
466
|
+
entry: createEntry("mentionable", params.spec.placeholder ?? "mentionable select")
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
class DynamicChannelSelect extends ChannelSelectMenu {
|
|
470
|
+
constructor(..._args7) {
|
|
471
|
+
super(..._args7);
|
|
472
|
+
this.customId = customId;
|
|
473
|
+
this.minValues = params.spec.minValues;
|
|
474
|
+
this.maxValues = params.spec.maxValues;
|
|
475
|
+
this.placeholder = params.spec.placeholder;
|
|
476
|
+
this.disabled = false;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return {
|
|
480
|
+
component: new DynamicChannelSelect(),
|
|
481
|
+
entry: createEntry("channel", params.spec.placeholder ?? "channel select")
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
function isSelectComponent(component) {
|
|
485
|
+
return component instanceof StringSelectMenu || component instanceof UserSelectMenu || component instanceof RoleSelectMenu || component instanceof MentionableSelectMenu || component instanceof ChannelSelectMenu;
|
|
486
|
+
}
|
|
487
|
+
function buildDiscordComponentMessage(params) {
|
|
488
|
+
const entries = [];
|
|
489
|
+
const consumptionGroupId = createShortId("grp_");
|
|
490
|
+
const modals = [];
|
|
491
|
+
const components = [];
|
|
492
|
+
const containerChildren = [];
|
|
493
|
+
const addEntry = (entry) => {
|
|
494
|
+
entries.push({
|
|
495
|
+
...entry,
|
|
496
|
+
sessionKey: params.sessionKey,
|
|
497
|
+
agentId: params.agentId,
|
|
498
|
+
accountId: params.accountId,
|
|
499
|
+
reusable: entry.reusable ?? params.spec.reusable,
|
|
500
|
+
consumptionGroupId
|
|
501
|
+
});
|
|
502
|
+
};
|
|
503
|
+
const text = params.spec.text ?? params.fallbackText;
|
|
504
|
+
if (text) containerChildren.push(new TextDisplay(text));
|
|
505
|
+
for (const block of params.spec.blocks ?? []) {
|
|
506
|
+
if (block.type === "text") {
|
|
507
|
+
containerChildren.push(new TextDisplay(block.text));
|
|
508
|
+
continue;
|
|
509
|
+
}
|
|
510
|
+
if (block.type === "section") {
|
|
511
|
+
const displays = buildTextDisplays(block.text, block.texts);
|
|
512
|
+
if (displays.length > 3) throw new Error("Section blocks support up to 3 text displays");
|
|
513
|
+
let accessory;
|
|
514
|
+
if (block.accessory?.type === "thumbnail") accessory = new Thumbnail(block.accessory.url);
|
|
515
|
+
else if (block.accessory?.type === "button") {
|
|
516
|
+
const { component, entry } = createButtonComponent({ spec: block.accessory.button });
|
|
517
|
+
accessory = component;
|
|
518
|
+
if (entry) addEntry(entry);
|
|
519
|
+
}
|
|
520
|
+
containerChildren.push(new Section(displays, accessory));
|
|
521
|
+
continue;
|
|
522
|
+
}
|
|
523
|
+
if (block.type === "separator") {
|
|
524
|
+
containerChildren.push(new Separator({
|
|
525
|
+
spacing: block.spacing,
|
|
526
|
+
divider: block.divider
|
|
527
|
+
}));
|
|
528
|
+
continue;
|
|
529
|
+
}
|
|
530
|
+
if (block.type === "media-gallery") {
|
|
531
|
+
containerChildren.push(new MediaGallery(block.items));
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
if (block.type === "file") {
|
|
535
|
+
containerChildren.push(new File(block.file, block.spoiler));
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
if (block.type === "actions") {
|
|
539
|
+
const rowComponents = [];
|
|
540
|
+
if (block.buttons) {
|
|
541
|
+
if (block.buttons.length > 5) throw new Error("Action rows support up to 5 buttons");
|
|
542
|
+
for (const button of block.buttons) {
|
|
543
|
+
const { component, entry } = createButtonComponent({ spec: button });
|
|
544
|
+
rowComponents.push(component);
|
|
545
|
+
if (entry) addEntry(entry);
|
|
546
|
+
}
|
|
547
|
+
} else if (block.select) {
|
|
548
|
+
const { component, entry } = createSelectComponent({ spec: block.select });
|
|
549
|
+
rowComponents.push(component);
|
|
550
|
+
addEntry(entry);
|
|
551
|
+
}
|
|
552
|
+
containerChildren.push(new Row(rowComponents));
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
if (params.spec.modal) {
|
|
556
|
+
const modalId = createShortId("mdl_");
|
|
557
|
+
const fields = params.spec.modal.fields.map((field, index) => ({
|
|
558
|
+
id: createShortId("fld_"),
|
|
559
|
+
name: normalizeModalFieldName(field.name, index),
|
|
560
|
+
label: field.label,
|
|
561
|
+
type: field.type,
|
|
562
|
+
description: field.description,
|
|
563
|
+
placeholder: field.placeholder,
|
|
564
|
+
required: field.required,
|
|
565
|
+
options: field.options,
|
|
566
|
+
minValues: field.minValues,
|
|
567
|
+
maxValues: field.maxValues,
|
|
568
|
+
minLength: field.minLength,
|
|
569
|
+
maxLength: field.maxLength,
|
|
570
|
+
style: field.style
|
|
571
|
+
}));
|
|
572
|
+
modals.push({
|
|
573
|
+
id: modalId,
|
|
574
|
+
title: params.spec.modal.title,
|
|
575
|
+
callbackData: params.spec.modal.callbackData,
|
|
576
|
+
fields,
|
|
577
|
+
sessionKey: params.sessionKey,
|
|
578
|
+
agentId: params.agentId,
|
|
579
|
+
accountId: params.accountId,
|
|
580
|
+
reusable: params.spec.reusable,
|
|
581
|
+
allowedUsers: params.spec.modal.allowedUsers
|
|
582
|
+
});
|
|
583
|
+
const { component, entry } = createButtonComponent({
|
|
584
|
+
spec: {
|
|
585
|
+
label: params.spec.modal.triggerLabel ?? "Open form",
|
|
586
|
+
style: params.spec.modal.triggerStyle ?? "primary",
|
|
587
|
+
allowedUsers: params.spec.modal.allowedUsers
|
|
588
|
+
},
|
|
589
|
+
modalId
|
|
590
|
+
});
|
|
591
|
+
if (entry) addEntry(entry);
|
|
592
|
+
const lastChild = containerChildren.at(-1);
|
|
593
|
+
if (lastChild instanceof Row) {
|
|
594
|
+
const row = lastChild;
|
|
595
|
+
const hasSelect = row.components.some((entry) => isSelectComponent(entry));
|
|
596
|
+
if (row.components.length < 5 && !hasSelect) row.addComponent(component);
|
|
597
|
+
else containerChildren.push(new Row([component]));
|
|
598
|
+
} else containerChildren.push(new Row([component]));
|
|
599
|
+
}
|
|
600
|
+
if (containerChildren.length === 0) throw new Error("components must include at least one block, text, or modal trigger");
|
|
601
|
+
const container = new Container(containerChildren, params.spec.container);
|
|
602
|
+
components.push(container);
|
|
603
|
+
const consumptionGroupEntryIds = entries.map((entry) => entry.id);
|
|
604
|
+
for (const entry of entries) entry.consumptionGroupEntryIds = consumptionGroupEntryIds;
|
|
605
|
+
return {
|
|
606
|
+
components,
|
|
607
|
+
entries,
|
|
608
|
+
modals
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
function buildDiscordComponentMessageFlags(components) {
|
|
612
|
+
return components.some((component) => component.isV2) ? MessageFlags.IsComponentsV2 : void 0;
|
|
613
|
+
}
|
|
614
|
+
//#endregion
|
|
615
|
+
//#region extensions/discord/src/components.modal.ts
|
|
616
|
+
const ModalBase = Modal ?? function ModalFallback() {};
|
|
617
|
+
function createModalFieldComponent(field) {
|
|
618
|
+
if (field.type === "text") {
|
|
619
|
+
class DynamicTextInput extends TextInput {
|
|
620
|
+
constructor(..._args) {
|
|
621
|
+
super(..._args);
|
|
622
|
+
this.customId = field.id;
|
|
623
|
+
this.style = mapTextInputStyle(field.style);
|
|
624
|
+
this.placeholder = field.placeholder;
|
|
625
|
+
this.required = field.required;
|
|
626
|
+
this.minLength = field.minLength;
|
|
627
|
+
this.maxLength = field.maxLength;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
return new DynamicTextInput();
|
|
631
|
+
}
|
|
632
|
+
if (field.type === "select") {
|
|
633
|
+
const options = field.options ?? [];
|
|
634
|
+
class DynamicModalSelect extends StringSelectMenu {
|
|
635
|
+
constructor(..._args2) {
|
|
636
|
+
super(..._args2);
|
|
637
|
+
this.customId = field.id;
|
|
638
|
+
this.options = options;
|
|
639
|
+
this.required = field.required;
|
|
640
|
+
this.minValues = field.minValues;
|
|
641
|
+
this.maxValues = field.maxValues;
|
|
642
|
+
this.placeholder = field.placeholder;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
return new DynamicModalSelect();
|
|
646
|
+
}
|
|
647
|
+
if (field.type === "role-select") {
|
|
648
|
+
class DynamicModalRoleSelect extends RoleSelectMenu {
|
|
649
|
+
constructor(..._args3) {
|
|
650
|
+
super(..._args3);
|
|
651
|
+
this.customId = field.id;
|
|
652
|
+
this.required = field.required;
|
|
653
|
+
this.minValues = field.minValues;
|
|
654
|
+
this.maxValues = field.maxValues;
|
|
655
|
+
this.placeholder = field.placeholder;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return new DynamicModalRoleSelect();
|
|
659
|
+
}
|
|
660
|
+
if (field.type === "user-select") {
|
|
661
|
+
class DynamicModalUserSelect extends UserSelectMenu {
|
|
662
|
+
constructor(..._args4) {
|
|
663
|
+
super(..._args4);
|
|
664
|
+
this.customId = field.id;
|
|
665
|
+
this.required = field.required;
|
|
666
|
+
this.minValues = field.minValues;
|
|
667
|
+
this.maxValues = field.maxValues;
|
|
668
|
+
this.placeholder = field.placeholder;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
return new DynamicModalUserSelect();
|
|
672
|
+
}
|
|
673
|
+
if (field.type === "checkbox") {
|
|
674
|
+
const options = field.options ?? [];
|
|
675
|
+
class DynamicCheckboxGroup extends CheckboxGroup {
|
|
676
|
+
constructor(..._args5) {
|
|
677
|
+
super(..._args5);
|
|
678
|
+
this.customId = field.id;
|
|
679
|
+
this.options = options;
|
|
680
|
+
this.required = field.required;
|
|
681
|
+
this.minValues = field.minValues;
|
|
682
|
+
this.maxValues = field.maxValues;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
return new DynamicCheckboxGroup();
|
|
686
|
+
}
|
|
687
|
+
const options = field.options ?? [];
|
|
688
|
+
class DynamicRadioGroup extends RadioGroup {
|
|
689
|
+
constructor(..._args6) {
|
|
690
|
+
super(..._args6);
|
|
691
|
+
this.customId = field.id;
|
|
692
|
+
this.options = options;
|
|
693
|
+
this.required = field.required;
|
|
694
|
+
this.minValues = field.minValues;
|
|
695
|
+
this.maxValues = field.maxValues;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
return new DynamicRadioGroup();
|
|
699
|
+
}
|
|
700
|
+
var DiscordFormModal = class extends ModalBase {
|
|
701
|
+
constructor(params) {
|
|
702
|
+
super();
|
|
703
|
+
this.customIdParser = parseDiscordModalCustomIdForInteraction;
|
|
704
|
+
this.title = params.title;
|
|
705
|
+
this.customId = buildDiscordModalCustomId(params.modalId);
|
|
706
|
+
this.components = params.fields.map((field) => {
|
|
707
|
+
const component = createModalFieldComponent(field);
|
|
708
|
+
class DynamicLabel extends Label {
|
|
709
|
+
constructor(..._args7) {
|
|
710
|
+
super(..._args7);
|
|
711
|
+
this.label = field.label;
|
|
712
|
+
this.description = field.description;
|
|
713
|
+
this.component = component;
|
|
714
|
+
this.customId = field.id;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
return new DynamicLabel(component);
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
async run() {
|
|
721
|
+
throw new Error("Modal handler is not registered for dynamic forms");
|
|
722
|
+
}
|
|
723
|
+
};
|
|
724
|
+
function createDiscordFormModal(entry) {
|
|
725
|
+
return new DiscordFormModal({
|
|
726
|
+
modalId: entry.id,
|
|
727
|
+
title: entry.title,
|
|
728
|
+
fields: entry.fields
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
//#endregion
|
|
732
|
+
//#region extensions/discord/src/components.ts
|
|
733
|
+
var components_exports = /* @__PURE__ */ __exportAll({
|
|
734
|
+
DISCORD_COMPONENT_ATTACHMENT_PREFIX: () => DISCORD_COMPONENT_ATTACHMENT_PREFIX,
|
|
735
|
+
DISCORD_COMPONENT_CUSTOM_ID_KEY: () => DISCORD_COMPONENT_CUSTOM_ID_KEY,
|
|
736
|
+
DISCORD_MODAL_CUSTOM_ID_KEY: () => DISCORD_MODAL_CUSTOM_ID_KEY,
|
|
737
|
+
DiscordFormModal: () => DiscordFormModal,
|
|
738
|
+
Modal: () => Modal,
|
|
739
|
+
buildDiscordComponentCustomId: () => buildDiscordComponentCustomId,
|
|
740
|
+
buildDiscordComponentMessage: () => buildDiscordComponentMessage,
|
|
741
|
+
buildDiscordComponentMessageFlags: () => buildDiscordComponentMessageFlags,
|
|
742
|
+
buildDiscordInteractiveComponents: () => buildDiscordInteractiveComponents,
|
|
743
|
+
buildDiscordModalCustomId: () => buildDiscordModalCustomId,
|
|
744
|
+
createDiscordFormModal: () => createDiscordFormModal,
|
|
745
|
+
formatDiscordComponentEventText: () => formatDiscordComponentEventText,
|
|
746
|
+
parseDiscordComponentCustomId: () => parseDiscordComponentCustomId,
|
|
747
|
+
parseDiscordComponentCustomIdForInteraction: () => parseDiscordComponentCustomIdForInteraction,
|
|
748
|
+
parseDiscordModalCustomId: () => parseDiscordModalCustomId,
|
|
749
|
+
parseDiscordModalCustomIdForInteraction: () => parseDiscordModalCustomIdForInteraction,
|
|
750
|
+
readDiscordComponentSpec: () => readDiscordComponentSpec,
|
|
751
|
+
resolveDiscordComponentAttachmentName: () => resolveDiscordComponentAttachmentName
|
|
752
|
+
});
|
|
753
|
+
function formatDiscordComponentEventText(params) {
|
|
754
|
+
if (params.kind === "button") return `Clicked "${params.label}".`;
|
|
755
|
+
const values = params.values ?? [];
|
|
756
|
+
if (values.length === 0) return `Updated "${params.label}".`;
|
|
757
|
+
return `Selected ${values.join(", ")} from "${params.label}".`;
|
|
758
|
+
}
|
|
759
|
+
//#endregion
|
|
760
|
+
export { parseDiscordModalCustomIdForInteraction as _, buildDiscordComponentMessage as a, readDiscordComponentSpec as c, DISCORD_MODAL_CUSTOM_ID_KEY as d, buildDiscordComponentCustomId as f, parseDiscordModalCustomId as g, parseDiscordComponentCustomIdForInteraction as h, createDiscordFormModal as i, resolveDiscordComponentAttachmentName as l, parseDiscordComponentCustomId as m, formatDiscordComponentEventText as n, buildDiscordComponentMessageFlags as o, buildDiscordModalCustomId as p, DiscordFormModal as r, DISCORD_COMPONENT_ATTACHMENT_PREFIX as s, components_exports as t, DISCORD_COMPONENT_CUSTOM_ID_KEY as u };
|