12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using MafiaTelegramBot.DataBase.EntityDao;
- using MafiaTelegramBot.Game;
- using Telegram.Bot.Types;
- namespace MafiaTelegramBot.Commands.Messages
- {
- public class MessageHandler : UpdateHandler
- {
- private static IEnumerable<UpdateHandler> List => new List<UpdateHandler>
- {
- // Переносим обработку сообщений в другой класс, если игрок находится в комнате
- new UserInGameMessageHandler(null),
-
- // Эти обработчики впереди, так как они зависят от наличия игрока в очереди, т.е. игрок должен написать какое-то сообщение
- new GiveRoleToPlayerHandler(null),
- new ChangeNicknameHandler(null),
- new CreateRoomHandler(null),
- new EnterCodeHandler(null),
- new UnblockUserMessageHandler(null),
-
- // Остальные обработчики
- new AdminPanelMessageHandler(null),
- new ConnectGameMessageHandler(null),
- new CreateGameMessageHandler(null),
- new DissolveRoomMessageHandler(null),
- new FastGameMessageHandler(null),
- new KickPlayerMessageHandler(null),
- new LeaveMessageHandler(null),
- new LookPlayersListMessageHandler(null),
- new RoomSettingsMessageHandler(null),
- new ShowProfileMessageHandler(null),
- new StartMessageHandler(null),
- new StartGameMessageHandler(null),
- };
-
- public static async Task<UpdateHandler> Factory(User user, string message)
- {
- Logs.LogOut(typeof(MessageHandler), "Factory");
- // Объект пользователя
- var player = await UserDao.GetPlayerById(user.Id) ?? await UserDao.AddNew(user);
-
- // Если игрок заблокирован, то нафиг его
- if (player.Info.IsBlocked) return new MessageHandler(player);
-
- // Устанавливаем игроку время активности на текущее
- player.SetActive();
-
- // Возвращаем объект, если есть подходящая команда
- foreach (var item in List.Where(item => item.IsMatches(message)))
- if (Activator.CreateInstance(item.GetType(), player) is MessageHandler handler)
- if(handler.IsMatches(message)) return handler;
-
- // Возвращаем команда не найдена, если код дошел до сюда
- return new CommandNotFound(player, message);
- }
- protected MessageHandler(Player player) : base(player) { }
- }
- }
|