@openclaw/discord 2026.5.10-beta.3 → 2026.5.10-beta.5

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 (62) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/api.js +11 -11
  3. package/dist/{approval-handler.runtime-QQvVrAin.js → approval-handler.runtime-S-ircYcz.js} +2 -2
  4. package/dist/{approval-native-BDlnLQG_.js → approval-native-Gtqpyfdj.js} +1 -1
  5. package/dist/{audit-CENh7omr.js → audit-BliEqCEc.js} +3 -3
  6. package/dist/{channel-C2mnTEHH.js → channel-Cg-h13vl.js} +13 -13
  7. package/dist/{channel-actions-lTOl9APZ.js → channel-actions-Cn_K00Vy.js} +2 -2
  8. package/dist/{channel-actions.runtime-DkWxNAOU.js → channel-actions.runtime-DcsRvPnx.js} +4 -4
  9. package/dist/channel-config-api.js +1 -1
  10. package/dist/channel-plugin-api.js +1 -1
  11. package/dist/{channel.setup-C93JuQDu.js → channel.setup-DR-xVYso.js} +3 -3
  12. package/dist/{components-p6A38u-l.js → components-Dxq2mU57.js} +2 -2
  13. package/dist/{config-schema-BGn5I3_3.js → config-schema-D2KGskAp.js} +4 -0
  14. package/dist/contract-api.js +2 -2
  15. package/dist/{directory-config-DcLLbgOl.js → directory-config-CDl4JTCA.js} +1 -1
  16. package/dist/directory-contract-api.js +1 -1
  17. package/dist/{directory-live-BlQGhGnP.js → directory-live-ApUXOSj0.js} +1 -1
  18. package/dist/{discord-DtHMmZqJ.js → discord-BqYcwxvG.js} +9 -2
  19. package/dist/{handle-action.guild-admin-DK4qn7VI.js → handle-action.guild-admin-C4phin-a.js} +1 -1
  20. package/dist/{manager.runtime-BwmDuFKc.js → manager.runtime-DqMGETqp.js} +92 -3
  21. package/dist/{message-handler-rpldWWli.js → message-handler-DIsnboy2.js} +4 -4
  22. package/dist/{message-handler.preflight-AmsXmfPQ.js → message-handler.preflight-BRH-dv1o.js} +7 -7
  23. package/dist/{message-handler.process-CFXedLgv.js → message-handler.process-Bs5wropA.js} +8 -8
  24. package/dist/{outbound-adapter-BFYTJnuu.js → outbound-adapter-lWjkSeyP.js} +6 -6
  25. package/dist/{pluralkit-CUfobeQu.js → pluralkit-B1HTaBc9.js} +1 -1
  26. package/dist/{provider-BwBvgS-6.js → provider-Bm-jb8A3.js} +18 -17
  27. package/dist/{provider-session.runtime-CQ47Qqhw.js → provider-session.runtime-BZyP90-i.js} +3 -3
  28. package/dist/provider.runtime-DMRM_oVO.js +2 -0
  29. package/dist/{reply-delivery-B-ZT5sTB.js → reply-delivery-CUSK6SA_.js} +2 -2
  30. package/dist/{resolve-channels-BY1N3Z0a.js → resolve-channels-JNt3Ak6P.js} +1 -1
  31. package/dist/{resolve-users-B-vqNDF8.js → resolve-users-CrjbUxrL.js} +1 -1
  32. package/dist/{route-resolution-BqohSL1Z.js → route-resolution-BFfF9xmG.js} +1 -1
  33. package/dist/{runtime-DIud5x90.js → runtime-CdnAT8R5.js} +6 -6
  34. package/dist/runtime-api.actions.js +2 -2
  35. package/dist/runtime-api.js +17 -17
  36. package/dist/runtime-api.lookup.js +4 -4
  37. package/dist/runtime-api.monitor-Dlwle_VC.js +6 -0
  38. package/dist/runtime-api.monitor.js +4 -4
  39. package/dist/runtime-api.send.js +4 -4
  40. package/dist/runtime-api.threads.js +3 -3
  41. package/dist/{send-B6cf6KUd.js → send-DCFuSiBi.js} +9 -8
  42. package/dist/{send.components-DW_Msuv0.js → send.components-DxDqPJZQ.js} +4 -4
  43. package/dist/{send.outbound-hYzJwDFo.js → send.outbound-PM0J0F60.js} +2 -2
  44. package/dist/{send.shared-CM0Y9Zet.js → send.shared-Dza0jdso.js} +2 -2
  45. package/dist/setup-plugin-api.js +1 -1
  46. package/dist/{shared-SFQQ0HYF.js → shared-Yp_M6Cfp.js} +1 -1
  47. package/dist/{shared-interactive-D39V9Wtn.js → shared-interactive-DavY6jYt.js} +1 -1
  48. package/dist/{subagent-hooks-BIRuy2jQ.js → subagent-hooks-CtN-hfXy.js} +2 -2
  49. package/dist/subagent-hooks-api.js +1 -1
  50. package/dist/{system-events-BeVImqnV.js → system-events-B04UOvPg.js} +1 -1
  51. package/dist/{target-resolver-e2yTfSRX.js → target-resolver-CgJei-kD.js} +2 -2
  52. package/dist/{targets-5F3C_rpD.js → targets-DToZUkgV.js} +1 -1
  53. package/dist/test-api.js +3 -3
  54. package/dist/{thread-bindings-DAuEDkZ9.js → thread-bindings-B4of4OmR.js} +4 -4
  55. package/dist/{thread-bindings.discord-api-CafRxxsp.js → thread-bindings.discord-api-BAw15EQb.js} +4 -4
  56. package/dist/{thread-bindings.manager-BFxbZfDU.js → thread-bindings.manager-DNFl10CA.js} +3 -3
  57. package/dist/{threading-DQWFoM_L.js → threading-CLZ3v7-y.js} +1 -1
  58. package/dist/{typing-BYeVSviE.js → typing-_jePdFIw.js} +1 -1
  59. package/openclaw.plugin.json +46 -0
  60. package/package.json +4 -4
  61. package/dist/provider.runtime-BK7tfnHE.js +0 -2
  62. package/dist/runtime-api.monitor-BqwLzcIq.js +0 -6
@@ -1,2 +1,2 @@
1
- import { t as handleDiscordAction } from "./runtime-DIud5x90.js";
1
+ import { t as handleDiscordAction } from "./runtime-CdnAT8R5.js";
2
2
  export { handleDiscordAction };
package/dist/api.js CHANGED
@@ -3,23 +3,23 @@ import { t as inspectDiscordAccount } from "./account-inspect-D7jL5YDH.js";
3
3
  import { n as resolveDiscordChannelId, t as parseDiscordTarget } from "./target-parsing-D-H7nnh2.js";
4
4
  import { n as fetchDiscord, r as requestDiscord, t as DiscordApiError } from "./api-DzNBVTto.js";
5
5
  import { i as normalizeDiscordOutboundTarget, n as looksLikeDiscordTargetId, r as normalizeDiscordMessagingTarget } from "./normalize-Cu94FOqy.js";
6
- import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-e2yTfSRX.js";
7
- import { _ as parseDiscordModalCustomIdForInteraction, a as buildDiscordComponentMessage, c as readDiscordComponentSpec, d as DISCORD_MODAL_CUSTOM_ID_KEY, f as buildDiscordComponentCustomId, g as parseDiscordModalCustomId, h as parseDiscordComponentCustomIdForInteraction, i as createDiscordFormModal, l as resolveDiscordComponentAttachmentName, m as parseDiscordComponentCustomId, n as formatDiscordComponentEventText, o as buildDiscordComponentMessageFlags, p as buildDiscordModalCustomId, r as DiscordFormModal, s as DISCORD_COMPONENT_ATTACHMENT_PREFIX, u as DISCORD_COMPONENT_CUSTOM_ID_KEY } from "./components-p6A38u-l.js";
8
- import { t as buildDiscordInteractiveComponents } from "./shared-interactive-D39V9Wtn.js";
9
- import "./targets-5F3C_rpD.js";
6
+ import { i as parseDiscordSendTarget, n as resolveDiscordTarget } from "./target-resolver-CgJei-kD.js";
7
+ import { _ as parseDiscordModalCustomIdForInteraction, a as buildDiscordComponentMessage, c as readDiscordComponentSpec, d as DISCORD_MODAL_CUSTOM_ID_KEY, f as buildDiscordComponentCustomId, g as parseDiscordModalCustomId, h as parseDiscordComponentCustomIdForInteraction, i as createDiscordFormModal, l as resolveDiscordComponentAttachmentName, m as parseDiscordComponentCustomId, n as formatDiscordComponentEventText, o as buildDiscordComponentMessageFlags, p as buildDiscordModalCustomId, r as DiscordFormModal, s as DISCORD_COMPONENT_ATTACHMENT_PREFIX, u as DISCORD_COMPONENT_CUSTOM_ID_KEY } from "./components-Dxq2mU57.js";
8
+ import { t as buildDiscordInteractiveComponents } from "./shared-interactive-DavY6jYt.js";
9
+ import "./targets-DToZUkgV.js";
10
10
  import { a as shouldSuppressLocalDiscordExecApprovalPrompt, i as isDiscordExecApprovalClientEnabled, n as getDiscordExecApprovalApprovers, r as isDiscordExecApprovalApprover } from "./approval-shared-BFnWKSQD.js";
11
- import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-C2mnTEHH.js";
11
+ import { i as resolveDiscordGroupToolPolicy, n as collectDiscordStatusIssues, r as resolveDiscordGroupRequireMention, t as discordPlugin } from "./channel-Cg-h13vl.js";
12
12
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-BV82IME9.js";
13
- import { t as discordSetupPlugin } from "./channel.setup-C93JuQDu.js";
14
- import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-BIRuy2jQ.js";
15
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-DK4qn7VI.js";
16
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-DcLLbgOl.js";
17
- import { t as fetchPluralKitMessageInfo } from "./pluralkit-CUfobeQu.js";
13
+ import { t as discordSetupPlugin } from "./channel.setup-DR-xVYso.js";
14
+ import { n as handleDiscordSubagentEnded, r as handleDiscordSubagentSpawning, t as handleDiscordSubagentDeliveryTarget } from "./subagent-hooks-CtN-hfXy.js";
15
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-C4phin-a.js";
16
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CDl4JTCA.js";
17
+ import { t as fetchPluralKitMessageInfo } from "./pluralkit-B1HTaBc9.js";
18
18
  import { a as resolveDiscordPrivilegedIntentsFromFlags, i as probeDiscord, n as fetchDiscordApplicationSummary, r as parseApplicationIdFromToken, t as fetchDiscordApplicationId } from "./probe-BZtr8qle.js";
19
19
  import { t as collectDiscordSecurityAuditFindings } from "./security-audit-BQ_sGK3J.js";
20
20
  import { a as mergeAbortSignals, i as DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, r as DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-C3FYXWJX.js";
21
21
  import { resolveOpenProviderRuntimeGroupPolicy as resolveDiscordRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
22
22
  //#region extensions/discord/api.ts
23
- const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-DkWxNAOU.js")).handleDiscordMessageAction(...args);
23
+ const handleDiscordMessageAction = async (...args) => (await import("./channel-actions.runtime-DcsRvPnx.js")).handleDiscordMessageAction(...args);
24
24
  //#endregion
25
25
  export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_COMPONENT_ATTACHMENT_PREFIX, DISCORD_COMPONENT_CUSTOM_ID_KEY, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS, DISCORD_MODAL_CUSTOM_ID_KEY, DiscordApiError, DiscordFormModal, buildDiscordComponentCustomId, buildDiscordComponentMessage, buildDiscordComponentMessageFlags, buildDiscordInteractiveComponents, buildDiscordModalCustomId, collectDiscordSecurityAuditFindings, collectDiscordStatusIssues, createDiscordActionGate, createDiscordFormModal, discordPlugin, discordSetupPlugin, fetchDiscord, fetchDiscordApplicationId, fetchDiscordApplicationSummary, fetchPluralKitMessageInfo, formatDiscordComponentEventText, getDiscordExecApprovalApprovers, handleDiscordMessageAction, handleDiscordSubagentDeliveryTarget, handleDiscordSubagentEnded, handleDiscordSubagentSpawning, inspectDiscordAccount, isDiscordExecApprovalApprover, isDiscordExecApprovalClientEnabled, listDiscordAccountIds, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, listEnabledDiscordAccounts, looksLikeDiscordTargetId, mergeAbortSignals, mergeDiscordAccountConfig, normalizeDiscordMessagingTarget, normalizeDiscordOutboundTarget, normalizeExplicitDiscordSessionKey, parseApplicationIdFromToken, parseDiscordComponentCustomId, parseDiscordComponentCustomIdForInteraction as parseDiscordComponentCustomIdForCarbon, parseDiscordComponentCustomIdForInteraction, parseDiscordModalCustomId, parseDiscordModalCustomIdForInteraction as parseDiscordModalCustomIdForCarbon, parseDiscordModalCustomIdForInteraction, parseDiscordSendTarget, parseDiscordTarget, probeDiscord, readDiscordComponentSpec, requestDiscord, resolveDefaultDiscordAccountId, resolveDiscordAccount, resolveDiscordAccountConfig, resolveDiscordChannelId, resolveDiscordComponentAttachmentName, resolveDiscordGroupRequireMention, resolveDiscordGroupToolPolicy, resolveDiscordMaxLinesPerMessage, resolveDiscordPrivilegedIntentsFromFlags, resolveDiscordRuntimeGroupPolicy, resolveDiscordTarget, shouldSuppressLocalDiscordExecApprovalPrompt, tryHandleDiscordMessageActionGuildAdmin };
@@ -1,6 +1,6 @@
1
- import { $ as createChannelMessage, A as Button, B as Separator, H as TextDisplay, J as createUserDmChannel, M as Container, Pt as __exportAll, R as Row, it as editChannelMessage, nt as deleteChannelMessage, w as serializePayload } from "./discord-DtHMmZqJ.js";
1
+ import { Ft as __exportAll, N as Container, T as serializePayload, U as TextDisplay, V as Separator, Y as createUserDmChannel, at as editChannelMessage, et as createChannelMessage, j as Button, rt as deleteChannelMessage, z as Row } from "./discord-BqYcwxvG.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-D7jL5YDH.js";
3
- import { A as createDiscordClient, y as stripUndefinedFields } from "./send.shared-CM0Y9Zet.js";
3
+ import { A as createDiscordClient, y as stripUndefinedFields } from "./send.shared-Dza0jdso.js";
4
4
  import { i as isDiscordExecApprovalClientEnabled, t as shouldHandleDiscordApprovalRequest } from "./approval-shared-BFnWKSQD.js";
5
5
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { ButtonStyle } from "discord-api-types/v10";
@@ -140,7 +140,7 @@ function createDiscordApprovalCapability(configOverride) {
140
140
  request,
141
141
  configOverride
142
142
  }),
143
- load: async () => (await import("./approval-handler.runtime-QQvVrAin.js").then((n) => n.t)).discordApprovalNativeRuntime
143
+ load: async () => (await import("./approval-handler.runtime-S-ircYcz.js").then((n) => n.t)).discordApprovalNativeRuntime
144
144
  })
145
145
  });
146
146
  }
@@ -1,7 +1,7 @@
1
- import { Pt as __exportAll } from "./discord-DtHMmZqJ.js";
1
+ import { Ft as __exportAll } from "./discord-BqYcwxvG.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-D7jL5YDH.js";
3
- import { T as fetchChannelPermissionsDiscord } from "./send.shared-CM0Y9Zet.js";
4
- import "./send-B6cf6KUd.js";
3
+ import { T as fetchChannelPermissionsDiscord } from "./send.shared-Dza0jdso.js";
4
+ import "./send-DCFuSiBi.js";
5
5
  import { n as collectDiscordAuditChannelIdsForAccount, t as auditDiscordChannelPermissionsWithFetcher } from "./audit-core-BgDZSkIR.js";
6
6
  //#region extensions/discord/src/audit.ts
7
7
  var audit_exports = /* @__PURE__ */ __exportAll({
@@ -5,13 +5,13 @@ import { t as resolveDiscordOutboundSessionRoute } from "./outbound-session-rout
5
5
  import { n as looksLikeDiscordTargetId, r as normalizeDiscordMessagingTarget } from "./normalize-Cu94FOqy.js";
6
6
  import { t as getDiscordRuntime } from "./runtime-BqCoo-zp.js";
7
7
  import { a as shouldSuppressLocalDiscordExecApprovalPrompt } from "./approval-shared-BFnWKSQD.js";
8
- import { t as getDiscordApprovalCapability } from "./approval-native-BDlnLQG_.js";
8
+ import { t as getDiscordApprovalCapability } from "./approval-native-Gtqpyfdj.js";
9
9
  import { r as resolveRequiredDiscordChannelPermissions } from "./audit-core-BgDZSkIR.js";
10
- import { t as discordMessageActions$1 } from "./channel-actions-lTOl9APZ.js";
10
+ import { t as discordMessageActions$1 } from "./channel-actions-Cn_K00Vy.js";
11
11
  import { n as resolveDiscordCurrentConversationIdentity } from "./conversation-identity-CvIx6J7M.js";
12
12
  import { n as setThreadBindingMaxAgeBySessionKey, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-D18cCLmN.js";
13
- import { n as discordOutbound } from "./outbound-adapter-BFYTJnuu.js";
14
- import { i as discordSecurityAdapter, n as discordConfigAdapter, r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-SFQQ0HYF.js";
13
+ import { n as discordOutbound } from "./outbound-adapter-lWjkSeyP.js";
14
+ import { i as discordSecurityAdapter, n as discordConfigAdapter, r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-Yp_M6Cfp.js";
15
15
  import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-BV82IME9.js";
16
16
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
17
17
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
@@ -129,13 +129,13 @@ let discordProbeRuntimePromise;
129
129
  let discordAuditModulePromise;
130
130
  let discordSendModulePromise;
131
131
  let discordDirectoryLiveModulePromise;
132
- const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-DcLLbgOl.js").then((n) => n.t));
133
- const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-BY1N3Z0a.js").then((n) => n.n));
134
- const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-B-vqNDF8.js").then((n) => n.n));
135
- const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-BFxbZfDU.js").then((n) => n.a));
136
- const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-e2yTfSRX.js").then((n) => n.r));
132
+ const loadDiscordDirectoryConfigModule = createLazyRuntimeModule(() => import("./directory-config-CDl4JTCA.js").then((n) => n.t));
133
+ const loadDiscordResolveChannelsModule = createLazyRuntimeModule(() => import("./resolve-channels-JNt3Ak6P.js").then((n) => n.n));
134
+ const loadDiscordResolveUsersModule = createLazyRuntimeModule(() => import("./resolve-users-CrjbUxrL.js").then((n) => n.n));
135
+ const loadDiscordThreadBindingsManagerModule = createLazyRuntimeModule(() => import("./thread-bindings.manager-DNFl10CA.js").then((n) => n.a));
136
+ const loadDiscordTargetResolverModule = createLazyRuntimeModule(() => import("./target-resolver-CgJei-kD.js").then((n) => n.r));
137
137
  async function loadDiscordProviderRuntime() {
138
- discordProviderRuntimePromise ??= import("./provider.runtime-BK7tfnHE.js");
138
+ discordProviderRuntimePromise ??= import("./provider.runtime-DMRM_oVO.js");
139
139
  return await discordProviderRuntimePromise;
140
140
  }
141
141
  async function loadDiscordProbeRuntime() {
@@ -143,15 +143,15 @@ async function loadDiscordProbeRuntime() {
143
143
  return await discordProbeRuntimePromise;
144
144
  }
145
145
  async function loadDiscordAuditModule() {
146
- discordAuditModulePromise ??= import("./audit-CENh7omr.js").then((n) => n.n);
146
+ discordAuditModulePromise ??= import("./audit-BliEqCEc.js").then((n) => n.n);
147
147
  return await discordAuditModulePromise;
148
148
  }
149
149
  async function loadDiscordSendModule() {
150
- discordSendModulePromise ??= import("./send-B6cf6KUd.js").then((n) => n.t);
150
+ discordSendModulePromise ??= import("./send-DCFuSiBi.js").then((n) => n.t);
151
151
  return await discordSendModulePromise;
152
152
  }
153
153
  async function loadDiscordDirectoryLiveModule() {
154
- discordDirectoryLiveModulePromise ??= import("./directory-live-BlQGhGnP.js").then((n) => n.t);
154
+ discordDirectoryLiveModulePromise ??= import("./directory-live-ApUXOSj0.js").then((n) => n.t);
155
155
  return await discordDirectoryLiveModulePromise;
156
156
  }
157
157
  //#endregion
@@ -1,13 +1,13 @@
1
1
  import { r as listDiscordAccountIds, t as createDiscordActionGate } from "./accounts-BcwyaFd-.js";
2
2
  import { t as inspectDiscordAccount } from "./account-inspect-D7jL5YDH.js";
3
- import { c as readDiscordComponentSpec } from "./components-p6A38u-l.js";
3
+ import { c as readDiscordComponentSpec } from "./components-Dxq2mU57.js";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { createUnionActionGate } from "openclaw/plugin-sdk/channel-actions";
6
6
  import { extractToolSend } from "openclaw/plugin-sdk/tool-send";
7
7
  //#region extensions/discord/src/channel-actions.ts
8
8
  let discordChannelActionsRuntimePromise;
9
9
  async function loadDiscordChannelActionsRuntime() {
10
- discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-DkWxNAOU.js");
10
+ discordChannelActionsRuntimePromise ??= import("./channel-actions.runtime-DcsRvPnx.js");
11
11
  return await discordChannelActionsRuntimePromise;
12
12
  }
13
13
  function listDiscoverableDiscordAccounts(cfg) {
@@ -1,9 +1,9 @@
1
1
  import { n as resolveDiscordChannelId } from "./target-parsing-D-H7nnh2.js";
2
- import { t as handleDiscordAction } from "./runtime-DIud5x90.js";
3
- import { n as buildDiscordPresentationComponents, t as buildDiscordInteractiveComponents } from "./shared-interactive-D39V9Wtn.js";
4
- import "./targets-5F3C_rpD.js";
2
+ import { t as handleDiscordAction } from "./runtime-CdnAT8R5.js";
3
+ import { n as buildDiscordPresentationComponents, t as buildDiscordInteractiveComponents } from "./shared-interactive-DavY6jYt.js";
4
+ import "./targets-DToZUkgV.js";
5
5
  import "./action-runtime-api.js";
6
- import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-DK4qn7VI.js";
6
+ import { t as tryHandleDiscordMessageActionGuildAdmin } from "./handle-action.guild-admin-C4phin-a.js";
7
7
  import { normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
9
9
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -1,2 +1,2 @@
1
- import { t as DiscordChannelConfigSchema } from "./config-schema-BGn5I3_3.js";
1
+ import { t as DiscordChannelConfigSchema } from "./config-schema-D2KGskAp.js";
2
2
  export { DiscordChannelConfigSchema };
@@ -1,2 +1,2 @@
1
- import { t as discordPlugin } from "./channel-C2mnTEHH.js";
1
+ import { t as discordPlugin } from "./channel-Cg-h13vl.js";
2
2
  export { discordPlugin };
@@ -1,8 +1,8 @@
1
1
  import { n as resolveDiscordToken } from "./token-BZtonk7d.js";
2
2
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, l as resolveDiscordAccountConfig, o as resolveDefaultDiscordAccountId } from "./accounts-BcwyaFd-.js";
3
- import { r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-SFQQ0HYF.js";
4
- import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-BY1N3Z0a.js";
5
- import { t as resolveDiscordUserAllowlist } from "./resolve-users-B-vqNDF8.js";
3
+ import { r as discordSetupAdapter, t as createDiscordPluginBase } from "./shared-Yp_M6Cfp.js";
4
+ import { t as resolveDiscordChannelAllowlist } from "./resolve-channels-JNt3Ak6P.js";
5
+ import { t as resolveDiscordUserAllowlist } from "./resolve-users-CrjbUxrL.js";
6
6
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
7
7
  import { hasConfiguredSecretInput, normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
8
8
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,5 +1,5 @@
1
- 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, Pt as __exportAll, 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-DtHMmZqJ.js";
2
- import { t as buildDiscordInteractiveComponents } from "./shared-interactive-D39V9Wtn.js";
1
+ import { A as TextInput, B as Section, D as Label, E as CheckboxGroup, F as LinkButton, Ft as __exportAll, G as UserSelectMenu, H as StringSelectMenu, I as MediaGallery, L as MentionableSelectMenu, M as ChannelSelectMenu, N as Container, O as Modal, P as File, R as RoleSelectMenu, U as TextDisplay, V as Separator, W as Thumbnail, j as Button, k as RadioGroup, q as parseCustomId, z as Row } from "./discord-BqYcwxvG.js";
2
+ import { t as buildDiscordInteractiveComponents } from "./shared-interactive-DavY6jYt.js";
3
3
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { ButtonStyle, MessageFlags, TextInputStyle } from "discord-api-types/v10";
5
5
  import crypto from "node:crypto";
@@ -231,6 +231,10 @@ const DiscordChannelConfigSchema = buildChannelConfigSchema(DiscordConfigSchema,
231
231
  label: "Discord Voice Auto-Join",
232
232
  help: "Voice channels to auto-join on startup (list of guildId/channelId entries)."
233
233
  },
234
+ "voice.allowedChannels": {
235
+ label: "Discord Voice Allowed Channels",
236
+ help: "Optional voice channel residency allowlist. When set, /vc join, auto-join, and bot voice-state moves are restricted to these guildId/channelId entries. Leave unset to allow any voice channel."
237
+ },
234
238
  "voice.daveEncryption": {
235
239
  label: "Discord Voice DAVE Encryption",
236
240
  help: "Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this)."
@@ -2,7 +2,7 @@ import { n as normalizeCompatibilityConfig, t as legacyConfigRules } from "./doc
2
2
  import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-BCQNNS7N.js";
3
3
  import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-DkCMKSvb.js";
4
4
  import { t as deriveLegacySessionChatType } from "./session-contract-D871HDFG.js";
5
- import { r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-BFxbZfDU.js";
6
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-DcLLbgOl.js";
5
+ import { r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-DNFl10CA.js";
6
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CDl4JTCA.js";
7
7
  import { t as collectDiscordSecurityAuditFindings } from "./security-audit-BQ_sGK3J.js";
8
8
  export { collectDiscordSecurityAuditFindings, collectRuntimeConfigAssignments, collectUnsupportedSecretRefConfigCandidates, createThreadBindingManager, deriveLegacySessionChatType, __testing as discordThreadBindingTesting, legacyConfigRules, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, normalizeCompatibilityConfig, secretTargetRegistryEntries, unsupportedSecretRefSurfacePatterns };
@@ -1,4 +1,4 @@
1
- import { Pt as __exportAll } from "./discord-DtHMmZqJ.js";
1
+ import { Ft as __exportAll } from "./discord-BqYcwxvG.js";
2
2
  import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, o as resolveDefaultDiscordAccountId } from "./accounts-BcwyaFd-.js";
3
3
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
4
4
  import { createResolvedDirectoryEntriesLister } from "openclaw/plugin-sdk/directory-config-runtime";
@@ -1,2 +1,2 @@
1
- import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-DcLLbgOl.js";
1
+ import { n as listDiscordDirectoryGroupsFromConfig, r as listDiscordDirectoryPeersFromConfig } from "./directory-config-CDl4JTCA.js";
2
2
  export { listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig };
@@ -1,4 +1,4 @@
1
- import { Pt as __exportAll } from "./discord-DtHMmZqJ.js";
1
+ import { Ft as __exportAll } from "./discord-BqYcwxvG.js";
2
2
  import { t as normalizeDiscordToken } from "./token-BZtonk7d.js";
3
3
  import { s as resolveDiscordAccount } from "./accounts-BcwyaFd-.js";
4
4
  import { t as rememberDiscordDirectoryUser } from "./directory-cache-Ddl-Oxue.js";
@@ -2654,9 +2654,15 @@ var PresenceUpdateListener = class extends BaseListener {
2654
2654
  this.type = GatewayDispatchEvents.PresenceUpdate;
2655
2655
  }
2656
2656
  };
2657
- var ThreadUpdateListener = class extends BaseListener {
2657
+ var VoiceStateUpdateListener = class extends BaseListener {
2658
2658
  constructor(..._args8) {
2659
2659
  super(..._args8);
2660
+ this.type = GatewayDispatchEvents.VoiceStateUpdate;
2661
+ }
2662
+ };
2663
+ var ThreadUpdateListener = class extends BaseListener {
2664
+ constructor(..._args9) {
2665
+ super(..._args9);
2660
2666
  this.type = GatewayDispatchEvents.ThreadUpdate;
2661
2667
  }
2662
2668
  };
@@ -2725,6 +2731,7 @@ var discord_exports = /* @__PURE__ */ __exportAll({
2725
2731
  User: () => User,
2726
2732
  UserSelectMenu: () => UserSelectMenu,
2727
2733
  UserSelectMenuInteraction: () => UserSelectMenuInteraction,
2734
+ VoiceStateUpdateListener: () => VoiceStateUpdateListener,
2728
2735
  addGuildMemberRole: () => addGuildMemberRole,
2729
2736
  channelFactory: () => channelFactory,
2730
2737
  clean: () => clean$3,
@@ -2791,4 +2798,4 @@ var discord_exports = /* @__PURE__ */ __exportAll({
2791
2798
  import * as import_discord_api_types_v10 from "discord-api-types/v10";
2792
2799
  __reExport(discord_exports, import_discord_api_types_v10);
2793
2800
  //#endregion
2794
- export { createChannelMessage as $, Button as A, putChannelPermission as At, Separator as B, User as C, getGuildVoiceState as Ct, Modal as D, listGuildRoles as Dt, Label as E, listGuildEmojis as Et, MediaGallery as F, BaseMessageInteractiveComponent as G, TextDisplay as H, MentionableSelectMenu as I, createUserDmChannel as J, parseCustomId as K, RoleSelectMenu as L, Container as M, removeGuildMemberRole as Mt, File as N, timeoutGuildMember as Nt, RadioGroup as O, listGuildScheduledEvents as Ot, LinkButton as P, __exportAll as Pt, listMessageReactionUsers as Q, Row as R, Message as S, getGuildMember as St, CheckboxGroup as T, listGuildChannels as Tt, Thumbnail as U, StringSelectMenu as V, UserSelectMenu as W, createOwnMessageReaction as X, getCurrentUser as Y, deleteOwnMessageReaction as Z, readDiscordMessage as _, createGuildEmoji as _t, MessageReactionRemoveListener as a, getChannel as at, CommandWithSubcommands as b, deleteChannelPermission as bt, ResumedListener as c, listChannelMessages as ct, Client as d, searchGuildMessages as dt, createThread as et, Plugin as f, sendChannelTyping as ft, readDiscordCode as g, createGuildChannel as gt, RateLimitError as h, createGuildBan as ht, MessageReactionAddListener as i, editChannelMessage as it, ChannelSelectMenu as j, removeGuildMember as jt, TextInput as k, moveGuildChannels as kt, ThreadUpdateListener as l, listChannelPins as lt, DiscordError as m, addGuildMemberRole as mt, InteractionCreateListener as n, deleteChannelMessage as nt, PresenceUpdateListener as o, getChannelMessage as ot, RequestClient as p, unpinChannelMessage as pt, createChannelWebhook as q, MessageCreateListener as r, editChannel as rt, ReadyListener as s, listChannelArchivedThreads as st, discord_exports as t, deleteChannel as tt, Embed as u, pinChannelMessage as ut, readRetryAfter as v, createGuildScheduledEvent as vt, serializePayload as w, listGuildActiveThreads as wt, Guild as x, getGuild as xt, Command as y, createGuildSticker as yt, Section as z };
2801
+ export { listMessageReactionUsers as $, TextInput as A, moveGuildChannels as At, Section as B, Message as C, getGuildMember as Ct, Label as D, listGuildEmojis as Dt, CheckboxGroup as E, listGuildChannels as Et, LinkButton as F, __exportAll as Ft, UserSelectMenu as G, StringSelectMenu as H, MediaGallery as I, createChannelWebhook as J, BaseMessageInteractiveComponent as K, MentionableSelectMenu as L, ChannelSelectMenu as M, removeGuildMember as Mt, Container as N, removeGuildMemberRole as Nt, Modal as O, listGuildRoles as Ot, File as P, timeoutGuildMember as Pt, deleteOwnMessageReaction as Q, RoleSelectMenu as R, Guild as S, getGuild as St, serializePayload as T, listGuildActiveThreads as Tt, TextDisplay as U, Separator as V, Thumbnail as W, getCurrentUser as X, createUserDmChannel as Y, createOwnMessageReaction as Z, readDiscordCode as _, createGuildChannel as _t, MessageReactionRemoveListener as a, editChannelMessage as at, Command as b, createGuildSticker as bt, ResumedListener as c, listChannelArchivedThreads as ct, Embed as d, pinChannelMessage as dt, createChannelMessage as et, Client as f, searchGuildMessages as ft, RateLimitError as g, createGuildBan as gt, DiscordError as h, addGuildMemberRole as ht, MessageReactionAddListener as i, editChannel as it, Button as j, putChannelPermission as jt, RadioGroup as k, listGuildScheduledEvents as kt, ThreadUpdateListener as l, listChannelMessages as lt, RequestClient as m, unpinChannelMessage as mt, InteractionCreateListener as n, deleteChannel as nt, PresenceUpdateListener as o, getChannel as ot, Plugin as p, sendChannelTyping as pt, parseCustomId as q, MessageCreateListener as r, deleteChannelMessage as rt, ReadyListener as s, getChannelMessage as st, discord_exports as t, createThread as tt, VoiceStateUpdateListener as u, listChannelPins as ut, readDiscordMessage as v, createGuildEmoji as vt, User as w, getGuildVoiceState as wt, CommandWithSubcommands as x, deleteChannelPermission as xt, readRetryAfter as y, createGuildScheduledEvent as yt, Row as z };
@@ -1,4 +1,4 @@
1
- import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-DIud5x90.js";
1
+ import { a as readDiscordChannelCreateParams, n as isDiscordModerationAction, o as readDiscordChannelEditParams, r as readDiscordModerationCommand, s as readDiscordChannelMoveParams, t as handleDiscordAction } from "./runtime-CdnAT8R5.js";
2
2
  import "./action-runtime-api.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { readNumberParam, readStringArrayParam, readStringParam } from "openclaw/plugin-sdk/agent-runtime";
@@ -1,4 +1,4 @@
1
- import { c as ResumedListener, s as ReadyListener, t as discord_exports } from "./discord-DtHMmZqJ.js";
1
+ import { c as ResumedListener, s as ReadyListener, t as discord_exports, u as VoiceStateUpdateListener } from "./discord-BqYcwxvG.js";
2
2
  import { c as resolveDiscordAccountAllowFrom } from "./accounts-BcwyaFd-.js";
3
3
  import { t as parseDiscordTarget } from "./target-parsing-D-H7nnh2.js";
4
4
  import { n as formatDiscordUserTag } from "./format-D8TsaXxW.js";
@@ -1509,6 +1509,21 @@ function destroyVoiceConnectionSafely(params) {
1509
1509
  logger.warn(`discord voice: destroy failed: ${params.reason}: ${message}`);
1510
1510
  }
1511
1511
  }
1512
+ function normalizeVoiceChannelResidencies(entries) {
1513
+ const normalized = [];
1514
+ for (const entry of entries ?? []) {
1515
+ const guildId = entry.guildId?.trim();
1516
+ const channelId = entry.channelId?.trim();
1517
+ if (guildId && channelId) normalized.push({
1518
+ guildId,
1519
+ channelId
1520
+ });
1521
+ }
1522
+ return normalized;
1523
+ }
1524
+ function isVoiceChannelAllowed(params) {
1525
+ return params.allowedChannels === null || params.allowedChannels.some((entry) => entry.guildId === params.guildId && entry.channelId === params.channelId);
1526
+ }
1512
1527
  function startAutoJoin(manager) {
1513
1528
  manager.autoJoin().catch((err) => logger.warn(`discord voice: autoJoin failed: ${formatErrorMessage(err)}`));
1514
1529
  }
@@ -1561,6 +1576,7 @@ var DiscordVoiceManager$1 = class {
1561
1576
  cfg: params.cfg,
1562
1577
  accountId: params.accountId
1563
1578
  }) ?? params.discordConfig.allowFrom ?? params.discordConfig.dm?.allowFrom ?? [];
1579
+ this.allowedChannels = params.discordConfig.voice?.allowedChannels === void 0 ? null : normalizeVoiceChannelResidencies(params.discordConfig.voice.allowedChannels);
1564
1580
  this.speakerContext = new DiscordVoiceSpeakerContextResolver({
1565
1581
  client: params.client,
1566
1582
  ownerAllowFrom: this.ownerAllowFrom
@@ -1596,10 +1612,11 @@ var DiscordVoiceManager$1 = class {
1596
1612
  }
1597
1613
  for (const entry of entriesByGuild.values()) {
1598
1614
  logVoiceVerbose(`autoJoin: joining guild ${entry.guildId} channel ${entry.channelId}`);
1599
- await this.join({
1615
+ const result = await this.join({
1600
1616
  guildId: entry.guildId,
1601
1617
  channelId: entry.channelId
1602
1618
  });
1619
+ if (!result.ok) logger.warn(`discord voice: autoJoin skipped guild=${entry.guildId} channel=${entry.channelId}: ${result.message}`);
1603
1620
  }
1604
1621
  })().finally(() => {
1605
1622
  this.autoJoinTask = null;
@@ -1614,6 +1631,13 @@ var DiscordVoiceManager$1 = class {
1614
1631
  channelId: session.channelId
1615
1632
  }));
1616
1633
  }
1634
+ isAllowedVoiceChannel(params) {
1635
+ return isVoiceChannelAllowed({
1636
+ allowedChannels: this.allowedChannels,
1637
+ guildId: params.guildId.trim(),
1638
+ channelId: params.channelId.trim()
1639
+ });
1640
+ }
1617
1641
  async join(params) {
1618
1642
  if (!this.voiceEnabled) return {
1619
1643
  ok: false,
@@ -1625,6 +1649,18 @@ var DiscordVoiceManager$1 = class {
1625
1649
  ok: false,
1626
1650
  message: "Missing guildId or channelId."
1627
1651
  };
1652
+ if (!this.isAllowedVoiceChannel({
1653
+ guildId,
1654
+ channelId
1655
+ })) {
1656
+ logger.warn(`discord voice: join rejected for non-allowed channel guild=${guildId} channel=${channelId}`);
1657
+ return {
1658
+ ok: false,
1659
+ message: `${formatMention({ channelId })} is not allowed by channels.discord.voice.allowedChannels.`,
1660
+ guildId,
1661
+ channelId
1662
+ };
1663
+ }
1628
1664
  logVoiceVerbose(`join requested: guild ${guildId} channel ${channelId}`);
1629
1665
  const existing = this.sessions.get(guildId);
1630
1666
  if (existing && existing.channelId === channelId) {
@@ -1875,10 +1911,53 @@ var DiscordVoiceManager$1 = class {
1875
1911
  channelId: entry.channelId
1876
1912
  };
1877
1913
  }
1914
+ async handleVoiceStateUpdate(data) {
1915
+ if (!this.botUserId || data.user_id !== this.botUserId) return;
1916
+ const guildId = data.guild_id?.trim();
1917
+ const channelId = data.channel_id?.trim();
1918
+ if (!guildId || !channelId) return;
1919
+ const existing = this.sessions.get(guildId);
1920
+ if (this.isAllowedVoiceChannel({
1921
+ guildId,
1922
+ channelId
1923
+ })) {
1924
+ if (existing && existing.channelId !== channelId) {
1925
+ logger.warn(`discord voice: bot moved to allowed channel guild=${guildId} from=${existing.channelId} to=${channelId}; rebuilding voice session`);
1926
+ await this.join({
1927
+ guildId,
1928
+ channelId
1929
+ });
1930
+ }
1931
+ return;
1932
+ }
1933
+ logger.warn(`discord voice: bot moved to non-allowed channel guild=${guildId} channel=${channelId}; leaving`);
1934
+ if (existing) await this.leave({ guildId });
1935
+ else {
1936
+ const voiceSdk = loadDiscordVoiceSdk();
1937
+ const connection = voiceSdk.getVoiceConnection(guildId);
1938
+ if (connection) destroyVoiceConnectionSafely({
1939
+ connection,
1940
+ voiceSdk,
1941
+ reason: `non-allowed voice state guild ${guildId} channel ${channelId}`
1942
+ });
1943
+ }
1944
+ const target = this.resolveVoiceResidencyTarget(guildId);
1945
+ if (target) {
1946
+ logger.warn(`discord voice: rejoining allowed voice channel guild=${guildId} channel=${target.channelId}`);
1947
+ await this.join(target);
1948
+ }
1949
+ }
1878
1950
  async destroy() {
1879
1951
  for (const entry of this.sessions.values()) entry.stop();
1880
1952
  this.sessions.clear();
1881
1953
  }
1954
+ resolveVoiceResidencyTarget(guildId) {
1955
+ const autoJoinTarget = normalizeVoiceChannelResidencies(this.params.discordConfig.voice?.autoJoin).toReversed().find((entry) => entry.guildId === guildId);
1956
+ if (autoJoinTarget && this.isAllowedVoiceChannel(autoJoinTarget)) return autoJoinTarget;
1957
+ if (this.allowedChannels === null) return null;
1958
+ const guildAllowed = this.allowedChannels.filter((entry) => entry.guildId === guildId);
1959
+ return guildAllowed.length === 1 ? guildAllowed[0] : null;
1960
+ }
1882
1961
  enqueueProcessing(entry, task) {
1883
1962
  entry.processingQueue = entry.processingQueue.then(task).catch((err) => logger.warn(`discord voice: processing failed: ${formatErrorMessage(err)}`));
1884
1963
  }
@@ -2125,10 +2204,20 @@ var DiscordVoiceResumedListener$1 = class extends ResumedListener {
2125
2204
  startAutoJoin(this.manager);
2126
2205
  }
2127
2206
  };
2207
+ var DiscordVoiceStateUpdateListener$1 = class extends VoiceStateUpdateListener {
2208
+ constructor(manager) {
2209
+ super();
2210
+ this.manager = manager;
2211
+ }
2212
+ async handle(data, _client) {
2213
+ await this.manager.handleVoiceStateUpdate(data);
2214
+ }
2215
+ };
2128
2216
  //#endregion
2129
2217
  //#region extensions/discord/src/voice/manager.runtime.ts
2130
2218
  var DiscordVoiceManager = class extends DiscordVoiceManager$1 {};
2131
2219
  var DiscordVoiceReadyListener = class extends DiscordVoiceReadyListener$1 {};
2132
2220
  var DiscordVoiceResumedListener = class extends DiscordVoiceResumedListener$1 {};
2221
+ var DiscordVoiceStateUpdateListener = class extends DiscordVoiceStateUpdateListener$1 {};
2133
2222
  //#endregion
2134
- export { DiscordVoiceManager, DiscordVoiceReadyListener, DiscordVoiceResumedListener };
2223
+ export { DiscordVoiceManager, DiscordVoiceReadyListener, DiscordVoiceResumedListener, DiscordVoiceStateUpdateListener };
@@ -1,8 +1,8 @@
1
- import { j as createDiscordRestClient } from "./send.shared-CM0Y9Zet.js";
1
+ import { j as createDiscordRestClient } from "./send.shared-Dza0jdso.js";
2
2
  import { a as resolveDiscordChannelParentSafe, n as resolveDiscordChannelInfoSafe, r as resolveDiscordChannelNameSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-BL-wemES.js";
3
3
  import { a as mergeAbortSignals } from "./timeouts-C3FYXWJX.js";
4
4
  import { l as resolveDiscordMessageChannelId, r as resolveDiscordMessageText, s as hasDiscordMessageStickers } from "./message-utils-ByofKwPe.js";
5
- import { t as sendTyping } from "./typing-BYeVSviE.js";
5
+ import { t as sendTyping } from "./typing-_jePdFIw.js";
6
6
  import { danger, logVerbose } from "openclaw/plugin-sdk/runtime-env";
7
7
  import { resolveOpenProviderRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
8
8
  import { resolveBatchedReplyThreadingPolicy } from "openclaw/plugin-sdk/reply-reference";
@@ -121,7 +121,7 @@ function applyImplicitReplyBatchGate(ctx, replyToMode, isBatched) {
121
121
  //#region extensions/discord/src/monitor/message-run-queue.ts
122
122
  let messageProcessRuntimePromise;
123
123
  async function loadMessageProcessRuntime() {
124
- messageProcessRuntimePromise ??= import("./message-handler.process-CFXedLgv.js");
124
+ messageProcessRuntimePromise ??= import("./message-handler.process-Bs5wropA.js");
125
125
  return await messageProcessRuntimePromise;
126
126
  }
127
127
  async function processDiscordQueuedMessage(params) {
@@ -173,7 +173,7 @@ function createDiscordMessageRunQueue(params) {
173
173
  //#region extensions/discord/src/monitor/message-handler.ts
174
174
  let messagePreflightRuntimePromise;
175
175
  async function loadMessagePreflightRuntime() {
176
- messagePreflightRuntimePromise ??= import("./message-handler.preflight-AmsXmfPQ.js");
176
+ messagePreflightRuntimePromise ??= import("./message-handler.preflight-BRH-dv1o.js");
177
177
  return await messagePreflightRuntimePromise;
178
178
  }
179
179
  function isNonEmptyString(value) {
@@ -1,12 +1,12 @@
1
- import { S as Message, ot as getChannelMessage, t as discord_exports } from "./discord-DtHMmZqJ.js";
1
+ import { C as Message, st as getChannelMessage, t as discord_exports } from "./discord-BqYcwxvG.js";
2
2
  import { o as resolveDefaultDiscordAccountId } from "./accounts-BcwyaFd-.js";
3
3
  import { i as resolveTimestampMs, n as formatDiscordUserTag, r as resolveDiscordSystemLocation } from "./format-D8TsaXxW.js";
4
4
  import { _ as resolveGroupDmAllow, a as normalizeDiscordSlug, c as resolveDiscordChannelConfigWithFallback, d as resolveDiscordGuildEntry, f as resolveDiscordMemberAccessState, g as resolveDiscordShouldRequireMention, i as normalizeDiscordDisplaySlug, n as isDiscordGroupAllowedByPolicy } from "./allow-list-n8Ki-Rt3.js";
5
5
  import { t as resolveDiscordConversationIdentity } from "./conversation-identity-CvIx6J7M.js";
6
6
  import { l as isRecentlyUnboundThreadWebhookMessage } from "./thread-bindings.state-SPlv6mh7.js";
7
- import "./thread-bindings-DAuEDkZ9.js";
7
+ import "./thread-bindings-B4of4OmR.js";
8
8
  import { n as resolveDiscordChannelInfoSafe, r as resolveDiscordChannelNameSafe } from "./channel-access-BL-wemES.js";
9
- import { a as shouldIgnoreStaleDiscordRouteBinding, c as resolveDiscordTextCommandAccess, i as resolveDiscordEffectiveRoute, o as handleDiscordDmCommandDecision, r as resolveDiscordConversationRoute, s as resolveDiscordDmCommandAccess, t as buildDiscordRoutePeer } from "./route-resolution-BqohSL1Z.js";
9
+ import { a as shouldIgnoreStaleDiscordRouteBinding, c as resolveDiscordTextCommandAccess, i as resolveDiscordEffectiveRoute, o as handleDiscordDmCommandDecision, r as resolveDiscordConversationRoute, s as resolveDiscordDmCommandAccess, t as buildDiscordRoutePeer } from "./route-resolution-BFfF9xmG.js";
10
10
  import { c as resolveDiscordChannelInfo, l as resolveDiscordMessageChannelId, r as resolveDiscordMessageText } from "./message-utils-ByofKwPe.js";
11
11
  import { n as resolveDiscordWebhookId, t as resolveDiscordSenderIdentity } from "./sender-identity-w9rSI-nD.js";
12
12
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -28,7 +28,7 @@ async function loadConversationRuntime$1() {
28
28
  return await conversationRuntimePromise$1;
29
29
  }
30
30
  async function loadDiscordSendRuntime() {
31
- discordSendRuntimePromise ??= import("./send-B6cf6KUd.js").then((n) => n.t);
31
+ discordSendRuntimePromise ??= import("./send-DCFuSiBi.js").then((n) => n.t);
32
32
  return await discordSendRuntimePromise;
33
33
  }
34
34
  async function resolveDiscordDmPreflightAccess(params) {
@@ -426,7 +426,7 @@ let preflightAudioRuntimePromise;
426
426
  let systemEventsRuntimePromise;
427
427
  let discordThreadingRuntimePromise;
428
428
  async function loadPluralKitRuntime() {
429
- pluralkitRuntimePromise ??= import("./pluralkit-CUfobeQu.js").then((n) => n.n);
429
+ pluralkitRuntimePromise ??= import("./pluralkit-B1HTaBc9.js").then((n) => n.n);
430
430
  return await pluralkitRuntimePromise;
431
431
  }
432
432
  async function loadPreflightAudioRuntime() {
@@ -434,11 +434,11 @@ async function loadPreflightAudioRuntime() {
434
434
  return await preflightAudioRuntimePromise;
435
435
  }
436
436
  async function loadSystemEventsRuntime() {
437
- systemEventsRuntimePromise ??= import("./system-events-BeVImqnV.js");
437
+ systemEventsRuntimePromise ??= import("./system-events-B04UOvPg.js");
438
438
  return await systemEventsRuntimePromise;
439
439
  }
440
440
  async function loadDiscordThreadingRuntime() {
441
- discordThreadingRuntimePromise ??= import("./threading-DQWFoM_L.js").then((n) => n.t);
441
+ discordThreadingRuntimePromise ??= import("./threading-CLZ3v7-y.js").then((n) => n.t);
442
442
  return await discordThreadingRuntimePromise;
443
443
  }
444
444
  function isPreflightAborted(abortSignal) {
@@ -1,21 +1,21 @@
1
- import { $ as createChannelMessage, it as editChannelMessage, nt as deleteChannelMessage, t as discord_exports } from "./discord-DtHMmZqJ.js";
1
+ import { at as editChannelMessage, et as createChannelMessage, rt as deleteChannelMessage, t as discord_exports } from "./discord-BqYcwxvG.js";
2
2
  import { f as resolveDiscordMaxLinesPerMessage } from "./accounts-BcwyaFd-.js";
3
3
  import { n as resolveDiscordChannelId } from "./target-parsing-D-H7nnh2.js";
4
4
  import { t as chunkDiscordTextWithMode } from "./chunk-DYl-_5RL.js";
5
- import { M as createDiscordRuntimeAccountContext, d as resolveDiscordTargetChannelId, j as createDiscordRestClient } from "./send.shared-CM0Y9Zet.js";
5
+ import { M as createDiscordRuntimeAccountContext, d as resolveDiscordTargetChannelId, j as createDiscordRestClient } from "./send.shared-Dza0jdso.js";
6
6
  import { i as resolveTimestampMs } from "./format-D8TsaXxW.js";
7
7
  import { a as normalizeDiscordSlug, r as normalizeDiscordAllowList } from "./allow-list-n8Ki-Rt3.js";
8
- import { a as removeReactionDiscord, f as editMessageDiscord, r as reactMessageDiscord } from "./send-B6cf6KUd.js";
9
- import "./targets-5F3C_rpD.js";
8
+ import { a as removeReactionDiscord, f as editMessageDiscord, r as reactMessageDiscord } from "./send-DCFuSiBi.js";
9
+ import "./targets-DToZUkgV.js";
10
10
  import { t as resolveDiscordConversationIdentity } from "./conversation-identity-CvIx6J7M.js";
11
- import { t as DISCORD_TEXT_CHUNK_LIMIT } from "./outbound-adapter-BFYTJnuu.js";
11
+ import { t as DISCORD_TEXT_CHUNK_LIMIT } from "./outbound-adapter-lWjkSeyP.js";
12
12
  import { t as resolveDiscordPreviewStreamMode } from "./preview-streaming-DCPAe24T.js";
13
13
  import { n as DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, t as DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS } from "./timeouts-C3FYXWJX.js";
14
14
  import { a as resolveForwardedMediaList, i as buildDiscordMediaPayload, o as resolveMediaList, r as resolveDiscordMessageText } from "./message-utils-ByofKwPe.js";
15
- import { a as resolveDiscordThreadStarter, n as resolveDiscordAutoThreadReplyPlan } from "./threading-DQWFoM_L.js";
16
- import { t as sendTyping } from "./typing-BYeVSviE.js";
15
+ import { a as resolveDiscordThreadStarter, n as resolveDiscordAutoThreadReplyPlan } from "./threading-CLZ3v7-y.js";
16
+ import { t as sendTyping } from "./typing-_jePdFIw.js";
17
17
  import { n as buildDiscordInboundAccessContext, r as createDiscordSupplementalContextAccessChecker } from "./inbound-context-jtKcY9on.js";
18
- import { i as resolveReplyContext, n as buildDirectLabel, r as buildGuildLabel, t as deliverDiscordReply } from "./reply-delivery-B-ZT5sTB.js";
18
+ import { i as resolveReplyContext, n as buildDirectLabel, r as buildGuildLabel, t as deliverDiscordReply } from "./reply-delivery-CUSK6SA_.js";
19
19
  import { buildAgentSessionKey, normalizeAccountId, resolveAccountEntry, resolveThreadSessionKeys } from "openclaw/plugin-sdk/routing";
20
20
  import { evaluateSupplementalContextVisibility } from "openclaw/plugin-sdk/security-runtime";
21
21
  import { getAgentScopedMediaLocalRoots } from "openclaw/plugin-sdk/media-runtime";
@@ -1,9 +1,9 @@
1
- import { m as DiscordError } from "./discord-DtHMmZqJ.js";
1
+ import { h as DiscordError } from "./discord-BqYcwxvG.js";
2
2
  import { s as resolveDiscordAccount } from "./accounts-BcwyaFd-.js";
3
3
  import { t as chunkDiscordTextWithMode } from "./chunk-DYl-_5RL.js";
4
4
  import { i as normalizeDiscordOutboundTarget } from "./normalize-Cu94FOqy.js";
5
5
  import { t as createDiscordSendReceipt } from "./send.receipt-BAZw2Zsz.js";
6
- import { c as readDiscordComponentSpec } from "./components-p6A38u-l.js";
6
+ import { c as readDiscordComponentSpec } from "./components-Dxq2mU57.js";
7
7
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { resolvePayloadMediaUrls, sendPayloadMediaSequenceOrFallback, sendTextMediaPayload } from "openclaw/plugin-sdk/reply-payload";
9
9
  import { resolveRetryConfig, retryAsync } from "openclaw/plugin-sdk/retry-runtime";
@@ -87,11 +87,11 @@ function normalizeDiscordApprovalPayload(payload) {
87
87
  let discordComponentSendPromise;
88
88
  let discordSharedInteractivePromise;
89
89
  async function sendDiscordComponentMessageLazy(...args) {
90
- discordComponentSendPromise ??= import("./send.components-DW_Msuv0.js").then((n) => n.i).then((module) => module.sendDiscordComponentMessage);
90
+ discordComponentSendPromise ??= import("./send.components-DxDqPJZQ.js").then((n) => n.i).then((module) => module.sendDiscordComponentMessage);
91
91
  return await (await discordComponentSendPromise)(...args);
92
92
  }
93
93
  function loadDiscordSharedInteractive() {
94
- discordSharedInteractivePromise ??= import("./shared-interactive-D39V9Wtn.js").then((n) => n.r);
94
+ discordSharedInteractivePromise ??= import("./shared-interactive-DavY6jYt.js").then((n) => n.r);
95
95
  return discordSharedInteractivePromise;
96
96
  }
97
97
  function addPayloadTextFallback(spec, payload) {
@@ -126,7 +126,7 @@ async function resolveDiscordComponentSpec(payload) {
126
126
  //#region extensions/discord/src/outbound-send-context.ts
127
127
  let discordSendRuntimePromise;
128
128
  async function loadDiscordSendRuntime() {
129
- discordSendRuntimePromise ??= import("./send-B6cf6KUd.js").then((n) => n.t);
129
+ discordSendRuntimePromise ??= import("./send-DCFuSiBi.js").then((n) => n.t);
130
130
  return await discordSendRuntimePromise;
131
131
  }
132
132
  function resolveDiscordOutboundTarget(params) {
@@ -316,7 +316,7 @@ function stripDiscordInternalRuntimeScaffolding(text) {
316
316
  }
317
317
  let discordThreadBindingsPromise;
318
318
  function loadDiscordThreadBindings() {
319
- discordThreadBindingsPromise ??= import("./thread-bindings-DAuEDkZ9.js").then((n) => n.t);
319
+ discordThreadBindingsPromise ??= import("./thread-bindings-B4of4OmR.js").then((n) => n.t);
320
320
  return discordThreadBindingsPromise;
321
321
  }
322
322
  function resolveDiscordWebhookIdentity(params) {