private static async void BotOnMessageReceived(object sender, MessageEventArgs messageEventArgs)
        {
            try
            {
                var message = messageEventArgs.Message;
                if (message == null || message.Type != MessageType.Text)
                {
                    return;
                }
                if (message.Text.ToLower() == "thmbgstart")
                {
                    _active = true;
                    Game    = new TexasHoldemGame();
                    await _bot.SendTextMessageAsync(message.Chat.Id, "Manager started");
                }
                if (!_active)
                {
                    return;
                }
                var messageText = message.Text.Split(' ');
                var player      = Game.Players.FirstOrDefault(p => p.Name == messageText[0]);
                if (player != null)
                {
                    if (messageText.Length == 1)
                    {
                        await _bot.SendTextMessageAsync(message.Chat.Id, $"{player.Name}'s commands",
                                                        replyMarkup : GetPlayerReplyKeyboardMarkup(player.Name),
                                                        replyToMessageId : message.MessageId);
                    }
                    else
                    {
                        switch (messageText[1].ToLower())
                        {
                        case "fold":
                            player.Fold();
                            await _bot.SendTextMessageAsync(message.Chat.Id,
                                                            $"{player.Name} folds");

                            break;

                        case "call":
                            var chipsToCall = player.Call();
                            await _bot.SendTextMessageAsync(message.Chat.Id,
                                                            $"{player.Name} calls {chipsToCall}, Bet: {player.TotalBet}, Bank: {player.Bankroll}, Pot: {Game.Pot}");

                            break;

                        case "bet":
                            if (messageText.Length < 3)
                            {
                                break;
                            }
                            switch (messageText[2].ToLower())
                            {
                            case "half":
                                messageText[2] = (Game.Pot / 2).ToString();
                                break;

                            case "pot":
                                messageText[2] = Game.Pot.ToString();
                                break;
                            }

                            if (!int.TryParse(messageText[2], out var chipsToBet))
                            {
                                break;
                            }
                            if (player.Bet((uint)chipsToBet))
                            {
                                var info = $", Bet: {player.TotalBet}, Bank: {player.Bankroll}, Pot: {Game.Pot}";
                                if (player.Bankroll == 0)
                                {
                                    await _bot.SendTextMessageAsync(message.Chat.Id,
                                                                    $"{player.Name} all-in {chipsToBet}{info}");
                                }
                                else
                                {
                                    await _bot.SendTextMessageAsync(message.Chat.Id,
                                                                    $"{player.Name} bets {chipsToBet}{info}");
                                }
                            }
                            break;

                        case "win":
                            uint chipsToWin;
                            if (messageText.Length == 2)
                            {
                                chipsToWin = Game.Pot;
                                player.Win(chipsToWin);
                            }
                            else
                            {
                                if (!uint.TryParse(messageText[2], out chipsToWin) || !player.Win(chipsToWin))
                                {
                                    break;
                                }
                            }
                            await _bot.SendTextMessageAsync(message.Chat.Id, $"{player.Name} wins {chipsToWin}");

                            break;

                        case "all-in":
                            var chipsToAllIn = player.Bankroll;
                            player.Bet(chipsToAllIn);
                            await _bot.SendTextMessageAsync(message.Chat.Id,
                                                            $"{player.Name} all-in {chipsToAllIn} ({player.TotalBet}) Total Pot: {Game.Pot}");

                            break;

                        case "add":
                            if (messageText.Length < 4 || messageText[2].ToLower() != "chips" ||
                                !int.TryParse(messageText[3], out var chipsToAdd) || !player.AddChips(chipsToAdd))
                            {
                                break;
                            }
                            await _bot.SendTextMessageAsync(message.Chat.Id, $"{player.Name} gets {chipsToAdd}");

                            break;
                        }
                    }
                }
                else
                {
                    switch (messageText[0].ToLower())
                    {
                    case "info":
                        await SendInfo(message);

                        break;

                    case "add":
                        if (messageText.Length < 2)
                        {
                            break;
                        }
                        switch (messageText[1].ToLower())
                        {
                        case "player":
                            if (messageText.Length < 3)
                            {
                                break;
                            }
                            var name = messageText[2].Length > 12
                                        ? messageText[2].Substring(0, 12)
                                        : messageText[2];
                            if (Game.AddPlayer(name))
                            {
                                await _bot.SendTextMessageAsync(message.Chat.Id, $"Player {name} added");
                            }
                            else
                            {
                                await _bot.SendTextMessageAsync(message.Chat.Id, $"{name} already exist");
                            }
                            break;

                        case "chips":
                            if (messageText.Length < 3)
                            {
                                break;
                            }
                            if (!int.TryParse(messageText[2], out var chipsToAdd))
                            {
                                break;
                            }
                            Game.AddChips(chipsToAdd);
                            await _bot.SendTextMessageAsync(message.Chat.Id, $"Each player gets {chipsToAdd}");

                            break;
                        }
                        break;

                    case "remove":
                        if (messageText.Length < 2)
                        {
                            break;
                        }
                        if (messageText[1].ToLower() == "player")
                        {
                            if (messageText.Length < 3)
                            {
                                break;
                            }
                            if (Game.RemovePlayer(messageText[2]))
                            {
                                await _bot.SendTextMessageAsync(message.Chat.Id, $"Player {messageText[2]} removed");
                            }
                        }
                        break;

                    case "set":
                        if (messageText.Length < 3 && messageText[1] != "blinds")
                        {
                            break;
                        }
                        if (!uint.TryParse(messageText[2], out var blindToSet))
                        {
                            break;
                        }
                        Game.SetBlinds(blindToSet);
                        await _bot.SendTextMessageAsync(message.Chat.Id,
                                                        $"Small Blind: {Game.SmallBlind}, Big Blind: {Game.BigBlind}");

                        break;

                    case "restart":
                        Game.Restart();
                        await _bot.SendTextMessageAsync(message.Chat.Id, "New game started");

                        break;

                    case "thmbgstop":
                        _active = false;
                        await _bot.SendTextMessageAsync(message.Chat.Id, "Manager stopped");

                        break;

                    case "/help":
                        const string helpText = @"
List of commands:
Info
Restart
Add player [player]
Remove player [player]
Add chips [(-)amount]
Set blinds [amount]
[player] add chips [(-)amount]
[player]
[player] call
[player] bet [(-)amount]
[player] bet Half
[player] bet Pot
[player] all-in
[player] fold
[player] win
[player] win [amount]";
                        await _bot.SendTextMessageAsync(message.Chat.Id, helpText);

                        break;
                    }
                }
            }
            catch (Exception e)
            {
                _logger.Error(e);
            }
        }
Esempio n. 2
0
 public Player(string name, TexasHoldemGame game)
 {
     Name  = name;
     _game = game;
 }