private async Task computeHand(CommandContext ctx, string hand, string options) { var basicHand = HandParser.GetSimpleHand(hand); var handEmoji = HandParser.GetHandEmojiCodes(hand, ctx.Client); var optionsEmoji = options == "all" ? handEmoji : HandParser.GetHandEmojiCodes(options, ctx.Client); try { await ctx.Message.DeleteAsync(); } catch { // do nothing } var hand34 = C.one_line_string_to_34_array(basicHand); string suitOrder = U.getSuitOrder(basicHand); var shantenCalc = new ShantenCalculator(); int shanten = -2; var nbTiles = hand34.Sum(); if (nbTiles == 13 || nbTiles == 14) { shanten = shantenCalc.Calculate_shanten(hand34); } StringBuilder sb = new(); sb.AppendLine($"<@!{ctx.User.Id}>: {GetHandMessage(handEmoji)} {getShanten(shanten)}\n"); var divider = new HandDivider(); var results = divider.divide_hand(hand34); int i = 1; foreach (var result in results) { var hand136 = C.from_34_indices_to_136_arrays(result); var setsStr = hand136.Select(set => C.to_one_line_string(set)); IEnumerable <string> orderedSetStr = new List <string>(); foreach (var chr in suitOrder) { orderedSetStr = orderedSetStr.Concat(setsStr.Where(x => x.Contains(chr))); } sb.AppendLine($"{i}:{string.Join(",", orderedSetStr.Select(x => $"{GetHandMessage(HandParser.GetHandEmojiCodes(x, ctx.Client))}"))}\n"); i++; } var message = await ctx.Channel.SendMessageAsync(sb.ToString()); { foreach (var emoji in optionsEmoji) { await message.CreateReactionAsync(emoji); } } }
public static IList <TileKinds> Hand(Tiles34 tiles, int handIndex = 0) { return(HandDivider.DivideHand(tiles)[handIndex]); }