CallbackQueryHandler.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #nullable enable
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using MafiaTelegramBot.DataBase.EntityDao;
  7. using MafiaTelegramBot.Game;
  8. using Telegram.Bot.Types;
  9. namespace MafiaTelegramBot.Commands.CallbackQueries
  10. {
  11. public class CallbackQueryHandler : UpdateHandler
  12. {
  13. private static IEnumerable<UpdateHandler> List => new List<UpdateHandler>
  14. {
  15. // Переносим обработку сообщений в другой класс, если игрок находится в комнате
  16. new UserInGameCallbackQueryHandler(null),
  17. // Остальные обработчики
  18. new ApplyRolesChangeCallbackQueryHandler(null),
  19. new BackToProfileCallbackQueryHandler(null),
  20. new ChangeNickNameCallbackQueryHandler(null),
  21. new ChangeRolesCallbackQueryHandler(null),
  22. new ChooseGameModeCallbackQueryHandler(null),
  23. new ChooseGameTypeCallbackQueryHandler(null),
  24. new ChooseRoomViewCallbackQueryHandler(null),
  25. new ConnectToNotRankedCallbackQueryHandler(null),
  26. new ConnectToPrivateRoomCallbackQueryHandler(null),
  27. new ConnectToPublicRoomCallbackQueryHandler(null),
  28. new ConnectToRankedCallbackQueryHandler(null),
  29. new ConnectToSelectedRoomCallbackQueryHandler(null),
  30. new ContinueCallbackQueryHandler(null),
  31. new GiveRoleCallbackQueryHandler(null),
  32. new GiveToAllCallbackQueryHandler(null),
  33. new GiveToSelectedCallbackQueryHandler(null),
  34. new KickSelectedPlayerCallbackQueryHandler(null),
  35. new PackInfoCallbackQueryHandler(null),
  36. new PackOpenCallbackQueryHandler(null),
  37. new PlayersCountSettingsCallbackQueryHandler(null),
  38. new SetPlayersMaximumCallbackQueryHandler(null),
  39. new SettingsProfileCallbackQueryHandler(null),
  40. new SettingsRoomCallbackQueryHandler(null),
  41. new ShopMenuCallbackQueryHandler(null),
  42. new ShowMyExtendedStatsCallbackQueryHandler(null),
  43. new ShowMyPacksCallbackQueryHandler(null),
  44. new ShowMyRolesCallbackQueryHandler(null),
  45. new StartGameCallbackQueryHandler(null),
  46. new SwitchTimerCallbackQueryHandler(null),
  47. new UnblockUserCallbackQueryHandler(null),
  48. };
  49. public static async Task<UpdateHandler> Factory(User user, string message)
  50. {
  51. Logs.LogOut(typeof(CallbackQueryHandler), "Factory");
  52. // Объект пользователя
  53. var player = await UserDao.GetPlayerById(user.Id) ?? await UserDao.AddNew(user);
  54. // Если игрок заблокирован, то нафиг его
  55. if (player.Info.IsBlocked) return new CallbackQueryHandler(player);
  56. // Устанавливаем игроку время активности на текущее
  57. player.SetActive();
  58. // Возвращаем объект, если есть подходящая команда
  59. foreach (var item in List.Where(item => item.IsMatches(message)))
  60. if (Activator.CreateInstance(item.GetType(), player) is CallbackQueryHandler handler)
  61. if(handler.IsMatches(message)) return handler;
  62. // Ничего не делаем, если код дошел до сюда
  63. return new CommandNotFound(player, message);
  64. }
  65. protected CallbackQueryHandler(Player player) : base(player) { }
  66. }
  67. }