global nadeko won't cache nsfw images
This commit is contained in:
parent
46f9de01d6
commit
438f68cde7
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -549,7 +549,7 @@ namespace NadekoBot.Modules.Xp.Services
|
||||
}
|
||||
}
|
||||
|
||||
public Task<Image<Rgba32>> GenerateImageAsync(IGuildUser user)
|
||||
public Task<MemoryStream> 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<Image<Rgba32>> GenerateImageAsync(FullUserStats stats) => Task.Run(async () =>
|
||||
public Task<MemoryStream> 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>(Rgba32.Black, 1);
|
||||
var brush = Brushes.Solid<Rgba32>(Rgba32.White);
|
||||
var xpBgBrush = Brushes.Solid<Rgba32>(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>(Rgba32.Black, 1);
|
||||
var brush = Brushes.Solid<Rgba32>(Rgba32.White);
|
||||
var xpBgBrush = Brushes.Solid<Rgba32>(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;
|
||||
});
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user