public void HandleQuery(CallbackQuery query, string[] args) { try { // args[0] = GameGuid // args[1] = playerId // args[2] = "card" or "row" // args[2] = cardChosen var p = Players.FirstOrDefault(x => x.TelegramId == int.Parse(args[1])); _playCardSecondsToAdd += 3; switch (args[2]) { case "card": var chosen = args[3]; if (chosen == "dummy") { Bot.Api.AnswerCallbackQueryAsync(query.Id); } else if (chosen == "skip") { if (CurrentHand.Count == 0) // no cards, you can use any cards { Bot.Api.AnswerCallbackQueryAsync(query.Id, GetTranslation("UseAnything"), true); return; } Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, GetTranslation("Pass"), GroupMarkup); p.UpdateChosenIndexes(empty: true); p.CurrentQuestion = null; return; } else if (chosen == "invalid") { Bot.Api.AnswerCallbackQueryAsync(query.Id, GetTranslation("InvalidHand"), true); return; } else if (chosen == "go") { var chosenCards = p.Hand.Cards.Where(x => p.DealCardMenu.LastValidIndexes.Contains(x.Index)).ToList(); if (p.FirstPlayer && !chosenCards.Any(x => x.GameValue == 3 && x.Suit == BTCardSuit.Diamonds)) { Bot.Api.AnswerCallbackQueryAsync(query.Id, GetTranslation("MustUseDiamondThree"), true); return; } if (chosenCards.CheckChosenCards() == null) { Bot.Api.AnswerCallbackQueryAsync(query.Id, GetTranslation("PlayCheckAgain"), true); p.DealCardMenu.UpdateMenu(); Bot.Api.EditMessageReplyMarkupAsync(query.Message.Chat.Id, query.Message.MessageId, p.DealCardMenu.MarkUp); return; } var res = chosenCards.CompareHandWith(CurrentHand); if (!res.Success) { Bot.Api.AnswerCallbackQueryAsync(query.Id, res.Reason.ToString(), true); return; } var text = chosenCards.GetString(); Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, text, GroupMarkup); p.UseCards(chosenCards); CurrentHand = chosenCards.ToList(); CurrentHandType = CurrentHand.CheckChosenCards(); CurrentDealer = p; p.CurrentQuestion = null; return; } else if (chosen == "reset") { p.UpdateChosenIndexes(empty: true); } else if (chosen == "sort") { p.DealCardMenu.SortBySuit = !p.DealCardMenu.SortBySuit; p.DealCardMenu.UpdateMenu(); } else { var indexChosen = int.Parse(args[3]); p.UpdateChosenIndexes(indexChosen); var cardChosen = p.Hand.FirstOrDefault(x => x.Index == indexChosen); } Bot.Api.EditMessageReplyMarkupAsync(query.Message.Chat.Id, query.Message.MessageId, p.DealCardMenu.MarkUp); break; case "refresh": if (Phase == GamePhase.InGame) { var txt = GetTranslation("CardsInHand") + Environment.NewLine + p.Hand.ToList().GetString(); if (txt != p.DeckText) { p.DeckText = txt; Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, txt, GetRefreshMarkup(p)); } else { BotMethods.AnswerCallback(query, GetTranslation("CardsNoChange"), true); } } break; } } catch (Exception e) { Bot.Send(query.From.Id, e.Message + e.StackTrace); } }
public static void ConfigQuery(CallbackQuery query, string[] args) { var temp = args[1].Split('|'); var chatId = long.Parse(temp[1]); if (temp[0] == "lang") { if (temp.Length == 2) { var menu = Handler.GetConfigLangMenu(chatId); Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, GetTranslation(chatId > 0 ? "ChoosePMLanguage" : "ChooseLanguage", GetLanguage(chatId)), menu); } if (temp.Length > 2) { var chosenLang = temp[2]; Handler.SetLanguage(chatId, chosenLang); var menu = Handler.GetConfigMenu(chatId); var toSend = GetTranslation("ReceivedButton", GetLanguage(chatId)) + Environment.NewLine + GetTranslation("WhatToDo", GetLanguage(chatId)); Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, toSend, menu); } } else if (temp[0] == "choosetime") { if (temp.Length == 2) { var menu = Handler.GetConfigChooseCardTimeMenu(chatId); // should be group only var group = Helpers.GetGroup(chatId); var current = group.ChooseCardTime ?? Constants.ChooseCardTime; Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, GetTranslation("ConfigChooseCardTimeDetail", GetLanguage(chatId), current), menu); } if (temp.Length > 2) { var chosen = int.Parse(temp[2]); Handler.SetChooseCardTimeConfig(chatId, chosen); var menu = Handler.GetConfigMenu(chatId); var toSend = GetTranslation("ReceivedButton", GetLanguage(chatId)) + Environment.NewLine + GetTranslation("WhatToDo", GetLanguage(chatId)); Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, toSend, menu); } } else if (temp[0] == "playchips") { if (temp.Length == 2) { var menu = Handler.GetConfigPlayChipsMenu(chatId); // should be group only var group = Helpers.GetGroup(chatId); var current = group.PlayChips ?? false; Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, GetTranslation("ConfigPlayChipsDetail", GetLanguage(chatId), current == true ? GetTranslation("ConfigYes", GetLanguage(chatId)) : GetTranslation("ConfigNo", GetLanguage(chatId))), menu); } if (temp.Length > 2) { var chosen = temp[2] == "yes"; Handler.SetPlayChipsConfig(chatId, chosen); var menu = Handler.GetConfigMenu(chatId); var toSend = ""; if (!chosen) { toSend = GetTranslation("ReceivedButton", GetLanguage(chatId)) + Environment.NewLine + GetTranslation("WhatToDo", GetLanguage(chatId)); } else { var group = Helpers.GetGroup(chatId); var current = group.ChipsPerCard ?? Constants.ChipsPerCard; toSend = GetTranslation("ConfigChipsAmountDetail", GetLanguage(chatId), current); menu = Handler.GetChipsAmountMenu(chatId); } Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, toSend, menu); } } else if (temp[0] == "chips") { if (temp.Length > 2) { var chosen = int.Parse(temp[2]); Handler.SetChipsAmountConfig(chatId, chosen); var menu = Handler.GetConfigMenu(chatId); var toSend = GetTranslation("ReceivedButton", GetLanguage(chatId)) + Environment.NewLine + GetTranslation("WhatToDo", GetLanguage(chatId)); Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, toSend, menu); } } else if (temp[0] == "done") { Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, GetTranslation("ConfigDone", GetLanguage(chatId))); } else if (temp[0] == "back") { Bot.Edit(query.Message.Chat.Id, query.Message.MessageId, GetTranslation("WhatToDo", Handler.GetLanguage(chatId)), Handler.GetConfigMenu(chatId)); } return; }
/* * public FileToSend GetTableCardsImage(List<BTCard[]> cards) * { * using (MemoryStream ms = new MemoryStream()) * { * Image temp = (Image)Constants.boardImage.Clone(); * Graphics board = Graphics.FromImage(temp); * * int w = Constants.widthSides; * int h = Constants.heightSides; * for (int i = 0; i < 5; i++) * { * for (int j = 0; j < 4; j++) * { * var c = cards[j][i]; * if (c != null) * board.DrawImage(Constants.cardImages[c.Number - 1], w, h); * h += Constants.eachHeight; * } * w += Constants.eachWidth; * h = Constants.heightSides; * } * * var s = ToStream(temp, ImageFormat.Png); * // boardImage.Save(outputPath); * return new FileToSend("sticker", s); * } * } * * private Stream ToStream(Image image, ImageFormat format) * { * // * // image.Save(stream, format); * Bitmap img = new Bitmap(image); * byte[] bytes; * using (WebP webp = new WebP()) * bytes = webp.EncodeLossless(img); * var stream = new System.IO.MemoryStream(bytes); * stream.Position = 0; * return stream; * } */ #endregion #region Game Methods public void PlayersChooseCard() { try { if (Players.Any(x => x.Hand.Cards.Count() == 0)) { Phase = GamePhase.Ending; } if (Phase == GamePhase.Ending) { return; } CurrentLargestDealt = false; CurrentLargestDealtBy = null; var p = PlayerQueue.First(); // Send Menu to P if (CurrentDealer?.Id == p.Id) { CurrentDealer = null; CurrentHand.Clear(); CurrentHandType = null; } var forP = CurrentHand.Count > 0 ? GetTranslation("CurrentlyOnTable") + Environment.NewLine + CurrentHand.GetString() + Environment.NewLine + GetTranslation("ChooseCard") : GetTranslation("ChooseCard"); SendMenu(p, forP, p.DealCardMenu.MarkUp); var forGroup = PlayerQueue.GetNumOfCardsString() + Environment.NewLine + Environment.NewLine; forGroup += CurrentHand.Count > 0 ? GetTranslation("CurrentlyOnTable") + CurrentDealer.GetName() + ":" + Environment.NewLine + CurrentHand.GetString() : GetTranslation("TableClean"); forGroup += Environment.NewLine + Environment.NewLine + GetTranslation("PlayersTurn", p.GetMention(), ChooseCardTime); Send(forGroup, BotMarkup); // choose card time for (int i = 0; i < ChooseCardTime; i++) { Thread.Sleep(1000); if (p.CurrentQuestion == null) { break; } if (_playCardSecondsToAdd != 0) { i = i - _playCardSecondsToAdd; // Bot.Send(ChatId, GetTranslation("JoinTimeLeft", TimeSpan.FromSeconds(Constants.JoinTime - i).ToString(@"mm\:ss"))); _playCardSecondsToAdd = 0; } } if (p.CurrentQuestion != null) { Bot.Edit(p.TelegramId, p.CurrentQuestion.MessageId, GetTranslation("TimesUpButton")); p.CurrentQuestion = null; } if (CurrentDealer?.Id == p.Id) { Send(GetTranslation("PlayedHand", p.GetName(), GetTranslation(CurrentHandType.ToString()), CurrentHand.GetString())); } else { Send(GetTranslation("Passed", p.GetName())); } if (p.Hand.Count == 0) { Winner = p; Phase = GamePhase.Ending; } // Single Card and it's the largest // old // if (CurrentHand.Count == 1 && CurrentHand.First().Value == 2 && CurrentHand.First().Suit == BTCardSuit.Spades) if (CurrentHand.Count == 1 && Players.All(x => x.Hand.Cards.All(y => y < CurrentHand.First()))) { // Send(""); CurrentLargestDealt = true; CurrentLargestDealtBy = p; // return; } // check for pairs too /* to do * if (CurrentHand.Count == 2 && Players.All(x => x.Hand.GetSameGameValuedCards(BTPokerHands.Double).OrderByDescending(y => y.Key).First().CompareHandWith(CurrentHand).Success == false)) * // if (CurrentHand.Count == 2) * { * { * Send(""); * CurrentLargestDealt = true; * CurrentLargestDealtBy = p; * // return; * } * } */ CleanPlayers(); } catch (Exception ex) { Log(ex); } }