diff --git a/src/onebot/action/go-cqhttp/GetForwardMsg.ts b/src/onebot/action/go-cqhttp/GetForwardMsg.ts index a5c37150..b1b5057c 100644 --- a/src/onebot/action/go-cqhttp/GetForwardMsg.ts +++ b/src/onebot/action/go-cqhttp/GetForwardMsg.ts @@ -40,8 +40,8 @@ export class GoCQHTTPGetForwardMsgAction extends BaseAction { } const msgList = data.msgList; const messages = await Promise.all(msgList.map(async msg => { - const resMsg = await OB11Constructor.message(msg); - resMsg.message_id = MessageUnique.createMsg({ guildId:'',chatType:msg.chatType,peerUid:msg.peerUid },msg.msgId)!; + const resMsg = await OB11Constructor.message(this.CoreContext, msg, "array"); + resMsg.message_id = MessageUnique.createMsg({ guildId: '', chatType: msg.chatType, peerUid: msg.peerUid }, msg.msgId)!; return resMsg; })); messages.map(msg => { diff --git a/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts index fb6af824..f8ced55b 100644 --- a/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts @@ -46,7 +46,7 @@ export default class GoCQHTTPGetGroupMsgHistory extends BaseAction OB11Constructor.message(msg))); + const ob11MsgList = await Promise.all(msgList.map(msg => OB11Constructor.message(this.CoreContext, msg, "array"))); return { 'messages': ob11MsgList }; } } diff --git a/src/onebot/helper/data.ts b/src/onebot/helper/data.ts index 8bfcf45d..8324d149 100644 --- a/src/onebot/helper/data.ts +++ b/src/onebot/helper/data.ts @@ -44,14 +44,20 @@ import { OB11FriendAddNoticeEvent } from '../event/notice/OB11FriendAddNoticeEve import { OB11BaseNoticeEvent } from '../event/notice/OB11BaseNoticeEvent'; import { OB11GroupEssenceEvent } from '../event/notice/OB11GroupEssenceEvent'; import { MessageUnique } from '@/common/utils/MessageUnique'; +import { NapCatCore } from '@/core'; export class OB11Constructor { - static async message(msg: RawMessage): Promise { - const { messagePostFormat } = ob11Config; + static async message(coreContext: NapCatCore, msg: RawMessage, messagePostFormat: any): Promise { + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; + const NTQQFileApi = coreContext.getApiContext().FileApi; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const logger = coreContext.context.logger; const message_type = msg.chatType == ChatType.group ? 'group' : 'private'; const resMsg: OB11Message = { - self_id: parseInt(selfInfo.uin), + self_id: parseInt(coreContext.selfInfo.uin), user_id: parseInt(msg.senderUin!), time: parseInt(msg.msgTime) || Date.now(), message_id: msg.id!, @@ -68,17 +74,14 @@ export class OB11Constructor { sub_type: 'friend', message: messagePostFormat === 'string' ? '' : [], message_format: messagePostFormat === 'string' ? 'string' : 'array', - post_type: selfInfo.uin == msg.senderUin ? EventType.MESSAGE_SENT : EventType.MESSAGE, + post_type: coreContext.selfInfo.uin == msg.senderUin ? EventType.MESSAGE_SENT : EventType.MESSAGE, }; if (msg.chatType == ChatType.group) { resMsg.sub_type = 'normal'; // 这里go-cqhttp是group,而onebot11标准是normal, 蛋疼 resMsg.group_id = parseInt(msg.peerUin); - let member = await getGroupMember(msg.peerUin, msg.senderUin!); - if (!member) { - //直接去QQNative取 - const memberList = await NTQQGroupApi.getGroupMembers(msg.peerUin); - member = memberList.get(msg.senderUin!); - } + //直接去QQNative取 + const memberList = await NTQQGroupApi.getGroupMembers(msg.peerUin); + let member = memberList.get(msg.senderUin!); if (member) { resMsg.sender.role = OB11Constructor.groupMemberRole(member.role); resMsg.sender.nickname = member.nick; @@ -92,10 +95,6 @@ export class OB11Constructor { } else if (msg.chatType == ChatType.temp) { resMsg.sub_type = 'group'; - const tempGroupCode = tempGroupCodeMap[msg.peerUin]; - if (tempGroupCode) { - resMsg.group_id = parseInt(tempGroupCode); - } } for (const element of msg.elements) { let message_data: OB11MessageData = { @@ -112,10 +111,7 @@ export class OB11Constructor { const { atNtUid, content } = element.textElement; let atQQ = element.textElement.atUid; if (!atQQ || atQQ === '0') { - const atMember = await getGroupMember(msg.peerUin, atNtUid); - if (atMember) { - atQQ = atMember.uin; - } + atQQ = await NTQQUserApi.getUinByUid(atNtUid); } if (atQQ) { qq = atQQ as `${number}`; @@ -170,7 +166,7 @@ export class OB11Constructor { } catch (e: any) { message_data['type'] = 'unknown' as any; message_data['data'] = undefined; - logError('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq); + logger.logError('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq); } } @@ -185,7 +181,7 @@ export class OB11Constructor { try { message_data['data']['url'] = await NTQQFileApi.getImageUrl(element.picElement); } catch (e: any) { - logError('获取图片url失败', e.stack); + logger.logError('获取图片url失败', e.stack); } //console.log(message_data['data']['url']) // message_data["data"]["file_id"] = element.picElement.fileUuid @@ -318,7 +314,7 @@ export class OB11Constructor { message_data['data']['emoji_id'] = element.marketFaceElement.emojiId; message_data['data']['emoji_package_id'] = String(element.marketFaceElement.emojiPackageId); message_data['data']['key'] = element.marketFaceElement.key; - mFaceCache.set(md5, element.marketFaceElement.faceName); + //mFaceCache.set(md5, element.marketFaceElement.faceName); } else if (element.markdownElement) { message_data['type'] = OB11MessageDataType.markdown; @@ -344,7 +340,7 @@ export class OB11Constructor { MultiMsg.parentMsgPeer = ParentMsgPeer; MultiMsg.parentMsgIdList = msg.parentMsgIdList; MultiMsg.id = MessageUnique.createMsg(ParentMsgPeer, MultiMsg.msgId);//该ID仅用查看 无法调用 - let msgList = await OB11Constructor.message(MultiMsg); + let msgList = await OB11Constructor.message(coreContext, MultiMsg, "array"); message_data['data']['content'].push(msgList); //console.log("合并消息", msgList); } @@ -363,7 +359,13 @@ export class OB11Constructor { resMsg.raw_message = resMsg.raw_message.trim(); return resMsg; } - static async PrivateEvent(msg: RawMessage): Promise { + static async PrivateEvent(coreContext: NapCatCore, msg: RawMessage): Promise { + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; + const NTQQFileApi = coreContext.getApiContext().FileApi; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const logger = coreContext.context.logger; if (msg.chatType !== ChatType.friend) { return; } @@ -394,20 +396,27 @@ export class OB11Constructor { } } } - static async GroupEvent(msg: RawMessage): Promise { + static async GroupEvent(coreContext:NapCatCore,msg: RawMessage): Promise { + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; + const NTQQFileApi = coreContext.getApiContext().FileApi; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const logger = coreContext.context.logger; if (msg.chatType !== ChatType.group) { return; } //log("group msg", msg); - if (msg.senderUin && msg.senderUin !== '0') { - const member = await getGroupMember(msg.peerUid, msg.senderUin); - if (member && member.cardName !== msg.sendMemberName) { - const newCardName = msg.sendMemberName || ''; - const event = new OB11GroupCardEvent(parseInt(msg.peerUid), parseInt(msg.senderUin), newCardName, member.cardName); - member.cardName = newCardName; - return event; - } - } + // Mlikiowa V2.0.0 Refactor Todo + // if (msg.senderUin && msg.senderUin !== '0') { + // const member = await getGroupMember(msg.peerUid, msg.senderUin); + // if (member && member.cardName !== msg.sendMemberName) { + // const newCardName = msg.sendMemberName || ''; + // const event = new OB11GroupCardEvent(parseInt(msg.peerUid), parseInt(msg.senderUin), newCardName, member.cardName); + // member.cardName = newCardName; + // return event; + // } + // } for (const element of msg.elements) { const grayTipElement = element.grayTipElement; @@ -415,7 +424,7 @@ export class OB11Constructor { if (groupElement) { // log("收到群提示消息", groupElement) if (groupElement.type == TipGroupElementType.memberIncrease) { - logDebug('收到群成员增加消息', groupElement); + logger.logDebug('收到群成员增加消息', groupElement); await sleep(1000); const member = await getGroupMember(msg.peerUid, groupElement.memberUid); const memberUin = member?.uin; @@ -433,7 +442,7 @@ export class OB11Constructor { } } else if (groupElement.type === TipGroupElementType.ban) { - logDebug('收到群群员禁言提示', groupElement); + logger.logDebug('收到群群员禁言提示', groupElement); const memberUid = groupElement.shutUp!.member.uid; const adminUid = groupElement.shutUp!.admin.uid; let memberUin: string = ''; @@ -457,16 +466,15 @@ export class OB11Constructor { } } else if (groupElement.type == TipGroupElementType.kicked) { - logDebug(`收到我被踢出或退群提示, 群${msg.peerUid}`, groupElement); - deleteGroup(msg.peerUid); + logger.logDebug(`收到我被踢出或退群提示, 群${msg.peerUid}`, groupElement); NTQQGroupApi.quitGroup(msg.peerUid).then(); try { const adminUin = (await getGroupMember(msg.peerUid, groupElement.adminUid))?.uin || (await NTQQUserApi.getUidByUin(groupElement.adminUid)); if (adminUin) { - return new OB11GroupDecreaseEvent(parseInt(msg.peerUid), parseInt(selfInfo.uin), parseInt(adminUin), 'kick_me'); + return new OB11GroupDecreaseEvent(parseInt(msg.peerUid), parseInt(coreContext.selfInfo.uin), parseInt(adminUin), 'kick_me'); } } catch (e) { - return new OB11GroupDecreaseEvent(parseInt(msg.peerUid), parseInt(selfInfo.uin), 0, 'leave'); + return new OB11GroupDecreaseEvent(parseInt(msg.peerUid), parseInt(coreContext.selfInfo.uin), 0, 'leave'); } } } @@ -485,7 +493,7 @@ export class OB11Constructor { ignoreAttributes: false, attributeNamePrefix: '' }).parse(grayTipElement.xmlElement.content); - logDebug('收到表情回应我的消息', emojiLikeData); + logger.logDebug('收到表情回应我的消息', emojiLikeData); try { const senderUin = emojiLikeData.gtip.qq.jp; const msgSeq = emojiLikeData.gtip.url.msgseq; @@ -502,11 +510,11 @@ export class OB11Constructor { count: 1 }]); } catch (e: any) { - logError('解析表情回应消息失败', e.stack); + logger.logError('解析表情回应消息失败', e.stack); } } if (grayTipElement.subElementType == GrayTipElementSubType.INVITE_NEW_MEMBER) { - logDebug('收到新人被邀请进群消息', grayTipElement); + logger.logDebug('收到新人被邀请进群消息', grayTipElement); const xmlElement = grayTipElement.xmlElement; if (xmlElement?.content) { const regex = /jp="(\d+)"/g; @@ -555,7 +563,7 @@ export class OB11Constructor { //下面得改 上面也是错的grayTipElement.subElementType == GrayTipElementSubType.MEMBER_NEW_TITLE const memberUin = json.items[1].param[0]; const title = json.items[3].txt; - logDebug('收到群成员新头衔消息', json); + logger.logDebug('收到群成员新头衔消息', json); return new OB11GroupTitleEvent(parseInt(msg.peerUid), parseInt(memberUin), title); } } @@ -659,10 +667,6 @@ export class OB11Constructor { }; } - static groupMembers(group: Group): OB11GroupMember[] { - //logDebug('construct ob11 group members', group); - return Array.from(groupMembers.get(group.groupCode)?.values() || []).map(m => OB11Constructor.groupMember(group.groupCode, m)); - } static group(group: Group): OB11Group { return { diff --git a/src/onebot/helper/msg.ts b/src/onebot/helper/msg.ts index f0e1a757..8a0c7012 100644 --- a/src/onebot/helper/msg.ts +++ b/src/onebot/helper/msg.ts @@ -74,7 +74,13 @@ export class SendMsgElementConstructor { }; } - static async pic(CoreContext: NapCatCore, picPath: string, summary: string = '', subType: 0 | 1 = 0): Promise { + static async pic(coreContext: NapCatCore, picPath: string, summary: string = '', subType: 0 | 1 = 0): Promise { + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; + const NTQQFileApi = coreContext.getApiContext().FileApi; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const logger = coreContext.context.logger; const { md5, fileName, path, fileSize } = await NTQQFileApi.uploadFile(picPath, ElementType.PIC, subType); if (fileSize === 0) { throw '文件异常,大小为0'; @@ -103,7 +109,13 @@ export class SendMsgElementConstructor { }; } - static async file(CoreContext: NapCatCore, filePath: string, fileName: string = '', folderId: string = ''): Promise { + static async file(coreContext: NapCatCore, filePath: string, fileName: string = '', folderId: string = ''): Promise { + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; + const NTQQFileApi = coreContext.getApiContext().FileApi; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const logger = coreContext.context.logger; const { md5, fileName: _fileName, path, fileSize } = await NTQQFileApi.uploadFile(filePath, ElementType.FILE); if (fileSize === 0) { throw '文件异常,大小为0'; @@ -122,7 +134,13 @@ export class SendMsgElementConstructor { return element; } - static async video(CoreContext: NapCatCore, filePath: string, fileName: string = '', diyThumbPath: string = '', videotype: viedo_type = viedo_type.VIDEO_FORMAT_MP4): Promise { + static async video(coreContext: NapCatCore, filePath: string, fileName: string = '', diyThumbPath: string = '', videotype: viedo_type = viedo_type.VIDEO_FORMAT_MP4): Promise { + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; + const NTQQFileApi = coreContext.getApiContext().FileApi; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const logger = coreContext.context.logger; const { fileName: _fileName, path, fileSize, md5 } = await NTQQFileApi.uploadFile(filePath, ElementType.VIDEO); if (fileSize === 0) { throw '文件异常,大小为0'; @@ -138,10 +156,10 @@ export class SendMsgElementConstructor { filePath }; try { - videoInfo = await getVideoInfo(path); + videoInfo = await getVideoInfo(path, logger); //logDebug('视频信息', videoInfo); } catch (e) { - logError('获取视频信息失败', e); + logger.logError('获取视频信息失败', e); } const createThumb = new Promise((resolve, reject) => { const thumbFileName = `${md5}_0.png`; @@ -150,7 +168,7 @@ export class SendMsgElementConstructor { .on('end', () => { }) .on('error', (err) => { - logDebug('获取视频封面失败,使用默认封面', err); + logger.logDebug('获取视频封面失败,使用默认封面', err); if (diyThumbPath) { fs.copyFile(diyThumbPath, thumbPath).then(() => { resolve(thumbPath); @@ -206,8 +224,14 @@ export class SendMsgElementConstructor { return element; } - static async ptt(CoreContext: NapCatCore, pttPath: string): Promise { - const { converted, path: silkPath, duration } = await encodeSilk(pttPath); + static async ptt(coreContext: NapCatCore, pttPath: string): Promise { + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; + const NTQQFileApi = coreContext.getApiContext().FileApi; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const logger = coreContext.context.logger; + const { converted, path: silkPath, duration } = await encodeSilk(pttPath, coreContext.NapCatTempPath, coreContext.context.logger); // log("生成语音", silkPath, duration); if (!silkPath) { throw '语音转换失败, 请检查语音文件是否正常';