MessageHandler.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using MafiaTelegramBot.DataBase.EntityDao;
  5. using MafiaTelegramBot.Game;
  6. using Telegram.Bot.Types;
  7. namespace MafiaTelegramBot.Commands.Messages
  8. {
  9. public class MessageHandler : UpdateHandler
  10. {
  11. private static readonly List<MessageHandler> List = new()
  12. {
  13. // Переносим обработку сообщений в другой класс, если игрок находится в комнате
  14. new UserInGameMessageHandler(null),
  15. // Эти обработчики впереди, так как они зависят от наличия игрока в очереди, т.е. игрок должен написать какое-то сообщение
  16. new GiveRoleToPlayerHandler(null),
  17. new ChangeNicknameHandler(null),
  18. new CreateRoomHandler(null),
  19. new EnterCodeHandler(null),
  20. // Остальные обработчики
  21. new AdminPanelMessageHandler(null),
  22. new ConnectGameMessageHandler(null),
  23. new CreateGameMessageHandler(null),
  24. new DissolveRoomMessageHandler(null),
  25. new FastGameMessageHandler(null),
  26. new KickPlayerMessageHandler(null),
  27. new LeaveMessageHandler(null),
  28. new LookPlayersListMessageHandler(null),
  29. new RoomSettingsMessageHandler(null),
  30. new ShowProfileMessageHandler(null),
  31. new StartMessageHandler(null),
  32. new StartGameMessageHandler(null),
  33. };
  34. public static async Task<UpdateHandler> Factory(User user, string message)
  35. {
  36. // Объект пользователя
  37. var player = await UserDao.GetPlayerById(user.Id) ?? await UserDao.AddNew(user);
  38. // Если игрок заблокирован, то нафиг его
  39. if (player.Info.IsBlocked) return new MessageHandler(player);
  40. // Устанавливаем игроку время активности на текущее
  41. player.SetActive();
  42. // Возвращаем объект, если есть подходящая команда
  43. foreach (var item in List)
  44. if(item.IsMatches(message))
  45. if (Activator.CreateInstance(item.GetType(), player) is UpdateHandler handler)
  46. if(handler.IsMatches(message)) return handler;
  47. // Возвращаем команда не найдена, если код дошел до сюда
  48. return new CommandNotFound(player);
  49. }
  50. public MessageHandler(Player player) : base(player) { }
  51. }
  52. }