private async Task OnCommandCheck(Message _, string arguments) { var cards = arguments.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(Card.Parse).ToList(); if (cards.IndexOf(Card.Invalid) >= 0) { await Telegram.SendMsg(Chat, "Carte non reconnue:\n" + string.Join("\n", cards.Select(c => c.ToFullString()))); return; } var(force, descr) = Card.BestHand(cards); var secondary = Card.CardsForce(cards); await Telegram.SendMsg(Chat, $"Meilleure main: {descr} (force {force}, {secondary})"); }
// point d'entrée pour la complétion inline public async Task OnInline(InlineQuery query) { await sem.WaitAsync(); try { string expr = query.Query; var player = FindPlayer(query); if (player == null) { await Telegram.AnswerInline(query); return; } string descr = null; if (Board.Count >= 3) { descr = "Votre main: " + Card.BestHand(Board.Concat(player.Cards)).descr; } await Telegram.AnswerInline(query, new[] { new InlineQueryResultArticle($"Card_" + string.Join("_", player.Cards), "Vos cartes: " + string.Join(" ", player.Cards), new InputTextMessageContent("(je regarde mes cartes)")) { Description = descr }, //, ThumbUrl = "https://raw.githubusercontent.com/hayeah/playing-cards-assets/master/png/2_of_hearts.png", ThumbWidth = 222, ThumbHeight = 323 }, //new InlineQueryResultPhoto("2", $"http://via.placeholder.com/{expr}", $"http://via.placeholder.com/{expr}") { Title = "photo", PhotoWidth = 85, PhotoHeight = 85 }, }, 2, isPersonal : true, switchPmText : $"Mise: {BB(player.Bet)} | Stack: {BB(player.Stack)}", switchPmParameter : "cards"); } finally { sem.Release(); } }
private async Task DoChoice(CallbackWord choice) { string text = CurrentPlayer.ToString(); switch (choice) { case CallbackWord.call: text += " *suit*."; CurrentPlayer.SetBet(CurrentBet); break; case CallbackWord.raise: LastPlayerToRaise = CurrentPlayer; CurrentBet += BigBet; text += $" *relance de {BB(CurrentBet - CurrentPlayer.Bet)}* !"; CurrentPlayer.SetBet(CurrentBet); break; case CallbackWord.allin: int playerBet = CurrentPlayer.Bet + CurrentPlayer.Stack; //todo if (playerBet > CurrentBet) { LastPlayerToRaise = CurrentPlayer; CurrentBet = playerBet; } text += $" *allin de {BB(CurrentBet - CurrentPlayer.Bet)}* !"; CurrentPlayer.SetBet(playerBet); break; case CallbackWord.fold: text += " *passe*."; CurrentPlayer.Status = Player.PlayerStatus.Folded; break; case CallbackWord.check: text += " *parle*."; break; default: break; } await RemoveLastMessageButtons(); var pot = Players.Sum(p => p.Bet); if (PlayersInTurn.Count() == 1) { var winner = PlayersInTurn.Single(); winner.Stack += pot; foreach (var player in Players) { player.Bet = 0; } await Telegram.SendMsg(Chat, $"{text}\n{winner.MarkDown()} remporte le pot de {BB(pot)}"); ButtonIdx = (ButtonIdx + 1) % Players.Count; runNextTurn = Task.Delay(7000).ContinueWith(_ => StartTurn()); } else { var stillBetting = NextPlayer(); #if ABATTAGE_IMMEDIAT DistributeBoard(); DistributeBoard(); DistributeBoard(); stillBetting = false; #endif if (stillBetting) { text += $" La mise est à {BB(CurrentBet - StartingBet)}\nC'est au tour de {CurrentPlayer.MarkDown()} de parler"; lastMsg = await Telegram.SendMsg(Chat, lastMsgText = text, GetChoices()); } else if (Board.Count == 5) { text += $" Abattage des cartes !\nBoard: "; text += string.Join(" ", Board); var hands = PlayersInTurn.Select(player => (player, hand: Card.BestHand(Board.Concat(player.Cards)))).ToList(); foreach (var(player, hand) in hands) { text += $"\n{string.Join(" ", player.Cards)} : {hand.descr} pour {player}"; } var winners = DetermineWinners(hands); if (winners.Count > 1) { text += $"\nEgalité entre {string.Join(" et ", winners)} ! Partage du pot: {BB(pot)}"; foreach (var player in winners) { player.Stack += pot / winners.Count; } } else { text += $"\n{winners[0].MarkDown()} remporte le pot de {BB(pot)} !"; winners[0].Stack += pot; } await Telegram.SendMsg(Chat, text); ButtonIdx = (ButtonIdx + 1) % Players.Count; runNextTurn = Task.Delay(10000).ContinueWith(_ => StartTurn()); } else { text += $" Le tour d'enchères est terminé. Pot: {BB(pot)}\n{DistributeBoard()}: "; text += string.Join(" ", Board); StartingBet = CurrentBet; BigBet = BigBlind; LastPlayerToRaise = null; CurrentPlayer = Players[ButtonIdx]; NextPlayer(); LastPlayerToRaise = CurrentPlayer; text += $"\nC'est au tour de {CurrentPlayer.MarkDown()} de parler"; lastMsg = await Telegram.SendMsg(Chat, lastMsgText = text, GetChoices()); } TraceStatus(); } }