using EllieBot.Modules.Games.Hangman; namespace EllieBot.Modules.Games; public partial class Games { [Group] public partial class HangmanCommands : EllieModule<IHangmanService> { [Cmd] [RequireContext(ContextType.Guild)] public async Task Hangmanlist() => await Response() .Confirm(GetText(strs.hangman_types(prefix)), _service.GetHangmanTypes().Join('\n')) .SendAsync(); private static string Draw(HangmanGame.State state) { var head = state.Errors >= 1 ? "O" : " "; var torso = state.Errors >= 2 ? "|" : " "; var leftArm = state.Errors >= 3 ? "/" : " "; var rightArm = state.Errors >= 4 ? "\\" : " "; var leftLeg = state.Errors >= 5 ? "/" : " "; var rightLeg = state.Errors >= 6 ? "\\" : " "; return $""" ``` ┌─────┐ │ {head} │ {leftArm}{torso}{rightArm} │ {leftLeg} {rightLeg} ─┴─ ``` """; } public static EmbedBuilder GetEmbed(IMessageSenderService sender, HangmanGame.State state) { var eb = sender.CreateEmbed() .WithOkColor() .AddField("Hangman", Draw(state)) .AddField("Guess", Format.Code(state.Word)); if (state.Phase == HangmanGame.Phase.Running) { return eb .WithFooter(state.MissedLetters.Join(' ')) .WithAuthor(state.Category); } if (state.Phase == HangmanGame.Phase.Ended && state.Failed) { return eb .WithFooter(state.MissedLetters.Join(' ')); } return eb.WithFooter(state.MissedLetters.Join(' ')); } [Cmd] [RequireContext(ContextType.Guild)] public async Task Hangman([Leftover] string? type = null) { if (!_service.StartHangman(ctx.Channel.Id, type, out var hangman)) { await Response().Error(strs.hangman_running).SendAsync(); return; } var eb = GetEmbed(_sender, hangman); eb.WithDescription(GetText(strs.hangman_game_started)); await Response().Embed(eb).SendAsync(); } [Cmd] [RequireContext(ContextType.Guild)] public async Task HangmanStop() { if (await _service.StopHangman(ctx.Channel.Id)) await Response().Confirm(strs.hangman_stopped).SendAsync(); } } }