unused field
This commit is contained in:
parent
06970eb9d3
commit
9f660431c2
1 changed files with 52 additions and 55 deletions
|
@ -39,7 +39,6 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
private readonly ConcurrentDictionary<ulong, ConcurrentHashSet<ulong>> _excludedChannels = new();
|
||||
private readonly ConcurrentHashSet<ulong> _excludedServers;
|
||||
|
||||
private XpTemplate _template = new();
|
||||
private readonly DiscordSocketClient _client;
|
||||
|
||||
private readonly IPatronageService _ps;
|
||||
|
@ -48,6 +47,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
private readonly INotifySubscriber _notifySub;
|
||||
private readonly IMemoryCache _memCache;
|
||||
private readonly ShardData _shardData;
|
||||
private readonly XpTemplateService _templateService;
|
||||
|
||||
private readonly QueueRunner _levelUpQueue = new QueueRunner(0, 100);
|
||||
|
||||
|
@ -65,7 +65,8 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
IPatronageService ps,
|
||||
INotifySubscriber notifySub,
|
||||
IMemoryCache memCache,
|
||||
ShardData shardData)
|
||||
ShardData shardData,
|
||||
XpTemplateService templateService)
|
||||
{
|
||||
_db = db;
|
||||
_images = images;
|
||||
|
@ -78,6 +79,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
_notifySub = notifySub;
|
||||
_memCache = memCache;
|
||||
_shardData = shardData;
|
||||
_templateService = templateService;
|
||||
_excludedServers = [];
|
||||
_excludedChannels = new();
|
||||
_client = client;
|
||||
|
@ -755,11 +757,10 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
}
|
||||
|
||||
|
||||
private int _lastKnownTemplateHashCode;
|
||||
|
||||
public Task<(Stream Image, IImageFormat Format)> GenerateXpImageAsync(FullUserStats stats)
|
||||
=> Task.Run(async () =>
|
||||
{
|
||||
var template = _templateService.GetTemplate();
|
||||
var bgBytes = await GetXpBackgroundAsync(stats.User.UserId);
|
||||
|
||||
if (bgBytes is null)
|
||||
|
@ -782,9 +783,9 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
using (var tempDraw = Image.Load<Rgba32>(avatarData))
|
||||
{
|
||||
tempDraw.Mutate(x => x
|
||||
.Resize(_template.User.Icon.Size.X, _template.User.Icon.Size.Y)
|
||||
.ApplyRoundedCorners(Math.Max(_template.User.Icon.Size.X,
|
||||
_template.User.Icon.Size.Y)
|
||||
.Resize(template.User.Icon.Size.X, template.User.Icon.Size.Y)
|
||||
.ApplyRoundedCorners(Math.Max(template.User.Icon.Size.X,
|
||||
template.User.Icon.Size.Y)
|
||||
/ 2.0f));
|
||||
await using (var stream = await tempDraw.ToStreamAsync())
|
||||
{
|
||||
|
@ -801,16 +802,16 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
|
||||
using var img = Image.Load<Rgba32>(bgBytes);
|
||||
|
||||
if (_template.User.Name.Show)
|
||||
if (template.User.Name.Show)
|
||||
{
|
||||
var fontSize = (int)(_template.User.Name.FontSize * 0.9);
|
||||
var fontSize = (int)(template.User.Name.FontSize * 0.9);
|
||||
var username = stats.User.ToString();
|
||||
var usernameFont = _fonts.NotoSans.CreateFont(fontSize, FontStyle.Bold);
|
||||
|
||||
var size = TextMeasurer.MeasureSize($"@{username}", new(usernameFont));
|
||||
var scale = 400f / size.Width;
|
||||
if (scale < 1)
|
||||
usernameFont = _fonts.NotoSans.CreateFont(_template.User.Name.FontSize * scale, FontStyle.Bold);
|
||||
usernameFont = _fonts.NotoSans.CreateFont(template.User.Name.FontSize * scale, FontStyle.Bold);
|
||||
|
||||
img.Mutate(x =>
|
||||
{
|
||||
|
@ -819,30 +820,30 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
FallbackFontFamilies = _fonts.FallBackFonts,
|
||||
Origin = new(_template.User.Name.Pos.X, _template.User.Name.Pos.Y + 8)
|
||||
Origin = new(template.User.Name.Pos.X, template.User.Name.Pos.Y + 8)
|
||||
},
|
||||
"@" + username,
|
||||
Brushes.Solid(_template.User.Name.Color),
|
||||
Brushes.Solid(template.User.Name.Color),
|
||||
outlinePen);
|
||||
|
||||
|
||||
//club name
|
||||
|
||||
if (_template.Club.Name.Show)
|
||||
if (template.Club.Name.Show)
|
||||
{
|
||||
var clubName = stats.User.Club?.ToString() ?? "-";
|
||||
|
||||
var clubFont = _fonts.NotoSans.CreateFont(_template.Club.Name.FontSize, FontStyle.Regular);
|
||||
var clubFont = _fonts.NotoSans.CreateFont(template.Club.Name.FontSize, FontStyle.Regular);
|
||||
|
||||
x.DrawText(new RichTextOptions(clubFont)
|
||||
{
|
||||
HorizontalAlignment = HorizontalAlignment.Right,
|
||||
VerticalAlignment = VerticalAlignment.Top,
|
||||
FallbackFontFamilies = _fonts.FallBackFonts,
|
||||
Origin = new(_template.Club.Name.Pos.X + 50, _template.Club.Name.Pos.Y - 8)
|
||||
Origin = new(template.Club.Name.Pos.X + 50, template.Club.Name.Pos.Y - 8)
|
||||
},
|
||||
clubName,
|
||||
Brushes.Solid(_template.Club.Name.Color),
|
||||
Brushes.Solid(template.Club.Name.Color),
|
||||
outlinePen);
|
||||
}
|
||||
|
||||
|
@ -863,13 +864,13 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
}
|
||||
|
||||
|
||||
if (_template.User.GlobalLevel.Show)
|
||||
if (template.User.GlobalLevel.Show)
|
||||
{
|
||||
// up to 83 width
|
||||
|
||||
var globalLevelFont = GetTruncatedFont(
|
||||
_fonts.NotoSans,
|
||||
_template.User.GlobalLevel.FontSize,
|
||||
template.User.GlobalLevel.FontSize,
|
||||
FontStyle.Bold,
|
||||
stats.Global.Level.ToString(),
|
||||
75);
|
||||
|
@ -877,15 +878,15 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
|
||||
x.DrawText(stats.Global.Level.ToString(),
|
||||
globalLevelFont,
|
||||
_template.User.GlobalLevel.Color,
|
||||
new(_template.User.GlobalLevel.Pos.X, _template.User.GlobalLevel.Pos.Y)); //level
|
||||
template.User.GlobalLevel.Color,
|
||||
new(template.User.GlobalLevel.Pos.X, template.User.GlobalLevel.Pos.Y)); //level
|
||||
}
|
||||
|
||||
if (_template.User.GuildLevel.Show)
|
||||
if (template.User.GuildLevel.Show)
|
||||
{
|
||||
var guildLevelFont = GetTruncatedFont(
|
||||
_fonts.NotoSans,
|
||||
_template.User.GuildLevel.FontSize,
|
||||
template.User.GuildLevel.FontSize,
|
||||
FontStyle.Bold,
|
||||
stats.Guild.Level.ToString(),
|
||||
75);
|
||||
|
@ -893,8 +894,8 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
|
||||
x.DrawText(stats.Guild.Level.ToString(),
|
||||
guildLevelFont,
|
||||
_template.User.GuildLevel.Color,
|
||||
new(_template.User.GuildLevel.Pos.X, _template.User.GuildLevel.Pos.Y));
|
||||
template.User.GuildLevel.Color,
|
||||
new(template.User.GuildLevel.Pos.X, template.User.GuildLevel.Pos.Y));
|
||||
}
|
||||
|
||||
|
||||
|
@ -902,53 +903,53 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
var guild = stats.Guild;
|
||||
|
||||
//xp bar
|
||||
if (_template.User.Xp.Bar.Show)
|
||||
if (template.User.Xp.Bar.Show)
|
||||
{
|
||||
var xpPercent = global.LevelXp / (float)global.RequiredXp;
|
||||
DrawXpBar(xpPercent, _template.User.Xp.Bar.Global, img);
|
||||
DrawXpBar(xpPercent, template.User.Xp.Bar.Global, img);
|
||||
xpPercent = guild.LevelXp / (float)guild.RequiredXp;
|
||||
DrawXpBar(xpPercent, _template.User.Xp.Bar.Guild, img);
|
||||
DrawXpBar(xpPercent, template.User.Xp.Bar.Guild, img);
|
||||
}
|
||||
|
||||
if (_template.User.Xp.Global.Show)
|
||||
if (template.User.Xp.Global.Show)
|
||||
{
|
||||
x.DrawText(
|
||||
new RichTextOptions(_fonts.NotoSans.CreateFont(_template.User.Xp.Global.FontSize,
|
||||
new RichTextOptions(_fonts.NotoSans.CreateFont(template.User.Xp.Global.FontSize,
|
||||
FontStyle.Bold))
|
||||
{
|
||||
HorizontalAlignment = HorizontalAlignment.Center,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Origin = new(_template.User.Xp.Global.Pos.X, _template.User.Xp.Global.Pos.Y),
|
||||
Origin = new(template.User.Xp.Global.Pos.X, template.User.Xp.Global.Pos.Y),
|
||||
},
|
||||
$"{global.LevelXp}/{global.RequiredXp}",
|
||||
Brushes.Solid(_template.User.Xp.Global.Color),
|
||||
Brushes.Solid(template.User.Xp.Global.Color),
|
||||
outlinePen);
|
||||
}
|
||||
|
||||
if (_template.User.Xp.Guild.Show)
|
||||
if (template.User.Xp.Guild.Show)
|
||||
{
|
||||
x.DrawText(
|
||||
new RichTextOptions(_fonts.NotoSans.CreateFont(_template.User.Xp.Guild.FontSize,
|
||||
new RichTextOptions(_fonts.NotoSans.CreateFont(template.User.Xp.Guild.FontSize,
|
||||
FontStyle.Bold))
|
||||
{
|
||||
HorizontalAlignment = HorizontalAlignment.Center,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Origin = new(_template.User.Xp.Guild.Pos.X, _template.User.Xp.Guild.Pos.Y)
|
||||
Origin = new(template.User.Xp.Guild.Pos.X, template.User.Xp.Guild.Pos.Y)
|
||||
},
|
||||
$"{guild.LevelXp}/{guild.RequiredXp}",
|
||||
Brushes.Solid(_template.User.Xp.Guild.Color),
|
||||
Brushes.Solid(template.User.Xp.Guild.Color),
|
||||
outlinePen);
|
||||
}
|
||||
|
||||
var rankPen = new SolidPen(Color.White, 1);
|
||||
//ranking
|
||||
if (_template.User.GlobalRank.Show)
|
||||
if (template.User.GlobalRank.Show)
|
||||
{
|
||||
var globalRankStr = stats.GlobalRanking.ToString();
|
||||
|
||||
var globalRankFont = GetTruncatedFont(
|
||||
_fonts.UniSans,
|
||||
_template.User.GlobalRank.FontSize,
|
||||
template.User.GlobalRank.FontSize,
|
||||
FontStyle.Bold,
|
||||
globalRankStr,
|
||||
68);
|
||||
|
@ -956,21 +957,21 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
x.DrawText(
|
||||
new RichTextOptions(globalRankFont)
|
||||
{
|
||||
Origin = new(_template.User.GlobalRank.Pos.X, _template.User.GlobalRank.Pos.Y)
|
||||
Origin = new(template.User.GlobalRank.Pos.X, template.User.GlobalRank.Pos.Y)
|
||||
},
|
||||
globalRankStr,
|
||||
Brushes.Solid(_template.User.GlobalRank.Color),
|
||||
Brushes.Solid(template.User.GlobalRank.Color),
|
||||
rankPen
|
||||
);
|
||||
}
|
||||
|
||||
if (_template.User.GuildRank.Show)
|
||||
if (template.User.GuildRank.Show)
|
||||
{
|
||||
var guildRankStr = stats.GuildRanking.ToString();
|
||||
|
||||
var guildRankFont = GetTruncatedFont(
|
||||
_fonts.UniSans,
|
||||
_template.User.GuildRank.FontSize,
|
||||
template.User.GuildRank.FontSize,
|
||||
FontStyle.Bold,
|
||||
guildRankStr,
|
||||
43);
|
||||
|
@ -978,25 +979,25 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
x.DrawText(
|
||||
new RichTextOptions(guildRankFont)
|
||||
{
|
||||
Origin = new(_template.User.GuildRank.Pos.X, _template.User.GuildRank.Pos.Y)
|
||||
Origin = new(template.User.GuildRank.Pos.X, template.User.GuildRank.Pos.Y)
|
||||
},
|
||||
guildRankStr,
|
||||
Brushes.Solid(_template.User.GuildRank.Color),
|
||||
Brushes.Solid(template.User.GuildRank.Color),
|
||||
rankPen
|
||||
);
|
||||
}
|
||||
|
||||
if (_template.User.Icon.Show)
|
||||
if (template.User.Icon.Show)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var toDraw = Image.Load(avatarImageData);
|
||||
if (toDraw.Size != new Size(_template.User.Icon.Size.X, _template.User.Icon.Size.Y))
|
||||
if (toDraw.Size != new Size(template.User.Icon.Size.X, template.User.Icon.Size.Y))
|
||||
toDraw.Mutate(x
|
||||
=> x.Resize(_template.User.Icon.Size.X, _template.User.Icon.Size.Y));
|
||||
=> x.Resize(template.User.Icon.Size.X, template.User.Icon.Size.Y));
|
||||
|
||||
x.DrawImage(toDraw,
|
||||
new Point(_template.User.Icon.Pos.X, _template.User.Icon.Pos.Y),
|
||||
new Point(template.User.Icon.Pos.X, template.User.Icon.Pos.Y),
|
||||
1);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -1008,14 +1009,14 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
}
|
||||
|
||||
//club image
|
||||
if (_template.Club.Icon.Show)
|
||||
if (template.Club.Icon.Show)
|
||||
await DrawClubImage(img, stats);
|
||||
|
||||
await DrawFrame(img, stats.User.UserId);
|
||||
|
||||
var outputSize = _template.OutputSize;
|
||||
var outputSize = template.OutputSize;
|
||||
if (outputSize.X != img.Width || outputSize.Y != img.Height)
|
||||
img.Mutate(x => x.Resize(_template.OutputSize.X, _template.OutputSize.Y));
|
||||
img.Mutate(x => x.Resize(template.OutputSize.X, template.OutputSize.Y));
|
||||
|
||||
var imageFormat = img.Metadata.DecodedImageFormat;
|
||||
var output = ((Stream)await img.ToStreamAsync(imageFormat), imageFormat);
|
||||
|
@ -1382,7 +1383,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
|
|||
}
|
||||
}
|
||||
|
||||
public sealed class XpTemplateService : IEService, IReadyExecutor
|
||||
public sealed class XpTemplateService : INService, IReadyExecutor
|
||||
{
|
||||
private const string XP_TEMPLATE_PATH = "./data/xp_template.json";
|
||||
|
||||
|
@ -1438,8 +1439,4 @@ public sealed class XpTemplateService : IEService, IReadyExecutor
|
|||
|
||||
public XpTemplate GetTemplate()
|
||||
=> _template;
|
||||
}
|
||||
|
||||
public sealed class ReadyXpTempalte(XpTemplate template)
|
||||
{
|
||||
}
|
Loading…
Add table
Reference in a new issue