mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-19 05:05:44 +08:00
Standardized field names (e.g., 'reverseOrder' to 'reverse_order', 'phoneNumber' to 'phone_number') and added new action names and classes for sharing contacts and group cards (SendArkShare, SendGroupArkShare). Deprecated old action names, updated API schemas and routes, and ensured backward compatibility for legacy fields. Updated frontend API definitions to match backend changes.
53 lines
2.7 KiB
TypeScript
53 lines
2.7 KiB
TypeScript
import { OneBotAction } from '@/napcat-onebot/action/OneBotAction';
|
|
import { OB11Message } from '@/napcat-onebot/index';
|
|
import { ActionName } from '@/napcat-onebot/action/router';
|
|
import { ChatType } from 'napcat-core/types';
|
|
import { MessageUnique } from 'napcat-common/src/message-unique';
|
|
|
|
import { Static, Type } from '@sinclair/typebox';
|
|
import { NetworkAdapterConfig } from '@/napcat-onebot/config/config';
|
|
|
|
interface Response {
|
|
messages: OB11Message[];
|
|
}
|
|
const SchemaData = Type.Object({
|
|
user_id: Type.String(),
|
|
message_seq: Type.Optional(Type.String()),
|
|
count: Type.Number({ default: 20 }),
|
|
reverse_order: Type.Boolean({ default: false }),
|
|
disable_get_url: Type.Boolean({ default: false }),
|
|
parse_mult_msg: Type.Boolean({ default: true }),
|
|
quick_reply: Type.Boolean({ default: false }),
|
|
reverseOrder: Type.Boolean({ default: false }),// @deprecated 兼容旧版本
|
|
});
|
|
|
|
type Payload = Static<typeof SchemaData>;
|
|
|
|
export default class GetFriendMsgHistory extends OneBotAction<Payload, Response> {
|
|
override actionName = ActionName.GetFriendMsgHistory;
|
|
override payloadSchema = SchemaData;
|
|
|
|
async _handle (payload: Payload, _adapter: string, config: NetworkAdapterConfig): Promise<Response> {
|
|
// 处理参数
|
|
const uid = await this.core.apis.UserApi.getUidByUinV2(payload.user_id.toString());
|
|
if (!uid) throw new Error(`记录${payload.user_id}不存在`);
|
|
const friend = await this.core.apis.FriendApi.isBuddy(uid);
|
|
const peer = { chatType: friend ? ChatType.KCHATTYPEC2C : ChatType.KCHATTYPETEMPC2CFROMGROUP, peerUid: uid };
|
|
const hasMessageSeq = !payload.message_seq ? !!payload.message_seq : !(payload.message_seq?.toString() === '' || payload.message_seq?.toString() === '0');
|
|
const startMsgId = hasMessageSeq ? (MessageUnique.getMsgIdAndPeerByShortId(+payload.message_seq!)?.MsgId ?? payload.message_seq!.toString()) : '0';
|
|
const msgList = hasMessageSeq
|
|
? (await this.core.apis.MsgApi.getMsgHistory(peer, startMsgId, +payload.count, payload.reverse_order || payload.reverseOrder)).msgList
|
|
: (await this.core.apis.MsgApi.getAioFirstViewLatestMsgs(peer, +payload.count)).msgList;
|
|
if (msgList.length === 0) throw new Error(`消息${payload.message_seq}不存在`);
|
|
// 转换序号
|
|
await Promise.all(msgList.map(async msg => {
|
|
msg.id = MessageUnique.createUniqueMsgId({ guildId: '', chatType: msg.chatType, peerUid: msg.peerUid }, msg.msgId);
|
|
}));
|
|
// 烘焙消息
|
|
const ob11MsgList = (await Promise.all(
|
|
msgList.map(msg => this.obContext.apis.MsgApi.parseMessage(msg, config.messagePostFormat, payload.parse_mult_msg, payload.disable_get_url)))
|
|
).filter(msg => msg !== undefined);
|
|
return { messages: ob11MsgList };
|
|
}
|
|
}
|