GetUnlimitedStickerAndExecuteCommand.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using CardCollector.DataBase.Entity;
  6. using CardCollector.DataBase.EntityDao;
  7. using CardCollector.Resources;
  8. using Telegram.Bot.Types;
  9. namespace CardCollector.Commands.ChosenInlineResult
  10. {
  11. public class GetUnlimitedStickerAndExecuteCommand : ChosenInlineResult
  12. {
  13. protected override string CommandText => Command.unlimited_stickers;
  14. public override async Task Execute()
  15. {
  16. /* Получаем хеш стикера */
  17. var hash = InlineResult.Split('=')[1];
  18. /* Получаем объект стикера */
  19. var sticker = await StickerDao.GetStickerByHash(hash);
  20. /* Выдаем пользователю 1 стикер */
  21. await UserStickerRelationDao.AddNew(User, sticker, 1);
  22. /* Выполняем стандартный сценарий команды */
  23. await PrivateFactory(Update, User).Execute();
  24. }
  25. public GetUnlimitedStickerAndExecuteCommand() { }
  26. public GetUnlimitedStickerAndExecuteCommand(UserEntity user, Update update) : base(user, update) { }
  27. /* Список команд, аналогичный родительскому, только не включает эту команду (unlimited) */
  28. private static readonly List<ChosenInlineResult> PrivateList = List.GetRange(1, List.Count - 1);
  29. /* Метод, создающий объекты команд исходя из полученного обновления */
  30. private static UpdateModel PrivateFactory(Update update, UserEntity user)
  31. {
  32. // Текст команды
  33. var command = update.ChosenInlineResult!.ResultId;
  34. // Возвращаем объект, если команда совпала
  35. foreach (var item in PrivateList.Where(item => item.IsMatches(command)))
  36. if(Activator.CreateInstance(item.GetType(), user, update) is ChosenInlineResult executor)
  37. if (executor.IsMatches(command)) return executor;
  38. // Возвращаем команда не найдена, если код дошел до сюда
  39. return new CommandNotFound(user, update, command);
  40. }
  41. }
  42. }