@openclaw/discord 2026.10.1 → 2026.10.5-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.setup/account-inspect-8cCu6uPG.mjs +31 -0
- package/dist/.setup/{accounts-HE9-mj1L.mjs → accounts-ljrzXBJi.mjs} +47 -45
- package/dist/.setup/{allow-list-vxkG9_JD.mjs → allow-list-B_ToXtew.mjs} +34 -101
- package/dist/.setup/{api-DlNUkDqj.mjs → api-CtmE1OUN.mjs} +25 -31
- package/dist/.setup/{approval-handler.runtime-DmnEa54W.mjs → approval-handler.runtime-D7FoZSn0.mjs} +30 -53
- package/dist/.setup/{approval-message-updates-B0jdSqOj.mjs → approval-message-updates-CIGByUcE.mjs} +2 -2
- package/dist/.setup/{audit-BpikUwN_.mjs → audit-zSawfbsN.mjs} +5 -8
- package/dist/.setup/{channel-Dr-AUnGt.mjs → channel-DI7DMzu0.mjs} +136 -215
- package/dist/.setup/{channel-access-BRp3Y-rF.mjs → channel-access-DasWY_OV.mjs} +6 -7
- package/dist/.setup/{channel.setup-BmNvkidb.mjs → channel.setup-DdFVN1mr.mjs} +35 -64
- package/dist/.setup/{components-DLJR0xU-.mjs → components-HN9052L1.mjs} +123 -146
- package/dist/.setup/{config-schema-BQWfnSCx.mjs → config-schema-_uBILpQf.mjs} +7 -3
- package/dist/.setup/{conversation-binding-route-DicJC1Lj.mjs → conversation-binding-route-DTjCBx-O.mjs} +1 -1
- package/dist/.setup/{directory-config-gqsdcplU.mjs → directory-config-3iVub-3m.mjs} +1 -1
- package/dist/.setup/{directory-live-Bipr0eUJ.mjs → directory-live-DLygQVtW.mjs} +18 -22
- package/dist/.setup/{discord-9gysrhzp.mjs → discord-BGqgx-yd.mjs} +686 -854
- package/dist/.setup/{doctor-B2bskDcF.mjs → doctor-DSrNJ7m2.mjs} +36 -47
- package/dist/.setup/{doctor-contract-Bg3NPAMw.mjs → doctor-contract-Bwv8EuQ_.mjs} +7 -16
- package/dist/.setup/{handle-action-UmkjXBfo.mjs → handle-action-CXH1h1tq.mjs} +25 -38
- package/dist/.setup/{handle-action.guild-admin-CB4sc9VV.mjs → handle-action.guild-admin-CHKW6PIs.mjs} +25 -31
- package/dist/.setup/{live-policy-config-VxexfRKo.mjs → live-policy-config-BPoB3eQi.mjs} +1 -1
- package/dist/.setup/{message-handler-BK69A-NB.mjs → message-handler-Ii_etru1.mjs} +9 -14
- package/dist/.setup/{message-handler.preflight-DFpsh90H.mjs → message-handler.preflight-C7YuSRl_.mjs} +79 -128
- package/dist/.setup/{message-handler.preflight-pluralkit-BXGGVmpe.mjs → message-handler.preflight-pluralkit-C3iAG--b.mjs} +6 -6
- package/dist/.setup/{message-handler.process-TKoqcqIP.mjs → message-handler.process-ClgWYH6o.mjs} +234 -206
- package/dist/.setup/{outbound-adapter-D4wRAb5S.mjs → outbound-adapter-D8OOIuKn.mjs} +73 -112
- package/dist/.setup/{outbound-session-route-BvBH4LC6.mjs → outbound-session-route-B0Hpwn3Q.mjs} +57 -115
- package/dist/.setup/output-activity-uBpMSX75.mjs +11 -0
- package/dist/.setup/{pluralkit-a6_NLfH9.mjs → pluralkit-B64dfq_j.mjs} +3 -1
- package/dist/.setup/{preflight-audio-DHGIHEpv.mjs → preflight-audio-wWgsZG5F.mjs} +1 -5
- package/dist/.setup/{presence-cache-Dg3_dADn.mjs → presence-cache-DCeTsL73.mjs} +3 -6
- package/dist/.setup/{probe-BwSKpnZf.mjs → probe-D3P1x4aN.mjs} +10 -18
- package/dist/.setup/{provider-YP8gN9_o.mjs → provider-D9EzOfG8.mjs} +2990 -3903
- package/dist/.setup/{provider-session.runtime-D1gkPxHT.mjs → provider-session.runtime-CsnRvddI.mjs} +5 -5
- package/dist/.setup/provider.runtime-BQVcM7Pg.mjs +2 -0
- package/dist/.setup/{realtime-session.runtime-BKUQBy1u.mjs → realtime-session.runtime-CxGBk8H-.mjs} +69 -98
- package/dist/.setup/{receive-recovery-DgkX7Qvi.mjs → receive-recovery-eVmK2_hl.mjs} +2 -12
- package/dist/.setup/resolve-allowlist-common-DNSsUQRF.mjs +66 -0
- package/dist/.setup/resolve-channels-UdT38DzU.mjs +173 -0
- package/dist/.setup/{resolve-users-DNrwvunm.mjs → resolve-users-DnCsrXZ_.mjs} +12 -41
- package/dist/.setup/{runtime-CESTexGn.mjs → runtime-CRTkKU1G.mjs} +202 -313
- package/dist/.setup/{runtime-DPcmPST9.mjs → runtime-DPm3gZXk.mjs} +2 -2
- package/dist/.setup/{secret-config-contract-uOE2J7yM.mjs → secret-config-contract-CIsH7R3B.mjs} +9 -18
- package/dist/.setup/{security-audit-D42cp5N7.mjs → security-audit-BFT84Uny.mjs} +1 -2
- package/dist/.setup/security-contract-DNyyjTZZ.mjs +19 -0
- package/dist/.setup/{send-CJk3VP5q.mjs → send-DbILKgcm.mjs} +184 -241
- package/dist/.setup/{send.components-dPljuV24.mjs → send.components-FxOS3CeP.mjs} +47 -63
- package/dist/.setup/{send.outbound-rOboMO_6.mjs → send.outbound-_jx4Xpd3.mjs} +178 -202
- package/dist/.setup/{send.receipt-DVOg2Oaw.mjs → send.receipt-BAlzXd8e.mjs} +33 -109
- package/dist/.setup/{send.shared-C4CN24D9.mjs → send.shared-CjQ4jbMA.mjs} +97 -153
- package/dist/.setup/{sender-identity-AHpUNr72.mjs → sender-identity-BNBvGt1l.mjs} +1 -1
- package/dist/.setup/setup-plugin-api-xfOFmxHP.mjs +3 -0
- package/dist/.setup/{shared-BoBnM5kM.mjs → shared-CestGDpq.mjs} +30 -20
- package/dist/.setup/{subagent-hooks-HH8Uy9cx.mjs → subagent-hooks-CME7dSGf.mjs} +5 -10
- package/dist/.setup/{system-events-Cwxaww8i.mjs → system-events-BwwSDCw4.mjs} +2 -2
- package/dist/.setup/target-parsing-C-HyNxcE.mjs +48 -0
- package/dist/.setup/{target-resolver-CSFoPQ12.mjs → target-resolver-Bse8fuTi.mjs} +11 -27
- package/dist/.setup/targets-DZJjkzwv.mjs +3 -0
- package/dist/.setup/{thread-bindings-DjQCkmsd.mjs → thread-bindings-0hPTSK14.mjs} +61 -52
- package/dist/.setup/{thread-bindings.manager-D2-GYZ5s.mjs → thread-bindings.manager-CdNa6UIs.mjs} +138 -211
- package/dist/.setup/{thread-bindings.session-updates-Bu_CGr_O.mjs → thread-bindings.session-updates-DGSljVf6.mjs} +60 -99
- package/dist/.setup/threading-BKe3E3tp.mjs +246 -0
- package/dist/.setup/{timeouts-pun7VJ02.mjs → timeouts-CuNARfyw.mjs} +10 -18
- package/dist/.setup/{transcripts-source-CaZQnGRH.mjs → transcripts-source-0qQYVu2H.mjs} +50 -368
- package/dist/.setup/{voice-runtime-DDymtIw8.mjs → voice-runtime-QlZJ4sHv.mjs} +166 -322
- package/dist/account-inspect-api.js +1 -1
- package/dist/action-runtime-api.js +1 -1
- package/dist/activities-api.js +77 -120
- package/dist/api.js +19 -18
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/doctor-contract-api.js +1 -1
- package/dist/runtime-api.js +21 -20
- package/dist/secret-contract-api.js +1 -1
- package/dist/security-audit-contract-api.js +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/setup-entry.js +1 -1
- package/dist/setup-plugin-api.js +1 -1
- package/dist/src/voice/audio-worker.runtime.js +38 -57
- package/dist/subagent-hooks-api.js +1 -1
- package/dist/transcripts-source-api.js +1 -1
- package/node_modules/discord-api-types/_generated_/rest/v10/interfaces.d.ts +21 -0
- package/node_modules/discord-api-types/_generated_/rest/v10/interfaces.d.ts.map +1 -1
- package/node_modules/discord-api-types/_generated_/rest/v9/interfaces.d.ts +21 -0
- package/node_modules/discord-api-types/_generated_/rest/v9/interfaces.d.ts.map +1 -1
- package/node_modules/discord-api-types/globals.d.ts +6 -0
- package/node_modules/discord-api-types/globals.d.ts.map +1 -1
- package/node_modules/discord-api-types/globals.js +6 -0
- package/node_modules/discord-api-types/globals.js.map +1 -1
- package/node_modules/discord-api-types/package.json +3 -3
- package/node_modules/discord-api-types/payloads/index.mjs +1 -0
- package/node_modules/discord-api-types/payloads/v10/applicationIdentityProfile.d.ts +207 -0
- package/node_modules/discord-api-types/payloads/v10/applicationIdentityProfile.d.ts.map +1 -0
- package/node_modules/discord-api-types/payloads/v10/applicationIdentityProfile.js +25 -0
- package/node_modules/discord-api-types/payloads/v10/applicationIdentityProfile.js.map +1 -0
- package/node_modules/discord-api-types/payloads/v10/autoModeration.d.ts +1 -1
- package/node_modules/discord-api-types/payloads/v10/autoModeration.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/guild.d.ts +27 -23
- package/node_modules/discord-api-types/payloads/v10/guild.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/guild.js +26 -22
- package/node_modules/discord-api-types/payloads/v10/guild.js.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/index.d.ts +1 -0
- package/node_modules/discord-api-types/payloads/v10/index.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/index.js +1 -0
- package/node_modules/discord-api-types/payloads/v10/index.js.map +1 -1
- package/node_modules/discord-api-types/payloads/v10/index.mjs +1 -0
- package/node_modules/discord-api-types/payloads/v9/applicationIdentityProfile.d.ts +207 -0
- package/node_modules/discord-api-types/payloads/v9/applicationIdentityProfile.d.ts.map +1 -0
- package/node_modules/discord-api-types/payloads/v9/applicationIdentityProfile.js +25 -0
- package/node_modules/discord-api-types/payloads/v9/applicationIdentityProfile.js.map +1 -0
- package/node_modules/discord-api-types/payloads/v9/autoModeration.d.ts +1 -1
- package/node_modules/discord-api-types/payloads/v9/autoModeration.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/guild.d.ts +27 -23
- package/node_modules/discord-api-types/payloads/v9/guild.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/guild.js +26 -22
- package/node_modules/discord-api-types/payloads/v9/guild.js.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/index.d.ts +1 -0
- package/node_modules/discord-api-types/payloads/v9/index.d.ts.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/index.js +1 -0
- package/node_modules/discord-api-types/payloads/v9/index.js.map +1 -1
- package/node_modules/discord-api-types/payloads/v9/index.mjs +1 -0
- package/node_modules/discord-api-types/rest/common.d.ts +2 -0
- package/node_modules/discord-api-types/rest/common.d.ts.map +1 -1
- package/node_modules/discord-api-types/rest/common.js +2 -0
- package/node_modules/discord-api-types/rest/common.js.map +1 -1
- package/node_modules/discord-api-types/rest/v10/applicationIdentityProfile.d.ts +70 -0
- package/node_modules/discord-api-types/rest/v10/applicationIdentityProfile.d.ts.map +1 -0
- package/node_modules/discord-api-types/rest/v10/applicationIdentityProfile.js +3 -0
- package/node_modules/discord-api-types/rest/v10/applicationIdentityProfile.js.map +1 -0
- package/node_modules/discord-api-types/rest/v10/index.d.ts +1 -0
- package/node_modules/discord-api-types/rest/v10/index.d.ts.map +1 -1
- package/node_modules/discord-api-types/rest/v10/index.js +29 -0
- package/node_modules/discord-api-types/rest/v10/index.js.map +1 -1
- package/node_modules/discord-api-types/rest/v10/interactions.d.ts +4 -2
- package/node_modules/discord-api-types/rest/v10/interactions.d.ts.map +1 -1
- package/node_modules/discord-api-types/rest/v10/user.d.ts +2 -2
- package/node_modules/discord-api-types/rest/v10/user.d.ts.map +1 -1
- package/node_modules/discord-api-types/rest/v9/applicationIdentityProfile.d.ts +70 -0
- package/node_modules/discord-api-types/rest/v9/applicationIdentityProfile.d.ts.map +1 -0
- package/node_modules/discord-api-types/rest/v9/applicationIdentityProfile.js +3 -0
- package/node_modules/discord-api-types/rest/v9/applicationIdentityProfile.js.map +1 -0
- package/node_modules/discord-api-types/rest/v9/index.d.ts +1 -0
- package/node_modules/discord-api-types/rest/v9/index.d.ts.map +1 -1
- package/node_modules/discord-api-types/rest/v9/index.js +29 -0
- package/node_modules/discord-api-types/rest/v9/index.js.map +1 -1
- package/node_modules/discord-api-types/rest/v9/interactions.d.ts +4 -2
- package/node_modules/discord-api-types/rest/v9/interactions.d.ts.map +1 -1
- package/node_modules/discord-api-types/rest/v9/user.d.ts +2 -2
- package/node_modules/discord-api-types/rest/v9/user.d.ts.map +1 -1
- package/node_modules/discord-api-types/v10.mjs +1 -0
- package/node_modules/discord-api-types/v9.mjs +1 -0
- package/node_modules/ws/lib/websocket.js +17 -3
- package/node_modules/ws/package.json +1 -1
- package/openclaw.plugin.json +3 -6
- package/package.json +7 -12
- package/dist/.setup/account-inspect-DsER5ILV.mjs +0 -45
- package/dist/.setup/provider.runtime-CZ51OIgD.mjs +0 -2
- package/dist/.setup/resolve-allowlist-common-BUyU3C-T.mjs +0 -27
- package/dist/.setup/resolve-channels-DA6QlhZN.mjs +0 -246
- package/dist/.setup/security-contract-DSHk7I2w.mjs +0 -26
- package/dist/.setup/setup-plugin-api-BVlCz3fm.mjs +0 -3
- package/dist/.setup/targets-bqXQENmX.mjs +0 -3
- package/dist/control-ui/2afbdab1d3aa65a789d8a3eba666f4b1ec5df07073538fe30d6cf32093a1fb2d/index.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Permissions, Snowflake } from '../../globals';
|
|
2
|
-
import type {
|
|
2
|
+
import type { APIConnection, APIDMChannel, APIGuildMember, APIUser, APIApplicationRoleConnection, GuildFeature } from '../../payloads/v9/index';
|
|
3
3
|
/**
|
|
4
4
|
* @see {@link https://discord.com/developers/docs/resources/user#get-current-user}
|
|
5
5
|
*/
|
|
@@ -89,7 +89,7 @@ export interface RESTPostAPICurrentUserCreateDMChannelJSONBody {
|
|
|
89
89
|
/**
|
|
90
90
|
* @see {@link https://discord.com/developers/docs/resources/user#create-dm}
|
|
91
91
|
*/
|
|
92
|
-
export type RESTPostAPICurrentUserCreateDMChannelResult =
|
|
92
|
+
export type RESTPostAPICurrentUserCreateDMChannelResult = APIDMChannel;
|
|
93
93
|
/**
|
|
94
94
|
* @see {@link https://discord.com/developers/docs/resources/user#get-user-connections}
|
|
95
95
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EACX,
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,OAAO,EACP,4BAA4B,EAC5B,YAAY,EACZ,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,OAAO,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAChD;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC9C,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG,8BAA8B,EAAE,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,SAAS,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,6CAA6C;IAC7D;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,2CAA2C,GAAG,YAAY,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG,aAAa,EAAE,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,oDAAoD,GAAG,4BAA4B,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,sDAAsD;IACtE;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,MAAM,oDAAoD,GAAG,4BAA4B,CAAC;AAEhG;;GAEG;AACH,MAAM,MAAM,uDAAuD,GAAG,SAAS,CAAC"}
|
|
@@ -12,6 +12,7 @@ export const ApplicationCommandOptionType = mod.ApplicationCommandOptionType;
|
|
|
12
12
|
export const ApplicationCommandPermissionType = mod.ApplicationCommandPermissionType;
|
|
13
13
|
export const ApplicationCommandType = mod.ApplicationCommandType;
|
|
14
14
|
export const ApplicationFlags = mod.ApplicationFlags;
|
|
15
|
+
export const ApplicationIdentityProfileDynamicFieldType = mod.ApplicationIdentityProfileDynamicFieldType;
|
|
15
16
|
export const ApplicationIntegrationType = mod.ApplicationIntegrationType;
|
|
16
17
|
export const ApplicationRoleConnectionMetadataType = mod.ApplicationRoleConnectionMetadataType;
|
|
17
18
|
export const ApplicationWebhookEventStatus = mod.ApplicationWebhookEventStatus;
|
|
@@ -12,6 +12,7 @@ export const ApplicationCommandOptionType = mod.ApplicationCommandOptionType;
|
|
|
12
12
|
export const ApplicationCommandPermissionType = mod.ApplicationCommandPermissionType;
|
|
13
13
|
export const ApplicationCommandType = mod.ApplicationCommandType;
|
|
14
14
|
export const ApplicationFlags = mod.ApplicationFlags;
|
|
15
|
+
export const ApplicationIdentityProfileDynamicFieldType = mod.ApplicationIdentityProfileDynamicFieldType;
|
|
15
16
|
export const ApplicationIntegrationType = mod.ApplicationIntegrationType;
|
|
16
17
|
export const ApplicationRoleConnectionMetadataType = mod.ApplicationRoleConnectionMetadataType;
|
|
17
18
|
export const ApplicationWebhookEventStatus = mod.ApplicationWebhookEventStatus;
|
|
@@ -75,11 +75,24 @@ class WebSocket extends EventEmitter {
|
|
|
75
75
|
this._redirects = 0;
|
|
76
76
|
|
|
77
77
|
if (protocols === undefined) {
|
|
78
|
-
protocols
|
|
78
|
+
if (!options || options.protocols === undefined) {
|
|
79
|
+
protocols = [];
|
|
80
|
+
} else if (Array.isArray(options.protocols)) {
|
|
81
|
+
protocols = options.protocols;
|
|
82
|
+
} else {
|
|
83
|
+
protocols = [options.protocols];
|
|
84
|
+
}
|
|
79
85
|
} else if (!Array.isArray(protocols)) {
|
|
80
86
|
if (typeof protocols === 'object' && protocols !== null) {
|
|
81
87
|
options = protocols;
|
|
82
|
-
|
|
88
|
+
|
|
89
|
+
if (options.protocols === undefined) {
|
|
90
|
+
protocols = [];
|
|
91
|
+
} else if (Array.isArray(options.protocols)) {
|
|
92
|
+
protocols = options.protocols;
|
|
93
|
+
} else {
|
|
94
|
+
protocols = [options.protocols];
|
|
95
|
+
}
|
|
83
96
|
} else {
|
|
84
97
|
protocols = [protocols];
|
|
85
98
|
}
|
|
@@ -318,7 +331,6 @@ class WebSocket extends EventEmitter {
|
|
|
318
331
|
return;
|
|
319
332
|
}
|
|
320
333
|
|
|
321
|
-
this._readyState = WebSocket.CLOSING;
|
|
322
334
|
this._sender.close(code, data, !this._isServer, (err) => {
|
|
323
335
|
//
|
|
324
336
|
// This error is handled by the `'error'` listener on the socket. We only
|
|
@@ -336,6 +348,7 @@ class WebSocket extends EventEmitter {
|
|
|
336
348
|
}
|
|
337
349
|
});
|
|
338
350
|
|
|
351
|
+
this._readyState = WebSocket.CLOSING;
|
|
339
352
|
setCloseTimer(this);
|
|
340
353
|
}
|
|
341
354
|
|
|
@@ -681,6 +694,7 @@ function initAsClient(websocket, address, protocols, options) {
|
|
|
681
694
|
socketPath: undefined,
|
|
682
695
|
hostname: undefined,
|
|
683
696
|
protocol: undefined,
|
|
697
|
+
protocols: undefined,
|
|
684
698
|
timeout: undefined,
|
|
685
699
|
method: 'GET',
|
|
686
700
|
host: undefined,
|
package/openclaw.plugin.json
CHANGED
|
@@ -45,9 +45,6 @@
|
|
|
45
45
|
"additionalProperties": false,
|
|
46
46
|
"properties": {}
|
|
47
47
|
},
|
|
48
|
-
"controlUi": {
|
|
49
|
-
"entry": "dist/control-ui/2afbdab1d3aa65a789d8a3eba666f4b1ec5df07073538fe30d6cf32093a1fb2d/index.js"
|
|
50
|
-
},
|
|
51
48
|
"channelConfigs": {
|
|
52
49
|
"discord": {
|
|
53
50
|
"schema": {
|
|
@@ -3741,11 +3738,11 @@
|
|
|
3741
3738
|
},
|
|
3742
3739
|
"streaming": {
|
|
3743
3740
|
"label": "Discord Streaming Mode",
|
|
3744
|
-
"help": "Discord
|
|
3741
|
+
"help": "Discord shows useful work status by default without streaming answer text. Set mode to \"off\" for quiet final-only delivery, or \"partial\"/\"block\" for answer previews. Run openclaw doctor --fix to migrate legacy keys."
|
|
3745
3742
|
},
|
|
3746
3743
|
"streaming.mode": {
|
|
3747
3744
|
"label": "Discord Streaming Mode",
|
|
3748
|
-
"help": "Discord preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". Default: \"off\"."
|
|
3745
|
+
"help": "Discord preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". Default: \"progress\"; \"off\" explicitly disables progress drafts."
|
|
3749
3746
|
},
|
|
3750
3747
|
"streaming.chunkMode": {
|
|
3751
3748
|
"label": "Discord Chunk Mode",
|
|
@@ -3797,7 +3794,7 @@
|
|
|
3797
3794
|
},
|
|
3798
3795
|
"streaming.progress.toolProgress": {
|
|
3799
3796
|
"label": "Discord Progress Tool Lines",
|
|
3800
|
-
"help": "Show
|
|
3797
|
+
"help": "Show the detailed rolling tool log (default: false). Work status, delegated-task states, plans, and authored progress remain visible without it. Set streaming.mode to off for quiet final-only delivery."
|
|
3801
3798
|
},
|
|
3802
3799
|
"streaming.progress.commentary": {
|
|
3803
3800
|
"label": "Discord Progress Commentary",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/discord",
|
|
3
|
-
"version": "2026.10.1",
|
|
3
|
+
"version": "2026.10.5-beta.1",
|
|
4
4
|
"description": "OpenClaw Discord channel plugin for channels, DMs, commands, and app events.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,16 +10,16 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@discord/embedded-app-sdk": "2.5.0",
|
|
12
12
|
"@discordjs/voice": "0.19.2",
|
|
13
|
-
"discord-api-types": "0.38.
|
|
13
|
+
"discord-api-types": "0.38.56",
|
|
14
14
|
"libopus-wasm": "0.4.1",
|
|
15
15
|
"mdast-util-from-markdown": "2.0.3",
|
|
16
16
|
"typebox": "1.3.34",
|
|
17
17
|
"undici": "8.11.2",
|
|
18
|
-
"ws": "8.
|
|
18
|
+
"ws": "8.22.0",
|
|
19
19
|
"zod": "4.6.5"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
|
-
"openclaw": ">=2026.10.1"
|
|
22
|
+
"openclaw": ">=2026.10.5-beta.1"
|
|
23
23
|
},
|
|
24
24
|
"peerDependenciesMeta": {
|
|
25
25
|
"openclaw": {
|
|
@@ -95,14 +95,14 @@
|
|
|
95
95
|
"allowInvalidConfigRecovery": true
|
|
96
96
|
},
|
|
97
97
|
"compat": {
|
|
98
|
-
"pluginApi": ">=2026.10.1"
|
|
98
|
+
"pluginApi": ">=2026.10.5-beta.1"
|
|
99
99
|
},
|
|
100
100
|
"build": {
|
|
101
101
|
"bundledDist": false,
|
|
102
102
|
"workerEntries": [
|
|
103
103
|
"./src/voice/audio-worker.runtime.ts"
|
|
104
104
|
],
|
|
105
|
-
"openclawVersion": "2026.10.1",
|
|
105
|
+
"openclawVersion": "2026.10.5-beta.1",
|
|
106
106
|
"staticAssets": [
|
|
107
107
|
{
|
|
108
108
|
"source": "./assets/embedded-app-sdk.mjs",
|
|
@@ -111,17 +111,12 @@
|
|
|
111
111
|
]
|
|
112
112
|
},
|
|
113
113
|
"assetScripts": {
|
|
114
|
-
"build": "node --import ../../scripts/tsx.mjs ../../scripts/build-discord-activity-sdk.mts
|
|
115
|
-
"copy": "cd ../.. && node --import ./scripts/tsx.mjs scripts/build-plugin-control-ui.mts extensions/discord --copy",
|
|
116
|
-
"buildOutputs": [
|
|
117
|
-
"openclaw.plugin.json"
|
|
118
|
-
]
|
|
114
|
+
"build": "node --import ../../scripts/tsx.mjs ../../scripts/build-discord-activity-sdk.mts"
|
|
119
115
|
},
|
|
120
116
|
"release": {
|
|
121
117
|
"publishToClawHub": true,
|
|
122
118
|
"publishToNpm": true
|
|
123
119
|
},
|
|
124
|
-
"controlUi": "./browser/index.ts",
|
|
125
120
|
"runtimeExtensions": [
|
|
126
121
|
"./dist/index.js"
|
|
127
122
|
],
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { _ as inspectDiscordAccountTokenState, o as mergeDiscordAccountConfig, r as listDiscordAccountIds, s as resolveDefaultDiscordAccountId, u as resolveDiscordAccountConfig, v as resolveDiscordAccountAvailability } from "./accounts-HE9-mj1L.mjs";
|
|
2
|
-
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
|
3
|
-
import { normalizeSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
4
|
-
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
|
-
//#region extensions/discord/src/account-inspect.ts
|
|
6
|
-
function inspectDiscordAccountPrimary(params) {
|
|
7
|
-
const accountId = normalizeAccountId(params.accountId ?? resolveDefaultDiscordAccountId(params.cfg));
|
|
8
|
-
const merged = mergeDiscordAccountConfig(params.cfg, accountId);
|
|
9
|
-
const enabled = params.cfg.channels?.discord?.enabled !== false && merged.enabled !== false;
|
|
10
|
-
const accountConfig = resolveDiscordAccountConfig(params.cfg, accountId);
|
|
11
|
-
const hasAccountToken = Boolean(accountConfig && Object.hasOwn(accountConfig, "token"));
|
|
12
|
-
return inspectDiscordAccountTokenState({
|
|
13
|
-
base: {
|
|
14
|
-
accountId,
|
|
15
|
-
enabled,
|
|
16
|
-
name: normalizeOptionalString(merged.name)
|
|
17
|
-
},
|
|
18
|
-
config: merged,
|
|
19
|
-
accountToken: accountConfig?.token,
|
|
20
|
-
hasAccountToken,
|
|
21
|
-
channelToken: params.cfg.channels?.discord?.token,
|
|
22
|
-
resolveFallbackToken: () => {
|
|
23
|
-
const envToken = accountId === DEFAULT_ACCOUNT_ID ? normalizeSecretInputString(params.envToken ?? process.env.DISCORD_BOT_TOKEN) : void 0;
|
|
24
|
-
return {
|
|
25
|
-
token: envToken?.replace(/^Bot\s+/i, "") ?? "",
|
|
26
|
-
source: envToken ? "env" : "none"
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
function inspectDiscordAccount(params) {
|
|
32
|
-
const account = inspectDiscordAccountPrimary(params);
|
|
33
|
-
return {
|
|
34
|
-
...account,
|
|
35
|
-
...resolveDiscordAccountAvailability({
|
|
36
|
-
account,
|
|
37
|
-
resolveAccounts: () => listDiscordAccountIds(params.cfg).map((accountId) => inspectDiscordAccountPrimary({
|
|
38
|
-
...params,
|
|
39
|
-
accountId
|
|
40
|
-
}))
|
|
41
|
-
})
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
//#endregion
|
|
45
|
-
export { inspectDiscordAccount as t };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { m as normalizeDiscordToken } from "./accounts-HE9-mj1L.mjs";
|
|
2
|
-
import { o as normalizeDiscordSlug } from "./allow-list-vxkG9_JD.mjs";
|
|
3
|
-
import { r as fetchDiscord } from "./api-DlNUkDqj.mjs";
|
|
4
|
-
//#region extensions/discord/src/guilds.ts
|
|
5
|
-
async function listGuilds(token, fetcher, options) {
|
|
6
|
-
return (await fetchDiscord("/users/@me/guilds", token, fetcher, options)).filter((guild) => typeof guild.id === "string" && typeof guild.name === "string").map((guild) => ({
|
|
7
|
-
id: guild.id,
|
|
8
|
-
name: guild.name,
|
|
9
|
-
slug: normalizeDiscordSlug(guild.name)
|
|
10
|
-
}));
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
//#region extensions/discord/src/resolve-allowlist-common.ts
|
|
14
|
-
function resolveDiscordAllowlistToken(token) {
|
|
15
|
-
return normalizeDiscordToken(token, "channels.discord.token");
|
|
16
|
-
}
|
|
17
|
-
function filterDiscordGuilds(guilds, params) {
|
|
18
|
-
if (params.guildId) return guilds.filter((guild) => guild.id === params.guildId);
|
|
19
|
-
if (params.guildName) {
|
|
20
|
-
const slug = normalizeDiscordSlug(params.guildName);
|
|
21
|
-
const match = slug ? guilds.find((guild) => guild.slug === slug) : void 0;
|
|
22
|
-
return match ? [match] : [];
|
|
23
|
-
}
|
|
24
|
-
return guilds;
|
|
25
|
-
}
|
|
26
|
-
//#endregion
|
|
27
|
-
export { resolveDiscordAllowlistToken as n, listGuilds as r, filterDiscordGuilds as t };
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.mjs";
|
|
2
|
-
import { A as isDiscordThreadChannelType, o as normalizeDiscordSlug } from "./allow-list-vxkG9_JD.mjs";
|
|
3
|
-
import { n as DiscordApiError, r as fetchDiscord, t as DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS } from "./api-DlNUkDqj.mjs";
|
|
4
|
-
import { n as resolveDiscordAllowlistToken, r as listGuilds, t as filterDiscordGuilds } from "./resolve-allowlist-common-BUyU3C-T.mjs";
|
|
5
|
-
//#region extensions/discord/src/resolve-channels.ts
|
|
6
|
-
var resolve_channels_exports = /* @__PURE__ */ __exportAll({ resolveDiscordChannelAllowlist: () => resolveDiscordChannelAllowlist });
|
|
7
|
-
function parseDiscordChannelInput(raw) {
|
|
8
|
-
const trimmed = raw.trim();
|
|
9
|
-
if (!trimmed) return {};
|
|
10
|
-
const mention = trimmed.match(/^<#(\d+)>$/);
|
|
11
|
-
if (mention) return { channelId: mention[1] };
|
|
12
|
-
const channelPrefix = trimmed.match(/^(?:channel:|discord:)?(\d+)$/i);
|
|
13
|
-
if (channelPrefix) return { channelId: channelPrefix[1] };
|
|
14
|
-
const guildPrefix = trimmed.match(/^(?:guild:|server:)?(\d+)$/i);
|
|
15
|
-
if (guildPrefix) return {
|
|
16
|
-
guildId: guildPrefix[1],
|
|
17
|
-
guildOnly: true
|
|
18
|
-
};
|
|
19
|
-
const split = trimmed.includes("/") ? trimmed.split("/") : trimmed.split("#");
|
|
20
|
-
if (split.length >= 2) {
|
|
21
|
-
const guild = split[0]?.trim();
|
|
22
|
-
const channel = split.slice(1).join("#").trim();
|
|
23
|
-
if (!channel) return guild ? {
|
|
24
|
-
guild: guild.trim(),
|
|
25
|
-
guildOnly: true
|
|
26
|
-
} : {};
|
|
27
|
-
if (guild && /^\d+$/.test(guild)) {
|
|
28
|
-
if (/^\d+$/.test(channel)) return {
|
|
29
|
-
guildId: guild,
|
|
30
|
-
channelId: channel
|
|
31
|
-
};
|
|
32
|
-
return {
|
|
33
|
-
guildId: guild,
|
|
34
|
-
channel
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
return {
|
|
38
|
-
guild,
|
|
39
|
-
channel
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
guild: trimmed,
|
|
44
|
-
guildOnly: true
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
async function listGuildChannels(token, fetcher, guildId) {
|
|
48
|
-
return (await fetchDiscord(`/guilds/${guildId}/channels`, token, fetcher, { timeoutMs: DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS })).map((channel) => {
|
|
49
|
-
const archived = channel.thread_metadata?.archived;
|
|
50
|
-
return {
|
|
51
|
-
id: typeof channel.id === "string" ? channel.id : "",
|
|
52
|
-
name: typeof channel.name === "string" ? channel.name : "",
|
|
53
|
-
guildId,
|
|
54
|
-
type: channel.type,
|
|
55
|
-
archived
|
|
56
|
-
};
|
|
57
|
-
}).filter((channel) => Boolean(channel.id) && Boolean(channel.name));
|
|
58
|
-
}
|
|
59
|
-
async function fetchChannel(token, fetcher, channelId) {
|
|
60
|
-
let raw;
|
|
61
|
-
try {
|
|
62
|
-
raw = await fetchDiscord(`/channels/${channelId}`, token, fetcher, { timeoutMs: DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS });
|
|
63
|
-
} catch (err) {
|
|
64
|
-
if (err instanceof DiscordApiError && err.status === 403) return { status: "forbidden" };
|
|
65
|
-
if (err instanceof DiscordApiError && err.status === 404) return { status: "not-found" };
|
|
66
|
-
throw err;
|
|
67
|
-
}
|
|
68
|
-
if (!raw || typeof raw.guild_id !== "string" || typeof raw.id !== "string") return { status: "invalid" };
|
|
69
|
-
return {
|
|
70
|
-
status: "found",
|
|
71
|
-
channel: {
|
|
72
|
-
id: raw.id,
|
|
73
|
-
name: typeof raw.name === "string" ? raw.name : "",
|
|
74
|
-
guildId: raw.guild_id,
|
|
75
|
-
type: raw.type
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
function preferActiveMatch(candidates) {
|
|
80
|
-
if (candidates.length === 0) return;
|
|
81
|
-
const scored = candidates.map((channel) => {
|
|
82
|
-
const isThread = isDiscordThreadChannelType(channel.type);
|
|
83
|
-
return {
|
|
84
|
-
channel,
|
|
85
|
-
score: (Boolean(channel.archived) ? 0 : 2) + (isThread ? 0 : 1)
|
|
86
|
-
};
|
|
87
|
-
});
|
|
88
|
-
scored.sort((a, b) => b.score - a.score);
|
|
89
|
-
return scored[0]?.channel ?? candidates[0];
|
|
90
|
-
}
|
|
91
|
-
function resolvedChannelResult(input, channel, guildName) {
|
|
92
|
-
return {
|
|
93
|
-
input,
|
|
94
|
-
resolved: true,
|
|
95
|
-
guildId: channel.guildId,
|
|
96
|
-
guildName,
|
|
97
|
-
channelId: channel.id,
|
|
98
|
-
channelName: channel.name,
|
|
99
|
-
archived: channel.archived
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
async function resolveDiscordChannelAllowlist(params) {
|
|
103
|
-
const token = resolveDiscordAllowlistToken(params.token);
|
|
104
|
-
if (!token) return params.entries.map((input) => ({
|
|
105
|
-
input,
|
|
106
|
-
resolved: false
|
|
107
|
-
}));
|
|
108
|
-
const fetcher = params.fetcher ?? fetch;
|
|
109
|
-
const guilds = await listGuilds(token, fetcher, { timeoutMs: DISCORD_DIRECTORY_LOOKUP_TIMEOUT_MS });
|
|
110
|
-
const channelsByGuild = /* @__PURE__ */ new Map();
|
|
111
|
-
const getChannels = (guildId) => {
|
|
112
|
-
const existing = channelsByGuild.get(guildId);
|
|
113
|
-
if (existing) return existing;
|
|
114
|
-
const promise = listGuildChannels(token, fetcher, guildId);
|
|
115
|
-
channelsByGuild.set(guildId, promise);
|
|
116
|
-
return promise;
|
|
117
|
-
};
|
|
118
|
-
const results = [];
|
|
119
|
-
for (const input of params.entries) {
|
|
120
|
-
const parsed = parseDiscordChannelInput(input);
|
|
121
|
-
if (parsed.guildOnly) {
|
|
122
|
-
const guild = filterDiscordGuilds(guilds, {
|
|
123
|
-
guildId: parsed.guildId,
|
|
124
|
-
guildName: parsed.guild
|
|
125
|
-
})[0];
|
|
126
|
-
if (guild) results.push({
|
|
127
|
-
input,
|
|
128
|
-
resolved: true,
|
|
129
|
-
guildId: guild.id,
|
|
130
|
-
guildName: guild.name
|
|
131
|
-
});
|
|
132
|
-
else results.push({
|
|
133
|
-
input,
|
|
134
|
-
resolved: false,
|
|
135
|
-
guildId: parsed.guildId,
|
|
136
|
-
guildName: parsed.guild
|
|
137
|
-
});
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
if (parsed.channelId) {
|
|
141
|
-
const channelId = parsed.channelId;
|
|
142
|
-
const result = await fetchChannel(token, fetcher, channelId);
|
|
143
|
-
if (result.status === "found") {
|
|
144
|
-
const channel = result.channel;
|
|
145
|
-
if (parsed.guildId && parsed.guildId !== channel.guildId) {
|
|
146
|
-
const expectedGuild = guilds.find((entry) => entry.id === parsed.guildId);
|
|
147
|
-
const actualGuild = guilds.find((entry) => entry.id === channel.guildId);
|
|
148
|
-
results.push({
|
|
149
|
-
input,
|
|
150
|
-
resolved: false,
|
|
151
|
-
guildId: parsed.guildId,
|
|
152
|
-
guildName: expectedGuild?.name,
|
|
153
|
-
channelId,
|
|
154
|
-
channelName: channel.name,
|
|
155
|
-
note: actualGuild?.name ? `channel belongs to guild ${actualGuild.name}` : "channel belongs to a different guild"
|
|
156
|
-
});
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
const guild = guilds.find((entry) => entry.id === channel.guildId);
|
|
160
|
-
results.push(resolvedChannelResult(input, channel, guild?.name));
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
if (result.status === "not-found" && parsed.guildId) {
|
|
164
|
-
const guild = guilds.find((entry) => entry.id === parsed.guildId);
|
|
165
|
-
if (guild) {
|
|
166
|
-
const match = preferActiveMatch((await getChannels(guild.id)).filter((channel) => normalizeDiscordSlug(channel.name) === normalizeDiscordSlug(channelId)));
|
|
167
|
-
if (match) {
|
|
168
|
-
results.push(resolvedChannelResult(input, match, guild.name));
|
|
169
|
-
continue;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
results.push({
|
|
174
|
-
input,
|
|
175
|
-
resolved: false,
|
|
176
|
-
guildId: parsed.guildId,
|
|
177
|
-
channelId
|
|
178
|
-
});
|
|
179
|
-
continue;
|
|
180
|
-
}
|
|
181
|
-
if (parsed.guildId || parsed.guild) {
|
|
182
|
-
const guild = filterDiscordGuilds(guilds, {
|
|
183
|
-
guildId: parsed.guildId,
|
|
184
|
-
guildName: parsed.guild
|
|
185
|
-
})[0];
|
|
186
|
-
const channelQuery = parsed.channel?.trim();
|
|
187
|
-
if (!guild || !channelQuery) {
|
|
188
|
-
results.push({
|
|
189
|
-
input,
|
|
190
|
-
resolved: false,
|
|
191
|
-
guildId: parsed.guildId,
|
|
192
|
-
guildName: parsed.guild,
|
|
193
|
-
channelName: channelQuery ?? parsed.channel
|
|
194
|
-
});
|
|
195
|
-
continue;
|
|
196
|
-
}
|
|
197
|
-
const channels = await getChannels(guild.id);
|
|
198
|
-
const normalizedChannelQuery = normalizeDiscordSlug(channelQuery);
|
|
199
|
-
const isNumericId = /^\d+$/.test(channelQuery);
|
|
200
|
-
let matches = channels.filter((channel) => isNumericId ? channel.id === channelQuery : normalizeDiscordSlug(channel.name) === normalizedChannelQuery);
|
|
201
|
-
if (isNumericId && matches.length === 0) matches = channels.filter((channel) => normalizeDiscordSlug(channel.name) === normalizedChannelQuery);
|
|
202
|
-
const match = preferActiveMatch(matches);
|
|
203
|
-
if (match) results.push(resolvedChannelResult(input, match, guild.name));
|
|
204
|
-
else results.push({
|
|
205
|
-
input,
|
|
206
|
-
resolved: false,
|
|
207
|
-
guildId: guild.id,
|
|
208
|
-
guildName: guild.name,
|
|
209
|
-
channelName: parsed.channel,
|
|
210
|
-
note: `channel not found in guild ${guild.name}`
|
|
211
|
-
});
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
const channelName = input.trim().replace(/^#/, "");
|
|
215
|
-
if (!channelName) {
|
|
216
|
-
results.push({
|
|
217
|
-
input,
|
|
218
|
-
resolved: false,
|
|
219
|
-
channelName
|
|
220
|
-
});
|
|
221
|
-
continue;
|
|
222
|
-
}
|
|
223
|
-
const candidates = [];
|
|
224
|
-
for (const guild of guilds) {
|
|
225
|
-
const channels = await getChannels(guild.id);
|
|
226
|
-
for (const channel of channels) if (normalizeDiscordSlug(channel.name) === normalizeDiscordSlug(channelName)) candidates.push(channel);
|
|
227
|
-
}
|
|
228
|
-
const match = preferActiveMatch(candidates);
|
|
229
|
-
if (match) {
|
|
230
|
-
const guild = guilds.find((entry) => entry.id === match.guildId);
|
|
231
|
-
results.push({
|
|
232
|
-
...resolvedChannelResult(input, match, guild?.name),
|
|
233
|
-
note: candidates.length > 1 && guild?.name ? `matched multiple; chose ${guild.name}` : void 0
|
|
234
|
-
});
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
results.push({
|
|
238
|
-
input,
|
|
239
|
-
resolved: false,
|
|
240
|
-
channelName
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
return results;
|
|
244
|
-
}
|
|
245
|
-
//#endregion
|
|
246
|
-
export { resolve_channels_exports as n, resolveDiscordChannelAllowlist as t };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
2
|
-
//#region extensions/discord/src/security-contract.ts
|
|
3
|
-
const unsupportedSecretRefSurfacePatterns = ["channels.discord.threadBindings.webhookToken", "channels.discord.accounts.*.threadBindings.webhookToken"];
|
|
4
|
-
function collectUnsupportedSecretRefConfigCandidates(raw) {
|
|
5
|
-
if (!isRecord(raw)) return [];
|
|
6
|
-
if (!isRecord(raw.channels) || !isRecord(raw.channels.discord)) return [];
|
|
7
|
-
const candidates = [];
|
|
8
|
-
const discord = raw.channels.discord;
|
|
9
|
-
const threadBindings = isRecord(discord.threadBindings) ? discord.threadBindings : null;
|
|
10
|
-
if (threadBindings) candidates.push({
|
|
11
|
-
path: "channels.discord.threadBindings.webhookToken",
|
|
12
|
-
value: threadBindings.webhookToken
|
|
13
|
-
});
|
|
14
|
-
const accounts = isRecord(discord.accounts) ? discord.accounts : null;
|
|
15
|
-
if (!accounts) return candidates;
|
|
16
|
-
for (const [accountId, account] of Object.entries(accounts)) {
|
|
17
|
-
if (!isRecord(account) || !isRecord(account.threadBindings)) continue;
|
|
18
|
-
candidates.push({
|
|
19
|
-
path: `channels.discord.accounts.${accountId}.threadBindings.webhookToken`,
|
|
20
|
-
value: account.threadBindings.webhookToken
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
return candidates;
|
|
24
|
-
}
|
|
25
|
-
//#endregion
|
|
26
|
-
export { unsupportedSecretRefSurfacePatterns as n, collectUnsupportedSecretRefConfigCandidates as t };
|
package/dist/control-ui/2afbdab1d3aa65a789d8a3eba666f4b1ec5df07073538fe30d6cf32093a1fb2d/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function l(i){return(o,s)=>{let e=document.createElement("a");e.className="plugin-session-header-link",e.target="_blank",e.rel="noopener noreferrer",e.dataset.linkReaderExternal="";let d=!1,a=()=>{d=!0,e.removeAttribute("href"),e.remove()},p=n=>{if(d)return;let t=n.presented&&!n.signal.aborted&&n.props.session?i(n.props.session):void 0,r=t?URL.parse(t.url):null;if(!t||!r||r.protocol!=="https:"&&r.protocol!=="http:"){e.removeAttribute("href"),e.remove();return}e.href=r.href,e.textContent=`${t.label} \u2197`,e.parentNode!==o&&o.append(e)};return s.signal.addEventListener("abort",a,{once:!0}),p(s),{update:p,dispose(){s.signal.removeEventListener("abort",a),a()}}}}var b={id:"discord",activate(i){return i.ui.registerAccessory({id:"conversation-origin",placement:"session-header",mount:l(({conversationLink:o})=>o&&URL.parse(o.url)?.hostname==="discord.com"?o:void 0)})}};export{b as default};
|