mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
chore: 进一步解耦
This commit is contained in:
parent
40193e4edc
commit
37d061b602
@ -1,8 +1,11 @@
|
|||||||
import { GrayTipElement, NapCatCore } from '@/core';
|
import { ChatType, GrayTipElement, NapCatCore } from '@/core';
|
||||||
import { NapCatOneBot11Adapter } from '@/onebot';
|
import { NapCatOneBot11Adapter } from '@/onebot';
|
||||||
import { OB11GroupBanEvent } from '../event/notice/OB11GroupBanEvent';
|
import { OB11GroupBanEvent } from '../event/notice/OB11GroupBanEvent';
|
||||||
import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent';
|
import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent';
|
||||||
import { OB11GroupDecreaseEvent } from '../event/notice/OB11GroupDecreaseEvent';
|
import { OB11GroupDecreaseEvent } from '../event/notice/OB11GroupDecreaseEvent';
|
||||||
|
import fastXmlParser from 'fast-xml-parser';
|
||||||
|
import { OB11GroupMsgEmojiLikeEvent } from '../event/notice/OB11MsgEmojiLikeEvent';
|
||||||
|
import { MessageUnique } from '@/common/utils/MessageUnique';
|
||||||
|
|
||||||
export class OneBotGroupApi {
|
export class OneBotGroupApi {
|
||||||
obContext: NapCatOneBot11Adapter;
|
obContext: NapCatOneBot11Adapter;
|
||||||
@ -77,4 +80,42 @@ export class OneBotGroupApi {
|
|||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
async parseGroupEmjioLikeEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
||||||
|
const NTQQMsgApi = this.coreContext.apis.MsgApi;
|
||||||
|
const emojiLikeData = new fastXmlParser.XMLParser({
|
||||||
|
ignoreAttributes: false,
|
||||||
|
attributeNamePrefix: '',
|
||||||
|
}).parse(grayTipElement.xmlElement.content);
|
||||||
|
this.coreContext.context.logger.logDebug('收到表情回应我的消息', emojiLikeData);
|
||||||
|
try {
|
||||||
|
const senderUin = emojiLikeData.gtip.qq.jp;
|
||||||
|
const msgSeq = emojiLikeData.gtip.url.msgseq;
|
||||||
|
const emojiId = emojiLikeData.gtip.face.id;
|
||||||
|
const peer = {
|
||||||
|
chatType: ChatType.group,
|
||||||
|
guildId: '',
|
||||||
|
peerUid: GroupCode
|
||||||
|
}
|
||||||
|
const replyMsgList = (await NTQQMsgApi.getMsgExBySeq(peer, msgSeq)).msgList;
|
||||||
|
if (replyMsgList.length < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const replyMsg = replyMsgList.filter(e => e.msgSeq == msgSeq).sort((a, b) => parseInt(a.msgTime) - parseInt(b.msgTime))[0];
|
||||||
|
//console.log("表情回应消息长度检测", msgSeq, replyMsg.elements);
|
||||||
|
if (!replyMsg) throw new Error('找不到回应消息');
|
||||||
|
return new OB11GroupMsgEmojiLikeEvent(
|
||||||
|
this.coreContext,
|
||||||
|
parseInt(GroupCode),
|
||||||
|
parseInt(senderUin),
|
||||||
|
MessageUnique.getShortIdByMsgId(replyMsg.msgId)!,
|
||||||
|
[{
|
||||||
|
emoji_id: emojiId,
|
||||||
|
count: 1,
|
||||||
|
}],
|
||||||
|
);
|
||||||
|
} catch (e: any) {
|
||||||
|
this.coreContext.context.logger.logError('解析表情回应消息失败', e.stack);
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
0
src/onebot/helper/converter.ts
Normal file
0
src/onebot/helper/converter.ts
Normal file
@ -454,40 +454,8 @@ export class OB11Constructor {
|
|||||||
}
|
}
|
||||||
if (element.grayTipElement) {
|
if (element.grayTipElement) {
|
||||||
if (element.grayTipElement.xmlElement?.templId === '10382') {
|
if (element.grayTipElement.xmlElement?.templId === '10382') {
|
||||||
const emojiLikeData = new fastXmlParser.XMLParser({
|
let emojiLikeEvent = await obContext.apiContext.GroupApi.parseGroupEmjioLikeEvent(msg.peerUid, element.grayTipElement);
|
||||||
ignoreAttributes: false,
|
if (emojiLikeEvent) return emojiLikeEvent;
|
||||||
attributeNamePrefix: '',
|
|
||||||
}).parse(element.grayTipElement.xmlElement.content);
|
|
||||||
logger.logDebug('收到表情回应我的消息', emojiLikeData);
|
|
||||||
try {
|
|
||||||
const senderUin = emojiLikeData.gtip.qq.jp;
|
|
||||||
const msgSeq = emojiLikeData.gtip.url.msgseq;
|
|
||||||
const emojiId = emojiLikeData.gtip.face.id;
|
|
||||||
const peer = {
|
|
||||||
chatType: ChatType.group,
|
|
||||||
guildId: '',
|
|
||||||
peerUid: msg.peerUid
|
|
||||||
}
|
|
||||||
const replyMsgList = (await NTQQMsgApi.getMsgExBySeq(peer, msgSeq)).msgList;
|
|
||||||
if (replyMsgList.length < 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const replyMsg = replyMsgList.filter(e => e.msgSeq == msgSeq).sort((a, b) => parseInt(a.msgTime) - parseInt(b.msgTime))[0];
|
|
||||||
//console.log("表情回应消息长度检测", msgSeq, replyMsg.elements);
|
|
||||||
if (!replyMsg) throw new Error('找不到回应消息');
|
|
||||||
return new OB11GroupMsgEmojiLikeEvent(
|
|
||||||
core,
|
|
||||||
parseInt(msg.peerUid),
|
|
||||||
parseInt(senderUin),
|
|
||||||
MessageUnique.getShortIdByMsgId(replyMsg.msgId)!,
|
|
||||||
[{
|
|
||||||
emoji_id: emojiId,
|
|
||||||
count: 1,
|
|
||||||
}],
|
|
||||||
);
|
|
||||||
} catch (e: any) {
|
|
||||||
logger.logError('解析表情回应消息失败', e.stack);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) {
|
if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) {
|
||||||
logger.logDebug('收到新人被邀请进群消息', element.grayTipElement);
|
logger.logDebug('收到新人被邀请进群消息', element.grayTipElement);
|
||||||
@ -569,16 +537,6 @@ export class OB11Constructor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static friend(friend: User): OB11User {
|
|
||||||
return {
|
|
||||||
user_id: parseInt(friend.uin),
|
|
||||||
nickname: friend.nick,
|
|
||||||
remark: friend.remark,
|
|
||||||
sex: OB11Constructor.sex(friend.sex!),
|
|
||||||
level: friend.qqLevel && calcQQLevel(friend.qqLevel) || 0,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static selfInfo(selfInfo: SelfInfo): OB11User {
|
static selfInfo(selfInfo: SelfInfo): OB11User {
|
||||||
return {
|
return {
|
||||||
user_id: parseInt(selfInfo.uin),
|
user_id: parseInt(selfInfo.uin),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user