mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-22 07:10:05 +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),
|
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 = {
|
export const GroupInvite = {
|
||||||
groupUin: ProtoField(1, ScalarType.UINT32),
|
groupUin: ProtoField(1, ScalarType.UINT32),
|
||||||
field2: ProtoField(2, ScalarType.UINT32),
|
field2: ProtoField(2, ScalarType.UINT32),
|
||||||
|
|||||||
@ -24,6 +24,8 @@ import { OB11GroupUploadNoticeEvent } from '../event/notice/OB11GroupUploadNotic
|
|||||||
import { OB11GroupNameEvent } from '../event/notice/OB11GroupNameEvent';
|
import { OB11GroupNameEvent } from '../event/notice/OB11GroupNameEvent';
|
||||||
import { FileNapCatOneBotUUID } from '@/common/file-uuid';
|
import { FileNapCatOneBotUUID } from '@/common/file-uuid';
|
||||||
import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent';
|
import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent';
|
||||||
|
import { NapProtoMsg } from '@napneko/nap-proto-core';
|
||||||
|
import { GroupReactNotify, PushMsg } from '@/core/packet/transformer/proto';
|
||||||
|
|
||||||
export class OneBotGroupApi {
|
export class OneBotGroupApi {
|
||||||
obContext: NapCatOneBot11Adapter;
|
obContext: NapCatOneBot11Adapter;
|
||||||
@ -68,6 +70,10 @@ export class OneBotGroupApi {
|
|||||||
groupCode: string,
|
groupCode: string,
|
||||||
grayTipElement: GrayTipElement
|
grayTipElement: GrayTipElement
|
||||||
) {
|
) {
|
||||||
|
if (this.core.apis.PacketApi.packetStatus === true) {
|
||||||
|
return;
|
||||||
|
//Raw包解析支持时禁用NT解析
|
||||||
|
}
|
||||||
const emojiLikeData = new fastXmlParser.XMLParser({
|
const emojiLikeData = new fastXmlParser.XMLParser({
|
||||||
ignoreAttributes: false,
|
ignoreAttributes: false,
|
||||||
attributeNamePrefix: '',
|
attributeNamePrefix: '',
|
||||||
@ -76,7 +82,7 @@ export class OneBotGroupApi {
|
|||||||
const senderUin = emojiLikeData.gtip.qq.jp;
|
const senderUin = emojiLikeData.gtip.qq.jp;
|
||||||
const msgSeq = emojiLikeData.gtip.url.msgseq;
|
const msgSeq = emojiLikeData.gtip.url.msgseq;
|
||||||
const emojiId = emojiLikeData.gtip.face.id;
|
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(
|
async createGroupEmojiLikeEvent(
|
||||||
@ -84,6 +90,8 @@ export class OneBotGroupApi {
|
|||||||
senderUin: string,
|
senderUin: string,
|
||||||
msgSeq: string,
|
msgSeq: string,
|
||||||
emojiId: string,
|
emojiId: string,
|
||||||
|
isAdd: boolean = true,
|
||||||
|
count: number = 1,
|
||||||
) {
|
) {
|
||||||
const peer = {
|
const peer = {
|
||||||
chatType: ChatType.KCHATTYPEGROUP,
|
chatType: ChatType.KCHATTYPEGROUP,
|
||||||
@ -106,8 +114,9 @@ export class OneBotGroupApi {
|
|||||||
MessageUnique.getShortIdByMsgId(replyMsg.msgId)!,
|
MessageUnique.getShortIdByMsgId(replyMsg.msgId)!,
|
||||||
[{
|
[{
|
||||||
emoji_id: emojiId,
|
emoji_id: emojiId,
|
||||||
count: 1,
|
count: count,
|
||||||
}],
|
}],
|
||||||
|
isAdd
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +137,36 @@ export class OneBotGroupApi {
|
|||||||
}
|
}
|
||||||
async registerParseGroupReactEvent() {
|
async registerParseGroupReactEvent() {
|
||||||
this.obContext.core.context.packetHandler.onCmd('trpc.msg.olpush.OlPushService.MsgPush', async (packet) => {
|
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) {
|
async parsePaiYiPai(msg: RawMessage, jsonStr: string) {
|
||||||
|
|||||||
@ -10,12 +10,14 @@ export class OB11GroupMsgEmojiLikeEvent extends OB11GroupNoticeEvent {
|
|||||||
notice_type = 'group_msg_emoji_like';
|
notice_type = 'group_msg_emoji_like';
|
||||||
message_id: number;
|
message_id: number;
|
||||||
likes: MsgEmojiLike[];
|
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);
|
super(core, groupId, userId);
|
||||||
this.group_id = groupId;
|
this.group_id = groupId;
|
||||||
this.user_id = userId; // 可为空,表示是对别人的消息操作,如果是对bot自己的消息则不为空
|
this.user_id = userId; // 可为空,表示是对别人的消息操作,如果是对bot自己的消息则不为空
|
||||||
this.message_id = messageId;
|
this.message_id = messageId;
|
||||||
this.likes = likes;
|
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)}`);
|
//this.context.logger.log(`OneBot11 配置更改:${JSON.stringify(prev)} -> ${JSON.stringify(newConfig)}`);
|
||||||
await this.reloadNetwork(prev, 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