mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-22 15:20:07 +08:00
feat: 支持不是自己的表情回应
This commit is contained in:
parent
91e633b0fb
commit
d5e6afc7b9
@ -74,6 +74,36 @@ export const GroupChange = {
|
||||
field7: ProtoField(7, ScalarType.BYTES, true),
|
||||
};
|
||||
|
||||
// Group Reaction Related
|
||||
export const GroupReactionDataInnerDataTarget = {
|
||||
seq: ProtoField(1, ScalarType.UINT64, true),
|
||||
};
|
||||
|
||||
export const GroupReactionDataContent = {
|
||||
code: ProtoField(1, ScalarType.STRING, true),
|
||||
count: ProtoField(3, ScalarType.UINT32, true),
|
||||
operatorUid: ProtoField(4, ScalarType.STRING, true),
|
||||
type: ProtoField(5, ScalarType.UINT32, true),
|
||||
};
|
||||
|
||||
export const GroupReactionDataInnerData = {
|
||||
groupReactionTarget: ProtoField(2, () => GroupReactionDataInnerDataTarget, true),
|
||||
groupReactionDataContent: ProtoField(3, () => GroupReactionDataContent, true),
|
||||
};
|
||||
export const GroupReactionDataInner = {
|
||||
data: ProtoField(1, () => GroupReactionDataInnerData, true),
|
||||
};
|
||||
export const GroupReactionData = {
|
||||
data: ProtoField(1, () => GroupReactionDataInner, true),
|
||||
};
|
||||
|
||||
export const GroupReactNotify = {
|
||||
groupUin: ProtoField(4, ScalarType.UINT64, true),
|
||||
field13: ProtoField(13, ScalarType.UINT32, true),
|
||||
groupReactionData: ProtoField(44, () => GroupReactionData, true),
|
||||
};
|
||||
|
||||
// Group Invite Related
|
||||
export const GroupInvite = {
|
||||
groupUin: ProtoField(1, ScalarType.UINT32),
|
||||
field2: ProtoField(2, ScalarType.UINT32),
|
||||
|
||||
@ -24,6 +24,8 @@ import { OB11GroupUploadNoticeEvent } from '../event/notice/OB11GroupUploadNotic
|
||||
import { OB11GroupNameEvent } from '../event/notice/OB11GroupNameEvent';
|
||||
import { FileNapCatOneBotUUID } from '@/common/file-uuid';
|
||||
import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent';
|
||||
import { NapProtoMsg } from '@napneko/nap-proto-core';
|
||||
import { GroupReactNotify, PushMsg } from '@/core/packet/transformer/proto';
|
||||
|
||||
export class OneBotGroupApi {
|
||||
obContext: NapCatOneBot11Adapter;
|
||||
@ -68,6 +70,10 @@ export class OneBotGroupApi {
|
||||
groupCode: string,
|
||||
grayTipElement: GrayTipElement
|
||||
) {
|
||||
if (this.core.apis.PacketApi.packetStatus === true) {
|
||||
return;
|
||||
//Raw包解析支持时禁用NT解析
|
||||
}
|
||||
const emojiLikeData = new fastXmlParser.XMLParser({
|
||||
ignoreAttributes: false,
|
||||
attributeNamePrefix: '',
|
||||
@ -76,7 +82,7 @@ export class OneBotGroupApi {
|
||||
const senderUin = emojiLikeData.gtip.qq.jp;
|
||||
const msgSeq = emojiLikeData.gtip.url.msgseq;
|
||||
const emojiId = emojiLikeData.gtip.face.id;
|
||||
return await this.createGroupEmojiLikeEvent(groupCode, senderUin, msgSeq, emojiId);
|
||||
return await this.createGroupEmojiLikeEvent(groupCode, senderUin, msgSeq, emojiId, true, 1);
|
||||
}
|
||||
|
||||
async createGroupEmojiLikeEvent(
|
||||
@ -84,6 +90,8 @@ export class OneBotGroupApi {
|
||||
senderUin: string,
|
||||
msgSeq: string,
|
||||
emojiId: string,
|
||||
isAdd: boolean = true,
|
||||
count: number = 1,
|
||||
) {
|
||||
const peer = {
|
||||
chatType: ChatType.KCHATTYPEGROUP,
|
||||
@ -106,8 +114,9 @@ export class OneBotGroupApi {
|
||||
MessageUnique.getShortIdByMsgId(replyMsg.msgId)!,
|
||||
[{
|
||||
emoji_id: emojiId,
|
||||
count: 1,
|
||||
count: count,
|
||||
}],
|
||||
isAdd
|
||||
);
|
||||
}
|
||||
|
||||
@ -128,7 +137,36 @@ export class OneBotGroupApi {
|
||||
}
|
||||
async registerParseGroupReactEvent() {
|
||||
this.obContext.core.context.packetHandler.onCmd('trpc.msg.olpush.OlPushService.MsgPush', async (packet) => {
|
||||
console.log(packet.seq, packet.hex_data);
|
||||
let data = new NapProtoMsg(PushMsg).decode(Buffer.from(packet.hex_data, 'hex'));
|
||||
if (data.message.contentHead.type === 732 && data.message.contentHead.subType === 16) {
|
||||
let pbNotify = data.message.body?.msgContent?.slice(7);
|
||||
if (!pbNotify) {
|
||||
return;
|
||||
}
|
||||
// 开始解析Notify
|
||||
const notify = new NapProtoMsg(GroupReactNotify).decode(pbNotify);
|
||||
if ((notify.field13 ?? 0) === 35) {
|
||||
// Group React Notify
|
||||
const groupCode = notify.groupUin?.toString() ?? '';
|
||||
const operatorUid = notify.groupReactionData?.data?.data?.groupReactionDataContent?.operatorUid ?? '';
|
||||
const type = notify.groupReactionData?.data?.data?.groupReactionDataContent?.type ?? 0;
|
||||
const seq = notify.groupReactionData?.data?.data?.groupReactionTarget?.seq?.toString() ?? '';
|
||||
const code = notify.groupReactionData?.data?.data?.groupReactionDataContent?.code ?? '';
|
||||
//const count = notify.groupReactionData?.data?.data?.groupReactionDataContent?.count ?? 0;
|
||||
const senderUin = await this.core.apis.UserApi.getUinByUidV2(operatorUid);
|
||||
const event = await this.createGroupEmojiLikeEvent(
|
||||
groupCode,
|
||||
senderUin,
|
||||
seq,
|
||||
code,
|
||||
type === 1,
|
||||
1
|
||||
);
|
||||
if (event) {
|
||||
this.obContext.networkManager.emitEvent(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
async parsePaiYiPai(msg: RawMessage, jsonStr: string) {
|
||||
|
||||
@ -10,12 +10,14 @@ export class OB11GroupMsgEmojiLikeEvent extends OB11GroupNoticeEvent {
|
||||
notice_type = 'group_msg_emoji_like';
|
||||
message_id: number;
|
||||
likes: MsgEmojiLike[];
|
||||
is_add: boolean;
|
||||
|
||||
constructor(core: NapCatCore, groupId: number, userId: number, messageId: number, likes: MsgEmojiLike[]) {
|
||||
constructor(core: NapCatCore, groupId: number, userId: number, messageId: number, likes: MsgEmojiLike[], isAdd: boolean) {
|
||||
super(core, groupId, userId);
|
||||
this.group_id = groupId;
|
||||
this.user_id = userId; // 可为空,表示是对别人的消息操作,如果是对bot自己的消息则不为空
|
||||
this.message_id = messageId;
|
||||
this.likes = likes;
|
||||
this.is_add = isAdd;
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,6 +216,9 @@ export class NapCatOneBot11Adapter {
|
||||
//this.context.logger.log(`OneBot11 配置更改:${JSON.stringify(prev)} -> ${JSON.stringify(newConfig)}`);
|
||||
await this.reloadNetwork(prev, newConfig);
|
||||
});
|
||||
this.apis.GroupApi.registerParseGroupReactEvent().catch(e =>
|
||||
this.context.logger.logError('注册群消息反应表情失败', e)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user