@openclaw/qqbot 2026.5.30-beta.1 → 2026.5.31-beta.2
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/README.md +11 -0
- package/dist/api.js +3 -3
- package/dist/{channel-BTLUP21p.js → channel-DsUMS0Az.js} +4 -4
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{gateway-D5xQGKIF.js → gateway-Bx-wZKqQ.js} +8 -7
- package/dist/{handler-runtime-DTg4Utt_.js → handler-runtime-TwO5-5cH.js} +1 -1
- package/dist/{outbound-DUcb4_lD.js → outbound-CgW0-dMd.js} +1 -1
- package/dist/{request-context-dZYDdrAi.js → request-context-DNbuU0Co.js} +1 -1
- package/npm-shrinkwrap.json +3 -3
- package/package.json +5 -4
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# OpenClaw QQ Bot
|
|
2
|
+
|
|
3
|
+
Official OpenClaw channel plugin for QQ Bot group and direct-message workflows.
|
|
4
|
+
|
|
5
|
+
Install from OpenClaw:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
openclaw plugin add @openclaw/qqbot
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Configure QQ Bot credentials in OpenClaw, then connect the bot to the groups or direct-message contexts where agents should operate.
|
package/dist/api.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { C as getMessageReplyStats, D as setOutboundAudioPort, E as OUTBOUND_ERROR_CODES, S as getMessageReplyConfig, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, a as sendText, b as MESSAGE_REPLY_LIMIT, f as buildMediaTarget, g as sendPhoto, h as sendDocument, i as sendProactiveMessage, m as resolveOutboundMediaPath, n as sendCronMessage, p as parseTarget, r as sendMedia, v as sendVoice, w as recordMessageReply, x as checkMessageReplyLimit, y as resolveUserFacingMediaError } from "./outbound-
|
|
1
|
+
import { C as getMessageReplyStats, D as setOutboundAudioPort, E as OUTBOUND_ERROR_CODES, S as getMessageReplyConfig, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, a as sendText, b as MESSAGE_REPLY_LIMIT, f as buildMediaTarget, g as sendPhoto, h as sendDocument, i as sendProactiveMessage, m as resolveOutboundMediaPath, n as sendCronMessage, p as parseTarget, r as sendMedia, v as sendVoice, w as recordMessageReply, x as checkMessageReplyLimit, y as resolveUserFacingMediaError } from "./outbound-CgW0-dMd.js";
|
|
2
2
|
import { c as listQQBotAccountIds, l as resolveDefaultQQBotAccountId, o as DEFAULT_ACCOUNT_ID, s as applyQQBotAccountConfig, u as resolveQQBotAccount } from "./config-schema-Bc-ArbIT.js";
|
|
3
|
-
import { t as qqbotPlugin } from "./channel-
|
|
3
|
+
import { t as qqbotPlugin } from "./channel-DsUMS0Az.js";
|
|
4
4
|
import { C as debugError, l as getAccessToken, w as debugLog, z as formatErrorMessage } from "./runtime-DDu_1bny.js";
|
|
5
5
|
import { t as qqbotSetupPlugin } from "./channel.setup-_OAH-xmU.js";
|
|
6
|
-
import { r as getFrameworkCommands, t as getRequestContext } from "./request-context-
|
|
6
|
+
import { r as getFrameworkCommands, t as getRequestContext } from "./request-context-DNbuU0Co.js";
|
|
7
7
|
import { resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
|
|
8
8
|
import { callGatewayTool } from "openclaw/plugin-sdk/agent-harness-runtime";
|
|
9
9
|
//#region extensions/qqbot/src/engine/tools/channel-api.ts
|
|
@@ -374,7 +374,7 @@ function createQQBotApprovalCapability() {
|
|
|
374
374
|
},
|
|
375
375
|
load: async () => {
|
|
376
376
|
ensurePlatformAdapter();
|
|
377
|
-
return (await import("./handler-runtime-
|
|
377
|
+
return (await import("./handler-runtime-TwO5-5cH.js")).qqbotApprovalNativeRuntime;
|
|
378
378
|
}
|
|
379
379
|
})
|
|
380
380
|
});
|
|
@@ -813,7 +813,7 @@ function clearAccountCredentials(cfg, accountId) {
|
|
|
813
813
|
* @throws {Error} When the target format is invalid.
|
|
814
814
|
*/
|
|
815
815
|
function parseTarget(to) {
|
|
816
|
-
|
|
816
|
+
const id = to.replace(/^qqbot:/i, "");
|
|
817
817
|
if (id.startsWith("c2c:")) {
|
|
818
818
|
const userId = id.slice(4);
|
|
819
819
|
if (!userId) throw new Error(`Invalid c2c target format: ${to} - missing user ID`);
|
|
@@ -868,12 +868,12 @@ function looksLikeQQBotTarget(id) {
|
|
|
868
868
|
//#region extensions/qqbot/src/channel.ts
|
|
869
869
|
let gatewayModulePromise;
|
|
870
870
|
function loadGatewayModule() {
|
|
871
|
-
gatewayModulePromise ??= import("./gateway-
|
|
871
|
+
gatewayModulePromise ??= import("./gateway-Bx-wZKqQ.js");
|
|
872
872
|
return gatewayModulePromise;
|
|
873
873
|
}
|
|
874
874
|
let outboundMessagingModulePromise;
|
|
875
875
|
function loadOutboundMessagingModule() {
|
|
876
|
-
outboundMessagingModulePromise ??= import("./outbound-
|
|
876
|
+
outboundMessagingModulePromise ??= import("./outbound-CgW0-dMd.js").then((n) => n.t);
|
|
877
877
|
return outboundMessagingModulePromise;
|
|
878
878
|
}
|
|
879
879
|
function createQQBotSendReceipt(params) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as qqbotPlugin } from "./channel-
|
|
1
|
+
import { t as qqbotPlugin } from "./channel-DsUMS0Az.js";
|
|
2
2
|
export { qqbotPlugin };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { D as setOutboundAudioPort, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, c as isCronReminderPayload, d as normalizeMediaTags, g as sendPhoto, h as sendDocument, l as isMediaPayload, o as decodeMediaPath, r as sendMedia, s as encodePayloadForCron, u as parseQQBotPayload, v as sendVoice, y as resolveUserFacingMediaError } from "./outbound-
|
|
1
|
+
import { D as setOutboundAudioPort, T as DEFAULT_MEDIA_SEND_ERROR, _ as sendVideoMsg, c as isCronReminderPayload, d as normalizeMediaTags, g as sendPhoto, h as sendDocument, l as isMediaPayload, o as decodeMediaPath, r as sendMedia, s as encodePayloadForCron, u as parseQQBotPayload, v as sendVoice, y as resolveUserFacingMediaError } from "./outbound-CgW0-dMd.js";
|
|
2
2
|
import { c as getPlatformAdapter, i as normalizeOptionalString$1, n as normalizeLowercaseStringOrEmpty$1, o as readStringField, s as sanitizeFileName, t as asOptionalObjectRecord } from "./string-normalize-R_0cKO7Q.js";
|
|
3
3
|
import { f as resolveAccountBase, h as setBridgeLogger, p as ensurePlatformAdapter } from "./config-schema-Bc-ArbIT.js";
|
|
4
|
-
import { C as parseApprovalButtonData, a as getQQBotDataDir, d as isWindows, f as normalizePath, h as authorizeQQBotApprovalAction, i as getHomeDir, l as getTempDir, m as toGatewayAccount, o as getQQBotDataPath, p as resolveQQBotPayloadLocalFilePath, r as checkSilkWasmAvailable, s as getQQBotMediaDir, u as isLocalPath } from "./channel-
|
|
4
|
+
import { C as parseApprovalButtonData, a as getQQBotDataDir, d as isWindows, f as normalizePath, h as authorizeQQBotApprovalAction, i as getHomeDir, l as getTempDir, m as toGatewayAccount, o as getQQBotDataPath, p as resolveQQBotPayloadLocalFilePath, r as checkSilkWasmAvailable, s as getQQBotMediaDir, u as isLocalPath } from "./channel-DsUMS0Az.js";
|
|
5
5
|
import { B as StreamContentType, C as debugError, D as getNextMsgSeq, F as getImageMimeType, H as StreamInputState, I as getMaxUploadSize, N as formatFileSize, R as formatDuration, S as withTokenRetry, T as debugWarn, V as StreamInputMode, _ as sendInputNotify, a as acknowledgeInteraction, b as startBackgroundTokenRefresh, c as createRawInputNotifyFn, d as getMessageApi, f as getPluginUserAgent, g as registerAccount, h as onMessageSent, i as accountToCreds, j as downloadFile, k as openLocalFile, l as getAccessToken, m as initSender, n as getQQBotRuntimeForEngine, o as buildDeliveryTarget, p as initApiConfig, s as clearTokenCache, t as getQQBotRuntime, u as getGatewayUrl, v as sendMedia$1, w as debugLog, x as stopBackgroundTokenRefresh, y as sendText, z as formatErrorMessage } from "./runtime-DDu_1bny.js";
|
|
6
|
-
import { a as getPluginVersion, i as getFrameworkVersion, n as runWithRequestContext, o as initCommands, s as matchSlashCommand } from "./request-context-
|
|
6
|
+
import { a as getPluginVersion, i as getFrameworkVersion, n as runWithRequestContext, o as initCommands, s as matchSlashCommand } from "./request-context-DNbuU0Co.js";
|
|
7
7
|
import { asBoolean, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
8
8
|
import { isImplicitSameChatApprovalAuthorization } from "openclaw/plugin-sdk/approval-auth-runtime";
|
|
9
9
|
import * as fs$1 from "node:fs";
|
|
@@ -235,7 +235,7 @@ function appendLine(line) {
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
function shouldCompact() {
|
|
238
|
-
return
|
|
238
|
+
return cache !== null && totalLinesOnDisk > cache.size * COMPACT_THRESHOLD_RATIO && totalLinesOnDisk > 1e3;
|
|
239
239
|
}
|
|
240
240
|
function compactFile() {
|
|
241
241
|
if (!cache) return;
|
|
@@ -1977,7 +1977,8 @@ async function processAttachments(attachments, ctx) {
|
|
|
1977
1977
|
attachmentLocalPaths
|
|
1978
1978
|
};
|
|
1979
1979
|
}
|
|
1980
|
-
async function processVoiceAttachment(localPath,
|
|
1980
|
+
async function processVoiceAttachment(localPath, audioPathInput, att, asrReferText, cfg, downloadDir, audioConvert, log) {
|
|
1981
|
+
let audioPath = audioPathInput;
|
|
1981
1982
|
const wavUrl = att.voice_wav_url ? att.voice_wav_url.startsWith("//") ? `https:${att.voice_wav_url}` : att.voice_wav_url : "";
|
|
1982
1983
|
const attUrl = att.url?.startsWith("//") ? `https:${att.url}` : att.url;
|
|
1983
1984
|
const meta = {
|
|
@@ -4262,7 +4263,7 @@ function fixPathEncoding(mediaPath, log) {
|
|
|
4262
4263
|
const hasNonASCII = /[\u0080-\u00FF]/.test(result);
|
|
4263
4264
|
if (!isWinLocal && (hasOctal || hasNonASCII)) {
|
|
4264
4265
|
log?.debug?.(`Decoding path with mixed encoding: ${result}`);
|
|
4265
|
-
|
|
4266
|
+
const decoded = result.replace(/\\([0-7]{1,3})/g, (_, octal) => String.fromCharCode(Number.parseInt(octal, 8)));
|
|
4266
4267
|
const bytes = [];
|
|
4267
4268
|
for (let i = 0; i < decoded.length; i++) {
|
|
4268
4269
|
const code = decoded.charCodeAt(i);
|
|
@@ -6624,7 +6625,7 @@ async function startGateway(ctx) {
|
|
|
6624
6625
|
context: { account: ctx.account },
|
|
6625
6626
|
abortSignal: ctx.abortSignal
|
|
6626
6627
|
});
|
|
6627
|
-
accountLogger.info(`approval.native context registered (lease=${
|
|
6628
|
+
accountLogger.info(`approval.native context registered (lease=${Boolean(lease)})`);
|
|
6628
6629
|
} else accountLogger.info("No channelRuntime — skipping approval.native registration");
|
|
6629
6630
|
return startGateway$1({
|
|
6630
6631
|
account: toGatewayAccount(ctx.account),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { m as getBridgeLogger, p as ensurePlatformAdapter, u as resolveQQBotAccount } from "./config-schema-Bc-ArbIT.js";
|
|
2
|
-
import { S as buildPluginApprovalText, _ as matchesQQBotApprovalAccount, b as buildApprovalKeyboard, g as isQQBotExecApprovalClientEnabled, v as resolveQQBotExecApprovalConfig, w as resolveApprovalTarget, x as buildExecApprovalText, y as shouldHandleQQBotExecApprovalRequest } from "./channel-
|
|
2
|
+
import { S as buildPluginApprovalText, _ as matchesQQBotApprovalAccount, b as buildApprovalKeyboard, g as isQQBotExecApprovalClientEnabled, v as resolveQQBotExecApprovalConfig, w as resolveApprovalTarget, x as buildExecApprovalText, y as shouldHandleQQBotExecApprovalRequest } from "./channel-DsUMS0Az.js";
|
|
3
3
|
import { d as getMessageApi, i as accountToCreds } from "./runtime-DDu_1bny.js";
|
|
4
4
|
import { resolveApprovalRequestSessionConversation } from "openclaw/plugin-sdk/approval-native-runtime";
|
|
5
5
|
import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as normalizeOptionalString, n as normalizeLowercaseStringOrEmpty, s as sanitizeFileName } from "./string-normalize-R_0cKO7Q.js";
|
|
2
|
-
import { a as getQQBotDataDir, f as normalizePath$1, n as parseTarget$1, p as resolveQQBotPayloadLocalFilePath, s as getQQBotMediaDir, u as isLocalPath } from "./channel-
|
|
2
|
+
import { a as getQQBotDataDir, f as normalizePath$1, n as parseTarget$1, p as resolveQQBotPayloadLocalFilePath, s as getQQBotMediaDir, u as isLocalPath } from "./channel-DsUMS0Az.js";
|
|
3
3
|
import { A as checkFileSize, C as debugError, E as UploadDailyLimitExceededError, F as getImageMimeType, I as getMaxUploadSize, L as readFileAsync, M as fileExistsAsync, N as formatFileSize, O as UPLOAD_PREPARE_FALLBACK_CODE, P as getFileTypeName, T as debugWarn, i as accountToCreds, j as downloadFile, p as initApiConfig, v as sendMedia$1, w as debugLog, y as sendText$1, z as formatErrorMessage } from "./runtime-DDu_1bny.js";
|
|
4
4
|
import { pathExistsSync, resolveLocalPathFromRootsSync } from "openclaw/plugin-sdk/security-runtime";
|
|
5
5
|
import path from "node:path";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as getQQBotDataDir, c as getQQBotMediaPath, d as isWindows, i as getHomeDir } from "./channel-
|
|
1
|
+
import { a as getQQBotDataDir, c as getQQBotMediaPath, d as isWindows, i as getHomeDir } from "./channel-DsUMS0Az.js";
|
|
2
2
|
import { w as debugLog } from "./runtime-DDu_1bny.js";
|
|
3
3
|
import { uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
4
|
import fs from "node:fs";
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/qqbot",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.31-beta.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@openclaw/qqbot",
|
|
9
|
-
"version": "2026.5.
|
|
9
|
+
"version": "2026.5.31-beta.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@tencent-connect/qqbot-connector": "1.1.0",
|
|
12
12
|
"mpg123-decoder": "1.0.3",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"zod": "4.4.3"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"openclaw": ">=2026.5.
|
|
18
|
+
"openclaw": ">=2026.5.31-beta.2"
|
|
19
19
|
},
|
|
20
20
|
"peerDependenciesMeta": {
|
|
21
21
|
"openclaw": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/qqbot",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.31-beta.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "OpenClaw QQ Bot channel plugin for group and direct-message workflows.",
|
|
6
6
|
"repository": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"zod": "4.4.3"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"openclaw": ">=2026.5.
|
|
19
|
+
"openclaw": ">=2026.5.31-beta.2"
|
|
20
20
|
},
|
|
21
21
|
"peerDependenciesMeta": {
|
|
22
22
|
"openclaw": {
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"minHostVersion": ">=2026.4.10"
|
|
46
46
|
},
|
|
47
47
|
"compat": {
|
|
48
|
-
"pluginApi": ">=2026.5.
|
|
48
|
+
"pluginApi": ">=2026.5.31-beta.2"
|
|
49
49
|
},
|
|
50
50
|
"build": {
|
|
51
|
-
"openclawVersion": "2026.5.
|
|
51
|
+
"openclawVersion": "2026.5.31-beta.2"
|
|
52
52
|
},
|
|
53
53
|
"release": {
|
|
54
54
|
"publishToClawHub": true,
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"dist/**",
|
|
64
64
|
"openclaw.plugin.json",
|
|
65
65
|
"npm-shrinkwrap.json",
|
|
66
|
+
"README.md",
|
|
66
67
|
"skills/**"
|
|
67
68
|
],
|
|
68
69
|
"bundledDependencies": [
|