|
@@ -1,11 +1,16 @@
|
|
|
+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
|
|
|
{
|
|
|
- protected override List<UpdateHandler> List => new()
|
|
|
+ private static IEnumerable<UpdateHandler> List => new List<UpdateHandler>
|
|
|
{
|
|
|
// Переносим обработку сообщений в другой класс, если игрок находится в комнате
|
|
|
new UserInGameMessageHandler(null),
|
|
@@ -31,7 +36,27 @@ namespace MafiaTelegramBot.Commands.Messages
|
|
|
new StartMessageHandler(null),
|
|
|
new StartGameMessageHandler(null),
|
|
|
};
|
|
|
+
|
|
|
+ public static async Task<UpdateHandler> Factory(User user, string message)
|
|
|
+ {
|
|
|
+ // Объект пользователя
|
|
|
+ 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);
|
|
|
+ }
|
|
|
|
|
|
- public MessageHandler(Player player) : base(player) { }
|
|
|
+ protected MessageHandler(Player player) : base(player) { }
|
|
|
}
|
|
|
}
|