From 0e701ed3ad234b2c939f2f3792e9d0631b522a33 Mon Sep 17 00:00:00 2001 From: Dai Date: Sat, 31 Aug 2024 04:13:59 -0400 Subject: [PATCH] 08/31/24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Make MysteryMonModule don't show any info on the embed about the receiving Pokémon. - Added specieimg to the convert command --- .../Commands/Bots/CloneModule.cs | 4 ++-- .../Commands/Bots/MysteryEggModule.cs | 2 +- .../Commands/Bots/MysteryMonModule.cs | 6 +++--- .../Commands/Bots/SpecialRequestModule.cs | 4 ++-- .../Commands/Bots/TradeModule.cs | 8 ++++---- .../Commands/Management/TradeStartModule.cs | 6 +++--- .../Helpers/AutoLegalityExtensionsDiscord.cs | 5 +++++ .../Helpers/DetailsExtractor.cs | 19 ++++++++++--------- .../Helpers/DiscordTradeNotifier.cs | 15 +++++++++------ SysBot.Pokemon.Discord/Helpers/EmbedHelper.cs | 12 ++++++++++-- SysBot.Pokemon.Discord/Helpers/QueueHelper.cs | 19 ++++++++++--------- SysBot.Pokemon/TradeHub/PokeTradeDetail.cs | 5 ++++- 12 files changed, 63 insertions(+), 42 deletions(-) diff --git a/SysBot.Pokemon.Discord/Commands/Bots/CloneModule.cs b/SysBot.Pokemon.Discord/Commands/Bots/CloneModule.cs index f0587a595..900b5db5b 100644 --- a/SysBot.Pokemon.Discord/Commands/Bots/CloneModule.cs +++ b/SysBot.Pokemon.Discord/Commands/Bots/CloneModule.cs @@ -28,7 +28,7 @@ public async Task CloneAsync(int code) var lgcode = Info.GetRandomLGTradeCode(); // Add to queue asynchronously - _ = QueueHelper.AddToQueueAsync(Context, code, Context.User.Username, sig, new T(), PokeRoutineType.Clone, PokeTradeType.Clone, Context.User, false, 1, 1, false, false, lgcode); + _ = QueueHelper.AddToQueueAsync(Context, code, Context.User.Username, sig, new T(), PokeRoutineType.Clone, PokeTradeType.Clone, Context.User, false, 1, 1, false, false, false, lgcode); // Immediately send a confirmation message without waiting var confirmationMessage = await ReplyAsync("Processing your clone request...").ConfigureAwait(false); @@ -63,7 +63,7 @@ public async Task CloneAsync([Summary("Trade Code")][Remainder] string code) var lgcode = Info.GetRandomLGTradeCode(); // Add to queue asynchronously - _ = QueueHelper.AddToQueueAsync(Context, tradeCode == 0 ? Info.GetRandomTradeCode(userID) : tradeCode, Context.User.Username, sig, new T(), PokeRoutineType.Clone, PokeTradeType.Clone, Context.User, false, 1, 1, false, false, lgcode); + _ = QueueHelper.AddToQueueAsync(Context, tradeCode == 0 ? Info.GetRandomTradeCode(userID) : tradeCode, Context.User.Username, sig, new T(), PokeRoutineType.Clone, PokeTradeType.Clone, Context.User, false, 1, 1, false, false, false, lgcode); // Immediately send a confirmation message without waiting var confirmationMessage = await ReplyAsync("Processing your clone request...").ConfigureAwait(false); diff --git a/SysBot.Pokemon.Discord/Commands/Bots/MysteryEggModule.cs b/SysBot.Pokemon.Discord/Commands/Bots/MysteryEggModule.cs index cfa96bf17..4b33ea632 100644 --- a/SysBot.Pokemon.Discord/Commands/Bots/MysteryEggModule.cs +++ b/SysBot.Pokemon.Discord/Commands/Bots/MysteryEggModule.cs @@ -209,7 +209,7 @@ private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, Req if (la.Valid) pk = clone; } - await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk, PokeRoutineType.LinkTrade, tradeType, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryEgg, lgcode, ignoreAutoOT).ConfigureAwait(false); + await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk, PokeRoutineType.LinkTrade, tradeType, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, false, isMysteryEgg, lgcode, ignoreAutoOT).ConfigureAwait(false); } private static List GenerateRandomPictocodes(int count) diff --git a/SysBot.Pokemon.Discord/Commands/Bots/MysteryMonModule.cs b/SysBot.Pokemon.Discord/Commands/Bots/MysteryMonModule.cs index a8813c83c..175621b4a 100644 --- a/SysBot.Pokemon.Discord/Commands/Bots/MysteryMonModule.cs +++ b/SysBot.Pokemon.Discord/Commands/Bots/MysteryMonModule.cs @@ -82,7 +82,7 @@ public async Task TradeRandomPokemonAsync([Summary("Trade Code")] int code) } var sig = Context.User.GetFavor(); - await AddTradeToQueueAsync(code, Context.User.Username, pk, sig, Context.User).ConfigureAwait(false); + await AddTradeToQueueAsync(code, Context.User.Username, pk, sig, Context.User, isMysteryMon: true).ConfigureAwait(false); if (Context.Message is IUserMessage userMessage) { @@ -342,7 +342,7 @@ private static object GetPersonalTable(GameVersion gameVersion) }; } - private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, RequestSignificance sig, SocketUser usr, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isHiddenTrade = false) + private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, RequestSignificance sig, SocketUser usr, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isHiddenTrade = false, bool isMysteryMon = false) { var la = new LegalityAnalysis(pk); if (!la.Valid) @@ -357,7 +357,7 @@ private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, Req return; } - await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk, PokeRoutineType.LinkTrade, PokeTradeType.Specific, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade).ConfigureAwait(false); + await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk, PokeRoutineType.LinkTrade, PokeTradeType.Specific, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryMon).ConfigureAwait(false); } } } diff --git a/SysBot.Pokemon.Discord/Commands/Bots/SpecialRequestModule.cs b/SysBot.Pokemon.Discord/Commands/Bots/SpecialRequestModule.cs index f32d34960..1605cfcb7 100644 --- a/SysBot.Pokemon.Discord/Commands/Bots/SpecialRequestModule.cs +++ b/SysBot.Pokemon.Discord/Commands/Bots/SpecialRequestModule.cs @@ -321,7 +321,7 @@ private static DateOnly GenerateRandomDateInRange(DateOnly startDate, DateOnly e return startDate.AddDays(randomDays); } - private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, RequestSignificance sig, SocketUser usr, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isMysteryEgg = false, List? lgcode = null, PokeTradeType tradeType = PokeTradeType.Specific, bool ignoreAutoOT = false, bool isHiddenTrade = false) + private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, RequestSignificance sig, SocketUser usr, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isMysteryMon = false, bool isMysteryEgg = false, List? lgcode = null, PokeTradeType tradeType = PokeTradeType.Specific, bool ignoreAutoOT = false, bool isHiddenTrade = false) { lgcode ??= TradeModule.GenerateRandomPictocodes(3); #pragma warning disable CS8604 // Possible null reference argument. @@ -353,7 +353,7 @@ private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, Req if (la.Valid) pk = clone; } - await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk, PokeRoutineType.LinkTrade, tradeType, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryEgg, lgcode, ignoreAutoOT).ConfigureAwait(false); + await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk, PokeRoutineType.LinkTrade, tradeType, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryMon, isMysteryEgg, lgcode, ignoreAutoOT).ConfigureAwait(false); } } } diff --git a/SysBot.Pokemon.Discord/Commands/Bots/TradeModule.cs b/SysBot.Pokemon.Discord/Commands/Bots/TradeModule.cs index fd232a9e1..1058d1083 100644 --- a/SysBot.Pokemon.Discord/Commands/Bots/TradeModule.cs +++ b/SysBot.Pokemon.Discord/Commands/Bots/TradeModule.cs @@ -48,7 +48,7 @@ public async Task FixAdOT() var lgcode = Info.GetRandomLGTradeCode(); var sig = Context.User.GetFavor(); - await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, new T(), PokeRoutineType.FixOT, PokeTradeType.FixOT, Context.User, false, 1, 1, false, false, lgcode).ConfigureAwait(false); + await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, new T(), PokeRoutineType.FixOT, PokeTradeType.FixOT, Context.User, false, 1, 1, false, false, false, lgcode).ConfigureAwait(false); if (Context.Message is IUserMessage userMessage) { _ = DeleteMessagesAfterDelayAsync(userMessage, null, 2); @@ -74,7 +74,7 @@ public async Task FixAdOT([Summary("Trade Code")] int code) var sig = Context.User.GetFavor(); var lgcode = Info.GetRandomLGTradeCode(); - await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, new T(), PokeRoutineType.FixOT, PokeTradeType.FixOT, Context.User, false, 1, 1, false, false, lgcode).ConfigureAwait(false); + await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, new T(), PokeRoutineType.FixOT, PokeTradeType.FixOT, Context.User, false, 1, 1, false, false, false, lgcode).ConfigureAwait(false); if (Context.Message is IUserMessage userMessage) { _ = DeleteMessagesAfterDelayAsync(userMessage, null, 2); @@ -1508,7 +1508,7 @@ private static string ConvertMasterBall(string content) return string.Join('\n', lines); } - private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, RequestSignificance sig, SocketUser usr, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isHiddenTrade = false, bool isMysteryEgg = false, List? lgcode = null, PokeTradeType tradeType = PokeTradeType.Specific, bool ignoreAutoOT = false, bool setEdited = false) + private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, RequestSignificance sig, SocketUser usr, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isHiddenTrade = false, bool isMysteryMon = false, bool isMysteryEgg = false, List? lgcode = null, PokeTradeType tradeType = PokeTradeType.Specific, bool ignoreAutoOT = false, bool setEdited = false) { lgcode ??= TradeModule.GenerateRandomPictocodes(3); if (pk is not null && !pk.CanBeTraded()) @@ -1569,7 +1569,7 @@ private async Task AddTradeToQueueAsync(int code, string trainerName, T? pk, Req la = new LegalityAnalysis(clone); if (la.Valid) pk = clone; } - await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk!, PokeRoutineType.LinkTrade, tradeType, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryEgg, lgcode, ignoreAutoOT: ignoreAutoOT, setEdited: setEdited, isNonNative: isNonNative).ConfigureAwait(false); + await QueueHelper.AddToQueueAsync(Context, code, trainerName, sig, pk!, PokeRoutineType.LinkTrade, tradeType, usr, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryMon, isMysteryEgg, lgcode, ignoreAutoOT: ignoreAutoOT, setEdited: setEdited, isNonNative: isNonNative).ConfigureAwait(false); } public static List GenerateRandomPictocodes(int count) diff --git a/SysBot.Pokemon.Discord/Commands/Management/TradeStartModule.cs b/SysBot.Pokemon.Discord/Commands/Management/TradeStartModule.cs index c22c43d82..4b2f06d8a 100644 --- a/SysBot.Pokemon.Discord/Commands/Management/TradeStartModule.cs +++ b/SysBot.Pokemon.Discord/Commands/Management/TradeStartModule.cs @@ -94,7 +94,7 @@ async void Logger(PokeRoutineExecutorBase bot, PokeTradeDetail detail) ballImgUrl = $"https://raw.githubusercontent.com/bdawg1989/sprites/main/AltBallImg/28x28/{ballName}.png"; } - string tradeTitle = detail.IsMysteryEgg ? "✨ Mystery Egg" : detail.Type switch + string tradeTitle = detail.IsMysteryMon ? "✨ Mystery Pokémon" : detail.IsMysteryEgg ? "✨ Mystery Egg" : detail.Type switch { PokeTradeType.Clone => "Cloned Pokémon", PokeTradeType.Dump => "Pokémon Dump", @@ -103,7 +103,7 @@ async void Logger(PokeRoutineExecutorBase bot, PokeTradeDetail detail) _ => speciesName }; - string embedImageUrl = detail.IsMysteryEgg ? "https://raw.githubusercontent.com/bdawg1989/sprites/main/mysteryegg3.png" : detail.Type switch + string embedImageUrl = detail.IsMysteryMon ? "https://i.imgur.com/FdESYAv.png" : detail.IsMysteryEgg ? "https://raw.githubusercontent.com/bdawg1989/sprites/main/mysteryegg3.png" : detail.Type switch { PokeTradeType.Clone => "https://raw.githubusercontent.com/bdawg1989/sprites/main/clonepod.png", PokeTradeType.Dump => "https://raw.githubusercontent.com/bdawg1989/sprites/main/AltBallImg/128x128/dumpball.png", @@ -116,7 +116,7 @@ async void Logger(PokeRoutineExecutorBase bot, PokeTradeDetail detail) string footerText = detail.Type == PokeTradeType.Clone || detail.Type == PokeTradeType.Dump || detail.Type == PokeTradeType.Seed || detail.Type == PokeTradeType.FixOT ? "Initializing trade now." - : $"Initializing trade now. Enjoy your {(detail.IsMysteryEgg ? "✨ Mystery Egg" : speciesName)}!"; + : $"Initializing trade now. Enjoy your {(detail.IsMysteryMon ? "✨ Mystery Pokémon" : detail.IsMysteryEgg ? "✨ Mystery Egg" : speciesName)}!"; var embed = new EmbedBuilder() .WithColor(new DiscordColor(r, g, b)) diff --git a/SysBot.Pokemon.Discord/Helpers/AutoLegalityExtensionsDiscord.cs b/SysBot.Pokemon.Discord/Helpers/AutoLegalityExtensionsDiscord.cs index d2ead9225..6b165cfe5 100644 --- a/SysBot.Pokemon.Discord/Helpers/AutoLegalityExtensionsDiscord.cs +++ b/SysBot.Pokemon.Discord/Helpers/AutoLegalityExtensionsDiscord.cs @@ -3,6 +3,7 @@ using PKHeX.Core; using PKHeX.Core.AutoMod; using SysBot.Base; +using SysBot.Pokemon.Helpers; using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -40,6 +41,9 @@ public static async Task ReplyWithLegalizedSetAsync(this ISocketMessageChannel c await channel.SendMessageAsync(imsg).ConfigureAwait(false); return; } + // Specie Img + bool canGmax = pkm is PK8 pk8 && pk8.CanGigantamax; + var speciesImage = TradeExtensions.PokeImg(pkm, canGmax, false); // Create RegenTemplate from the legalized PKM var regenTemplate = new RegenTemplate(pkm); @@ -58,6 +62,7 @@ public static async Task ReplyWithLegalizedSetAsync(this ISocketMessageChannel c // Create embed var embed = new EmbedBuilder() + .WithThumbnailUrl(speciesImage) .WithTitle($"Legalized RegenTemplate for {speciesForm}") .WithDescription($"Result: {result}\nEncounter: {la.EncounterOriginal.Name}") .AddField("RegenTemplate", $"```{regenText}```") diff --git a/SysBot.Pokemon.Discord/Helpers/DetailsExtractor.cs b/SysBot.Pokemon.Discord/Helpers/DetailsExtractor.cs index 482c39dea..aae8d767c 100644 --- a/SysBot.Pokemon.Discord/Helpers/DetailsExtractor.cs +++ b/SysBot.Pokemon.Discord/Helpers/DetailsExtractor.cs @@ -38,10 +38,10 @@ public static void AddNormalTradeFields(EmbedBuilder embedBuilder, EmbedData emb embedBuilder.AddField("**Moves:**", embedData.MovesDisplay, inline: true); } - public static void AddSpecialTradeFields(EmbedBuilder embedBuilder, bool isMysteryEgg, bool isSpecialRequest, bool isCloneRequest, bool isFixOTRequest, string trainerMention) + public static void AddSpecialTradeFields(EmbedBuilder embedBuilder, bool isMysteryMon, bool isMysteryEgg, bool isSpecialRequest, bool isCloneRequest, bool isFixOTRequest, string trainerMention) { string specialDescription = $"**Trainer:** {trainerMention}\n" + - (isMysteryEgg ? "Mystery Egg" : isSpecialRequest ? "Special Request" : isCloneRequest ? "Clone Request" : isFixOTRequest ? "FixOT Request" : "Dump Request"); + (isMysteryMon ? "Mystery Pokémon" : isMysteryEgg ? "Mystery Egg" : isSpecialRequest ? "Special Request" : isCloneRequest ? "Clone Request" : isFixOTRequest ? "FixOT Request" : "Dump Request"); embedBuilder.AddField("\u200B", specialDescription, inline: false); } @@ -57,7 +57,7 @@ public static void AddThumbnails(EmbedBuilder embedBuilder, bool isCloneRequest, } } - public static EmbedData ExtractPokemonDetails(T pk, SocketUser user, bool isMysteryEgg, bool isCloneRequest, bool isDumpRequest, bool isFixOTRequest, bool isSpecialRequest, bool isBatchTrade, int batchTradeNumber, int totalBatchTrades) + public static EmbedData ExtractPokemonDetails(T pk, SocketUser user, bool isMysteryMon, bool isMysteryEgg, bool isCloneRequest, bool isDumpRequest, bool isFixOTRequest, bool isSpecialRequest, bool isBatchTrade, int batchTradeNumber, int totalBatchTrades) { var strings = GameInfo.GetStrings(1); var embedData = new EmbedData @@ -117,10 +117,10 @@ public static EmbedData ExtractPokemonDetails(T pk, SocketUser user, bool isMyst embedData.PokemonDisplayName = pk.IsNicknamed ? pk.Nickname : embedData.SpeciesName; // Trade title - embedData.TradeTitle = GetTradeTitle(isMysteryEgg, isCloneRequest, isDumpRequest, isFixOTRequest, isSpecialRequest, isBatchTrade, batchTradeNumber, embedData.PokemonDisplayName, pk.IsShiny); + embedData.TradeTitle = GetTradeTitle(isMysteryMon, isMysteryEgg, isCloneRequest, isDumpRequest, isFixOTRequest, isSpecialRequest, isBatchTrade, batchTradeNumber, embedData.PokemonDisplayName, pk.IsShiny); // Author name - embedData.AuthorName = GetAuthorName(user.Username, embedData.TradeTitle, isMysteryEgg, isFixOTRequest, isCloneRequest, isDumpRequest, isSpecialRequest, isBatchTrade, embedData.PokemonDisplayName, pk.IsShiny); + embedData.AuthorName = GetAuthorName(user.Username, embedData.TradeTitle, isMysteryMon, isMysteryEgg, isFixOTRequest, isCloneRequest, isDumpRequest, isSpecialRequest, isBatchTrade, embedData.PokemonDisplayName, pk.IsShiny); return embedData; } @@ -155,10 +155,10 @@ private static string GetAbilityName(T pk) return GameInfo.AbilityDataSource.FirstOrDefault(a => a.Value == pk.Ability)?.Text ?? ""; } - private static string GetAuthorName(string username, string tradeTitle, bool isMysteryEgg, bool isFixOTRequest, bool isCloneRequest, bool isDumpRequest, bool isSpecialRequest, bool isBatchTrade, string pokemonDisplayName, bool isShiny) + private static string GetAuthorName(string username, string tradeTitle, bool isMysteryMon, bool isMysteryEgg, bool isFixOTRequest, bool isCloneRequest, bool isDumpRequest, bool isSpecialRequest, bool isBatchTrade, string pokemonDisplayName, bool isShiny) { string isPkmShiny = isShiny ? "Shiny " : ""; - return isMysteryEgg || isFixOTRequest || isCloneRequest || isDumpRequest || isSpecialRequest || isBatchTrade ? + return isMysteryMon || isMysteryEgg || isFixOTRequest || isCloneRequest || isDumpRequest || isSpecialRequest || isBatchTrade ? $"{username}'s {tradeTitle}" : $"{username}'s {isPkmShiny}{pokemonDisplayName}"; } @@ -257,10 +257,11 @@ private static string GetTeraTypeString(PK9 pk9) return teraType.ToString(); } - private static string GetTradeTitle(bool isMysteryEgg, bool isCloneRequest, bool isDumpRequest, bool isFixOTRequest, bool isSpecialRequest, bool isBatchTrade, int batchTradeNumber, string pokemonDisplayName, bool isShiny) + private static string GetTradeTitle(bool isMysteryMon, bool isMysteryEgg, bool isCloneRequest, bool isDumpRequest, bool isFixOTRequest, bool isSpecialRequest, bool isBatchTrade, int batchTradeNumber, string pokemonDisplayName, bool isShiny) { string shinyEmoji = isShiny ? "✨ " : ""; - return isMysteryEgg ? "✨ Shiny Mystery Egg ✨" : + return isMysteryMon ? "✨ Mystery Pokémon ✨" : + isMysteryEgg ? "✨ Shiny Mystery Egg ✨" : isBatchTrade ? $"Batch Trade #{batchTradeNumber} - {shinyEmoji}{pokemonDisplayName}" : isFixOTRequest ? "FixOT Request" : isSpecialRequest ? "Special Request" : diff --git a/SysBot.Pokemon.Discord/Helpers/DiscordTradeNotifier.cs b/SysBot.Pokemon.Discord/Helpers/DiscordTradeNotifier.cs index 1af70197d..ef98f4935 100644 --- a/SysBot.Pokemon.Discord/Helpers/DiscordTradeNotifier.cs +++ b/SysBot.Pokemon.Discord/Helpers/DiscordTradeNotifier.cs @@ -30,7 +30,9 @@ public class DiscordTradeNotifier : IPokeTradeNotifier private bool IsMysteryEgg { get; } - public DiscordTradeNotifier(T data, PokeTradeTrainerInfo info, int code, SocketUser trader, int batchTradeNumber, int totalBatchTrades, bool isMysteryEgg, List lgcode) + private bool IsMysteryMon { get; } + + public DiscordTradeNotifier(T data, PokeTradeTrainerInfo info, int code, SocketUser trader, int batchTradeNumber, int totalBatchTrades, bool isMysteryMon, bool isMysteryEgg, List lgcode) { Data = data; Info = info; @@ -39,6 +41,7 @@ public DiscordTradeNotifier(T data, PokeTradeTrainerInfo info, int code, SocketU BatchTradeNumber = batchTradeNumber; TotalBatchTrades = totalBatchTrades; IsMysteryEgg = isMysteryEgg; + IsMysteryMon = isMysteryMon; LGCode = lgcode; } @@ -51,7 +54,7 @@ public void TradeInitialize(PokeRoutineExecutor routine, PokeTradeDetail i int language = 2; var speciesName = SpeciesName.GetSpeciesName(Data.Species, language); var batchInfo = TotalBatchTrades > 1 ? $" (Trade {BatchTradeNumber} of {TotalBatchTrades})" : ""; - var receive = Data.Species == 0 ? string.Empty : $" ({Data.Nickname})"; + var receive = IsMysteryMon ? " (Mystery Pokémon)" : (Data.Species == 0 ? string.Empty : $" ({Data.Nickname})"); if (Data is PK9) { @@ -62,7 +65,7 @@ public void TradeInitialize(PokeRoutineExecutor routine, PokeTradeDetail i message += "\n**Please stay in the trade until all batch trades are completed.**"; } - EmbedHelper.SendTradeInitializingEmbedAsync(Trader, speciesName, Code, IsMysteryEgg, message).ConfigureAwait(false); + EmbedHelper.SendTradeInitializingEmbedAsync(Trader, speciesName, Code, IsMysteryMon, IsMysteryEgg, message).ConfigureAwait(false); } else if (Data is PB7) { @@ -71,7 +74,7 @@ public void TradeInitialize(PokeRoutineExecutor routine, PokeTradeDetail i } else { - EmbedHelper.SendTradeInitializingEmbedAsync(Trader, speciesName, Code, IsMysteryEgg).ConfigureAwait(false); + EmbedHelper.SendTradeInitializingEmbedAsync(Trader, speciesName, Code, IsMysteryMon, IsMysteryEgg).ConfigureAwait(false); } } @@ -109,8 +112,8 @@ public void TradeFinished(PokeRoutineExecutor routine, PokeTradeDetail inf { OnFinish?.Invoke(routine); var tradedToUser = Data.Species; - var message = tradedToUser != 0 ? (info.IsMysteryEgg ? "Enjoy your **Mystery Egg**!" : $"Enjoy your **{(Species)tradedToUser}**!") : "Trade finished!"; - EmbedHelper.SendTradeFinishedEmbedAsync(Trader, message, Data, info.IsMysteryEgg).ConfigureAwait(false); + var message = tradedToUser != 0 ? (info.IsMysteryMon ? "Enjoy your **Mystery Pokémon**!" : info.IsMysteryEgg ? "Enjoy your **Mystery Egg**!" : $"Enjoy your **{(Species)tradedToUser}**!") : "Trade finished!"; + EmbedHelper.SendTradeFinishedEmbedAsync(Trader, message, Data, info.IsMysteryMon, info.IsMysteryEgg).ConfigureAwait(false); if (result.Species != 0 && Hub.Config.Discord.ReturnPKMs) Trader.SendPKMAsync(result, "Here's what you traded me!").ConfigureAwait(false); } diff --git a/SysBot.Pokemon.Discord/Helpers/EmbedHelper.cs b/SysBot.Pokemon.Discord/Helpers/EmbedHelper.cs index 8394bcede..1db932fb0 100644 --- a/SysBot.Pokemon.Discord/Helpers/EmbedHelper.cs +++ b/SysBot.Pokemon.Discord/Helpers/EmbedHelper.cs @@ -47,7 +47,7 @@ public static async Task SendTradeCodeEmbedAsync(IUser user, int code) await user.SendMessageAsync(embed: embed).ConfigureAwait(false); } - public static async Task SendTradeFinishedEmbedAsync(IUser user, string message, T pk, bool isMysteryEgg) + public static async Task SendTradeFinishedEmbedAsync(IUser user, string message, T pk, bool isMysteryMon, bool isMysteryEgg) where T : PKM, new() { string thumbnailUrl; @@ -56,6 +56,10 @@ public static async Task SendTradeFinishedEmbedAsync(IUser user, string messa { thumbnailUrl = "https://raw.githubusercontent.com/bdawg1989/sprites/main/mysteryegg3.png"; } + else if (isMysteryMon) + { + thumbnailUrl = "https://i.imgur.com/FdESYAv.png"; + } else { thumbnailUrl = TradeExtensions.PokeImg(pk, false, true, null); @@ -72,12 +76,16 @@ public static async Task SendTradeFinishedEmbedAsync(IUser user, string messa await user.SendMessageAsync(embed: embed).ConfigureAwait(false); } - public static async Task SendTradeInitializingEmbedAsync(IUser user, string speciesName, int code, bool isMysteryEgg, string? message = null) + public static async Task SendTradeInitializingEmbedAsync(IUser user, string speciesName, int code, bool isMysteryMon, bool isMysteryEgg, string? message = null) { if (isMysteryEgg) { speciesName = "**Mystery Egg**"; } + else if (isMysteryMon) + { + speciesName = "**Mystery Pokémon**"; + } var embed = new EmbedBuilder() .WithTitle("Loading the Trade Portal...") diff --git a/SysBot.Pokemon.Discord/Helpers/QueueHelper.cs b/SysBot.Pokemon.Discord/Helpers/QueueHelper.cs index 61815e5b1..a242bc954 100644 --- a/SysBot.Pokemon.Discord/Helpers/QueueHelper.cs +++ b/SysBot.Pokemon.Discord/Helpers/QueueHelper.cs @@ -28,7 +28,7 @@ namespace SysBot.Pokemon.Discord; private static readonly Dictionary userBatchTradeMaxDetailId = []; - public static async Task AddToQueueAsync(SocketCommandContext context, int code, string trainer, RequestSignificance sig, T trade, PokeRoutineType routine, PokeTradeType type, SocketUser trader, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isHiddenTrade = false, bool isMysteryEgg = false, List? lgcode = null, bool ignoreAutoOT = false, bool setEdited = false, bool isNonNative = false) + public static async Task AddToQueueAsync(SocketCommandContext context, int code, string trainer, RequestSignificance sig, T trade, PokeRoutineType routine, PokeTradeType type, SocketUser trader, bool isBatchTrade = false, int batchTradeNumber = 1, int totalBatchTrades = 1, bool isHiddenTrade = false, bool isMysteryMon = false, bool isMysteryEgg = false, List? lgcode = null, bool ignoreAutoOT = false, bool setEdited = false, bool isNonNative = false) { if ((uint)code > MaxTradeCode) { @@ -51,7 +51,7 @@ public static async Task AddToQueueAsync(SocketCommandContext context, int code, } } - var result = await AddToTradeQueue(context, trade, code, trainer, sig, routine, isBatchTrade ? PokeTradeType.Batch : type, trader, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryEgg, lgcode, ignoreAutoOT, setEdited, isNonNative).ConfigureAwait(false); + var result = await AddToTradeQueue(context, trade, code, trainer, sig, routine, isBatchTrade ? PokeTradeType.Batch : type, trader, isBatchTrade, batchTradeNumber, totalBatchTrades, isHiddenTrade, isMysteryMon, isMysteryEgg, lgcode, ignoreAutoOT, setEdited, isNonNative).ConfigureAwait(false); } catch (HttpException ex) { @@ -64,15 +64,15 @@ public static Task AddToQueueAsync(SocketCommandContext context, int code, strin return AddToQueueAsync(context, code, trainer, sig, trade, routine, type, context.User, ignoreAutoOT: ignoreAutoOT); } - private static async Task AddToTradeQueue(SocketCommandContext context, T pk, int code, string trainerName, RequestSignificance sig, PokeRoutineType type, PokeTradeType t, SocketUser trader, bool isBatchTrade, int batchTradeNumber, int totalBatchTrades, bool isHiddenTrade, bool isMysteryEgg = false, List? lgcode = null, bool ignoreAutoOT = false, bool setEdited = false, bool isNonNative = false) + private static async Task AddToTradeQueue(SocketCommandContext context, T pk, int code, string trainerName, RequestSignificance sig, PokeRoutineType type, PokeTradeType t, SocketUser trader, bool isBatchTrade, int batchTradeNumber, int totalBatchTrades, bool isHiddenTrade, bool isMysteryMon = false, bool isMysteryEgg = false, List? lgcode = null, bool ignoreAutoOT = false, bool setEdited = false, bool isNonNative = false) { var user = trader; var userID = user.Id; var name = user.Username; var trainer = new PokeTradeTrainerInfo(trainerName, userID); - var notifier = new DiscordTradeNotifier(pk, trainer, code, trader, batchTradeNumber, totalBatchTrades, isMysteryEgg, lgcode: lgcode); + var notifier = new DiscordTradeNotifier(pk, trainer, code, trader, batchTradeNumber, totalBatchTrades, isMysteryMon, isMysteryEgg, lgcode: lgcode); var uniqueTradeID = GenerateUniqueTradeID(); - var detail = new PokeTradeDetail(pk, trainer, notifier, t, code, sig == RequestSignificance.Favored, lgcode, batchTradeNumber, totalBatchTrades, isMysteryEgg, uniqueTradeID, ignoreAutoOT, setEdited); + var detail = new PokeTradeDetail(pk, trainer, notifier, t, code, sig == RequestSignificance.Favored, lgcode, batchTradeNumber, totalBatchTrades, isMysteryMon, isMysteryEgg, uniqueTradeID, ignoreAutoOT, setEdited); var trade = new TradeEntry(detail, userID, PokeRoutineType.LinkTrade, name, uniqueTradeID); var hub = SysCord.Runner.Hub; var Info = hub.Queues.Info; @@ -95,7 +95,7 @@ private static async Task AddToTradeQueue(SocketCommandContext } var embedData = DetailsExtractor.ExtractPokemonDetails( - pk, trader, isMysteryEgg, type == PokeRoutineType.Clone, type == PokeRoutineType.Dump, + pk, trader, isMysteryMon, isMysteryEgg, type == PokeRoutineType.Clone, type == PokeRoutineType.Dump, type == PokeRoutineType.FixOT, type == PokeRoutineType.SeedCheck, isBatchTrade, batchTradeNumber, totalBatchTrades ); @@ -103,7 +103,8 @@ private static async Task AddToTradeQueue(SocketCommandContext { (string embedImageUrl, DiscordColor embedColor) = await PrepareEmbedDetails(pk); - embedData.EmbedImageUrl = isMysteryEgg ? "https://raw.githubusercontent.com/bdawg1989/sprites/main/mysteryegg3.png" : + embedData.EmbedImageUrl = isMysteryMon ? "https://i.imgur.com/FdESYAv.png" : + isMysteryEgg ? "https://raw.githubusercontent.com/bdawg1989/sprites/main/mysteryegg3.png" : type == PokeRoutineType.Dump ? "https://raw.githubusercontent.com/bdawg1989/sprites/main/AltBallImg/128x128/dumpball.png" : type == PokeRoutineType.Clone ? "https://raw.githubusercontent.com/bdawg1989/sprites/main/clonepod.png" : type == PokeRoutineType.SeedCheck ? "https://raw.githubusercontent.com/bdawg1989/sprites/main/specialrequest.png" : @@ -143,13 +144,13 @@ private static async Task AddToTradeQueue(SocketCommandContext DetailsExtractor.AddAdditionalText(embedBuilder); - if (!isMysteryEgg && type != PokeRoutineType.Clone && type != PokeRoutineType.Dump && type != PokeRoutineType.FixOT && type != PokeRoutineType.SeedCheck) + if (!isMysteryMon && !isMysteryEgg && type != PokeRoutineType.Clone && type != PokeRoutineType.Dump && type != PokeRoutineType.FixOT && type != PokeRoutineType.SeedCheck) { DetailsExtractor.AddNormalTradeFields(embedBuilder, embedData, trader.Mention, pk); } else { - DetailsExtractor.AddSpecialTradeFields(embedBuilder, isMysteryEgg, type == PokeRoutineType.SeedCheck, type == PokeRoutineType.Clone, type == PokeRoutineType.FixOT, trader.Mention); + DetailsExtractor.AddSpecialTradeFields(embedBuilder, isMysteryMon, isMysteryEgg, type == PokeRoutineType.SeedCheck, type == PokeRoutineType.Clone, type == PokeRoutineType.FixOT, trader.Mention); } if (setEdited && Info.Hub.Config.Trade.AutoCorrectConfig.AutoCorrectEmbedIndicator) diff --git a/SysBot.Pokemon/TradeHub/PokeTradeDetail.cs b/SysBot.Pokemon/TradeHub/PokeTradeDetail.cs index 46ed96700..38cceac6a 100644 --- a/SysBot.Pokemon/TradeHub/PokeTradeDetail.cs +++ b/SysBot.Pokemon/TradeHub/PokeTradeDetail.cs @@ -61,13 +61,15 @@ namespace SysBot.Pokemon public bool IsMysteryEgg { get; } + public bool IsMysteryMon { get; } + public bool IgnoreAutoOT { get; } public bool SetEdited { get; set; } #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. - public PokeTradeDetail(TPoke pkm, PokeTradeTrainerInfo info, IPokeTradeNotifier notifier, PokeTradeType type, int code, bool favored = false, List? lgcode = null, int batchTradeNumber = 0, int totalBatchTrades = 0, bool isMysteryEgg = false, int uniqueTradeID = 0, bool ignoreAutoOT = false, bool setEdited = false) + public PokeTradeDetail(TPoke pkm, PokeTradeTrainerInfo info, IPokeTradeNotifier notifier, PokeTradeType type, int code, bool favored = false, List? lgcode = null, int batchTradeNumber = 0, int totalBatchTrades = 0, bool isMysteryMon = false, bool isMysteryEgg = false, int uniqueTradeID = 0, bool ignoreAutoOT = false, bool setEdited = false) #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. { ID = Interlocked.Increment(ref CreatedCount) % 3000; @@ -84,6 +86,7 @@ public PokeTradeDetail(TPoke pkm, PokeTradeTrainerInfo info, IPokeTradeNotifier< BatchTradeNumber = batchTradeNumber; TotalBatchTrades = totalBatchTrades; IsMysteryEgg = isMysteryEgg; + IsMysteryMon = isMysteryMon; UniqueTradeID = uniqueTradeID; IgnoreAutoOT = ignoreAutoOT; SetEdited = setEdited;