@openclaw/discord 2026.9.1-beta.1 → 2026.9.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.
Files changed (93) hide show
  1. package/dist/account-inspect-BY-ve3yH.js +45 -0
  2. package/dist/account-inspect-api.js +1 -1
  3. package/dist/{accounts-CfQ-vSyf.js → accounts-CwJQoLjM.js} +89 -45
  4. package/dist/action-runtime-api.js +1 -1
  5. package/dist/{activities-api-q-9PaaHH.js → activities-api-E-segZn6.js} +30 -17
  6. package/dist/activities-api.js +1 -1
  7. package/dist/{allow-list-BDMimASD.js → allow-list-C2JuH-R0.js} +10 -6
  8. package/dist/{api-DNVbJyEy.js → api-BfmEP6wp.js} +6 -5
  9. package/dist/api.js +18 -18
  10. package/dist/{approval-handler.runtime-B7qhK3fR.js → approval-handler.runtime-CW5k3mSa.js} +19 -12
  11. package/dist/{audit-CBEv_ERu.js → audit-B9rydv5a.js} +8 -7
  12. package/dist/{channel-Dx1tMTfx.js → channel-D93LnbTE.js} +29 -23
  13. package/dist/{channel-actions.runtime-CLWWu9nC.js → channel-actions.runtime-DMFv4doE.js} +16 -13
  14. package/dist/channel-config-api.js +1 -1
  15. package/dist/channel-plugin-api.js +1 -1
  16. package/dist/{channel.setup-DOzXS2Pk.js → channel.setup-DTL7kPOM.js} +18 -18
  17. package/dist/{components-B9V5o361.js → components-DmXYIQ26.js} +111 -149
  18. package/dist/{config-schema-BR13IAx6.js → config-schema-B797-Spt.js} +19 -12
  19. package/dist/{conversation-binding-route-DJYrY2TQ.js → conversation-binding-route-24afmvEC.js} +1 -1
  20. package/dist/{directory-config-BK6eqekJ.js → directory-config-BD4YL7wT.js} +2 -2
  21. package/dist/directory-contract-api.js +1 -1
  22. package/dist/{directory-live-DSAJSrJk.js → directory-live-BrFVc1Ds.js} +4 -4
  23. package/dist/{doctor-Cm7Y1pJ2.js → doctor-BUB41_lr.js} +5 -5
  24. package/dist/{doctor-contract-DsWvKIXF.js → doctor-contract-Co5vRCZ6.js} +9 -6
  25. package/dist/doctor-contract-api.js +3 -2
  26. package/dist/{handle-action.guild-admin-BdwCRHmm.js → handle-action.guild-admin-B0egstYq.js} +2 -2
  27. package/dist/index.js +1 -1
  28. package/dist/ingress-identity-BCzfPPYM.js +60 -0
  29. package/dist/{message-handler-BXpWZyni.js → message-handler-Qdw9c0j4.js} +14 -10
  30. package/dist/{message-handler.preflight-Ba5LAY_X.js → message-handler.preflight-Dxi2yBfR.js} +41 -101
  31. package/dist/{message-handler.process-3HEzmemS.js → message-handler.process-BYDjtxZJ.js} +83 -109
  32. package/dist/{message-text-aiwO5R2F.js → message-text-BRVqYm-t.js} +11 -6
  33. package/dist/{outbound-adapter-BE4jSq2d.js → outbound-adapter-DEhthWTk.js} +52 -67
  34. package/dist/{outbound-components-oLpg8Qzb.js → outbound-components-DehyxvA4.js} +5 -4
  35. package/dist/{outbound-session-route-Cg15ZFJd.js → outbound-session-route-BFGRF9fE.js} +55 -12
  36. package/dist/{owner-access-UlYi9t0M.js → owner-access-yc1sX7Gx.js} +7 -6
  37. package/dist/{pluralkit-Tiyl70dx.js → pluralkit-XmmAHoV6.js} +2 -2
  38. package/dist/{probe-n6ZXxK8V.js → probe-3ovFAp3b.js} +3 -3
  39. package/dist/{probe.runtime-CN4bdPfZ.js → probe.runtime-BckHn3cJ.js} +1 -1
  40. package/dist/{provider-B11xwilq.js → provider-DuDtKbF8.js} +294 -131
  41. package/dist/{provider-session.runtime-B9xe-Qaf.js → provider-session.runtime-BA2BPyZ4.js} +3 -3
  42. package/dist/provider.runtime-Db8YwZBv.js +2 -0
  43. package/dist/{realtime-session.runtime-CU8IQUS-.js → realtime-session.runtime-DgSbX6ay.js} +103 -163
  44. package/dist/{resolve-allowlist-common-BLoYaxEG.js → resolve-allowlist-common-BJ5UZNNT.js} +3 -3
  45. package/dist/{resolve-channels-C2sT_n67.js → resolve-channels-CYseD5Uw.js} +4 -4
  46. package/dist/{resolve-users-CzpjLwjy.js → resolve-users-DrmhDrqm.js} +5 -4
  47. package/dist/{retry-Cv4jCU5Z.js → retry-BNCxiyyR.js} +120 -32
  48. package/dist/{retry-after-DdLPmPoa.js → retry-after-BrLjLUJi.js} +2 -1
  49. package/dist/{runtime-BHrTlFkf.js → runtime-BbWNtfyq.js} +127 -93
  50. package/dist/{runtime-CY4PRMF-.js → runtime-DB7Fb6AU.js} +2 -2
  51. package/dist/runtime-api.js +19 -19
  52. package/dist/{secret-config-contract-B3i6WxV5.js → secret-config-contract-DFu9hfU8.js} +14 -6
  53. package/dist/secret-contract-api.js +1 -1
  54. package/dist/{security-audit-BfJhAXZp.js → security-audit-DKfK-iPY.js} +10 -11
  55. package/dist/security-audit-contract-api.js +1 -1
  56. package/dist/{security-audit.runtime-BVKF9VtY.js → security-audit.runtime-sKZyKgpx.js} +1 -1
  57. package/dist/{send-C49MFF9j.js → send-BnTEIeLE.js} +132 -100
  58. package/dist/{send.components-DKKAw5VX.js → send.components-BWVEcjRP.js} +21 -15
  59. package/dist/{send.outbound-zam0TrZx.js → send.outbound-b5xwHTlL.js} +35 -22
  60. package/dist/{send.shared-JjljcV4O.js → send.shared-5vxBTagO.js} +25 -18
  61. package/dist/{sender-identity-BJtfyise.js → sender-identity-Dt0imZyY.js} +1 -1
  62. package/dist/setup-plugin-api.js +1 -1
  63. package/dist/{shared-_5EcP4jW.js → shared-BSJWHEMA.js} +20 -14
  64. package/dist/{subagent-hooks-DQzvOptn.js → subagent-hooks-IzQKX4RQ.js} +2 -2
  65. package/dist/subagent-hooks-api.js +1 -1
  66. package/dist/{system-events-C7yxaHWP.js → system-events-BOiDS8b3.js} +2 -2
  67. package/dist/{target-resolver-vxIh6O3-.js → target-resolver-BVI8xSSC.js} +6 -5
  68. package/dist/targets-DbxVbq8k.js +3 -0
  69. package/dist/{thread-bindings-DW5F9vat.js → thread-bindings-D7mcaXQC.js} +6 -5
  70. package/dist/{thread-bindings.manager-ByOtwjo_.js → thread-bindings.manager-B1oySiVc.js} +37 -28
  71. package/dist/{thread-bindings.session-updates-CJb-BpPL.js → thread-bindings.session-updates-CC7HoQvt.js} +2 -1
  72. package/dist/{threading-agH1T_6s.js → threading-OQnL-0Zx.js} +8 -6
  73. package/dist/{timeouts-B9cy6RvQ.js → timeouts-D86uWLt_.js} +1 -1
  74. package/dist/{transcripts-source-BR11iHA4.js → transcripts-source-D8lH7AkN.js} +9 -4
  75. package/dist/transcripts-source-api.js +1 -1
  76. package/dist/{typing-Dc_YMY2e.js → typing-C9q0AQMb.js} +2 -2
  77. package/dist/{voice-runtime-DIeaa8fJ.js → voice-runtime-Dfhjh1tV.js} +433 -93
  78. package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/README.md +1 -1
  79. package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/conforms.d.ts +2 -0
  80. package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/package.json +3 -3
  81. package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/stubArray.d.ts +2 -0
  82. package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/stubObject.d.ts +2 -0
  83. package/node_modules/@discord/embedded-app-sdk/node_modules/@types/lodash/stubString.d.ts +2 -0
  84. package/node_modules/typebox/build/format/email.mjs +1 -1
  85. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +19 -1
  86. package/node_modules/typebox/package.json +1 -1
  87. package/openclaw.plugin.json +14 -6
  88. package/package.json +6 -5
  89. package/skills/discord/SKILL.md +1 -1
  90. package/dist/account-inspect-BDfKyuvL.js +0 -89
  91. package/dist/provider.runtime-DiYaHvOz.js +0 -2
  92. package/dist/sdk-runtime-4geQHtXc.js +0 -338
  93. package/dist/targets-CtTKvntJ.js +0 -3
@@ -1,13 +1,13 @@
1
- import { _ as parseDiscordTarget, h as normalizeDiscordMessagingTarget, m as looksLikeDiscordTargetId } from "./retry-Cv4jCU5Z.js";
2
- import { c as resolveDiscordAccount, i as listDiscordStartupAccountIds, l as resolveDiscordAccountAllowFrom, r as listDiscordAccountIds, s as resolveDefaultDiscordAccountId } from "./accounts-CfQ-vSyf.js";
1
+ import { g as normalizeDiscordMessagingTarget, h as looksLikeDiscordTargetId, v as parseDiscordTarget } from "./retry-BNCxiyyR.js";
2
+ import { c as resolveDiscordAccount, i as listDiscordStartupAccountIds, l as resolveDiscordAccountAllowFrom, r as listDiscordAccountIds, s as resolveDefaultDiscordAccountId } from "./accounts-CwJQoLjM.js";
3
3
  import { t as getDiscordRuntime } from "./runtime-DgnVQ7zW.js";
4
- import { u as withAbortTimeout } from "./timeouts-B9cy6RvQ.js";
5
- import { C as shouldSuppressLocalDiscordExecApprovalPrompt, D as isChannelExecApprovalClientEnabledFromConfig, E as createChannelNativeOriginTargetResolver, O as matchesApprovalRequestFilters, S as isDiscordExecApprovalClientEnabled, T as createChannelApproverDmTargetResolver, b as getDiscordExecApprovalApprovers, d as resolveDiscordCurrentConversationIdentity, f as resolveDiscordRuntimeBindingConversationId, p as discordMessageActions, s as resolveDiscordConversationRoute, t as resolveDiscordOutboundSessionRoute, w as createApproverRestrictedNativeApprovalCapability, x as isDiscordExecApprovalApprover, y as resolveRequiredDiscordChannelPermissions } from "./outbound-session-route-Cg15ZFJd.js";
6
- import { a as discordSecurityAdapter, c as buildTokenChannelStatusSummary, i as discordSetupContract, l as projectCredentialSnapshotFields, n as discordConfigAdapter, o as DEFAULT_ACCOUNT_ID, s as PAIRING_APPROVED_MESSAGE, t as createDiscordPluginBase, u as resolveConfiguredFromCredentialStatuses } from "./shared-_5EcP4jW.js";
4
+ import { u as withAbortTimeout } from "./timeouts-D86uWLt_.js";
5
+ import { C as shouldSuppressLocalDiscordExecApprovalPrompt, D as isChannelExecApprovalClientEnabledFromConfig, E as createChannelNativeOriginTargetResolver, O as matchesApprovalRequestFilters, S as isDiscordExecApprovalClientEnabled, T as createChannelApproverDmTargetResolver, b as getDiscordExecApprovalApprovers, d as resolveDiscordCurrentConversationIdentity, f as resolveDiscordRuntimeBindingConversationId, p as discordMessageActions, s as resolveDiscordConversationRoute, t as resolveDiscordOutboundSessionRoute, w as createApproverRestrictedNativeApprovalCapability, x as isDiscordExecApprovalApprover, y as resolveRequiredDiscordChannelPermissions } from "./outbound-session-route-BFGRF9fE.js";
6
+ import { a as discordSecurityAdapter, c as buildTokenChannelStatusSummary, i as discordSetupContract, l as projectCredentialSnapshotFields, n as discordConfigAdapter, o as DEFAULT_ACCOUNT_ID, s as PAIRING_APPROVED_MESSAGE, t as createDiscordPluginBase, u as resolveConfiguredFromCredentialStatuses } from "./shared-BSJWHEMA.js";
7
7
  import { r as openDiscordCommandDeployHashStore } from "./command-deploy-store-DFkBTViB.js";
8
- import { t as resolveDiscordConversationBindingRoute } from "./conversation-binding-route-DJYrY2TQ.js";
9
- import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-CJb-BpPL.js";
10
- import { n as discordOutbound } from "./outbound-adapter-BE4jSq2d.js";
8
+ import { t as resolveDiscordConversationBindingRoute } from "./conversation-binding-route-24afmvEC.js";
9
+ import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-CC7HoQvt.js";
10
+ import { n as discordOutbound } from "./outbound-adapter-DEhthWTk.js";
11
11
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-wJgsKPNF.js";
12
12
  import { t as defaultTopLevelPlacement } from "./thread-binding-api-BDZJD4na.js";
13
13
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
@@ -180,7 +180,11 @@ function createDiscordApprovalCapability(configOverride) {
180
180
  resolveApproverDmTargets: createDiscordApproverDmTargetResolver(configOverride),
181
181
  notifyOriginWhenDmOnly: true,
182
182
  nativeRuntime: createLazyChannelApprovalNativeRuntimeAdapter({
183
- eventKinds: ["exec", "plugin"],
183
+ eventKinds: [
184
+ "exec",
185
+ "plugin",
186
+ "system-agent"
187
+ ],
184
188
  isConfigured: ({ cfg, accountId }) => isDiscordExecApprovalClientEnabled({
185
189
  cfg,
186
190
  accountId,
@@ -192,7 +196,7 @@ function createDiscordApprovalCapability(configOverride) {
192
196
  request,
193
197
  configOverride
194
198
  }),
195
- load: async () => (await import("./approval-handler.runtime-B7qhK3fR.js")).discordApprovalNativeRuntime
199
+ load: async () => (await import("./approval-handler.runtime-CW5k3mSa.js")).discordApprovalNativeRuntime
196
200
  })
197
201
  });
198
202
  }
@@ -299,22 +303,22 @@ function resolveDiscordInboundConversation(params) {
299
303
  }
300
304
  //#endregion
301
305
  //#region extensions/discord/src/channel.loaders.ts
302
- const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-BK6eqekJ.js").then((n) => n.t));
303
- const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-C2sT_n67.js").then((n) => n.n));
304
- const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-CzpjLwjy.js").then((n) => n.n));
305
- const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-ByOtwjo_.js").then((n) => n.i));
306
- const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-vxIh6O3-.js").then((n) => n.r));
307
- const loadDiscordProviderRuntime = createLazyRuntimeModule(() => import("./provider.runtime-DiYaHvOz.js"));
308
- const loadDiscordProbeRuntime = createLazyRuntimeModule(() => import("./probe.runtime-CN4bdPfZ.js"));
306
+ const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-BD4YL7wT.js").then((n) => n.t));
307
+ const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-CYseD5Uw.js").then((n) => n.n));
308
+ const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-DrmhDrqm.js").then((n) => n.n));
309
+ const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-B1oySiVc.js").then((n) => n.i));
310
+ const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-BVI8xSSC.js").then((n) => n.r));
311
+ const loadDiscordProviderRuntime = createLazyRuntimeModule(() => import("./provider.runtime-Db8YwZBv.js"));
312
+ const loadDiscordProbeRuntime = createLazyRuntimeModule(() => import("./probe.runtime-BckHn3cJ.js"));
309
313
  async function probeDiscordStatusAccount(params) {
310
314
  const startedAtMs = Date.now();
311
315
  const runtime = await loadDiscordProbeRuntime();
312
316
  const remainingMs = Math.max(1, params.timeoutMs - Math.max(0, Date.now() - startedAtMs));
313
317
  return await runtime.probeDiscord(params.token, remainingMs, { includeApplication: true });
314
318
  }
315
- const loadDiscordAuditModule = createLazyRuntimeModule(() => import("./audit-CBEv_ERu.js").then((n) => n.n));
316
- const loadDiscordSendModule = createLazyRuntimeModule(() => import("./send-C49MFF9j.js").then((n) => n.t));
317
- const loadDiscordDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-DSAJSrJk.js").then((n) => n.t));
319
+ const loadDiscordAuditModule = createLazyRuntimeModule(() => import("./audit-B9rydv5a.js").then((n) => n.n));
320
+ const loadDiscordSendModule = createLazyRuntimeModule(() => import("./send-BnTEIeLE.js").then((n) => n.t));
321
+ const loadDiscordDirectoryLiveModule = createLazyRuntimeModule(() => import("./directory-live-BrFVc1Ds.js").then((n) => n.t));
318
322
  //#endregion
319
323
  //#region extensions/discord/src/conversation-route-owner.ts
320
324
  function inspectDiscordConversationRouteOwner(params) {
@@ -426,8 +430,9 @@ function resolveDiscordGroupRequireMention(params) {
426
430
  return resolveScopeRequireMention(resolveDiscordPolicyScope(params));
427
431
  }
428
432
  function resolveDiscordGroupToolPolicy(params) {
433
+ const scope = resolveDiscordPolicyScope(params);
429
434
  return resolveScopeToolsPolicy({
430
- ...resolveDiscordPolicyScope(params),
435
+ ...scope,
431
436
  senderPolicyMode: params.senderPolicyMode,
432
437
  senderId: params.senderId,
433
438
  senderName: params.senderName,
@@ -764,10 +769,11 @@ const discordPlugin = createChatChannelPlugin({
764
769
  }).map(toConversationLifecycleBinding)
765
770
  },
766
771
  heartbeat: { sendTyping: async ({ cfg, to, accountId, threadId }) => {
767
- const target = parseDiscordTarget(resolveDiscordAttachedOutboundTarget({
772
+ const resolvedTo = resolveDiscordAttachedOutboundTarget({
768
773
  to,
769
774
  threadId
770
- }), { defaultKind: "channel" });
775
+ });
776
+ const target = parseDiscordTarget(resolvedTo, { defaultKind: "channel" });
771
777
  if (!target || target.kind !== "channel") return;
772
778
  await (await loadDiscordSendModule()).sendTypingDiscord(target.id, {
773
779
  cfg,
@@ -1,11 +1,11 @@
1
- import { _ as parseDiscordTarget, v as resolveDiscordChannelId } from "./retry-Cv4jCU5Z.js";
2
- import { i as buildDiscordPresentationComponents, r as buildDiscordInteractiveComponents } from "./components-B9V5o361.js";
3
- import { a as readDiscordAutoArchiveDurationParam, t as handleDiscordAction } from "./runtime-BHrTlFkf.js";
4
- import "./targets-CtTKvntJ.js";
1
+ import { v as parseDiscordTarget, y as resolveDiscordChannelId } from "./retry-BNCxiyyR.js";
2
+ import { i as buildDiscordPresentationComponents, m as coerceDiscordComponentParam, r as buildDiscordInteractiveComponents } from "./components-DmXYIQ26.js";
3
+ import { a as readDiscordAutoArchiveDurationParam, t as handleDiscordAction } from "./runtime-BbWNtfyq.js";
4
+ import "./targets-DbxVbq8k.js";
5
5
  import "./action-runtime-api.js";
6
- import { h as discordInboundEventDelivery } from "./outbound-session-route-Cg15ZFJd.js";
7
- import { r as isDiscordComponentSpecWithinMessageLimit, t as DISCORD_PRESENTATION_CAPABILITIES } from "./outbound-components-oLpg8Qzb.js";
8
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-BdwCRHmm.js";
6
+ import { h as discordInboundEventDelivery } from "./outbound-session-route-BFGRF9fE.js";
7
+ import { r as isDiscordComponentSpecWithinMessageLimit, t as DISCORD_PRESENTATION_CAPABILITIES } from "./outbound-components-DehyxvA4.js";
8
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-B0egstYq.js";
9
9
  import { n as notifyDiscordActiveTurnThreadCreated, r as notifyDiscordActiveTurnThreadReplyDelivered } from "./active-turn-thread-route-fmHl1HNd.js";
10
10
  import { normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
11
11
  import { adaptMessagePresentationForChannel, normalizeLegacyInteractiveReply, normalizeMessagePresentation, renderMessagePresentationFallbackText } from "openclaw/plugin-sdk/interactive-runtime";
@@ -88,18 +88,20 @@ async function handleDiscordMessageAction(ctx) {
88
88
  const asVoice = readBooleanParam(params, "asVoice") === true;
89
89
  const mediaUrl = readStringParam$1(params, "media", { trim: false }) ?? readStringParam$1(params, "path", { trim: false }) ?? readStringParam$1(params, "filePath", { trim: false });
90
90
  const requestedContent = readStringParam$1(params, "message", { allowEmpty: true });
91
- const presentation = params.components == null ? normalizeMessagePresentation(params.presentation) : void 0;
92
- const generatedPresentationComponents = buildDiscordPresentationComponents(presentation ? adaptMessagePresentationForChannel({
91
+ const explicitComponents = coerceDiscordComponentParam(params.components);
92
+ const presentation = explicitComponents == null ? normalizeMessagePresentation(params.presentation) : void 0;
93
+ const adaptedPresentation = presentation ? adaptMessagePresentationForChannel({
93
94
  presentation,
94
95
  capabilities: DISCORD_PRESENTATION_CAPABILITIES
95
- }) : void 0);
96
+ }) : void 0;
97
+ const generatedPresentationComponents = buildDiscordPresentationComponents(adaptedPresentation);
96
98
  const presentationComponents = generatedPresentationComponents && isDiscordComponentSpecWithinMessageLimit({
97
99
  spec: generatedPresentationComponents,
98
100
  fallbackText: requestedContent,
99
101
  includesMedia: Boolean(mediaUrl)
100
102
  }) ? generatedPresentationComponents : void 0;
101
103
  const presentationFellBack = Boolean(generatedPresentationComponents && !presentationComponents);
102
- const rawComponents = presentationFellBack ? void 0 : params.components ?? presentationComponents ?? buildDiscordInteractiveComponents(normalizeLegacyInteractiveReply(params.interactive));
104
+ const rawComponents = presentationFellBack ? void 0 : explicitComponents ?? presentationComponents ?? buildDiscordInteractiveComponents(normalizeLegacyInteractiveReply(params.interactive));
103
105
  const hasComponents = Boolean(rawComponents) && (typeof rawComponents === "function" || typeof rawComponents === "object");
104
106
  const components = hasComponents ? rawComponents : void 0;
105
107
  const rawEmbeds = params.embeds;
@@ -170,10 +172,11 @@ async function handleDiscordMessageAction(ctx) {
170
172
  return withAdoptedThreadReplyRoute(result, to, sessionKey);
171
173
  }
172
174
  if (action === "react") {
173
- const messageId = normalizeOptionalStringifiedId(resolveReactionMessageId({
175
+ const messageIdRaw = resolveReactionMessageId({
174
176
  args: params,
175
177
  toolContext: ctx.toolContext
176
- })) ?? "";
178
+ });
179
+ const messageId = normalizeOptionalStringifiedId(messageIdRaw) ?? "";
177
180
  if (!messageId) throw new Error("messageId required. Provide messageId explicitly or react to the current inbound message.");
178
181
  const emoji = readStringParam$1(params, "emoji", { allowEmpty: true });
179
182
  const remove = readBooleanParam(params, "remove");
@@ -1,2 +1,2 @@
1
- import { t as DiscordChannelConfigSchema } from "./config-schema-BR13IAx6.js";
1
+ import { t as DiscordChannelConfigSchema } from "./config-schema-B797-Spt.js";
2
2
  export { DiscordChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as discordPlugin } from "./channel-Dx1tMTfx.js";
1
+ import { t as discordPlugin } from "./channel-D93LnbTE.js";
2
2
  export { discordPlugin };
@@ -1,8 +1,7 @@
1
- import { h as resolveDiscordToken, l as resolveDiscordAccountAllowFrom, o as mergeDiscordAccountConfig, s as resolveDefaultDiscordAccountId, u as resolveDiscordAccountConfig } from "./accounts-CfQ-vSyf.js";
2
- import { n as inspectDiscordAccountTokenState } from "./account-inspect-BDfKyuvL.js";
3
- import { i as discordSetupContract, t as createDiscordPluginBase } from "./shared-_5EcP4jW.js";
4
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-C2sT_n67.js";
5
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-CzpjLwjy.js";
1
+ import { _ as inspectDiscordAccountTokenState, h as resolveDiscordToken, l as resolveDiscordAccountAllowFrom, o as mergeDiscordAccountConfig, s as resolveDefaultDiscordAccountId, u as resolveDiscordAccountConfig } from "./accounts-CwJQoLjM.js";
2
+ import { i as discordSetupContract, t as createDiscordPluginBase } from "./shared-BSJWHEMA.js";
3
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-CYseD5Uw.js";
4
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-DrmhDrqm.js";
6
5
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
7
6
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
7
  import { resolveBasicAllowFromEntries } from "openclaw/plugin-sdk/allow-from";
@@ -279,22 +278,23 @@ async function resolveDiscordGroupAllowlist(params) {
279
278
  })
280
279
  });
281
280
  }
281
+ const discordSetupWizard = createDiscordSetupWizardBase({
282
+ promptAllowFrom: promptDiscordAllowFrom,
283
+ resolveAllowFromEntries: async ({ cfg, accountId, credentialValues, entries }) => await resolveDiscordAllowFromEntries({
284
+ token: resolveDiscordToken(cfg, { accountId }).token || (typeof credentialValues.token === "string" ? credentialValues.token : ""),
285
+ entries
286
+ }),
287
+ resolveGroupAllowlist: async ({ cfg, accountId, credentialValues, entries }) => await resolveDiscordGroupAllowlist({
288
+ cfg,
289
+ accountId,
290
+ credentialValues,
291
+ entries
292
+ })
293
+ });
282
294
  //#endregion
283
295
  //#region extensions/discord/src/channel.setup.ts
284
296
  const discordSetupPlugin = { ...createDiscordPluginBase({
285
- setupWizard: createDiscordSetupWizardBase({
286
- promptAllowFrom: promptDiscordAllowFrom,
287
- resolveAllowFromEntries: async ({ cfg, accountId, credentialValues, entries }) => await resolveDiscordAllowFromEntries({
288
- token: resolveDiscordToken(cfg, { accountId }).token || (typeof credentialValues.token === "string" ? credentialValues.token : ""),
289
- entries
290
- }),
291
- resolveGroupAllowlist: async ({ cfg, accountId, credentialValues, entries }) => await resolveDiscordGroupAllowlist({
292
- cfg,
293
- accountId,
294
- credentialValues,
295
- entries
296
- })
297
- }),
297
+ setupWizard: discordSetupWizard,
298
298
  setupContract: discordSetupContract
299
299
  }) };
300
300
  //#endregion
@@ -1,8 +1,9 @@
1
- import { $ as TextInput, Q as RadioGroup, X as Label, Y as CheckboxGroup, Z as Modal, at as MediaGallery, ct as Row, dt as StringSelectMenu, et as Button, ft as TextDisplay, gt as parseCustomId, it as LinkButton, lt as Section, mt as UserSelectMenu, nt as Container, on as __exportAll, ot as MentionableSelectMenu, pt as Thumbnail, rt as File, st as RoleSelectMenu, tt as ChannelSelectMenu, ut as Separator } from "./retry-Cv4jCU5Z.js";
1
+ import { $ as RadioGroup, Q as Modal, X as CheckboxGroup, Z as Label, _t as parseCustomId, at as LinkButton, ct as RoleSelectMenu, dt as Separator, et as TextInput, ft as StringSelectMenu, ht as UserSelectMenu, it as File, lt as Row, mt as Thumbnail, nt as ChannelSelectMenu, ot as MediaGallery, pt as TextDisplay, rt as Container, sn as __exportAll, st as MentionableSelectMenu, tt as Button, ut as Section } from "./retry-BNCxiyyR.js";
2
2
  import { ButtonStyle, MessageFlags, TextInputStyle } from "discord-api-types/v10";
3
3
  import crypto from "node:crypto";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { legacyInteractiveReplyToPresentation, resolveMessagePresentationActionValue, resolveMessagePresentationButtonAction, resolveMessagePresentationOptionAction } from "openclaw/plugin-sdk/interactive-runtime";
6
+ import { resolveAskUserQuestionOptionIndex } from "openclaw/plugin-sdk/reply-payload";
6
7
  import { buildApprovalResolutionRef } from "openclaw/plugin-sdk/approval-reference-runtime";
7
8
  //#region extensions/discord/src/custom-id-codec.ts
8
9
  /**
@@ -391,6 +392,14 @@ function parseComponentBlock(raw, label) {
391
392
  default: throw new Error(`${label}.type must be a supported component block`);
392
393
  }
393
394
  }
395
+ function coerceDiscordComponentParam(raw) {
396
+ if (typeof raw !== "string") return raw;
397
+ try {
398
+ return JSON.parse(raw);
399
+ } catch {
400
+ return raw;
401
+ }
402
+ }
394
403
  function readDiscordComponentSpec(raw) {
395
404
  if (raw === void 0 || raw === null) return null;
396
405
  const obj = requireObject(raw, "components");
@@ -429,6 +438,46 @@ function readDiscordComponentSpec(raw) {
429
438
  function createShortId(prefix) {
430
439
  return `${prefix}${crypto.randomBytes(6).toString("base64url")}`;
431
440
  }
441
+ const selectMenuConstructors = {
442
+ string: class extends StringSelectMenu {
443
+ constructor(..._args) {
444
+ super(..._args);
445
+ this.customId = "";
446
+ this.options = [];
447
+ }
448
+ },
449
+ user: class extends UserSelectMenu {
450
+ constructor(..._args2) {
451
+ super(..._args2);
452
+ this.customId = "";
453
+ }
454
+ },
455
+ role: class extends RoleSelectMenu {
456
+ constructor(..._args3) {
457
+ super(..._args3);
458
+ this.customId = "";
459
+ }
460
+ },
461
+ mentionable: class extends MentionableSelectMenu {
462
+ constructor(..._args4) {
463
+ super(..._args4);
464
+ this.customId = "";
465
+ }
466
+ },
467
+ channel: class extends ChannelSelectMenu {
468
+ constructor(..._args5) {
469
+ super(..._args5);
470
+ this.customId = "";
471
+ }
472
+ }
473
+ };
474
+ function createDiscordSelectMenu(type, customId, options) {
475
+ const SelectMenu = selectMenuConstructors[type];
476
+ const select = new SelectMenu();
477
+ select.customId = customId;
478
+ if (select instanceof StringSelectMenu) select.options = options ?? [];
479
+ return select;
480
+ }
432
481
  function buildTextDisplays(text, texts) {
433
482
  if (texts && texts.length > 0) return texts.map((entry) => new TextDisplay(entry));
434
483
  if (text) return [new TextDisplay(text)];
@@ -440,8 +489,8 @@ function createButtonComponent(params) {
440
489
  if (!params.spec.url) throw new Error("Link buttons require a url");
441
490
  const linkUrl = params.spec.url;
442
491
  class DynamicLinkButton extends LinkButton {
443
- constructor(..._args) {
444
- super(..._args);
492
+ constructor(..._args6) {
493
+ super(..._args6);
445
494
  this.label = params.spec.label;
446
495
  this.url = linkUrl;
447
496
  this.disabled = params.spec.disabled ?? false;
@@ -456,8 +505,8 @@ function createButtonComponent(params) {
456
505
  modalId: params.modalId
457
506
  });
458
507
  class DynamicButton extends Button {
459
- constructor(..._args2) {
460
- super(..._args2);
508
+ constructor(..._args7) {
509
+ super(..._args7);
461
510
  this.label = params.spec.label;
462
511
  this.customId = customId;
463
512
  this.style = style;
@@ -484,99 +533,34 @@ function createSelectComponent(params) {
484
533
  const type = normalizeLowercaseStringOrEmpty(params.spec.type ?? "string");
485
534
  const componentId = params.componentId ?? createShortId("sel_");
486
535
  const customId = buildDiscordComponentCustomId({ componentId });
487
- const createEntry = (selectType, label, options) => ({
488
- id: componentId,
489
- kind: "select",
490
- label,
491
- ...params.spec.callbackData !== void 0 ? { callbackData: params.spec.callbackData } : {},
492
- ...params.spec.callbackDataKind !== void 0 ? { callbackDataKind: params.spec.callbackDataKind } : {},
493
- selectType,
494
- ...options ? { options } : {},
495
- ...params.spec.allowedUsers !== void 0 ? { allowedUsers: params.spec.allowedUsers } : {}
496
- });
497
- if (type === "string") {
498
- const options = params.spec.options ?? [];
499
- if (options.length === 0) throw new Error("String select menus require options");
500
- class DynamicStringSelect extends StringSelectMenu {
501
- constructor(..._args3) {
502
- super(..._args3);
503
- this.customId = customId;
504
- this.options = options;
505
- this.minValues = params.spec.minValues;
506
- this.maxValues = params.spec.maxValues;
507
- this.placeholder = params.spec.placeholder;
508
- this.disabled = false;
509
- }
510
- }
511
- return {
512
- component: new DynamicStringSelect(),
513
- entry: createEntry("string", params.spec.placeholder ?? "select", options.map((option) => ({
536
+ const options = params.spec.options ?? [];
537
+ if (type === "string" && options.length === 0) throw new Error("String select menus require options");
538
+ const select = createDiscordSelectMenu(type, customId, options);
539
+ select.minValues = params.spec.minValues;
540
+ select.maxValues = params.spec.maxValues;
541
+ select.placeholder = params.spec.placeholder;
542
+ select.disabled = false;
543
+ return {
544
+ component: select,
545
+ entry: {
546
+ id: componentId,
547
+ kind: "select",
548
+ label: params.spec.placeholder ?? {
549
+ string: "select",
550
+ user: "user select",
551
+ role: "role select",
552
+ mentionable: "mentionable select",
553
+ channel: "channel select"
554
+ }[type],
555
+ ...params.spec.callbackData !== void 0 ? { callbackData: params.spec.callbackData } : {},
556
+ ...params.spec.callbackDataKind !== void 0 ? { callbackDataKind: params.spec.callbackDataKind } : {},
557
+ selectType: type,
558
+ ...type === "string" ? { options: options.map((option) => ({
514
559
  value: option.value,
515
560
  label: option.label
516
- })))
517
- };
518
- }
519
- if (type === "user") {
520
- class DynamicUserSelect extends UserSelectMenu {
521
- constructor(..._args4) {
522
- super(..._args4);
523
- this.customId = customId;
524
- this.minValues = params.spec.minValues;
525
- this.maxValues = params.spec.maxValues;
526
- this.placeholder = params.spec.placeholder;
527
- this.disabled = false;
528
- }
529
- }
530
- return {
531
- component: new DynamicUserSelect(),
532
- entry: createEntry("user", params.spec.placeholder ?? "user select")
533
- };
534
- }
535
- if (type === "role") {
536
- class DynamicRoleSelect extends RoleSelectMenu {
537
- constructor(..._args5) {
538
- super(..._args5);
539
- this.customId = customId;
540
- this.minValues = params.spec.minValues;
541
- this.maxValues = params.spec.maxValues;
542
- this.placeholder = params.spec.placeholder;
543
- this.disabled = false;
544
- }
545
- }
546
- return {
547
- component: new DynamicRoleSelect(),
548
- entry: createEntry("role", params.spec.placeholder ?? "role select")
549
- };
550
- }
551
- if (type === "mentionable") {
552
- class DynamicMentionableSelect extends MentionableSelectMenu {
553
- constructor(..._args6) {
554
- super(..._args6);
555
- this.customId = customId;
556
- this.minValues = params.spec.minValues;
557
- this.maxValues = params.spec.maxValues;
558
- this.placeholder = params.spec.placeholder;
559
- this.disabled = false;
560
- }
561
- }
562
- return {
563
- component: new DynamicMentionableSelect(),
564
- entry: createEntry("mentionable", params.spec.placeholder ?? "mentionable select")
565
- };
566
- }
567
- class DynamicChannelSelect extends ChannelSelectMenu {
568
- constructor(..._args7) {
569
- super(..._args7);
570
- this.customId = customId;
571
- this.minValues = params.spec.minValues;
572
- this.maxValues = params.spec.maxValues;
573
- this.placeholder = params.spec.placeholder;
574
- this.disabled = false;
561
+ })) } : {},
562
+ ...params.spec.allowedUsers !== void 0 ? { allowedUsers: params.spec.allowedUsers } : {}
575
563
  }
576
- }
577
- return {
578
- component: new DynamicChannelSelect(),
579
- entry: createEntry("channel", params.spec.placeholder ?? "channel select")
580
564
  };
581
565
  }
582
566
  function isSelectComponent(component) {
@@ -728,52 +712,19 @@ function createModalFieldComponent(field) {
728
712
  }
729
713
  return new DynamicTextInput();
730
714
  }
731
- if (field.type === "select") {
732
- const options = field.options ?? [];
733
- class DynamicModalSelect extends StringSelectMenu {
734
- constructor(..._args2) {
735
- super(..._args2);
736
- this.customId = field.id;
737
- this.options = options;
738
- this.required = field.required;
739
- this.minValues = field.minValues;
740
- this.maxValues = field.maxValues;
741
- this.placeholder = field.placeholder;
742
- }
743
- }
744
- return new DynamicModalSelect();
745
- }
746
- if (field.type === "role-select") {
747
- class DynamicModalRoleSelect extends RoleSelectMenu {
748
- constructor(..._args3) {
749
- super(..._args3);
750
- this.customId = field.id;
751
- this.required = field.required;
752
- this.minValues = field.minValues;
753
- this.maxValues = field.maxValues;
754
- this.placeholder = field.placeholder;
755
- }
756
- }
757
- return new DynamicModalRoleSelect();
758
- }
759
- if (field.type === "user-select") {
760
- class DynamicModalUserSelect extends UserSelectMenu {
761
- constructor(..._args4) {
762
- super(..._args4);
763
- this.customId = field.id;
764
- this.required = field.required;
765
- this.minValues = field.minValues;
766
- this.maxValues = field.maxValues;
767
- this.placeholder = field.placeholder;
768
- }
769
- }
770
- return new DynamicModalUserSelect();
715
+ if (field.type === "select" || field.type === "role-select" || field.type === "user-select") {
716
+ const select = createDiscordSelectMenu(field.type === "select" ? "string" : field.type === "role-select" ? "role" : "user", field.id, field.options);
717
+ select.required = field.required;
718
+ select.minValues = field.minValues;
719
+ select.maxValues = field.maxValues;
720
+ select.placeholder = field.placeholder;
721
+ return select;
771
722
  }
772
723
  if (field.type === "checkbox") {
773
724
  const options = field.options ?? [];
774
725
  class DynamicCheckboxGroup extends CheckboxGroup {
775
- constructor(..._args5) {
776
- super(..._args5);
726
+ constructor(..._args2) {
727
+ super(..._args2);
777
728
  this.customId = field.id;
778
729
  this.options = options;
779
730
  this.required = field.required;
@@ -785,8 +736,8 @@ function createModalFieldComponent(field) {
785
736
  }
786
737
  const options = field.options ?? [];
787
738
  class DynamicRadioGroup extends RadioGroup {
788
- constructor(..._args6) {
789
- super(..._args6);
739
+ constructor(..._args3) {
740
+ super(..._args3);
790
741
  this.customId = field.id;
791
742
  this.options = options;
792
743
  this.required = field.required;
@@ -803,8 +754,8 @@ var DiscordFormModal = class extends ModalBase {
803
754
  this.components = params.fields.map((field) => {
804
755
  const component = createModalFieldComponent(field);
805
756
  class DynamicLabel extends Label {
806
- constructor(..._args7) {
807
- super(..._args7);
757
+ constructor(..._args4) {
758
+ super(..._args4);
808
759
  this.label = field.label;
809
760
  this.description = field.description;
810
761
  this.component = component;
@@ -919,7 +870,7 @@ function resolveDiscordSelectCallbackDataKind(options) {
919
870
  if (renderableOptions.some((option) => option.action)) return "mixed";
920
871
  }
921
872
  const DISCORD_INTERACTIVE_BUTTON_ROW_SIZE = 5;
922
- function buildDiscordButtonComponent(button, optionIndex) {
873
+ function buildDiscordButtonComponent(button, options) {
923
874
  const action = resolveMessagePresentationButtonAction(button);
924
875
  if (!action) return;
925
876
  if (action.type === "approval") {
@@ -933,6 +884,13 @@ function buildDiscordButtonComponent(button, optionIndex) {
933
884
  };
934
885
  }
935
886
  if (action.type === "question") {
887
+ if ("intent" in action) return;
888
+ const optionIndex = resolveAskUserQuestionOptionIndex({
889
+ questionOptionIndices: options.questionOptionIndices,
890
+ questionId: action.questionId,
891
+ optionValue: action.optionValue
892
+ });
893
+ if (optionIndex === void 0) return;
936
894
  const internalCustomId = buildDiscordQuestionCustomId({
937
895
  questionId: action.questionId,
938
896
  optionIndex
@@ -965,8 +923,11 @@ function buildDiscordButtonComponent(button, optionIndex) {
965
923
  if (button.reusable === true) component.reusable = true;
966
924
  return component;
967
925
  }
968
- function appendDiscordButtonBlocks(blocks, buttons) {
969
- const components = buttons.map((button, optionIndex) => buildDiscordButtonComponent(button, optionIndex)).filter((button) => Boolean(button));
926
+ function appendDiscordButtonBlocks(blocks, buttons, options) {
927
+ const components = buttons.flatMap((button) => {
928
+ const component = buildDiscordButtonComponent(button, options);
929
+ return component ? [component] : [];
930
+ });
970
931
  for (let index = 0; index < components.length; index += DISCORD_INTERACTIVE_BUTTON_ROW_SIZE) blocks.push({
971
932
  type: "actions",
972
933
  buttons: components.slice(index, index + DISCORD_INTERACTIVE_BUTTON_ROW_SIZE)
@@ -993,10 +954,10 @@ function appendDiscordSelectBlock(blocks, block) {
993
954
  /**
994
955
  * @deprecated Use buildDiscordPresentationComponents with MessagePresentation.
995
956
  */
996
- function buildDiscordInteractiveComponents(interactive) {
997
- return buildDiscordPresentationComponents(interactive ? legacyInteractiveReplyToPresentation(interactive) : void 0);
957
+ function buildDiscordInteractiveComponents(interactive, options = {}) {
958
+ return buildDiscordPresentationComponents(interactive ? legacyInteractiveReplyToPresentation(interactive) : void 0, options);
998
959
  }
999
- function buildDiscordPresentationComponents(presentation) {
960
+ function buildDiscordPresentationComponents(presentation, options = {}) {
1000
961
  if (!presentation) return;
1001
962
  const blocks = [];
1002
963
  if (presentation.title) blocks.push({
@@ -1017,7 +978,7 @@ function buildDiscordPresentationComponents(presentation) {
1017
978
  continue;
1018
979
  }
1019
980
  if (block.type === "buttons") {
1020
- appendDiscordButtonBlocks(blocks, block.buttons);
981
+ appendDiscordButtonBlocks(blocks, block.buttons, options);
1021
982
  continue;
1022
983
  }
1023
984
  if (block.type === "select") appendDiscordSelectBlock(blocks, block);
@@ -1037,6 +998,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
1037
998
  buildDiscordComponentMessageFlags: () => buildDiscordComponentMessageFlags,
1038
999
  buildDiscordInteractiveComponents: () => buildDiscordInteractiveComponents,
1039
1000
  buildDiscordModalCustomId: () => buildDiscordModalCustomId,
1001
+ coerceDiscordComponentParam: () => coerceDiscordComponentParam,
1040
1002
  createDiscordFormModal: () => createDiscordFormModal,
1041
1003
  formatDiscordComponentEventText: () => formatDiscordComponentEventText,
1042
1004
  parseDiscordComponentCustomId: () => parseDiscordComponentCustomId,
@@ -1053,4 +1015,4 @@ function formatDiscordComponentEventText(params) {
1053
1015
  return `Selected ${values.join(", ")} from "${params.label}".`;
1054
1016
  }
1055
1017
  //#endregion
1056
- export { parseDiscordComponentCustomId as C, decodeCustomIdComponent as D, parseDiscordModalCustomIdForInteraction as E, encodeCustomIdComponent as O, parseDiscordActivityCustomIdForInteraction as S, parseDiscordModalCustomId as T, DISCORD_MODAL_CUSTOM_ID_KEY as _, shared_interactive_exports as a, buildDiscordModalCustomId as b, parseExecApprovalData as c, buildDiscordComponentMessage as d, buildDiscordComponentMessageFlags as f, DISCORD_COMPONENT_CUSTOM_ID_KEY as g, resolveDiscordComponentAttachmentName as h, buildDiscordPresentationComponents as i, DiscordFormModal as l, readDiscordComponentSpec as m, formatDiscordComponentEventText as n, parseDiscordQuestionData as o, DISCORD_COMPONENT_ATTACHMENT_PREFIX as p, buildDiscordInteractiveComponents as r, buildExecApprovalCustomId as s, components_exports as t, createDiscordFormModal as u, buildDiscordActivityCustomId as v, parseDiscordComponentCustomIdForInteraction as w, parseDiscordActivityCustomId as x, buildDiscordComponentCustomId as y };
1018
+ export { parseDiscordActivityCustomIdForInteraction as C, parseDiscordModalCustomIdForInteraction as D, parseDiscordModalCustomId as E, decodeCustomIdComponent as O, parseDiscordActivityCustomId as S, parseDiscordComponentCustomIdForInteraction as T, DISCORD_COMPONENT_CUSTOM_ID_KEY as _, shared_interactive_exports as a, buildDiscordComponentCustomId as b, parseExecApprovalData as c, buildDiscordComponentMessage as d, buildDiscordComponentMessageFlags as f, resolveDiscordComponentAttachmentName as g, readDiscordComponentSpec as h, buildDiscordPresentationComponents as i, encodeCustomIdComponent as k, DiscordFormModal as l, coerceDiscordComponentParam as m, formatDiscordComponentEventText as n, parseDiscordQuestionData as o, DISCORD_COMPONENT_ATTACHMENT_PREFIX as p, buildDiscordInteractiveComponents as r, buildExecApprovalCustomId as s, components_exports as t, createDiscordFormModal as u, DISCORD_MODAL_CUSTOM_ID_KEY as v, parseDiscordComponentCustomId as w, buildDiscordModalCustomId as x, buildDiscordActivityCustomId as y };