Skip to content
This repository has been archived by the owner on Jan 9, 2025. It is now read-only.

Commit

Permalink
修改部分处理逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
BAKAOLC committed Dec 6, 2024
1 parent c44eb53 commit a55bb88
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 92 deletions.
2 changes: 1 addition & 1 deletion Ritsukage-Core/Discord/Commands/Bilibili.cs
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ await ReplyAsync(new StringBuilder()
[Command("login")]
public async Task Login()
{
var msg = await ReplyAsync("请求已接受,请稍后……");
var msg = await ReplyAsync("请求已接受,请稍候……");
var dm = await Context.User.CreateDMChannelAsync();
IUserMessage qr = null;
IUserMessage dmmsg = null;
Expand Down
60 changes: 46 additions & 14 deletions Ritsukage-Core/QQ/Commands/GifGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
using SixLabors.ImageSharp.PixelFormats;
using Sora.Entities.Segment;
using Sora.Entities.Segment.DataModel;
using Sora.Enumeration.ApiType;
using Sora.Enumeration;
using Sora.Enumeration.ApiType;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
Expand All @@ -21,6 +22,29 @@ namespace Ritsukage.QQ.Commands
[CommandGroup("Gif Generator")]
public static class GifGenerator
{
private static async Task<string[]> GetImageOriginalUrls(SoraMessage e, IEnumerable<ImageSegment> segments)
{
var imageSegments = segments as ImageSegment[] ?? segments.ToArray();
if (!imageSegments.Any()) return [];

var result = new List<string>();

foreach (var segment in imageSegments)
if (segment.ImgFile.ToLower().Trim() == "marketface")
{
result.Add(segment.Url);
}
else
{
var (apiStatus, _, _, url) = await e.SoraApi.GetImage(segment.ImgFile).ConfigureAwait(false);
if (apiStatus.RetCode == ApiStatusType.Ok)
result.Add(url);
else if (!string.IsNullOrEmpty(segment.Url)) result.Add(segment.Url);
}

return result.ToArray();
}

private static async Task<string[]> GetReplyImageUrls(SoraMessage e)
{
var replySegment = e.Message.MessageBody.FirstOrDefault(x => x.MessageType == SegmentType.Reply);
Expand Down Expand Up @@ -51,26 +75,33 @@ private static async Task<string[]> GetReplyImageUrls(SoraMessage e)
return [];
}

await e.ReplyToOriginal("请稍后").ConfigureAwait(false);
return imglist.Select(async x => (await e.SoraApi.GetImage(x.ImgFile)).url).Select(x => x.Result).ToArray();
await e.ReplyToOriginal("请稍候").ConfigureAwait(false);
return await GetImageOriginalUrls(e, imglist).ConfigureAwait(false);
}

private static async Task<string> GetImageUrl(SoraMessage e)
{
var imglist = e.Message.GetAllImage();
if (imglist.Any())
{
await e.ReplyToOriginal("请稍后");
return (await e.SoraApi.GetImage(imglist.First().ImgFile)).url;
await e.ReplyToOriginal("请稍候");
return (await GetImageOriginalUrls(e, imglist).ConfigureAwait(false)).FirstOrDefault();
}

var replyImageUrls = await GetReplyImageUrls(e).ConfigureAwait(false);
return replyImageUrls.Length == 0 ? null : replyImageUrls.FirstOrDefault();
}

private static async Task<Image<Rgba32>> DownloadNormalImage(string url)
private static async Task<string> DownloadImage(SoraMessage e, string url)
{
var (apiStatus, filePath) = await e.SoraApi.DownloadFile(url, 1).ConfigureAwait(false);
return apiStatus.RetCode != ApiStatusType.Ok ? null : filePath;
}

private static async Task<Image<Rgba32>> DownloadNormalImage(SoraMessage e, string url)
{
var path = await DownloadManager.Download(url, enableAria2Download: true);
//var path = await DownloadManager.Download(url, enableAria2Download: true);
var path = await DownloadImage(e, url).ConfigureAwait(false);
if (path is null) throw new FileLoadException("图像下载失败");
var img = LoadImage(path);
if (img != null) return img;
Expand All @@ -79,9 +110,10 @@ private static async Task<Image<Rgba32>> DownloadNormalImage(string url)
throw new FileLoadException("图像加载失败");
}

private static async Task<Image<Rgba32>> DownloadGifImage(string url)
private static async Task<Image<Rgba32>> DownloadGifImage(SoraMessage e, string url)
{
var path = await DownloadManager.Download(url, enableAria2Download: true);
//var path = await DownloadManager.Download(url, enableAria2Download: true);
var path = await DownloadImage(e, url).ConfigureAwait(false);
if (path is null) throw new FileLoadException("Gif图像下载失败");
var decoder = FindDecoder(ImageFormat.Gif);
var img = LoadImage(path, decoder);
Expand All @@ -108,14 +140,14 @@ private static async Task<Image<Rgba32>> GetNormalImage(SoraMessage e)
{
var url = await GetImageUrl(e);
if (url is null) return null;
return await DownloadNormalImage(url);
return await DownloadNormalImage(e, url);
}

private static async Task<Image<Rgba32>> GetGifImage(SoraMessage e)
{
var url = await GetImageUrl(e);
if (url is null) return null;
return await DownloadGifImage(url);
return await DownloadGifImage(e, url);
}

private static Image<Rgba32> ImageWorker(Image<Rgba32> image, Func<Image<Rgba32>, Image<Rgba32>> func)
Expand Down Expand Up @@ -208,7 +240,7 @@ public static async void Gif(SoraMessage e, int rot)

[Command("表情包模板")]
[CommandDescription("获取表情包模板列表")]
public static async void GifGeneratorTemplate(SoraMessage e, string template = null)
public static async void GifGeneratorTemplate(SoraMessage e, string template = null, long qq = -1)
{
if (string.IsNullOrWhiteSpace(template))
{
Expand All @@ -230,10 +262,10 @@ public static async void GifGeneratorTemplate(SoraMessage e, string template = n

try
{
var at = e.Message.GetAllAtList().FirstOrDefault(0);
var at = qq <= 10000 ? e.Message.GetAllAtList().FirstOrDefault(0) : qq;
Image<Rgba32>? image = null;
if (at > 10000)
image = await DownloadNormalImage(Utils.GetQQHeadImageUrl(at));
image = await DownloadNormalImage(e, Utils.GetQQHeadImageUrl(at));
else
image = await GetNormalImage(e);
if (image is null)
Expand Down
61 changes: 46 additions & 15 deletions Ritsukage-Core/QQ/Commands/ImageEdit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,45 @@
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.PixelFormats;
using Sora.Entities.Segment;
using Sora.Entities.Segment.DataModel;
using Sora.Enumeration;
using Sora.Enumeration.ApiType;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Sora.Entities;
using Sora.Enumeration;
using static Ritsukage.Library.Graphic.GraphicEdit;
using static Ritsukage.Library.Graphic.GraphicUtils;
using Sora.Entities.Segment.DataModel;
using Sora.Enumeration.ApiType;

namespace Ritsukage.QQ.Commands
{
[CommandGroup("Image Edit")]
public static class ImageEdit
{
private static async Task<string[]> GetImageOriginalUrls(SoraMessage e, IEnumerable<ImageSegment> segments)
{
var imageSegments = segments as ImageSegment[] ?? segments.ToArray();
if (!imageSegments.Any()) return [];

var result = new List<string>();

foreach (var segment in imageSegments)
if (segment.ImgFile.ToLower().Trim() == "marketface")
{
result.Add(segment.Url);
}
else
{
var (apiStatus, _, _, url) = await e.SoraApi.GetImage(segment.ImgFile).ConfigureAwait(false);
if (apiStatus.RetCode == ApiStatusType.Ok)
result.Add(url);
else if (!string.IsNullOrEmpty(segment.Url)) result.Add(segment.Url);
}

return result.ToArray();
}

private static async Task<string[]> GetReplyImageUrls(SoraMessage e)
{
var replySegment = e.Message.MessageBody.FirstOrDefault(x => x.MessageType == SegmentType.Reply);
Expand Down Expand Up @@ -51,8 +74,8 @@ private static async Task<string[]> GetReplyImageUrls(SoraMessage e)
return [];
}

await e.ReplyToOriginal("请稍后").ConfigureAwait(false);
return imglist.Select(async x => (await e.SoraApi.GetImage(x.ImgFile)).url).Select(x => x.Result).ToArray();
await e.ReplyToOriginal("请稍候").ConfigureAwait(false);
return await GetImageOriginalUrls(e, imglist).ConfigureAwait(false);
}

private static async Task<string> GetImageUrl(SoraMessage e)
Expand All @@ -65,8 +88,8 @@ private static async Task<string> GetImageUrl(SoraMessage e)
return replyImageUrls.Length == 0 ? null : replyImageUrls.FirstOrDefault();
}

await e.ReplyToOriginal("请稍后");
return (await e.SoraApi.GetImage(imglist.First().ImgFile)).url;
await e.ReplyToOriginal("请稍候");
return (await GetImageOriginalUrls(e, imglist).ConfigureAwait(false))?.FirstOrDefault();
}

private static async Task<string[]> GetImageUrls(SoraMessage e)
Expand All @@ -79,8 +102,14 @@ private static async Task<string[]> GetImageUrls(SoraMessage e)
return replyImageUrls.Length == 0 ? null : replyImageUrls;
}

await e.ReplyToOriginal("请稍后");
return imglist.Select(async x => (await e.SoraApi.GetImage(x.ImgFile)).url).Select(x => x.Result).ToArray();
await e.ReplyToOriginal("请稍候");
return await GetImageOriginalUrls(e, imglist).ConfigureAwait(false);
}

private static async Task<string> DownloadImage(SoraMessage e, string url)
{
var (apiStatus, filePath) = await e.SoraApi.DownloadFile(url, 1).ConfigureAwait(false);
return apiStatus.RetCode != ApiStatusType.Ok ? null : filePath;
}

private static async Task<string> DownloadImage(string url)
Expand Down Expand Up @@ -115,7 +144,9 @@ private static async Task Worker(SoraMessage e, Func<Image<Rgba32>, Image<Rgba32
var url = await GetImageUrl(e);
if (url == null)
return;
var path = await DownloadImage(url);
var path = await DownloadImage(e, url);
if (path == null)
throw new("下载图片失败");
var image = LoadImage(path, out var format);
var product = func.Invoke(image);
await SendImage(e, product, format);
Expand Down Expand Up @@ -205,7 +236,7 @@ public static async void WorkMosaic(SoraMessage e, int size = 2, int px = 0, int
var url = await GetImageUrl(e);
if (url == null)
return;
var path = await DownloadImage(url);
var path = await DownloadImage(e, url);
var image = LoadImage(path, out var format);
var product = Mosaic(image, size, px, py);
await SendImage(e, product, format);
Expand Down Expand Up @@ -240,7 +271,7 @@ public static async void WorkGenerateRotateImageWithOriginalSize(SoraMessage e,
var url = await GetImageUrl(e);
if (url == null)
return;
var path = await DownloadImage(url);
var path = await DownloadImage(e, url);
var image = LoadImage(path);
var product = GenerateRotateImageWithOriginalSize(image, repeat, frameDelay);
await SendImage(e, product, ImageFormat.Gif);
Expand Down Expand Up @@ -275,7 +306,7 @@ public static async void WorkGenerateRotateImage(SoraMessage e, int repeat = 1,
var url = await GetImageUrl(e);
if (url == null)
return;
var path = await DownloadImage(url);
var path = await DownloadImage(e, url);
var image = LoadImage(path);
var product = GenerateRotateImage(image, repeat, frameDelay);
await SendImage(e, product, ImageFormat.Gif);
Expand Down Expand Up @@ -311,7 +342,7 @@ public static async void WorkMergeNinePicture(SoraMessage e)
var imgs = new Image<Rgba32>[9];
for (var i = 0; i < 9; i++)
{
var path = await DownloadImage(urls[i]);
var path = await DownloadImage(e, urls[i]);
imgs[i] = LoadImage(path);
}

Expand Down
Loading

0 comments on commit a55bb88

Please sign in to comment.