From 612435eb0936a64bd75a1f258cbdcef806201dc4 Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Sun, 16 Jan 2022 22:15:11 +0100 Subject: [PATCH] Added more item details in getitem --- MinecraftDiscordBot/ConnectedComputer.cs | 4 +++- MinecraftDiscordBot/Program.cs | 4 ++-- MinecraftDiscordBot/RefinedStorageService.cs | 22 +++++++++++++------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/MinecraftDiscordBot/ConnectedComputer.cs b/MinecraftDiscordBot/ConnectedComputer.cs index 5022156..708be79 100644 --- a/MinecraftDiscordBot/ConnectedComputer.cs +++ b/MinecraftDiscordBot/ConnectedComputer.cs @@ -78,7 +78,7 @@ public class ConnectedComputer : CommandRouter, ITaskWaitSource { public override Task RootAnswer(SocketUserMessage message, CancellationToken ct) => Task.FromResult(ResponseType.AsString("The Minecraft server is connected!")); public override Task FallbackHandler(SocketUserMessage message, string method, string[] parameters, CancellationToken ct) - => Task.FromResult(ResponseType.AsString($"What the fuck do you mean by '{method}'?")); + => throw new ReplyException($"What the fuck do you mean by '{method}'?"); } public interface ITaskWaitSource { @@ -118,6 +118,8 @@ public class Fluid { public override string ToString() => Amount > 10000 ? $"{Amount / 1000.0f:n2} B of {DisplayName}" : $"{Amount:n0} mB of {DisplayName}"; + [JsonIgnore] + public string CleanDisplayName => DisplayName[1..^2]; } [JsonConverter(typeof(ModItemIdJsonConverter))] diff --git a/MinecraftDiscordBot/Program.cs b/MinecraftDiscordBot/Program.cs index 77adb5b..0f51f01 100644 --- a/MinecraftDiscordBot/Program.cs +++ b/MinecraftDiscordBot/Program.cs @@ -228,8 +228,8 @@ public class Program : IDisposable, ICommandHandler { } catch (TaskCanceledException) { return ResponseType.AsString("Your request could not be processed in time!"); } catch (ReplyException e) { - await LogWarningAsync(BotSource, e.Message); - return ResponseType.AsString($"Your request failed: {e.Message}"); + await LogInfoAsync(BotSource, e.Message); + return ResponseType.AsString(e.Message); } catch (Exception e) { await LogErrorAsync(BotSource, e); return ResponseType.AsString($"Oopsie doopsie, this should not have happened!"); diff --git a/MinecraftDiscordBot/RefinedStorageService.cs b/MinecraftDiscordBot/RefinedStorageService.cs index 5e7292b..f2a895f 100644 --- a/MinecraftDiscordBot/RefinedStorageService.cs +++ b/MinecraftDiscordBot/RefinedStorageService.cs @@ -8,7 +8,7 @@ public class RefinedStorageService : CommandRouter { public override string HelpTextPrefix => "!rs "; public RefinedStorageService(ITaskWaitSource taskSource) : base() => _taskSource = taskSource; public override Task FallbackHandler(SocketUserMessage message, string method, string[] parameters, CancellationToken ct) - => Task.FromResult(ResponseType.AsString($"The RS system has no command '{method}'!")); + => throw new ReplyException($"The RS system has no command '{method}'!"); public override Task RootAnswer(SocketUserMessage message, CancellationToken ct) => Task.FromResult(ResponseType.AsString("The RS system is online!")); @@ -73,12 +73,13 @@ public class RefinedStorageService : CommandRouter { if (parameters.Length is 1 or 2) { itemid = parameters[0]; if (parameters.Length is 2) - if (int.TryParse(parameters[1], out var value)) amount = value; - else return ResponseType.AsString($"I expected an amount to craft, not '{parameters[1]}'!"); + amount = int.TryParse(parameters[1], out var value) + ? value + : throw new ReplyException($"I expected an amount to craft, not '{parameters[1]}'!"); } else return parameters.Length is < 1 - ? ResponseType.AsString("You have to give me at least an item name!") + ? throw new ReplyException("You have to give me at least an item name!") : parameters.Length is > 2 - ? ResponseType.AsString("Yo, those are way too many arguments! I want only item name and maybe an amount!") + ? throw new ReplyException("Yo, those are way too many arguments! I want only item name and maybe an amount!") : throw new InvalidOperationException($"Forgot to match parameter length {parameters.Length}!"); return await CraftItem(itemid, amount, ct) ? ResponseType.AsString($"Alright, I'm starting to craft {amount} {itemid}.") @@ -98,8 +99,15 @@ public class RefinedStorageService : CommandRouter { : parameters.Length is > 2 ? ResponseType.AsString("Yo, those are way too many arguments! I want only item name and maybe an amount!") : throw new InvalidOperationException($"Forgot to match parameter length {parameters.Length}!"); - var data = await GetItemData(itemid, ct); - return ResponseType.AsString(data.ToString()); + var item = await GetItemData(itemid, ct); + var sb = new StringBuilder(); + sb.Append($"We currently have {item.Amount:n0} {item.CleanDisplayName}!"); + if (item.Tags is not null and var tags) { + sb.AppendLine("\nThis item has the following tags:"); + sb.AppendJoin('\n',tags.Select(tag => $"- {tag}")); + } + sb.Append($"\nRefer to this item with fingerprint {item.Fingerprint}"); + return ResponseType.AsString(sb.ToString()); } [CommandHandler(CmdItemName, HelpText = "Filter items by name.")] public async Task HandleItemName(SocketUserMessage message, string[] parameters, CancellationToken ct) {