From 438f68cde7e1b14ce3c6951e04d5d995878d17ae Mon Sep 17 00:00:00 2001 From: Master Kwoth Date: Tue, 12 Sep 2017 23:49:37 +0200 Subject: [PATCH] global nadeko won't cache nsfw images --- .../Searches/Common/SearchImageCacher.cs | 2 + .../Modules/Xp/Services/XpService.cs | 278 +++++++++--------- src/NadekoBot/Modules/Xp/Xp.cs | 2 +- 3 files changed, 140 insertions(+), 142 deletions(-) diff --git a/src/NadekoBot/Modules/Searches/Common/SearchImageCacher.cs b/src/NadekoBot/Modules/Searches/Common/SearchImageCacher.cs index 323a5eae..8bd5d919 100644 --- a/src/NadekoBot/Modules/Searches/Common/SearchImageCacher.cs +++ b/src/NadekoBot/Modules/Searches/Common/SearchImageCacher.cs @@ -76,11 +76,13 @@ namespace NadekoBot.Modules.Searches.Common if (images.Length == 0) return null; var toReturn = images[_rng.Next(images.Length)]; +#if !GLOBAL_NADEKO foreach (var dledImg in images) { if(dledImg != toReturn) _cache.Add(dledImg); } +#endif return toReturn; } } diff --git a/src/NadekoBot/Modules/Xp/Services/XpService.cs b/src/NadekoBot/Modules/Xp/Services/XpService.cs index f82741bf..9bc1969b 100644 --- a/src/NadekoBot/Modules/Xp/Services/XpService.cs +++ b/src/NadekoBot/Modules/Xp/Services/XpService.cs @@ -549,7 +549,7 @@ namespace NadekoBot.Modules.Xp.Services } } - public Task> GenerateImageAsync(IGuildUser user) + public Task GenerateImageAsync(IGuildUser user) { return GenerateImageAsync(GetUserStats(user)); } @@ -565,170 +565,166 @@ namespace NadekoBot.Modules.Xp.Services _timeFont = _fonts.Find("Whitney-Bold").CreateFont(20); } - public Task> GenerateImageAsync(FullUserStats stats) => Task.Run(async () => + public Task GenerateImageAsync(FullUserStats stats) => Task.Run(async () => { - var img = Image.Load(_images.XpCard.ToArray()); - - var username = stats.User.ToString(); - var usernameFont = _usernameFontFamily - .CreateFont(username.Length <= 6 - ? 50 - : 50 - username.Length); - - img.DrawText("@" + username, usernameFont, Rgba32.White, - new PointF(130, 5)); - - // level - - img.DrawText(stats.Global.Level.ToString(), _levelFont, Rgba32.White, - new PointF(47, 137)); - - img.DrawText(stats.Guild.Level.ToString(), _levelFont, Rgba32.White, - new PointF(47, 285)); - - //club name - - var clubName = stats.User.Club?.ToString() ?? "-"; - - var clubFont = _clubFontFamily - .CreateFont(clubName.Length <= 8 - ? 35 - : 35 - (clubName.Length / 2)); - - img.DrawText(clubName, clubFont, Rgba32.White, - new PointF(650 - clubName.Length * 10, 40)); - - var pen = new Pen(Rgba32.Black, 1); - var brush = Brushes.Solid(Rgba32.White); - var xpBgBrush = Brushes.Solid(new Rgba32(0, 0, 0, 0.4f)); - - var global = stats.Global; - var guild = stats.Guild; - - //xp bar - - img.FillPolygon(xpBgBrush, new[] { - new PointF(321, 104), - new PointF(321 + (450 * (global.LevelXp / (float)global.RequiredXp)), 104), - new PointF(286 + (450 * (global.LevelXp / (float)global.RequiredXp)), 235), - new PointF(286, 235), - }); - img.DrawText($"{global.LevelXp}/{global.RequiredXp}", _xpFont, brush, pen, - new PointF(430, 130)); - - img.FillPolygon(xpBgBrush, new[] { - new PointF(282, 248), - new PointF(282 + (450 * (guild.LevelXp / (float)guild.RequiredXp)), 248), - new PointF(247 + (450 * (guild.LevelXp / (float)guild.RequiredXp)), 379), - new PointF(247, 379), - }); - img.DrawText($"{guild.LevelXp}/{guild.RequiredXp}", _xpFont, brush, pen, - new PointF(400, 270)); - - if (stats.FullGuildStats.AwardedXp != 0) + using (var img = Image.Load(_images.XpCard.ToArray())) { - var sign = stats.FullGuildStats.AwardedXp > 0 - ? "+ " - : ""; - img.DrawText($"({sign}{stats.FullGuildStats.AwardedXp})", _awardedFont, brush, pen, - new PointF(445 - (Math.Max(0, (stats.FullGuildStats.AwardedXp.ToString().Length - 2)) * 5), 335)); - } - //ranking + var username = stats.User.ToString(); + var usernameFont = _usernameFontFamily + .CreateFont(username.Length <= 6 + ? 50 + : 50 - username.Length); - img.DrawText(stats.GlobalRanking.ToString(), _rankFont, Rgba32.White, - new PointF(148, 170)); + img.DrawText("@" + username, usernameFont, Rgba32.White, + new PointF(130, 5)); - img.DrawText(stats.GuildRanking.ToString(), _rankFont, Rgba32.White, - new PointF(148, 317)); + // level - //time on this level + img.DrawText(stats.Global.Level.ToString(), _levelFont, Rgba32.White, + new PointF(47, 137)); - string GetTimeSpent(DateTime time) - { - var offset = DateTime.UtcNow - time; - return $"{offset.Days}d{offset.Hours}h{offset.Minutes}m"; - } + img.DrawText(stats.Guild.Level.ToString(), _levelFont, Rgba32.White, + new PointF(47, 285)); - img.DrawText(GetTimeSpent(stats.User.LastLevelUp), _timeFont, Rgba32.White, - new PointF(50, 197)); + //club name - img.DrawText(GetTimeSpent(stats.FullGuildStats.LastLevelUp), _timeFont, Rgba32.White, - new PointF(50, 344)); + var clubName = stats.User.Club?.ToString() ?? "-"; - //avatar + var clubFont = _clubFontFamily + .CreateFont(clubName.Length <= 8 + ? 35 + : 35 - (clubName.Length / 2)); - if (stats.User.AvatarId != null) - { - try + img.DrawText(clubName, clubFont, Rgba32.White, + new PointF(650 - clubName.Length * 10, 40)); + + var pen = new Pen(Rgba32.Black, 1); + var brush = Brushes.Solid(Rgba32.White); + var xpBgBrush = Brushes.Solid(new Rgba32(0, 0, 0, 0.4f)); + + var global = stats.Global; + var guild = stats.Guild; + + //xp bar + + img.FillPolygon(xpBgBrush, new[] { + new PointF(321, 104), + new PointF(321 + (450 * (global.LevelXp / (float)global.RequiredXp)), 104), + new PointF(286 + (450 * (global.LevelXp / (float)global.RequiredXp)), 235), + new PointF(286, 235), + }); + img.DrawText($"{global.LevelXp}/{global.RequiredXp}", _xpFont, brush, pen, + new PointF(430, 130)); + + img.FillPolygon(xpBgBrush, new[] { + new PointF(282, 248), + new PointF(282 + (450 * (guild.LevelXp / (float)guild.RequiredXp)), 248), + new PointF(247 + (450 * (guild.LevelXp / (float)guild.RequiredXp)), 379), + new PointF(247, 379), + }); + img.DrawText($"{guild.LevelXp}/{guild.RequiredXp}", _xpFont, brush, pen, + new PointF(400, 270)); + + if (stats.FullGuildStats.AwardedXp != 0) { - var avatarUrl = stats.User.RealAvatarUrl(); + var sign = stats.FullGuildStats.AwardedXp > 0 + ? "+ " + : ""; + img.DrawText($"({sign}{stats.FullGuildStats.AwardedXp})", _awardedFont, brush, pen, + new PointF(445 - (Math.Max(0, (stats.FullGuildStats.AwardedXp.ToString().Length - 2)) * 5), 335)); + } - var (succ, data) = await _cache.TryGetImageDataAsync(avatarUrl); - if (!succ) + //ranking + + img.DrawText(stats.GlobalRanking.ToString(), _rankFont, Rgba32.White, + new PointF(148, 170)); + + img.DrawText(stats.GuildRanking.ToString(), _rankFont, Rgba32.White, + new PointF(148, 317)); + + //time on this level + + string GetTimeSpent(DateTime time) + { + var offset = DateTime.UtcNow - time; + return $"{offset.Days}d{offset.Hours}h{offset.Minutes}m"; + } + + img.DrawText(GetTimeSpent(stats.User.LastLevelUp), _timeFont, Rgba32.White, + new PointF(50, 197)); + + img.DrawText(GetTimeSpent(stats.FullGuildStats.LastLevelUp), _timeFont, Rgba32.White, + new PointF(50, 344)); + + //avatar + + if (stats.User.AvatarId != null) + { + try { - using (var temp = await http.GetStreamAsync(avatarUrl)) + var avatarUrl = stats.User.RealAvatarUrl(); + + var (succ, data) = await _cache.TryGetImageDataAsync(avatarUrl); + if (!succ) { - var tempDraw = Image.Load(temp); - tempDraw = tempDraw.Resize(69, 70); - ApplyRoundedCorners(tempDraw, 35); - data = tempDraw.ToStream().ToArray(); + using (var temp = await http.GetStreamAsync(avatarUrl)) + using (var tempDraw = Image.Load(temp).Resize(69, 70)) + { + ApplyRoundedCorners(tempDraw, 35); + data = tempDraw.ToStream().ToArray(); + } + + await _cache.SetImageDataAsync(avatarUrl, data); } + var toDraw = Image.Load(data); - await _cache.SetImageDataAsync(avatarUrl, data); + + img.DrawImage(toDraw, + 1, + new Size(69, 70), + new Point(32, 10)); } - var toDraw = Image.Load(data); - - - img.DrawImage(toDraw, - 1, - new Size(69, 70), - new Point(32, 10)); - } - catch (Exception ex) - { - _log.Warn(ex); - } - } - - //club image - - if (!string.IsNullOrWhiteSpace(stats.User.Club?.ImageUrl)) - { - var imgUrl = stats.User.Club.ImageUrl; - try - { - var (succ, data) = await _cache.TryGetImageDataAsync(imgUrl); - if (!succ) + catch (Exception ex) { - using (var temp = await http.GetStreamAsync(imgUrl)) - { - var tempDraw = Image.Load(temp); - tempDraw = tempDraw.Resize(45, 45); - ApplyRoundedCorners(tempDraw, 22.5f); - data = tempDraw.ToStream().ToArray(); - } - - await _cache.SetImageDataAsync(imgUrl, data); + _log.Warn(ex); } - var toDraw = Image.Load(data); - - img.DrawImage(toDraw, - 1, - new Size(45, 45), - new Point(722, 25)); } - catch (Exception ex) + + //club image + + if (!string.IsNullOrWhiteSpace(stats.User.Club?.ImageUrl)) { - _log.Warn(ex); + var imgUrl = stats.User.Club.ImageUrl; + try + { + var (succ, data) = await _cache.TryGetImageDataAsync(imgUrl); + if (!succ) + { + using (var temp = await http.GetStreamAsync(imgUrl)) + using (var tempDraw = Image.Load(temp).Resize(45, 45)) + { + ApplyRoundedCorners(tempDraw, 22.5f); + data = tempDraw.ToStream().ToArray(); + } + + await _cache.SetImageDataAsync(imgUrl, data); + } + var toDraw = Image.Load(data); + + img.DrawImage(toDraw, + 1, + new Size(45, 45), + new Point(722, 25)); + } + catch (Exception ex) + { + _log.Warn(ex); + } } + + return img.Resize(432, 211).ToStream(); } - img.Resize(432, 211); - var arr = img.ToStream().ToArray(); - - //_log.Info("{0:F2} KB", arr.Length * 1.0f / 1.KB()); - - return img; }); diff --git a/src/NadekoBot/Modules/Xp/Xp.cs b/src/NadekoBot/Modules/Xp/Xp.cs index ee88aa00..31a02b35 100644 --- a/src/NadekoBot/Modules/Xp/Xp.cs +++ b/src/NadekoBot/Modules/Xp/Xp.cs @@ -32,7 +32,7 @@ namespace NadekoBot.Modules.Xp sw.Stop(); _log.Info("Generating finished in {0:F2}s", sw.Elapsed.TotalSeconds); sw.Restart(); - await Context.Channel.SendFileAsync(img.ToStream(), $"{user.Id}_xp.png") + await Context.Channel.SendFileAsync(img, $"{user.Id}_xp.png") .ConfigureAwait(false); sw.Stop(); _log.Info("Sending finished in {0:F2}s", sw.Elapsed.TotalSeconds);