From c1d1c612be3076daeb93a17794a56566a78b7ca2 Mon Sep 17 00:00:00 2001 From: 13xforever Date: Fri, 3 Apr 2020 18:46:31 +0500 Subject: [PATCH] tweak mc import to cover all available games --- CompatBot/Commands/CompatList.cs | 31 ++++-- CompatBot/Commands/Sudo.Fix.cs | 19 ++++ CompatBot/Database/ThumbnailDb.cs | 11 ++ CompatBot/Utils/Extensions/StringUtils.cs | 11 +- metacritic_ps3.json | 124 +++++++++++++++++++++- 5 files changed, 182 insertions(+), 14 deletions(-) diff --git a/CompatBot/Commands/CompatList.cs b/CompatBot/Commands/CompatList.cs index 7f415160..ddc7f26c 100644 --- a/CompatBot/Commands/CompatList.cs +++ b/CompatBot/Commands/CompatList.cs @@ -508,10 +508,28 @@ namespace CompatBot.Commands } var json = File.ReadAllText(scoreJson); - var scoreList = JsonConvert.DeserializeObject(json); - Config.Log.Debug($"Importing {scoreList.Length} Metacritic items"); + var scoreList = JsonConvert.DeserializeObject>(json); + Config.Log.Debug($"Importing {scoreList.Count} Metacritic items"); + var duplicates = new List(); + duplicates.AddRange( + scoreList.Where(i => i.Title.StartsWith("Disney") || i.Title.StartsWith("DreamWorks") || i.Title.StartsWith("PlayStation")) + .Select(i => i.WithTitle(i.Title.Split(' ', 2)[1])) + ); + duplicates.AddRange( + scoreList.Where(i => i.Title.Contains("A Telltale Game")) + .Select(i => i.WithTitle(i.Title.Substring(0, i.Title.IndexOf("A Telltale Game") - 1).TrimEnd(' ', '-', ':'))) + ); + duplicates.AddRange( + scoreList.Where(i => i.Title.StartsWith("MLB ")) + .Select(i => i.WithTitle($"Major League Baseball {i.Title[4..]}")) + ); + duplicates.AddRange( + scoreList.Where(i => i.Title.Contains("HAWX")) + .Select(i => i.WithTitle(i.Title.Replace("HAWX", "H.A.W.X"))) + ); + using var db = new ThumbnailDb(); - foreach (var mcScore in scoreList.Where(s => s.CriticScore.HasValue || s.UserScore.HasValue)) + foreach (var mcScore in scoreList.Where(s => s.CriticScore > 0 || s.UserScore > 0)) { if (Config.Cts.IsCancellationRequested) return; @@ -526,13 +544,8 @@ namespace CompatBot.Commands item.Notes = mcScore.Notes; } await db.SaveChangesAsync().ConfigureAwait(false); - + var title = mcScore.Title; - if (title.StartsWith("Disney*Pixar") || title.StartsWith("DreamWorks")) - title = title.Split(' ', 2)[1]; - else if (title.IndexOf("A Telltale Game") > 0) - title = title.Substring(0, title.IndexOf("A Telltale Game") - 1).TrimEnd(' ', '-', ':'); - var matches = db.Thumbnail .Where(t => t.MetacriticId == null) .AsEnumerable() diff --git a/CompatBot/Commands/Sudo.Fix.cs b/CompatBot/Commands/Sudo.Fix.cs index 5249418a..22b21187 100644 --- a/CompatBot/Commands/Sudo.Fix.cs +++ b/CompatBot/Commands/Sudo.Fix.cs @@ -109,6 +109,25 @@ namespace CompatBot.Commands } } + [Command("title_marks"), Aliases("trademarks", "tms")] + [Description("Strips trade marks and similar cruft from game titles in local database")] + public async Task TitleMarks(CommandContext ctx) + { + var changed = 0; + using var db = new ThumbnailDb(); + foreach (var thumb in db.Thumbnail) + { + var newTitle = thumb.Name.StripMarks(); + if (newTitle != thumb.Name) + { + changed++; + thumb.Name = newTitle; + } + } + await db.SaveChangesAsync(); + await ctx.RespondAsync($"Fixed {changed} title{(changed == 1 ? "" : "s")}").ConfigureAwait(false); + } + public static async Task FixChannelMentionAsync(CommandContext ctx, string msg) { if (string.IsNullOrEmpty(msg)) diff --git a/CompatBot/Database/ThumbnailDb.cs b/CompatBot/Database/ThumbnailDb.cs index b1248d20..c8d99d58 100644 --- a/CompatBot/Database/ThumbnailDb.cs +++ b/CompatBot/Database/ThumbnailDb.cs @@ -105,5 +105,16 @@ namespace CompatBot.Database public byte? CriticScore { get; set; } public byte? UserScore { get; set; } public string Notes { get; set; } + + public Metacritic WithTitle(string title) + { + return new Metacritic + { + Title = title, + CriticScore = CriticScore, + UserScore = UserScore, + Notes = Notes, + }; + } } } diff --git a/CompatBot/Utils/Extensions/StringUtils.cs b/CompatBot/Utils/Extensions/StringUtils.cs index 9977cb73..7983cb15 100644 --- a/CompatBot/Utils/Extensions/StringUtils.cs +++ b/CompatBot/Utils/Extensions/StringUtils.cs @@ -39,10 +39,13 @@ namespace CompatBot.Utils public static string StripMarks(this string str) { - return str?.Replace("(R)", "", StringComparison.InvariantCultureIgnoreCase) - .Replace("®", "") - .Replace("(TM)", "", StringComparison.InvariantCultureIgnoreCase) - .Replace("™", ""); + return str?.Replace("(R)", " ", StringComparison.InvariantCultureIgnoreCase) + .Replace("®", " ") + .Replace("(TM)", " ", StringComparison.InvariantCultureIgnoreCase) + .Replace("™", " ") + .Replace(" ", " ") + .Replace(" : ", ": ") + .Trim(); } public static string StripQuotes(this string str) diff --git a/metacritic_ps3.json b/metacritic_ps3.json index 74ce209e..fc9687f5 100644 --- a/metacritic_ps3.json +++ b/metacritic_ps3.json @@ -453,6 +453,11 @@ "UserScore": 53, "ReleaseDate": "2014-07-08" }, + { + "Title": "Another World", + "UserScore": 53, + "ReleaseDate": "2014-07-08" + }, { "Title": "Apache: Air Assault", "CriticScore": 66, @@ -909,6 +914,11 @@ "UserScore": 79, "ReleaseDate": "2016-08-30" }, + { + "Title": "Attack on Titan - Wings of Freedom", + "UserScore": 79, + "ReleaseDate": "2016-08-30" + }, { "Title": "Auditorium HD", "CriticScore": 79, @@ -4730,6 +4740,11 @@ "UserScore": 70, "ReleaseDate": "2011-09-13" }, + { + "Title": "Elemental Monster: Online Card Game", + "UserScore": 70, + "ReleaseDate": "2011-09-13" + }, { "Title": "Elevator Action Deluxe", "CriticScore": 54, @@ -5175,6 +5190,11 @@ "UserScore": 73, "ReleaseDate": "2014-09-16" }, + { + "Title": "Fibbage", + "UserScore": 73, + "ReleaseDate": "2014-09-16" + }, { "Title": "FIFA 14", "CriticScore": 86, @@ -5629,6 +5649,7 @@ }, { "Title": "Geometry Wars 3: Dimensions Evolved", + "UserScore": 80, "ReleaseDate": "2015-03-31" }, { @@ -7070,6 +7091,11 @@ "UserScore": 69, "ReleaseDate": "2012-02-07" }, + { + "Title": "Jak 3", + "UserScore": 69, + "ReleaseDate": "2012-02-07" + }, { "Title": "Jak and Daxter Collection", "CriticScore": 81, @@ -7086,6 +7112,11 @@ "UserScore": 66, "ReleaseDate": "2012-02-07" }, + { + "Title": "Jak II", + "UserScore": 66, + "ReleaseDate": "2012-02-07" + }, { "Title": "JAM Live Music Arcade", "ReleaseDate": "2012-05-15" @@ -7228,6 +7259,14 @@ }, { "Title": "Jurassic Park: The Game - Episode 1: The Intruder", + "CriticScore": 53, + "UserScore": 47, + "ReleaseDate": "2016-03-07" + }, + { + "Title": "Jurassic Park: The Game - Episode 1", + "CriticScore": 53, + "UserScore": 47, "ReleaseDate": "2016-03-07" }, { @@ -8458,6 +8497,11 @@ "CriticScore": 53, "ReleaseDate": "2011-03-25" }, + { + "Title": "Mayhem", + "CriticScore": 53, + "ReleaseDate": "2011-03-25" + }, { "Title": "Medal of Honor", "CriticScore": 75, @@ -8636,10 +8680,19 @@ "UserScore": 68, "ReleaseDate": "2010-12-21" }, + { + "Title": "NEOGEO STATION Metal Slug", + "UserScore": 68, + "ReleaseDate": "2010-12-21" + }, { "Title": "Metal Slug 3", "ReleaseDate": "2015-03-24" }, + { + "Title": "NEOGEO STATION Metal Slug 3", + "ReleaseDate": "2015-03-24" + }, { "Title": "Metro: Last Light", "CriticScore": 80, @@ -9897,6 +9950,11 @@ "UserScore": 79, "ReleaseDate": "2015-04-22" }, + { + "Title": "Oddworld: New \u0027n\u0027 Tasty", + "UserScore": 79, + "ReleaseDate": "2015-04-22" + }, { "Title": "Oddworld: Munch\u0027s Oddysee HD", "UserScore": 70, @@ -10036,7 +10094,7 @@ "ReleaseDate": "2010-11-23" }, { - "Title": "Pac-Man Championship Edition DX \u002B", + "Title": "Pac-Man Championship Edition DX\u002B", "UserScore": 76, "ReleaseDate": "2013-09-25" }, @@ -10380,6 +10438,11 @@ "UserScore": 74, "ReleaseDate": "2013-09-02" }, + { + "Title": "Port Royale 3 Gold Edition", + "UserScore": 74, + "ReleaseDate": "2013-09-02" + }, { "Title": "Port Royale 3: Pirates and Merchants", "UserScore": 74, @@ -10630,6 +10693,12 @@ "UserScore": 75, "ReleaseDate": "2010-06-01" }, + { + "Title": "Pure Football", + "CriticScore": 46, + "UserScore": 75, + "ReleaseDate": "2010-06-01" + }, { "Title": "Puzzle Agent", "CriticScore": 66, @@ -11062,6 +11131,11 @@ "UserScore": 82, "ReleaseDate": "2016-01-19" }, + { + "Title": "Resident Evil 0", + "UserScore": 82, + "ReleaseDate": "2016-01-19" + }, { "Title": "Resident Evil 4 HD", "CriticScore": 84, @@ -11150,6 +11224,11 @@ "UserScore": 81, "ReleaseDate": "2015-01-20" }, + { + "Title": "Resident Evil", + "UserScore": 81, + "ReleaseDate": "2015-01-20" + }, { "Title": "Resident Evil: Chronicles HD Collection", "CriticScore": 70, @@ -12176,6 +12255,11 @@ "UserScore": 51, "ReleaseDate": "2015-09-20" }, + { + "Title": "Skylanders SuperChargers Portal Owner's Pack", + "UserScore": 51, + "ReleaseDate": "2015-09-20" + }, { "Title": "Skylanders Swap Force", "CriticScore": 83, @@ -12344,6 +12428,16 @@ "UserScore": 69, "ReleaseDate": "2014-07-01" }, + { + "Title": "Sniper Elite 3", + "UserScore": 69, + "ReleaseDate": "2014-07-01" + }, + { + "Title": "Sniper Elite 3 Ultimate Edition", + "UserScore": 69, + "ReleaseDate": "2014-07-01" + }, { "Title": "Sniper Elite V2", "CriticScore": 70, @@ -13070,6 +13164,12 @@ "UserScore": 72, "ReleaseDate": "2007-05-02" }, + { + "Title": "Super Rub\u0027a\u0027Dub", + "CriticScore": 49, + "UserScore": 72, + "ReleaseDate": "2007-05-02" + }, { "Title": "Super Sidekicks", "ReleaseDate": "2010-12-21" @@ -13833,6 +13933,11 @@ "UserScore": 73, "ReleaseDate": "2012-04-10" }, + { + "Title": "Pinball Arcade", + "UserScore": 73, + "ReleaseDate": "2012-04-10" + }, { "Title": "The Pinball Arcade: Table Pack 1 - Medieval Madness and The Machine: Bride of Pin-Bot", "ReleaseDate": "2012-06-12" @@ -14378,6 +14483,11 @@ "UserScore": 71, "ReleaseDate": "2012-11-06" }, + { + "Title": "ToeJam and Earl", + "UserScore": 71, + "ReleaseDate": "2012-11-06" + }, { "Title": "ToeJam \u0026 Earl in Panic on Funkotron", "ReleaseDate": "2012-11-06" @@ -14995,6 +15105,12 @@ "UserScore": 66, "ReleaseDate": "2012-11-28" }, + { + "Title": "Under Defeat HD: Deluxe Edition", + "CriticScore": 73, + "UserScore": 66, + "ReleaseDate": "2012-11-28" + }, { "Title": "Under Night In-Birth Exe:Late", "CriticScore": 80, @@ -15393,6 +15509,12 @@ "UserScore": 43, "ReleaseDate": "2012-04-03" }, + { + "Title": "Wheels of Destruction", + "CriticScore": 49, + "UserScore": 43, + "ReleaseDate": "2012-04-03" + }, { "Title": "Wheels of Destruction: World Tour - Moscovian Mayhem", "ReleaseDate": "2012-06-12"