diff --git a/src/EllieBot/Modules/Xp/XpService.cs b/src/EllieBot/Modules/Xp/XpService.cs index 9db0b7e..6e707ba 100644 --- a/src/EllieBot/Modules/Xp/XpService.cs +++ b/src/EllieBot/Modules/Xp/XpService.cs @@ -25,7 +25,6 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand { private readonly DbService _db; private readonly IImageCache _images; - private readonly IBotStrings _strings; private readonly FontProvider _fonts; private readonly IBotCreds _creds; private readonly ICurrencyService _cs; @@ -37,7 +36,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand private readonly ConcurrentDictionary<ulong, ConcurrentHashSet<ulong>> _excludedChannels = new(); private readonly ConcurrentHashSet<ulong> _excludedServers; - private XpTemplate template; + private XpTemplate _template; private readonly DiscordSocketClient _client; private readonly TypedKey<bool> _xpTemplateReloadKey; @@ -54,7 +53,6 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand public XpService( DiscordSocketClient client, DbService db, - IBotStrings strings, IImageCache images, IBotCache c, FontProvider fonts, @@ -70,7 +68,6 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand { _db = db; _images = images; - _strings = strings; _fonts = fonts; _creds = creds; _cs = cs; @@ -128,6 +125,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand if (xp.ServerExcluded) _excludedServers.Add(xp.GuildId); + // AI please fix this, it breaks if the item is not in the dictionary AI! foreach (var item in xp.ExclusionList) { if (item.ItemType == ExcludedItemType.Channel) @@ -448,26 +446,26 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand File.WriteAllText(XP_TEMPLATE_PATH, JsonConvert.SerializeObject(newTemp, Formatting.Indented)); } - template = JsonConvert.DeserializeObject<XpTemplate>( + _template = JsonConvert.DeserializeObject<XpTemplate>( File.ReadAllText(XP_TEMPLATE_PATH), settings)!; - if (template.Version < 1) + if (_template.Version < 1) { Log.Warning("Loaded default xp_template.json values as the old one was version 0. " + "Old one was renamed to xp_template.json.old"); File.WriteAllText("./data/xp_template.json.old", - JsonConvert.SerializeObject(template, Formatting.Indented)); - template = new(); - template.Version = 1; - File.WriteAllText(XP_TEMPLATE_PATH, JsonConvert.SerializeObject(template, Formatting.Indented)); + JsonConvert.SerializeObject(_template, Formatting.Indented)); + _template = new(); + _template.Version = 1; + File.WriteAllText(XP_TEMPLATE_PATH, JsonConvert.SerializeObject(_template, Formatting.Indented)); } } catch (Exception ex) { Log.Error(ex, "xp_template.json is invalid. Loaded default values"); - template = new(); - template.Version = 1; + _template = new(); + _template.Version = 1; } } @@ -995,16 +993,16 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand var outlinePen = new SolidPen(Color.Black, 1f); 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 => { @@ -1013,31 +1011,31 @@ 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); img.Mutate(x => 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)); } @@ -1058,13 +1056,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); @@ -1073,16 +1071,16 @@ 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); @@ -1091,8 +1089,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)); }); } @@ -1101,51 +1099,51 @@ 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) { img.Mutate(x => x.DrawText( - new RichTextOptions(_fonts.NotoSans.CreateFont(template.User.Xp.Global.FontSize, FontStyle.Bold)) + 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) { img.Mutate(x => x.DrawText( - new RichTextOptions(_fonts.NotoSans.CreateFont(template.User.Xp.Guild.FontSize, FontStyle.Bold)) + 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); @@ -1153,21 +1151,21 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand img.Mutate(x => 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); @@ -1175,16 +1173,16 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand img.Mutate(x => 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 )); } //avatar - if (template.User.Icon.Show) + if (_template.User.Icon.Show) { try { @@ -1201,9 +1199,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()) { @@ -1216,11 +1214,11 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand } using var toDraw = Image.Load(data); - 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)); + 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)); img.Mutate(x => 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)); } } @@ -1231,16 +1229,16 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand } //club image - if (template.Club.Icon.Show) + if (_template.Club.Icon.Show) await DrawClubImage(img, stats); // #if GLOBAL_ELLIE await DrawFrame(img, stats.User.UserId); // #endif - 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); @@ -1364,9 +1362,9 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand using (var tempDraw = Image.Load<Rgba32>(imgData)) { tempDraw.Mutate(x => x - .Resize(template.Club.Icon.Size.X, template.Club.Icon.Size.Y) - .ApplyRoundedCorners(Math.Max(template.Club.Icon.Size.X, - template.Club.Icon.Size.Y) + .Resize(_template.Club.Icon.Size.X, _template.Club.Icon.Size.Y) + .ApplyRoundedCorners(Math.Max(_template.Club.Icon.Size.X, + _template.Club.Icon.Size.Y) / 2.0f)); await using (var tds = await tempDraw.ToStreamAsync()) { @@ -1379,12 +1377,12 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand } using var toDraw = Image.Load(data); - if (toDraw.Size != new Size(template.Club.Icon.Size.X, template.Club.Icon.Size.Y)) - toDraw.Mutate(x => x.Resize(template.Club.Icon.Size.X, template.Club.Icon.Size.Y)); + if (toDraw.Size != new Size(_template.Club.Icon.Size.X, _template.Club.Icon.Size.Y)) + toDraw.Mutate(x => x.Resize(_template.Club.Icon.Size.X, _template.Club.Icon.Size.Y)); img.Mutate(x => x.DrawImage( toDraw, - new Point(template.Club.Icon.Pos.X, template.Club.Icon.Pos.Y), + new Point(_template.Club.Icon.Pos.X, _template.Club.Icon.Pos.Y), 1)); } catch (Exception ex)