@openclaw/discord 2026.5.6 → 2026.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-runtime-api.js +1 -1
- package/dist/api.js +14 -15
- package/dist/{approval-handler.runtime-TRKg9NzZ.js → approval-handler.runtime-BBZRYAGs.js} +2 -2
- package/dist/{approval-native-DJs5M8fw.js → approval-native-CBdZsAR7.js} +2 -2
- package/dist/{approval-shared-GfJeMdLu.js → approval-shared-Ck6TxKgo.js} +1 -1
- package/dist/audit-CCJ0h49k.js +24 -0
- package/dist/{audit-CdKtgVPO.js → audit-core-CejGc3hO.js} +29 -26
- package/dist/{channel-D8E-S2xn.js → channel-UXGa9PGc.js} +33 -21
- package/dist/{channel-actions-BvEKvoM5.js → channel-actions-Br29_1nE.js} +1 -1
- package/dist/{channel-actions.runtime-BNZAM-9-.js → channel-actions.runtime-ChmNUig1.js} +4 -4
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel.setup-C-HEMkxU.js → channel.setup-D_xyQu_h.js} +3 -3
- package/dist/{config-schema-CC1qhiTN.js → config-schema-Cc953rAs.js} +4 -0
- package/dist/contract-api.js +7 -7
- package/dist/{conversation-identity-BN9wSmxJ.js → conversation-identity-DHhS0ez3.js} +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/{doctor-Bgzf3Du2.js → doctor-Bo-yifB3.js} +3 -3
- package/dist/{doctor-contract-Dxq4VIkE.js → doctor-contract-Bso46EOQ.js} +1 -1
- package/dist/doctor-contract-api.js +1 -1
- package/dist/{handle-action.guild-admin-nTLXjfyh.js → handle-action.guild-admin-sJiQymg8.js} +1 -1
- package/dist/{manager.runtime-B0TEyget.js → manager.runtime-Cug1PoeZ.js} +12 -6
- package/dist/{message-handler-CSPx1uqO.js → message-handler-C9Ohf-ea.js} +7 -7
- package/dist/{message-handler.preflight-FbHEumdA.js → message-handler.preflight-BrvazsYn.js} +12 -12
- package/dist/{message-handler.process-CVZ-6HNh.js → message-handler.process-CEnzuLiN.js} +13 -13
- package/dist/{message-utils-Dmgu-7fC.js → message-utils-9kaGF59d.js} +2 -2
- package/dist/{outbound-adapter-FG0CgK3I.js → outbound-adapter-DNsTVJfH.js} +4 -4
- package/dist/{outbound-session-route-uHGLDP-Y.js → outbound-session-route-DK9qkPgP.js} +1 -1
- package/dist/{preflight-audio-BpYtUAT6.js → preflight-audio-CRmUxxuM.js} +1 -1
- package/dist/{probe.runtime-ch3eJ1Ar.js → probe.runtime-CMgUDax3.js} +1 -1
- package/dist/{provider-DqqLCjug.js → provider-CuOh6z_b.js} +25 -25
- package/dist/{provider-session.runtime-BMF3HBc2.js → provider-session.runtime-CCESIHVo.js} +3 -3
- package/dist/provider.runtime-B68g3qLv.js +2 -0
- package/dist/{reply-delivery-QiXSsCCR.js → reply-delivery-D9aKHtDH.js} +3 -3
- package/dist/{resolve-channels-VAqom3Dn.js → resolve-channels-kyuvrXJg.js} +1 -1
- package/dist/{resolve-users-DPJkRKx1.js → resolve-users-CAwh4EBq.js} +1 -1
- package/dist/{route-resolution-DODkzE43.js → route-resolution-BWErj5Cn.js} +1 -1
- package/dist/{runtime-NObmZxWs.js → runtime-D8alY00g.js} +6 -6
- package/dist/runtime-api.actions.js +2 -2
- package/dist/runtime-api.js +22 -22
- package/dist/runtime-api.lookup.js +4 -4
- package/dist/runtime-api.monitor-DzkCxeBL.js +6 -0
- package/dist/runtime-api.monitor.js +6 -6
- package/dist/runtime-api.send.js +5 -5
- package/dist/runtime-api.threads.js +5 -5
- package/dist/secret-contract-api.js +1 -1
- package/dist/{security-audit-Cdz2iq3m.js → security-audit-BtRd_VhN.js} +1 -1
- package/dist/security-audit-contract-api.js +1 -1
- package/dist/{security-audit.runtime-DBV1T1_N.js → security-audit.runtime-Dm1LW9KX.js} +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/{send-Rz5xnelg.js → send-8S_HKJpQ.js} +2 -2
- package/dist/{send.components-CoCE4aan.js → send.components-A42c_5tQ.js} +3 -3
- package/dist/{send.outbound-DN-HfmW2.js → send.outbound-D3tonSz8.js} +1 -1
- package/dist/{send.shared-BWZyuxM-.js → send.shared-BQGiUPvZ.js} +3 -79
- package/dist/session-key-api.js +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{shared-Ugd3DMEH.js → shared-BEW4H3bj.js} +8 -8
- package/dist/{subagent-hooks-DgpxQHUn.js → subagent-hooks-T0LPLh4H.js} +1 -1
- package/dist/subagent-hooks-api.js +1 -1
- package/dist/{normalize-B-ktw-T_.js → target-resolver-DA84_xbt.js} +91 -1
- package/dist/targets-FwL1BPTU.js +2 -0
- package/dist/test-api.js +4 -4
- package/dist/{thread-bindings-C7GN5ebh.js → thread-bindings-CMpZjP50.js} +6 -6
- package/dist/{thread-bindings.discord-api-CfZnSqIb.js → thread-bindings.discord-api-CwWGoyei.js} +6 -6
- package/dist/{thread-bindings.manager-BxPG0IHV.js → thread-bindings.manager-BtxfLfWf.js} +4 -4
- package/dist/{thread-bindings.session-updates-TTP020qQ.js → thread-bindings.session-updates-jcZSiRPI.js} +1 -1
- package/dist/{threading-Bi95Nz8h.js → threading-BMmpA2JR.js} +3 -3
- package/dist/timeouts.js +1 -1
- package/dist/{typing-BSi1dUHm.js → typing-Bw6NKWLZ.js} +1 -1
- package/openclaw.plugin.json +14 -0
- package/package.json +4 -4
- package/dist/provider.runtime-2FGjVR8w.js +0 -2
- package/dist/runtime-api.monitor-DPIfax5N.js +0 -6
- package/dist/targets-DcNwQ9vN.js +0 -3
- /package/dist/{access-B9ujuUtS.js → access-CHY9FK3X.js} +0 -0
- /package/dist/{agent-components.runtime-DUhLr9hy.js → agent-components.runtime-Dof1YMSz.js} +0 -0
- /package/dist/{channel-access-ewDxhd9q.js → channel-access-DFIQqbYm.js} +0 -0
- /package/dist/{directory-config-DElx_Gr4.js → directory-config-DoETeOOx.js} +0 -0
- /package/dist/{doctor-shared-DU8RcnF5.js → doctor-shared-Cqvfgv9m.js} +0 -0
- /package/dist/{inbound-context-e_oBBJtF.js → inbound-context-CRylwjg0.js} +0 -0
- /package/dist/{pluralkit-voQvSN3g.js → pluralkit-OFss_pIy.js} +0 -0
- /package/dist/{preflight-audio.runtime-BAGmU6uO.js → preflight-audio.runtime-DPVbpZid.js} +0 -0
- /package/dist/{preview-streaming-BzkA67Qa.js → preview-streaming-Cc_oeIPP.js} +0 -0
- /package/dist/{probe-DmHUl6wI.js → probe-E80IMT1X.js} +0 -0
- /package/dist/{resolve-allowlist-common-Cl2N5YLW.js → resolve-allowlist-common-_e1cWOb3.js} +0 -0
- /package/dist/{secret-config-contract-CoGryS5c.js → secret-config-contract-5S9U9pjx.js} +0 -0
- /package/dist/{security-contract-ei3Mz8Sa.js → security-contract-BE8rsdPq.js} +0 -0
- /package/dist/{security-doctor-CzTzpXV8.js → security-doctor-DiilN216.js} +0 -0
- /package/dist/{sender-identity-BiSDAk2P.js → sender-identity-BGUfyvOC.js} +0 -0
- /package/dist/{session-contract-goJZckp2.js → session-contract-CuW9Nlxg.js} +0 -0
- /package/dist/{session-key-normalization-Daag9II6.js → session-key-normalization-B5La-jFM.js} +0 -0
- /package/dist/{system-events-B-xNU7II.js → system-events-_fzSG--3.js} +0 -0
- /package/dist/{thread-bindings.state-Dzu1gCE7.js → thread-bindings.state-WU4duXKY.js} +0 -0
- /package/dist/{timeouts-C7jeTtGs.js → timeouts-CdsmBWWs.js} +0 -0
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { t as normalizeDiscordToken } from "./token-BZtonk7d.js";
|
|
2
|
-
import { a as mergeDiscordAccountConfig,
|
|
3
|
-
import {
|
|
2
|
+
import { a as mergeDiscordAccountConfig, s as resolveDiscordAccount } from "./accounts-CaHGiVB4.js";
|
|
3
|
+
import { s as chunkDiscordTextWithMode, t as parseAndResolveDiscordTarget } from "./target-resolver-DA84_xbt.js";
|
|
4
4
|
import { $ as createChannelMessage, J as createUserDmChannel, St as getGuildMember, Y as getCurrentUser, at as getChannel, h as RateLimitError, p as RequestClient, u as Embed, w as serializePayload, xt as getGuild } from "./discord-eZlimVfW.js";
|
|
5
|
-
import { t as rememberDiscordDirectoryUser } from "./directory-cache-D93eSrpB.js";
|
|
6
|
-
import { r as listDiscordDirectoryPeersLive } from "./directory-live-DJ0V5asB.js";
|
|
7
5
|
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
|
|
8
6
|
import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
|
|
9
|
-
import { buildMessagingTarget } from "openclaw/plugin-sdk/messaging-targets";
|
|
10
7
|
import { ChannelType, PermissionFlagsBits } from "discord-api-types/v10";
|
|
11
8
|
import { PollLayoutType } from "discord-api-types/payloads/v10";
|
|
12
9
|
import { buildOutboundMediaLoadOptions, extensionForMime, normalizePollDurationHours, normalizePollInput } from "openclaw/plugin-sdk/media-runtime";
|
|
@@ -210,79 +207,6 @@ function resolveDiscordRest(opts) {
|
|
|
210
207
|
return createDiscordRestClient(opts).rest;
|
|
211
208
|
}
|
|
212
209
|
//#endregion
|
|
213
|
-
//#region extensions/discord/src/send-target-parsing.ts
|
|
214
|
-
const parseDiscordSendTarget = (raw, options = {}) => parseDiscordTarget(raw, options);
|
|
215
|
-
//#endregion
|
|
216
|
-
//#region extensions/discord/src/target-resolver.ts
|
|
217
|
-
/**
|
|
218
|
-
* Resolve a Discord username to user ID using the directory lookup.
|
|
219
|
-
* This enables sending DMs by username instead of requiring explicit user IDs.
|
|
220
|
-
*/
|
|
221
|
-
async function resolveDiscordTarget(raw, options, parseOptions = {}) {
|
|
222
|
-
const trimmed = raw.trim();
|
|
223
|
-
if (!trimmed) return;
|
|
224
|
-
const likelyUsername = isLikelyUsername(trimmed);
|
|
225
|
-
const shouldLookup = isExplicitUserLookup(trimmed, parseOptions) || likelyUsername;
|
|
226
|
-
if (/^\d+$/.test(trimmed) && parseOptions.defaultKind !== "user" && isConfiguredAllowedDiscordDmUser(trimmed, options)) return buildMessagingTarget("user", trimmed, trimmed);
|
|
227
|
-
const directParse = safeParseDiscordTarget(trimmed, parseOptions);
|
|
228
|
-
if (directParse && directParse.kind !== "channel" && !likelyUsername) return directParse;
|
|
229
|
-
if (!shouldLookup) return directParse ?? parseDiscordSendTarget(trimmed, parseOptions);
|
|
230
|
-
try {
|
|
231
|
-
const match = (await listDiscordDirectoryPeersLive({
|
|
232
|
-
...options,
|
|
233
|
-
query: trimmed,
|
|
234
|
-
limit: 1
|
|
235
|
-
}))[0];
|
|
236
|
-
if (match && match.kind === "user") {
|
|
237
|
-
const userId = match.id.replace(/^user:/, "");
|
|
238
|
-
const resolvedAccountId = resolveDiscordAccount({
|
|
239
|
-
cfg: options.cfg,
|
|
240
|
-
accountId: options.accountId
|
|
241
|
-
}).accountId;
|
|
242
|
-
rememberDiscordDirectoryUser({
|
|
243
|
-
accountId: resolvedAccountId,
|
|
244
|
-
userId,
|
|
245
|
-
handles: [
|
|
246
|
-
trimmed,
|
|
247
|
-
match.name,
|
|
248
|
-
match.handle
|
|
249
|
-
]
|
|
250
|
-
});
|
|
251
|
-
return buildMessagingTarget("user", userId, trimmed);
|
|
252
|
-
}
|
|
253
|
-
} catch {}
|
|
254
|
-
return parseDiscordSendTarget(trimmed, parseOptions);
|
|
255
|
-
}
|
|
256
|
-
async function parseAndResolveDiscordTarget(raw, options, parseOptions = {}) {
|
|
257
|
-
const resolved = await resolveDiscordTarget(raw, options, parseOptions) ?? parseDiscordSendTarget(raw, parseOptions);
|
|
258
|
-
if (!resolved) throw new Error("Recipient is required for Discord sends");
|
|
259
|
-
return resolved;
|
|
260
|
-
}
|
|
261
|
-
function safeParseDiscordTarget(input, options) {
|
|
262
|
-
try {
|
|
263
|
-
return parseDiscordSendTarget(input, options);
|
|
264
|
-
} catch {
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
function isConfiguredAllowedDiscordDmUser(input, options) {
|
|
269
|
-
return allowFromContainsDiscordUserId(resolveDiscordAccountAllowFrom({
|
|
270
|
-
cfg: options.cfg,
|
|
271
|
-
accountId: options.accountId
|
|
272
|
-
}) ?? [], input);
|
|
273
|
-
}
|
|
274
|
-
function isExplicitUserLookup(input, options) {
|
|
275
|
-
if (/^<@!?(\d+)>$/.test(input)) return true;
|
|
276
|
-
if (/^(user:|discord:)/.test(input)) return true;
|
|
277
|
-
if (input.startsWith("@")) return true;
|
|
278
|
-
if (/^\d+$/.test(input)) return options.defaultKind === "user";
|
|
279
|
-
return false;
|
|
280
|
-
}
|
|
281
|
-
function isLikelyUsername(input) {
|
|
282
|
-
if (/^(user:|channel:|discord:|@|<@!?)|[\d]+$/.test(input)) return false;
|
|
283
|
-
return true;
|
|
284
|
-
}
|
|
285
|
-
//#endregion
|
|
286
210
|
//#region extensions/discord/src/recipient-resolution.ts
|
|
287
211
|
async function parseAndResolveRecipient(raw, cfg, accountId, parseOptions = {}) {
|
|
288
212
|
if (!cfg) throw new Error("Discord recipient resolution requires a resolved runtime config. Load and resolve config at the command or gateway boundary, then pass cfg through the runtime path.");
|
|
@@ -710,4 +634,4 @@ function formatReactionEmoji(emoji) {
|
|
|
710
634
|
return buildReactionIdentifier(emoji);
|
|
711
635
|
}
|
|
712
636
|
//#endregion
|
|
713
|
-
export {
|
|
637
|
+
export { createDiscordClient as A, DiscordSendError as C, hasAllGuildPermissionsDiscord as D, fetchMemberGuildPermissionsDiscord as E, DISCORD_REST_TIMEOUT_MS as F, validateDiscordProxyUrl as I, withValidatedDiscordProxy as L, createDiscordRuntimeAccountContext as M, resolveDiscordClientAccountContext as N, hasAnyGuildPermissionDiscord as O, resolveDiscordRest as P, DISCORD_MAX_STICKER_BYTES as S, fetchChannelPermissionsDiscord as T, resolveDiscordSendComponents as _, normalizeDiscordPollInput as a, DISCORD_MAX_EMOJI_BYTES as b, normalizeStickerIds as c, resolveDiscordTargetChannelId as d, sendDiscordMedia as f, buildDiscordMessageRequest as g, SUPPRESS_NOTIFICATIONS_FLAG as h, formatReactionEmoji as i, createDiscordRestClient as j, parseAndResolveRecipient as k, resolveChannelId as l, toDiscordFileBlob as m, buildDiscordTextChunks as n, normalizeEmojiName as o, sendDiscordText as p, buildReactionIdentifier as r, normalizeReactionEmoji as s, buildDiscordSendError as t, resolveDiscordChannelType as u, resolveDiscordSendEmbeds as v, canViewDiscordGuildChannel as w, DISCORD_MAX_EVENT_COVER_BYTES as x, stripUndefinedFields as y };
|
package/dist/session-key-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-
|
|
1
|
+
import { t as normalizeExplicitDiscordSessionKey } from "./session-key-normalization-B5La-jFM.js";
|
|
2
2
|
export { normalizeExplicitDiscordSessionKey };
|
package/dist/setup-plugin-api.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as discordSetupPlugin } from "./channel.setup-
|
|
1
|
+
import { t as discordSetupPlugin } from "./channel.setup-D_xyQu_h.js";
|
|
2
2
|
export { discordSetupPlugin };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { a as mergeDiscordAccountConfig, c as resolveDiscordAccountAllowFrom, d as resolveDiscordAccountDmPolicy, n as isDiscordAccountEnabledForRuntime, o as resolveDefaultDiscordAccountId, r as listDiscordAccountIds, s as resolveDiscordAccount, u as resolveDiscordAccountDisabledReason } from "./accounts-CaHGiVB4.js";
|
|
2
2
|
import { t as inspectDiscordAccount } from "./account-inspect-BcQAxhKY.js";
|
|
3
3
|
import { i as getChatChannelMeta } from "./channel-api-CTSWMrnD.js";
|
|
4
|
-
import { t as DiscordChannelConfigSchema } from "./config-schema-
|
|
5
|
-
import { n as normalizeCompatibilityConfig } from "./doctor-contract-
|
|
6
|
-
import { t as DISCORD_LEGACY_CONFIG_RULES } from "./doctor-shared-
|
|
7
|
-
import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-
|
|
8
|
-
import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-
|
|
9
|
-
import { t as deriveLegacySessionChatType } from "./session-contract-
|
|
4
|
+
import { t as DiscordChannelConfigSchema } from "./config-schema-Cc953rAs.js";
|
|
5
|
+
import { n as normalizeCompatibilityConfig } from "./doctor-contract-Bso46EOQ.js";
|
|
6
|
+
import { t as DISCORD_LEGACY_CONFIG_RULES } from "./doctor-shared-Cqvfgv9m.js";
|
|
7
|
+
import { n as secretTargetRegistryEntries, t as collectRuntimeConfigAssignments } from "./secret-config-contract-5S9U9pjx.js";
|
|
8
|
+
import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-BE8rsdPq.js";
|
|
9
|
+
import { t as deriveLegacySessionChatType } from "./session-contract-CuW9Nlxg.js";
|
|
10
10
|
import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
|
11
11
|
import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
|
|
12
12
|
import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter, createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
@@ -49,7 +49,7 @@ const collectDiscordSecurityWarnings = createOpenProviderConfiguredRouteWarningC
|
|
|
49
49
|
});
|
|
50
50
|
let discordSecurityAuditModulePromise;
|
|
51
51
|
async function loadDiscordSecurityAuditModule() {
|
|
52
|
-
discordSecurityAuditModulePromise ??= import("./security-audit.runtime-
|
|
52
|
+
discordSecurityAuditModulePromise ??= import("./security-audit.runtime-Dm1LW9KX.js");
|
|
53
53
|
return await discordSecurityAuditModulePromise;
|
|
54
54
|
}
|
|
55
55
|
const discordSecurityAdapter = {
|
|
@@ -69,7 +69,7 @@ const discordSetupAdapter = createEnvPatchedAccountSetupAdapter({
|
|
|
69
69
|
const DISCORD_CHANNEL = "discord";
|
|
70
70
|
let discordDoctorModulePromise;
|
|
71
71
|
async function loadDiscordDoctorModule() {
|
|
72
|
-
discordDoctorModulePromise ??= import("./doctor-
|
|
72
|
+
discordDoctorModulePromise ??= import("./doctor-Bo-yifB3.js");
|
|
73
73
|
return await discordDoctorModulePromise;
|
|
74
74
|
}
|
|
75
75
|
const discordDoctor = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
|
|
2
2
|
import { s as resolveDiscordAccount } from "./accounts-CaHGiVB4.js";
|
|
3
|
-
import { n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-
|
|
3
|
+
import { n as autoBindSpawnedDiscordSubagent, o as unbindThreadBindingsBySessionKey, r as listThreadBindingsBySessionKey } from "./thread-bindings-CMpZjP50.js";
|
|
4
4
|
import { normalizeOptionalLowercaseString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/text-runtime";
|
|
5
5
|
import { formatThreadBindingDisabledError, formatThreadBindingSpawnDisabledError, resolveThreadBindingSpawnPolicy } from "openclaw/plugin-sdk/conversation-runtime";
|
|
6
6
|
//#region extensions/discord/src/subagent-hooks.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
//#region extensions/discord/subagent-hooks-api.ts
|
|
2
2
|
let discordSubagentHooksPromise = null;
|
|
3
3
|
function loadDiscordSubagentHooksModule() {
|
|
4
|
-
discordSubagentHooksPromise ??= import("./subagent-hooks-
|
|
4
|
+
discordSubagentHooksPromise ??= import("./subagent-hooks-T0LPLh4H.js").then((n) => n.i);
|
|
5
5
|
return discordSubagentHooksPromise;
|
|
6
6
|
}
|
|
7
7
|
function registerDiscordSubagentHooks(api) {
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import { c as resolveDiscordAccountAllowFrom, s as resolveDiscordAccount } from "./accounts-CaHGiVB4.js";
|
|
2
|
+
import { t as rememberDiscordDirectoryUser } from "./directory-cache-D93eSrpB.js";
|
|
3
|
+
import { r as listDiscordDirectoryPeersLive } from "./directory-live-DJ0V5asB.js";
|
|
1
4
|
import { buildMessagingTarget, parseMentionPrefixOrAtUserTarget, requireTargetKind } from "openclaw/plugin-sdk/messaging-targets";
|
|
2
5
|
import { chunkMarkdownTextWithMode } from "openclaw/plugin-sdk/reply-chunking";
|
|
3
6
|
//#region extensions/discord/src/target-parsing.ts
|
|
4
7
|
function parseDiscordTarget(raw, options = {}) {
|
|
5
8
|
const trimmed = raw.trim();
|
|
6
9
|
if (!trimmed) return;
|
|
10
|
+
const providerPrefixedTarget = parseDiscordProviderPrefixedTarget(trimmed);
|
|
11
|
+
if (providerPrefixedTarget) return providerPrefixedTarget;
|
|
7
12
|
const userTarget = parseMentionPrefixOrAtUserTarget({
|
|
8
13
|
raw: trimmed,
|
|
9
14
|
mentionPattern: /^<@!?(\d+)>$/,
|
|
@@ -31,6 +36,14 @@ function parseDiscordTarget(raw, options = {}) {
|
|
|
31
36
|
}
|
|
32
37
|
return buildMessagingTarget("channel", trimmed, trimmed);
|
|
33
38
|
}
|
|
39
|
+
function parseDiscordProviderPrefixedTarget(raw) {
|
|
40
|
+
const match = /^discord:(channel|user):(.+)$/i.exec(raw);
|
|
41
|
+
if (!match) return;
|
|
42
|
+
const kind = match[1]?.toLowerCase();
|
|
43
|
+
const id = match[2]?.trim();
|
|
44
|
+
if (!kind || !id) return;
|
|
45
|
+
return buildMessagingTarget(kind, id, `${kind}:${id}`);
|
|
46
|
+
}
|
|
34
47
|
function resolveDiscordChannelId(raw) {
|
|
35
48
|
return requireTargetKind({
|
|
36
49
|
platform: "Discord",
|
|
@@ -242,6 +255,10 @@ function normalizeDiscordOutboundTarget(to, allowFrom) {
|
|
|
242
255
|
to: `channel:${trimmed}`
|
|
243
256
|
};
|
|
244
257
|
}
|
|
258
|
+
if (/^discord:(?:channel|user):/i.test(trimmed)) return {
|
|
259
|
+
ok: true,
|
|
260
|
+
to: normalizeDiscordMessagingTarget(trimmed) ?? trimmed
|
|
261
|
+
};
|
|
245
262
|
return {
|
|
246
263
|
ok: true,
|
|
247
264
|
to: trimmed
|
|
@@ -272,4 +289,77 @@ function looksLikeDiscordTargetId(raw) {
|
|
|
272
289
|
return false;
|
|
273
290
|
}
|
|
274
291
|
//#endregion
|
|
275
|
-
|
|
292
|
+
//#region extensions/discord/src/send-target-parsing.ts
|
|
293
|
+
const parseDiscordSendTarget = (raw, options = {}) => parseDiscordTarget(raw, options);
|
|
294
|
+
//#endregion
|
|
295
|
+
//#region extensions/discord/src/target-resolver.ts
|
|
296
|
+
/**
|
|
297
|
+
* Resolve a Discord username to user ID using the directory lookup.
|
|
298
|
+
* This enables sending DMs by username instead of requiring explicit user IDs.
|
|
299
|
+
*/
|
|
300
|
+
async function resolveDiscordTarget(raw, options, parseOptions = {}) {
|
|
301
|
+
const trimmed = raw.trim();
|
|
302
|
+
if (!trimmed) return;
|
|
303
|
+
const likelyUsername = isLikelyUsername(trimmed);
|
|
304
|
+
const shouldLookup = isExplicitUserLookup(trimmed, parseOptions) || likelyUsername;
|
|
305
|
+
if (/^\d+$/.test(trimmed) && parseOptions.defaultKind !== "user" && isConfiguredAllowedDiscordDmUser(trimmed, options)) return buildMessagingTarget("user", trimmed, trimmed);
|
|
306
|
+
const directParse = safeParseDiscordTarget(trimmed, parseOptions);
|
|
307
|
+
if (directParse && directParse.kind !== "channel" && !likelyUsername) return directParse;
|
|
308
|
+
if (!shouldLookup) return directParse ?? parseDiscordSendTarget(trimmed, parseOptions);
|
|
309
|
+
try {
|
|
310
|
+
const match = (await listDiscordDirectoryPeersLive({
|
|
311
|
+
...options,
|
|
312
|
+
query: trimmed,
|
|
313
|
+
limit: 1
|
|
314
|
+
}))[0];
|
|
315
|
+
if (match && match.kind === "user") {
|
|
316
|
+
const userId = match.id.replace(/^user:/, "");
|
|
317
|
+
const resolvedAccountId = resolveDiscordAccount({
|
|
318
|
+
cfg: options.cfg,
|
|
319
|
+
accountId: options.accountId
|
|
320
|
+
}).accountId;
|
|
321
|
+
rememberDiscordDirectoryUser({
|
|
322
|
+
accountId: resolvedAccountId,
|
|
323
|
+
userId,
|
|
324
|
+
handles: [
|
|
325
|
+
trimmed,
|
|
326
|
+
match.name,
|
|
327
|
+
match.handle
|
|
328
|
+
]
|
|
329
|
+
});
|
|
330
|
+
return buildMessagingTarget("user", userId, trimmed);
|
|
331
|
+
}
|
|
332
|
+
} catch {}
|
|
333
|
+
return parseDiscordSendTarget(trimmed, parseOptions);
|
|
334
|
+
}
|
|
335
|
+
async function parseAndResolveDiscordTarget(raw, options, parseOptions = {}) {
|
|
336
|
+
const resolved = await resolveDiscordTarget(raw, options, parseOptions) ?? parseDiscordSendTarget(raw, parseOptions);
|
|
337
|
+
if (!resolved) throw new Error("Recipient is required for Discord sends");
|
|
338
|
+
return resolved;
|
|
339
|
+
}
|
|
340
|
+
function safeParseDiscordTarget(input, options) {
|
|
341
|
+
try {
|
|
342
|
+
return parseDiscordSendTarget(input, options);
|
|
343
|
+
} catch {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
function isConfiguredAllowedDiscordDmUser(input, options) {
|
|
348
|
+
return allowFromContainsDiscordUserId(resolveDiscordAccountAllowFrom({
|
|
349
|
+
cfg: options.cfg,
|
|
350
|
+
accountId: options.accountId
|
|
351
|
+
}) ?? [], input);
|
|
352
|
+
}
|
|
353
|
+
function isExplicitUserLookup(input, options) {
|
|
354
|
+
if (/^<@!?(\d+)>$/.test(input)) return true;
|
|
355
|
+
if (/^(user:|discord:)/.test(input)) return true;
|
|
356
|
+
if (input.startsWith("@")) return true;
|
|
357
|
+
if (/^\d+$/.test(input)) return options.defaultKind === "user";
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
function isLikelyUsername(input) {
|
|
361
|
+
if (/^(user:|channel:|discord:|@|<@!?)|[\d]+$/.test(input)) return false;
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
//#endregion
|
|
365
|
+
export { normalizeDiscordMessagingTarget as a, parseDiscordTarget as c, looksLikeDiscordTargetId as i, resolveDiscordChannelId as l, resolveDiscordTarget as n, normalizeDiscordOutboundTarget as o, parseDiscordSendTarget as r, chunkDiscordTextWithMode as s, parseAndResolveDiscordTarget as t };
|
package/dist/test-api.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as discordPlugin } from "./channel-
|
|
2
|
-
import { n as discordOutbound } from "./outbound-adapter-
|
|
3
|
-
import { t as __testing } from "./thread-bindings.manager-
|
|
4
|
-
import { n as buildDiscordInboundAccessContext } from "./inbound-context-
|
|
1
|
+
import { t as discordPlugin } from "./channel-UXGa9PGc.js";
|
|
2
|
+
import { n as discordOutbound } from "./outbound-adapter-DNsTVJfH.js";
|
|
3
|
+
import { t as __testing } from "./thread-bindings.manager-BtxfLfWf.js";
|
|
4
|
+
import { n as buildDiscordInboundAccessContext } from "./inbound-context-CRylwjg0.js";
|
|
5
5
|
import { finalizeInboundContext } from "openclaw/plugin-sdk/reply-dispatch-runtime";
|
|
6
6
|
//#region extensions/discord/src/monitor/inbound-context.test-helpers.ts
|
|
7
7
|
function buildFinalizedDiscordDirectInboundContext() {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
|
|
2
|
-
import {
|
|
3
|
-
import "./targets-
|
|
4
|
-
import { C as resolveThreadBindingMaxAgeMs$1, O as shouldPersistBindingMutations, S as resolveThreadBindingMaxAgeExpiresAt, T as saveBindingsToDisk, b as resolveThreadBindingIdleTimeoutMs$1, c as getThreadBindingToken, f as normalizeThreadId, g as removeBindingRecord, l as isRecentlyUnboundThreadWebhookMessage, n as MANAGERS_BY_ACCOUNT_ID, p as rememberRecentUnboundWebhookEcho, t as BINDINGS_BY_THREAD_ID, x as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-
|
|
5
|
-
import { n as setThreadBindingMaxAgeBySessionKey, r as resolveBindingIdsForTargetSession, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-
|
|
6
|
-
import { d as formatThreadBindingDurationLabel, l as resolveThreadBindingPersona, m as resolveThreadBindingThreadName, p as resolveThreadBindingIntroText, s as resolveChannelIdForBinding, u as resolveThreadBindingPersonaFromRecord } from "./thread-bindings.discord-api-
|
|
7
|
-
import { i as getThreadBindingManager, n as createNoopThreadBindingManager, r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-
|
|
2
|
+
import { c as parseDiscordTarget } from "./target-resolver-DA84_xbt.js";
|
|
3
|
+
import "./targets-FwL1BPTU.js";
|
|
4
|
+
import { C as resolveThreadBindingMaxAgeMs$1, O as shouldPersistBindingMutations, S as resolveThreadBindingMaxAgeExpiresAt, T as saveBindingsToDisk, b as resolveThreadBindingIdleTimeoutMs$1, c as getThreadBindingToken, f as normalizeThreadId, g as removeBindingRecord, l as isRecentlyUnboundThreadWebhookMessage, n as MANAGERS_BY_ACCOUNT_ID, p as rememberRecentUnboundWebhookEcho, t as BINDINGS_BY_THREAD_ID, x as resolveThreadBindingInactivityExpiresAt } from "./thread-bindings.state-WU4duXKY.js";
|
|
5
|
+
import { n as setThreadBindingMaxAgeBySessionKey, r as resolveBindingIdsForTargetSession, t as setThreadBindingIdleTimeoutBySessionKey } from "./thread-bindings.session-updates-jcZSiRPI.js";
|
|
6
|
+
import { d as formatThreadBindingDurationLabel, l as resolveThreadBindingPersona, m as resolveThreadBindingThreadName, p as resolveThreadBindingIntroText, s as resolveChannelIdForBinding, u as resolveThreadBindingPersonaFromRecord } from "./thread-bindings.discord-api-CwWGoyei.js";
|
|
7
|
+
import { i as getThreadBindingManager, n as createNoopThreadBindingManager, r as createThreadBindingManager, t as __testing } from "./thread-bindings.manager-BtxfLfWf.js";
|
|
8
8
|
import { normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
|
|
9
9
|
import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
|
|
10
10
|
import { resolveThreadBindingIdleTimeoutMs, resolveThreadBindingMaxAgeMs, resolveThreadBindingsEnabled } from "openclaw/plugin-sdk/conversation-runtime";
|
package/dist/{thread-bindings.discord-api-CfZnSqIb.js → thread-bindings.discord-api-CwWGoyei.js}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as resolveDiscordChannelId } from "./target-resolver-DA84_xbt.js";
|
|
2
2
|
import { at as getChannel, q as createChannelWebhook } from "./discord-eZlimVfW.js";
|
|
3
|
-
import {
|
|
4
|
-
import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-
|
|
5
|
-
import { t as sendMessageDiscord } from "./send.outbound-
|
|
6
|
-
import { i as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL, k as toReusableWebhookKey, m as rememberReusableWebhook, t as BINDINGS_BY_THREAD_ID } from "./thread-bindings.state-
|
|
7
|
-
import { n as resolveDiscordChannelInfoSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-
|
|
3
|
+
import { j as createDiscordRestClient } from "./send.shared-BQGiUPvZ.js";
|
|
4
|
+
import { c as sendWebhookMessageDiscord, u as createThreadDiscord } from "./send-8S_HKJpQ.js";
|
|
5
|
+
import { t as sendMessageDiscord } from "./send.outbound-D3tonSz8.js";
|
|
6
|
+
import { i as REUSABLE_WEBHOOKS_BY_ACCOUNT_CHANNEL, k as toReusableWebhookKey, m as rememberReusableWebhook, t as BINDINGS_BY_THREAD_ID } from "./thread-bindings.state-WU4duXKY.js";
|
|
7
|
+
import { n as resolveDiscordChannelInfoSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-DFIQqbYm.js";
|
|
8
8
|
import { SYSTEM_MARK, normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
|
|
9
9
|
import { ChannelType } from "discord-api-types/v10";
|
|
10
10
|
import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
|
|
2
|
-
import {
|
|
2
|
+
import { l as resolveDiscordChannelId } from "./target-resolver-DA84_xbt.js";
|
|
3
3
|
import { at as getChannel } from "./discord-eZlimVfW.js";
|
|
4
|
-
import {
|
|
5
|
-
import { A as DEFAULT_THREAD_BINDING_IDLE_TIMEOUT_MS, C as resolveThreadBindingMaxAgeMs$1, D as shouldDefaultPersist, E as setBindingRecord, M as THREAD_BINDINGS_SWEEP_INTERVAL_MS, S as resolveThreadBindingMaxAgeExpiresAt, T as saveBindingsToDisk, _ as resetThreadBindingsForTests, a as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, b as resolveThreadBindingIdleTimeoutMs$1, c as getThreadBindingToken, d as normalizeThreadBindingDurationMs, f as normalizeThreadId, g as removeBindingRecord, h as rememberThreadBindingToken, n as MANAGERS_BY_ACCOUNT_ID, o as ensureBindingsLoaded, p as rememberRecentUnboundWebhookEcho, r as PERSIST_BY_ACCOUNT_ID, s as forgetThreadBindingToken, t as BINDINGS_BY_THREAD_ID, u as normalizeTargetKind, v as resolveBindingIdsForSession, w as resolveThreadBindingsPath, x as resolveThreadBindingInactivityExpiresAt, y as resolveBindingRecordKey } from "./thread-bindings.state-
|
|
6
|
-
import { a as isThreadArchived, c as summarizeDiscordError, f as resolveThreadBindingFarewellText, i as isDiscordThreadGoneError, m as resolveThreadBindingThreadName, n as createWebhookForChannel, o as maybeSendBindingMessage, r as findReusableWebhook, s as resolveChannelIdForBinding, t as createThreadForBinding } from "./thread-bindings.discord-api-
|
|
4
|
+
import { j as createDiscordRestClient } from "./send.shared-BQGiUPvZ.js";
|
|
5
|
+
import { A as DEFAULT_THREAD_BINDING_IDLE_TIMEOUT_MS, C as resolveThreadBindingMaxAgeMs$1, D as shouldDefaultPersist, E as setBindingRecord, M as THREAD_BINDINGS_SWEEP_INTERVAL_MS, S as resolveThreadBindingMaxAgeExpiresAt, T as saveBindingsToDisk, _ as resetThreadBindingsForTests, a as THREAD_BINDING_TOUCH_PERSIST_MIN_INTERVAL_MS, b as resolveThreadBindingIdleTimeoutMs$1, c as getThreadBindingToken, d as normalizeThreadBindingDurationMs, f as normalizeThreadId, g as removeBindingRecord, h as rememberThreadBindingToken, n as MANAGERS_BY_ACCOUNT_ID, o as ensureBindingsLoaded, p as rememberRecentUnboundWebhookEcho, r as PERSIST_BY_ACCOUNT_ID, s as forgetThreadBindingToken, t as BINDINGS_BY_THREAD_ID, u as normalizeTargetKind, v as resolveBindingIdsForSession, w as resolveThreadBindingsPath, x as resolveThreadBindingInactivityExpiresAt, y as resolveBindingRecordKey } from "./thread-bindings.state-WU4duXKY.js";
|
|
6
|
+
import { a as isThreadArchived, c as summarizeDiscordError, f as resolveThreadBindingFarewellText, i as isDiscordThreadGoneError, m as resolveThreadBindingThreadName, n as createWebhookForChannel, o as maybeSendBindingMessage, r as findReusableWebhook, s as resolveChannelIdForBinding, t as createThreadForBinding } from "./thread-bindings.discord-api-CwWGoyei.js";
|
|
7
7
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
|
|
8
8
|
import { normalizeAccountId, resolveAgentIdFromSessionKey } from "openclaw/plugin-sdk/routing";
|
|
9
9
|
import { getRuntimeConfigSnapshot } from "openclaw/plugin-sdk/runtime-config-snapshot";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as setBindingRecord, O as shouldPersistBindingMutations, T as saveBindingsToDisk, o as ensureBindingsLoaded, t as BINDINGS_BY_THREAD_ID, v as resolveBindingIdsForSession } from "./thread-bindings.state-
|
|
1
|
+
import { E as setBindingRecord, O as shouldPersistBindingMutations, T as saveBindingsToDisk, o as ensureBindingsLoaded, t as BINDINGS_BY_THREAD_ID, v as resolveBindingIdsForSession } from "./thread-bindings.state-WU4duXKY.js";
|
|
2
2
|
import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
|
|
3
3
|
//#region extensions/discord/src/monitor/thread-bindings.session-shared.ts
|
|
4
4
|
function normalizeNonNegativeMs(raw) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
|
|
2
2
|
import { et as createThread, ot as getChannelMessage, rt as editChannel, t as discord_exports } from "./discord-eZlimVfW.js";
|
|
3
|
-
import { a as resolveDiscordChannelParentSafe, i as resolveDiscordChannelParentIdSafe, r as resolveDiscordChannelNameSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-
|
|
4
|
-
import { s as withAbortTimeout } from "./timeouts-
|
|
5
|
-
import { c as resolveDiscordChannelInfo, l as resolveDiscordMessageChannelId, n as resolveDiscordForwardedMessagesTextFromSnapshots, t as resolveDiscordEmbedText } from "./message-utils-
|
|
3
|
+
import { a as resolveDiscordChannelParentSafe, i as resolveDiscordChannelParentIdSafe, r as resolveDiscordChannelNameSafe, t as resolveDiscordChannelIdSafe } from "./channel-access-DFIQqbYm.js";
|
|
4
|
+
import { s as withAbortTimeout } from "./timeouts-CdsmBWWs.js";
|
|
5
|
+
import { c as resolveDiscordChannelInfo, l as resolveDiscordMessageChannelId, n as resolveDiscordForwardedMessagesTextFromSnapshots, t as resolveDiscordEmbedText } from "./message-utils-9kaGF59d.js";
|
|
6
6
|
import { normalizeOptionalString, normalizeOptionalStringifiedId, truncateUtf16Safe } from "openclaw/plugin-sdk/text-runtime";
|
|
7
7
|
import { buildAgentSessionKey } from "openclaw/plugin-sdk/routing";
|
|
8
8
|
import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
package/dist/timeouts.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { 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-
|
|
1
|
+
import { 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-CdsmBWWs.js";
|
|
2
2
|
export { DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS, DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS, DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, DISCORD_DEFAULT_LISTENER_TIMEOUT_MS };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
|
|
2
2
|
import { ft as sendChannelTyping } from "./discord-eZlimVfW.js";
|
|
3
|
-
import { o as raceWithTimeout } from "./timeouts-
|
|
3
|
+
import { o as raceWithTimeout } from "./timeouts-CdsmBWWs.js";
|
|
4
4
|
//#region extensions/discord/src/monitor/typing.ts
|
|
5
5
|
var typing_exports = /* @__PURE__ */ __exportAll({ sendTyping: () => sendTyping });
|
|
6
6
|
const DISCORD_TYPING_START_TIMEOUT_MS = 5e3;
|
package/openclaw.plugin.json
CHANGED
|
@@ -1002,6 +1002,11 @@
|
|
|
1002
1002
|
"exclusiveMinimum": 0,
|
|
1003
1003
|
"maximum": 120000
|
|
1004
1004
|
},
|
|
1005
|
+
"captureSilenceGraceMs": {
|
|
1006
|
+
"type": "integer",
|
|
1007
|
+
"exclusiveMinimum": 0,
|
|
1008
|
+
"maximum": 30000
|
|
1009
|
+
},
|
|
1005
1010
|
"tts": {
|
|
1006
1011
|
"type": "object",
|
|
1007
1012
|
"properties": {
|
|
@@ -2579,6 +2584,11 @@
|
|
|
2579
2584
|
"exclusiveMinimum": 0,
|
|
2580
2585
|
"maximum": 120000
|
|
2581
2586
|
},
|
|
2587
|
+
"captureSilenceGraceMs": {
|
|
2588
|
+
"type": "integer",
|
|
2589
|
+
"exclusiveMinimum": 0,
|
|
2590
|
+
"maximum": 30000
|
|
2591
|
+
},
|
|
2582
2592
|
"tts": {
|
|
2583
2593
|
"type": "object",
|
|
2584
2594
|
"properties": {
|
|
@@ -3387,6 +3397,10 @@
|
|
|
3387
3397
|
"label": "Discord Voice Reconnect Grace (ms)",
|
|
3388
3398
|
"help": "Grace period for a disconnected Discord voice session to enter Signalling or Connecting before OpenClaw destroys it. Default: 15000."
|
|
3389
3399
|
},
|
|
3400
|
+
"voice.captureSilenceGraceMs": {
|
|
3401
|
+
"label": "Discord Voice Capture Silence Grace (ms)",
|
|
3402
|
+
"help": "Silence window after Discord reports a speaker ended before OpenClaw finalizes the audio segment for transcription. Default: 2500."
|
|
3403
|
+
},
|
|
3390
3404
|
"voice.tts": {
|
|
3391
3405
|
"label": "Discord Voice Text-to-Speech",
|
|
3392
3406
|
"help": "Optional TTS overrides for Discord voice playback (merged with messages.tts)."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/discord",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.7",
|
|
4
4
|
"description": "OpenClaw Discord channel plugin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"openclaw": "workspace:*"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"openclaw": ">=2026.5.
|
|
24
|
+
"openclaw": ">=2026.5.7"
|
|
25
25
|
},
|
|
26
26
|
"peerDependenciesMeta": {
|
|
27
27
|
"openclaw": {
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"allowInvalidConfigRecovery": true
|
|
66
66
|
},
|
|
67
67
|
"compat": {
|
|
68
|
-
"pluginApi": ">=2026.5.
|
|
68
|
+
"pluginApi": ">=2026.5.7"
|
|
69
69
|
},
|
|
70
70
|
"build": {
|
|
71
|
-
"openclawVersion": "2026.5.
|
|
71
|
+
"openclawVersion": "2026.5.7"
|
|
72
72
|
},
|
|
73
73
|
"release": {
|
|
74
74
|
"publishToClawHub": true,
|
package/dist/targets-DcNwQ9vN.js
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/{session-key-normalization-Daag9II6.js → session-key-normalization-B5La-jFM.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|