feat: 支持收到c2c消息后回复输入中状态
This commit is contained in:
23
src/api.ts
23
src/api.ts
@@ -153,6 +153,29 @@ export async function sendC2CMessage(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送 C2C 输入状态提示(告知用户机器人正在输入)
|
||||||
|
*/
|
||||||
|
export async function sendC2CInputNotify(
|
||||||
|
accessToken: string,
|
||||||
|
openid: string,
|
||||||
|
msgId?: string,
|
||||||
|
inputSecond: number = 60
|
||||||
|
): Promise<void> {
|
||||||
|
const msgSeq = msgId ? getNextMsgSeq(msgId) : 1;
|
||||||
|
const body = {
|
||||||
|
msg_type: 6,
|
||||||
|
input_notify: {
|
||||||
|
input_type: 1,
|
||||||
|
input_second: inputSecond,
|
||||||
|
},
|
||||||
|
msg_seq: msgSeq,
|
||||||
|
...(msgId ? { msg_id: msgId } : {}),
|
||||||
|
};
|
||||||
|
|
||||||
|
await apiRequest(accessToken, "POST", `/v2/users/${openid}/messages`, body);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送频道消息
|
* 发送频道消息
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import WebSocket from "ws";
|
import WebSocket from "ws";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import type { ResolvedQQBotAccount, WSPayload, C2CMessageEvent, GuildMessageEvent, GroupMessageEvent } from "./types.js";
|
import type { ResolvedQQBotAccount, WSPayload, C2CMessageEvent, GuildMessageEvent, GroupMessageEvent } from "./types.js";
|
||||||
import { getAccessToken, getGatewayUrl, sendC2CMessage, sendChannelMessage, sendGroupMessage, clearTokenCache, sendC2CImageMessage, sendGroupImageMessage } from "./api.js";
|
import { getAccessToken, getGatewayUrl, sendC2CMessage, sendChannelMessage, sendGroupMessage, clearTokenCache, sendC2CImageMessage, sendGroupImageMessage, sendC2CInputNotify } from "./api.js";
|
||||||
import { getQQBotRuntime } from "./runtime.js";
|
import { getQQBotRuntime } from "./runtime.js";
|
||||||
import { startImageServer, saveImage, saveImageFromPath, isImageServerRunning, downloadFile, type ImageServerConfig } from "./image-server.js";
|
import { startImageServer, saveImage, saveImageFromPath, isImageServerRunning, downloadFile, type ImageServerConfig } from "./image-server.js";
|
||||||
|
|
||||||
@@ -218,6 +218,17 @@ export async function startGateway(ctx: GatewayContext): Promise<void> {
|
|||||||
log?.info(`[qqbot:${account.accountId}] Attachments: ${event.attachments.length}`);
|
log?.info(`[qqbot:${account.accountId}] Attachments: ${event.attachments.length}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 对于 C2C 消息,先发送输入状态提示用户机器人正在输入
|
||||||
|
if (event.type === "c2c") {
|
||||||
|
try {
|
||||||
|
const token = await getAccessToken(account.appId, account.clientSecret);
|
||||||
|
await sendC2CInputNotify(token, event.senderId, event.messageId, 60);
|
||||||
|
log?.info(`[qqbot:${account.accountId}] Sent input notify to ${event.senderId}`);
|
||||||
|
} catch (err) {
|
||||||
|
log?.error(`[qqbot:${account.accountId}] Failed to send input notify: ${err}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pluginRuntime.channel.activity.record({
|
pluginRuntime.channel.activity.record({
|
||||||
channel: "qqbot",
|
channel: "qqbot",
|
||||||
accountId: account.accountId,
|
accountId: account.accountId,
|
||||||
|
|||||||
Reference in New Issue
Block a user