@@ -83,23 +83,31 @@ func ProtoTextToMiraiText(data map[string]string) message.IMessageElement {
8383
8484func ProtoImageToMiraiImage (data map [string ]string ) message.IMessageElement {
8585 url , ok := data ["url" ]
86- if ! ok || ! strings . Contains ( url , "http" ) {
86+ if ! ok {
8787 url , ok = data ["src" ] // TODO 为了兼容我的旧代码偷偷加的
88- if ! ok || ! strings . Contains ( url , "http" ) {
88+ if ! ok {
8989 url , ok = data ["file" ]
9090 }
9191 }
92- if ! ok || ! strings . Contains ( url , "http" ) {
92+ if ! ok {
9393 log .Warnf ("imageUrl不存在" )
9494 return EmptyText ()
9595 }
96- log .Infof ("下载图片: %+v" , url )
97- b , err := util .GetBytes (url )
98- if err != nil {
99- log .Errorf ("下载图片失败" )
100- return EmptyText ()
96+ if strings .Contains (url , "http://" ) || strings .Contains (url , "https://" ) {
97+ b , err := util .GetBytes (url )
98+ if err != nil {
99+ log .Errorf ("failed to download image" )
100+ return EmptyText ()
101+ }
102+ return & clz.LocalImageElement {Stream : bytes .NewReader (b )}
103+ } else {
104+ imageFile , err := os .Open (url )
105+ if err != nil {
106+ log .Errorf ("failed to open local image" )
107+ return EmptyText ()
108+ }
109+ return & clz.LocalImageElement {Stream : imageFile }
101110 }
102- return message .NewImage (b )
103111}
104112
105113func ProtoVoiceToMiraiVoice (data map [string ]string ) message.IMessageElement {
@@ -305,53 +313,70 @@ func ProtoTtsToMiraiTts(cli *client.QQClient, data map[string]string) (m message
305313}
306314
307315func ProtoVideoToMiraiVideo (cli * client.QQClient , data map [string ]string ) (m message.IMessageElement ) {
316+ elem := & clz.MyVideoElement {}
308317 coverUrl , ok := data ["cover" ]
309318 if ! ok {
310319 log .Warnf ("video cover不存在" )
311320 return EmptyText ()
312321 }
313322 url , ok := data ["url" ]
314- if ! ok || ! strings . Contains ( url , "http" ) {
323+ if ! ok {
315324 url , ok = data ["file" ]
316- if ! ok || ! strings . Contains ( url , "http" ) {
325+ if ! ok {
317326 log .Warnf ("video url不存在" )
318327 return EmptyText ()
319328 }
320329 }
321- coverBytes , err := util .GetBytes (coverUrl )
322- if err != nil {
323- log .Errorf ("failed to download cover, err: %+v" , err )
324- return EmptyText ()
325- }
326-
327- if ! util .PathExists ("video" ) {
328- err := os .MkdirAll ("video" , 0777 )
330+ if strings .Contains (coverUrl , "http://" ) || strings .Contains (coverUrl , "https://" ) {
331+ coverBytes , err := util .GetBytes (coverUrl )
329332 if err != nil {
330- log .Errorf ("failed to mkdir , err: %+v" , err )
333+ log .Errorf ("failed to download cover , err: %+v" , err )
331334 return EmptyText ()
332335 }
333- }
334- filepath := path . Join ( "video" , util . MustMd5 ( url ) + ".mp4" )
335- if util . PathExists ( filepath ) {
336- if err := os . Remove ( filepath ); err != nil {
337- log .Errorf ("删除缓存文件 %v 时出现错误 : %v" , filepath , err )
336+ elem . UploadingCover = bytes . NewReader ( coverBytes )
337+ } else {
338+ coverFile , err := os . Open ( coverUrl )
339+ if err != nil {
340+ log .Errorf ("failed to open file, err : %+v" , err )
338341 return EmptyText ()
339342 }
343+ elem .UploadingCover = coverFile
340344 }
341- //videoBytes, err := util.GetBytes(url)
342- if err := util .DownloadFileMultiThreading (url , filepath , 100 * 1024 * 1024 , 8 , nil ); err != nil {
343- log .Errorf ("failed to download video file, err: %+v" , err )
344- return EmptyText ()
345+
346+ videoFilePath := path .Join ("video" , util .MustMd5 (url )+ ".mp4" )
347+ if strings .Contains (url , "http://" ) || strings .Contains (url , "https://" ) {
348+ if ! util .PathExists ("video" ) {
349+ err := os .MkdirAll ("video" , 0777 )
350+ if err != nil {
351+ log .Errorf ("failed to mkdir, err: %+v" , err )
352+ return EmptyText ()
353+ }
354+ }
355+ if ! util .PathExists (videoFilePath ) {
356+ if err := util .DownloadFileMultiThreading (url , videoFilePath , 100 * 1024 * 1024 , 8 , nil ); err != nil {
357+ log .Errorf ("failed to download video file, err: %+v" , err )
358+ return EmptyText ()
359+ }
360+ } else if data ["cache" ] == "0" {
361+ if err := os .Remove (videoFilePath ); err != nil {
362+ log .Errorf ("删除缓存文件 %v 时出现错误: %v" , videoFilePath , err )
363+ return EmptyText ()
364+ }
365+ if err := util .DownloadFileMultiThreading (url , videoFilePath , 100 * 1024 * 1024 , 8 , nil ); err != nil {
366+ log .Errorf ("failed to download video file, err: %+v" , err )
367+ return EmptyText ()
368+ }
369+ }
370+ } else {
371+ videoFilePath = url
345372 }
346- videoFile , err := os .Open (filepath )
373+
374+ videoFile , err := os .Open (videoFilePath )
347375 if err != nil {
348376 log .Errorf ("failed to open video file" )
349377 return EmptyText ()
350378 }
351- elem := & clz.MyVideoElement {
352- UploadingCover : bytes .NewReader (coverBytes ), // 实际发送使用
353- UploadingVideo : videoFile , // 实际发送使用
354- }
379+ elem .UploadingVideo = videoFile
355380 elem .Url = url // 仅用于发送日志展示
356381 elem .CoverUrl = coverUrl // 仅用于发送日志展示
357382 return elem
0 commit comments