CallbackQuery.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using CardCollector.Controllers;
  6. using CardCollector.DataBase.Entity;
  7. using CardCollector.DataBase.EntityDao;
  8. using Telegram.Bot.Types;
  9. namespace CardCollector.Commands.CallbackQuery
  10. {
  11. using static Logs;
  12. public abstract class CallbackQuery : UpdateModel
  13. {
  14. private static readonly List<CallbackQuery> List = new()
  15. {
  16. };
  17. public static async Task<UpdateModel> Factory(Update update)
  18. {
  19. try
  20. {
  21. // Текст команды
  22. var command = update.CallbackQuery!.Data;
  23. // Объект пользователя
  24. var user = await UserDao.GetUser(update.CallbackQuery.From);
  25. // Добавляем сообщения пользователя в пул для удаления
  26. MessageController.AddNewMessageToPool(user, update.CallbackQuery!.Message!.MessageId);
  27. // Возвращаем объект, если команда совпала
  28. foreach (var item in List.Where(item => item.IsMatches(command)))
  29. if (Activator.CreateInstance(item.GetType(), user, update) is CallbackQuery executor && executor.IsMatches(command))
  30. return executor;
  31. // Возвращаем команда не найдена, если код дошел до сюда
  32. return new CommandNotFound(user, update, command);
  33. }
  34. catch (Exception e)
  35. {
  36. LogOutError(e);
  37. throw;
  38. }
  39. }
  40. protected CallbackQuery(UserEntity user, Update update) : base(user, update) { }
  41. }
  42. }