Keyboards.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using MafiaTelegramBot.DataBase;
  4. using MafiaTelegramBot.DataBase.Entity;
  5. using MafiaTelegramBot.Game;
  6. using MafiaTelegramBot.Game.GameRooms;
  7. using Telegram.Bot.Types.ReplyMarkups;
  8. namespace MafiaTelegramBot.Resources
  9. {
  10. public static class Keyboards
  11. {
  12. public static readonly ReplyKeyboardMarkup MainMenu = new(new[]
  13. {
  14. new KeyboardButton[] {keyboard.create_game},
  15. new KeyboardButton[] {keyboard.connect_game, keyboard.show_profile}
  16. }, true
  17. );
  18. public static readonly ReplyKeyboardMarkup OwnerGameMenu = new(new[]
  19. {
  20. new KeyboardButton[] {keyboard.begin_game, keyboard.room_settings},
  21. new KeyboardButton[] {keyboard.kick_player, keyboard.look_players_list},
  22. new KeyboardButton[] {keyboard.show_profile, keyboard.dissolve_room}
  23. }, true
  24. );
  25. public static readonly ReplyKeyboardMarkup PlayerGameMenu = new(new[]
  26. {
  27. new KeyboardButton[] {keyboard.show_profile, keyboard.look_players_list},
  28. new KeyboardButton[] {keyboard.leave}
  29. }, true
  30. );
  31. public static readonly ReplyKeyboardMarkup InGamePlayerMenu = new(new[]
  32. {
  33. new KeyboardButton[] {keyboard.look_players_list, keyboard.leave}
  34. }, true
  35. );
  36. public static InlineKeyboardMarkup RoomTypeKeyboard(long userId, Callback callbackPrivate, Callback callbackPublic)
  37. {
  38. return new(new[]
  39. {
  40. InlineKeyboardButton.WithCallbackData(strings._public, $"{callbackPublic}|{userId}"),
  41. InlineKeyboardButton.WithCallbackData(strings._private, $"{callbackPrivate}|{userId}"),
  42. });
  43. }
  44. public static InlineKeyboardMarkup SetMaximumKeyboard(long userId)
  45. {
  46. return new (new[]
  47. {
  48. new[] {
  49. InlineKeyboardButton.WithCallbackData(strings.minimum_players_count, $"{Callback.SetPlayersMaximum}|{userId}|6"),
  50. },
  51. new[] {
  52. InlineKeyboardButton.WithCallbackData("7", $"{Callback.SetPlayersMaximum}|{userId}|7"),
  53. InlineKeyboardButton.WithCallbackData("8", $"{Callback.SetPlayersMaximum}|{userId}|8"),
  54. InlineKeyboardButton.WithCallbackData("9", $"{Callback.SetPlayersMaximum}|{userId}|9"),
  55. },
  56. new[] {
  57. InlineKeyboardButton.WithCallbackData("10", $"{Callback.SetPlayersMaximum}|{userId}|10"),
  58. InlineKeyboardButton.WithCallbackData("11", $"{Callback.SetPlayersMaximum}|{userId}|11"),
  59. InlineKeyboardButton.WithCallbackData("12", $"{Callback.SetPlayersMaximum}|{userId}|12"),
  60. },
  61. new[] {
  62. InlineKeyboardButton.WithCallbackData("13", $"{Callback.SetPlayersMaximum}|{userId}|13"),
  63. InlineKeyboardButton.WithCallbackData("14", $"{Callback.SetPlayersMaximum}|{userId}|14"),
  64. InlineKeyboardButton.WithCallbackData("15", $"{Callback.SetPlayersMaximum}|{userId}|15"),
  65. },
  66. new[] {
  67. InlineKeyboardButton.WithCallbackData(strings.maximum_players_count, $"{Callback.SetPlayersMaximum}|{userId}|16"),
  68. }
  69. });
  70. }
  71. public static InlineKeyboardMarkup ProfileKeyboard(long userId)
  72. {
  73. return new (new[]
  74. {
  75. new[] {
  76. InlineKeyboardButton.WithCallbackData(strings.shop, $"{Callback.ShopMenu}|{userId}"),
  77. InlineKeyboardButton.WithCallbackData(strings.my_roles, $"{Callback.ShowMyRoles}|{userId}")
  78. },
  79. new[] {InlineKeyboardButton.WithCallbackData(strings.settings, $"{Callback.SettingsProfile}|{userId}")}
  80. });
  81. }
  82. public static InlineKeyboardMarkup NormalExtendedKeyboard(long userId, string type)
  83. {
  84. return new (new[]
  85. {
  86. new[] {
  87. InlineKeyboardButton.WithCallbackData(strings.standart, $"{Callback.MakeNormalGame}|{userId}|{type}"),
  88. InlineKeyboardButton.WithCallbackData(strings.extended, $"{Callback.MakeExtendedGame}|{userId}|{type}")
  89. }
  90. });
  91. }
  92. public static InlineKeyboardMarkup ChangeNameKeyboard(long userId)
  93. {
  94. return new(InlineKeyboardButton.WithCallbackData(strings.change_name, $"{Callback.ChangeNickName}|{userId}"));
  95. }
  96. public static InlineKeyboardMarkup RoomsKeyboard(List<GameRoom> rooms, long userId)
  97. {
  98. var inlineButtons = new InlineKeyboardButton[rooms.Count][];
  99. for (var i = 0; i < rooms.Count && i < Constants.MAX_SHOWING_ROOMS; ++i) // buttons
  100. {
  101. var s = rooms[i].IsExtended ? "Р" : "C";
  102. inlineButtons[i] = new []
  103. {
  104. InlineKeyboardButton.WithCallbackData(
  105. $"[{s}] {rooms[i].RoomName} ({rooms[i].Players.Values.Count.ToString()}/{rooms[i].MaxPlayers.ToString()})",
  106. $"{Callback.ConnectToSelectedRoom}|{userId}|{RoomEncrypter.GetCode(rooms[i].RoomName)}")
  107. };
  108. }
  109. return new InlineKeyboardMarkup(inlineButtons);
  110. }
  111. public static InlineKeyboardMarkup KickKeyboard(List<Player> users)
  112. {
  113. var inlineButtons = new InlineKeyboardButton[users.Count][];
  114. for (var i = 0; i < users.Count; ++i)
  115. {
  116. inlineButtons[i] = new[]
  117. {
  118. InlineKeyboardButton.WithCallbackData($"{users[i].NickName} {strings.kick}",
  119. $"{Callback.KickUser}|{users[i].Id}")
  120. };
  121. }
  122. return new InlineKeyboardMarkup(inlineButtons);
  123. }
  124. public static InlineKeyboardMarkup VoteKeyboard(List<Player> players, long userId, bool withSkipButton)
  125. {
  126. var inlineButtons = new InlineKeyboardButton[withSkipButton ?players.Count+1 :players.Count][];
  127. for (var i = 0; i<players.Count; ++i)
  128. {
  129. inlineButtons[i] = new[]
  130. {
  131. InlineKeyboardButton.WithCallbackData($"\\({players[i].TurnOrder}\\) {players[i].NickName}", $"{Callback.Vote}|{userId}|{players[i].Id}")
  132. };
  133. }
  134. if (withSkipButton) inlineButtons[players.Count] = new[]
  135. {InlineKeyboardButton.WithCallbackData(strings.skip, $"{Callback.Skip}|{userId}")};
  136. return inlineButtons;
  137. }
  138. public static InlineKeyboardMarkup NightChooseTargetKeyboard(List<Player> players, long userId)
  139. {
  140. var inlineButtons = new InlineKeyboardButton[players.Count][];
  141. for (var i = 0; i<players.Count; ++i)
  142. {
  143. inlineButtons[i] = new[]
  144. {
  145. InlineKeyboardButton.WithCallbackData($"\\({players[i].TurnOrder}\\) {players[i].NickName}", $"{Callback.Target}|{userId}|{players[i].Id}")
  146. };
  147. }
  148. return inlineButtons;
  149. }
  150. public static InlineKeyboardMarkup TimerSwitchKeyboard(long userId, string text)
  151. {
  152. return new( new[]
  153. {
  154. InlineKeyboardButton.WithCallbackData(text, $"{Callback.SwitchTimer}|{userId}"),
  155. });
  156. }
  157. }
  158. }