GetUnlimitedStickerAndExecuteCommand.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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 : ChosenInlineResultCommand
  12. {
  13. protected override string CommandText => Command.unlimited_stickers;
  14. protected override bool ClearMenu => false;
  15. protected override bool AddToStack => false;
  16. public override async Task Execute()
  17. {
  18. /* Получаем хеш стикера */
  19. var hash = InlineResult.Split('=')[1];
  20. /* Получаем объект стикера */
  21. var sticker = await StickerDao.GetStickerByHash(hash);
  22. /* Выдаем пользователю 1 стикер */
  23. await UserStickerRelationDao.AddNew(User, sticker, 1);
  24. /* Выполняем стандартный сценарий команды */
  25. await PrivateFactory(Update, User).PrepareAndExecute();
  26. }
  27. public GetUnlimitedStickerAndExecuteCommand() { }
  28. public GetUnlimitedStickerAndExecuteCommand(UserEntity user, Update update) : base(user, update) { }
  29. /* Список команд, аналогичный родительскому, только не включает эту команду (unlimited) */
  30. private static readonly List<ChosenInlineResultCommand> PrivateList = List.GetRange(1, List.Count - 1);
  31. /* Метод, создающий объекты команд исходя из полученного обновления */
  32. private static UpdateModel PrivateFactory(Update update, UserEntity user)
  33. {
  34. // Возвращаем объект, если команда совпала
  35. return PrivateList.FirstOrDefault(item => item.IsMatches(user, update)) is { } executor
  36. ? (UpdateModel) Activator.CreateInstance(executor.GetType(), user, update)
  37. : new CommandNotFound(user, update, update.ChosenInlineResult!.ResultId);
  38. }
  39. }
  40. }