|
@@ -1,12 +1,17 @@
|
|
#nullable enable
|
|
#nullable enable
|
|
|
|
+using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
|
|
+using System.Linq;
|
|
|
|
+using System.Threading.Tasks;
|
|
|
|
+using MafiaTelegramBot.DataBase.EntityDao;
|
|
using MafiaTelegramBot.Game;
|
|
using MafiaTelegramBot.Game;
|
|
|
|
+using Telegram.Bot.Types;
|
|
|
|
|
|
namespace MafiaTelegramBot.Commands.CallbackQueries
|
|
namespace MafiaTelegramBot.Commands.CallbackQueries
|
|
{
|
|
{
|
|
public class CallbackQueryHandler : UpdateHandler
|
|
public class CallbackQueryHandler : UpdateHandler
|
|
{
|
|
{
|
|
- protected override List<UpdateHandler> List => new()
|
|
|
|
|
|
+ private static IEnumerable<UpdateHandler> List => new List<UpdateHandler>
|
|
{
|
|
{
|
|
// Переносим обработку сообщений в другой класс, если игрок находится в комнате
|
|
// Переносим обработку сообщений в другой класс, если игрок находится в комнате
|
|
new UserInGameCallbackQueryHandler(null),
|
|
new UserInGameCallbackQueryHandler(null),
|
|
@@ -43,7 +48,27 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
|
|
new SwitchTimerCallbackQueryHandler(null),
|
|
new SwitchTimerCallbackQueryHandler(null),
|
|
new UnblockUserCallbackQueryHandler(null),
|
|
new UnblockUserCallbackQueryHandler(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 CallbackQueryHandler(player);
|
|
|
|
+
|
|
|
|
+ // Устанавливаем игроку время активности на текущее
|
|
|
|
+ player.SetActive();
|
|
|
|
+
|
|
|
|
+ // Возвращаем объект, если есть подходящая команда
|
|
|
|
+ foreach (var item in List.Where(item => item.IsMatches(message)))
|
|
|
|
+ if (Activator.CreateInstance(item.GetType(), player) is CallbackQueryHandler handler)
|
|
|
|
+ if(handler.IsMatches(message)) return handler;
|
|
|
|
+
|
|
|
|
+ // Ничего не делаем, если код дошел до сюда
|
|
|
|
+ return new CommandNotFound(player, message);
|
|
|
|
+ }
|
|
|
|
+
|
|
public CallbackQueryHandler(Player player) : base(player) { }
|
|
public CallbackQueryHandler(Player player) : base(player) { }
|
|
}
|
|
}
|
|
}
|
|
}
|