diff --git a/src/core/src/apis/file.ts b/src/core/src/apis/file.ts index 54b83316..02900040 100644 --- a/src/core/src/apis/file.ts +++ b/src/core/src/apis/file.ts @@ -3,7 +3,7 @@ import { CacheFileType, ChatCacheListItemBasic, ChatType, - ElementType, IMAGE_HTTP_HOST, IMAGE_HTTP_HOST_NT, PicElement, RawMessage + ElementType, IMAGE_HTTP_HOST, IMAGE_HTTP_HOST_NT, Peer, PicElement, RawMessage } from '@/core/entities'; import path from 'path'; import fs from 'fs'; @@ -32,12 +32,8 @@ export class NTQQFileApi { static async getFileSize(filePath: string): Promise { return await napCatCore.util.getFileSize(filePath); } - static async getVideoUrl(msg: RawMessage, element: any) { - return (await napCatCore.session.getRichMediaService().getVideoPlayUrlV2({ - chatType: msg.chatType, - peerUid: msg.peerUid, - guildId: '0' - }, msg.msgId, element.elementId, 0, { downSourceType: 1, triggerType: 1 })).urlResult.domainUrl[0].url; + static async getVideoUrl(peer: Peer, msgId: string, elementId: string) { + return (await napCatCore.session.getRichMediaService().getVideoPlayUrlV2(peer, msgId, elementId, 0, { downSourceType: 1, triggerType: 1 })).urlResult.domainUrl; } // 上传文件到QQ的文件夹 static async uploadFile(filePath: string, elementType: ElementType = ElementType.PIC, elementSubType: number = 0) { diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index 4b92c37d..ee264e87 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -23,7 +23,8 @@ import { SelfInfo, Sex, TipGroupElementType, - User + User, + VideoElement } from '@/core/entities'; import { EventType } from './event/OB11BaseEvent'; import { encodeCQCode } from './cqcode'; @@ -191,30 +192,34 @@ export class OB11Constructor { // 不自动下载图片 } - else if (element.videoElement || element.fileElement) { - const videoOrFileElement = element.videoElement || element.fileElement; - const ob11MessageDataType = element.videoElement ? OB11MessageDataType.video : OB11MessageDataType.file; - const videoDownUrl = element.videoElement ? await NTQQFileApi.getVideoUrl(msg, element) : videoOrFileElement.filePath; - message_data['type'] = ob11MessageDataType; - message_data['data']['file'] = videoOrFileElement.fileName; + else if (element.fileElement) { + const FileElement = element.videoElement || element.fileElement; + message_data['type'] = OB11MessageDataType.file; + message_data['data']['file'] = FileElement.fileName; + message_data['data']['path'] = FileElement.filePath; + message_data['data']['url'] = FileElement.filePath; + message_data['data']['file_id'] = FileElement.fileUuid; + message_data['data']['file_size'] = FileElement.fileSize; + } + else if (element.videoElement) { + const videoElement: VideoElement = element.videoElement; + let videoUrl; + try { + videoUrl = await NTQQFileApi.getVideoUrl({ + chatType: msg.chatType, + peerUid: msg.peerUid, + guildId: '0' + }, msg.msgId, element.elementId); + } catch (error) { + videoUrl = undefined; + } + const videoDownUrl = videoUrl ? videoUrl : videoElement.filePath; + message_data['type'] = OB11MessageDataType.video; + message_data['data']['file'] = videoElement.fileName; message_data['data']['path'] = videoDownUrl; message_data['data']['url'] = videoDownUrl; - message_data['data']['file_id'] = videoOrFileElement.fileUuid; - message_data['data']['file_size'] = videoOrFileElement.fileSize; - if (!element.videoElement) { - // dbUtil.addFileCache({ - // msgId: msg.msgId, - // name: videoOrFileElement.fileName, - // path: videoOrFileElement.filePath, - // size: parseInt(videoOrFileElement.fileSize || '0'), - // uuid: videoOrFileElement.fileUuid || '', - // url: '', - // element: element.videoElement || element.fileElement, - // elementType: element.videoElement ? ElementType.VIDEO : ElementType.FILE, - // elementId: element.elementId - // }).then(); - // } - } + message_data['data']['file_id'] = videoElement.fileUuid; + message_data['data']['file_size'] = videoElement.fileSize; } else if (element.pttElement) { message_data['type'] = OB11MessageDataType.voice; @@ -285,7 +290,7 @@ export class OB11Constructor { else (resMsg.message as OB11MessageData[]).push(message_data); resMsg.raw_message += cqCode; } - + } resMsg.raw_message = resMsg.raw_message.trim(); return resMsg;