mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-01-14 12:20:34 +00:00
Changed the OB11Message interface to make emoji_likes_list optional and updated GetMsg to initialize emoji_likes_list as an empty array before populating it. This prevents errors when the field is missing and improves type safety.
60 lines
2.2 KiB
TypeScript
60 lines
2.2 KiB
TypeScript
import { OB11Message } from '@/napcat-onebot/index';
|
|
import { OneBotAction } from '@/napcat-onebot/action/OneBotAction';
|
|
import { ActionName } from '@/napcat-onebot/action/router';
|
|
import { MessageUnique } from 'napcat-common/src/message-unique';
|
|
import { Static, Type } from '@sinclair/typebox';
|
|
import { NetworkAdapterConfig } from '@/napcat-onebot/config/config';
|
|
|
|
export type ReturnDataType = OB11Message;
|
|
|
|
const SchemaData = Type.Object({
|
|
message_id: Type.Union([Type.Number(), Type.String()]),
|
|
});
|
|
|
|
type Payload = Static<typeof SchemaData>;
|
|
|
|
class GetMsg extends OneBotAction<Payload, OB11Message> {
|
|
override actionName = ActionName.GetMsg;
|
|
override payloadSchema = SchemaData;
|
|
|
|
async _handle (payload: Payload, _adapter: string, config: NetworkAdapterConfig) {
|
|
if (!payload.message_id) {
|
|
throw Error('参数message_id不能为空');
|
|
}
|
|
const MsgShortId = MessageUnique.getShortIdByMsgId(payload.message_id.toString());
|
|
const msgIdWithPeer = MessageUnique.getMsgIdAndPeerByShortId(MsgShortId ?? +payload.message_id);
|
|
if (!msgIdWithPeer) {
|
|
throw new Error('消息不存在');
|
|
}
|
|
const peer = { guildId: '', peerUid: msgIdWithPeer?.Peer.peerUid, chatType: msgIdWithPeer.Peer.chatType };
|
|
// const orimsg = this.obContext.recallMsgCache.get(msgIdWithPeer.MsgId);
|
|
// if (orimsg) {
|
|
// msg = orimsg;
|
|
// } else {
|
|
const msg = (await this.core.apis.MsgApi.getMsgsByMsgId(peer, [msgIdWithPeer?.MsgId || payload.message_id.toString()])).msgList[0];
|
|
// }
|
|
if (!msg) throw Error('消息不存在');
|
|
const retMsg = await this.obContext.apis.MsgApi.parseMessage(msg, config.messagePostFormat);
|
|
if (!retMsg) throw Error('消息为空');
|
|
retMsg.emoji_likes_list = [];
|
|
msg.emojiLikesList?.map(emoji => {
|
|
retMsg.emoji_likes_list?.push({
|
|
emoji_id: emoji.emojiId,
|
|
emoji_type: emoji.emojiType,
|
|
likes_cnt: emoji.likesCnt,
|
|
});
|
|
});
|
|
// 烘焙emoji_likes_list 仅此处烘焙
|
|
try {
|
|
retMsg.message_id = MessageUnique.createUniqueMsgId(peer, msg.msgId)!;
|
|
retMsg.message_seq = retMsg.message_id;
|
|
retMsg.real_id = retMsg.message_id;
|
|
} catch {
|
|
// ignored
|
|
}
|
|
return retMsg;
|
|
}
|
|
}
|
|
|
|
export default GetMsg;
|