SelectStickerInline.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Threading.Tasks;
  2. using CardCollector.Controllers;
  3. using CardCollector.DataBase.Entity;
  4. using CardCollector.DataBase.EntityDao;
  5. using CardCollector.Resources;
  6. using CardCollector.Session.Modules;
  7. using Telegram.Bot.Types;
  8. namespace CardCollector.Commands.ChosenInlineResult
  9. {
  10. public class SelectStickerInline : ChosenInlineResultCommand
  11. {
  12. protected override string CommandText => Command.select_sticker;
  13. protected override bool ClearMenu => false;
  14. protected override bool AddToStack => false;
  15. public override async Task Execute()
  16. {
  17. await User.ClearChat();
  18. var hash = InlineResult.Split('=')[1];
  19. var sticker = await StickerDao.GetByHash(hash);
  20. var stickerCount = User.Session.State switch
  21. {
  22. UserState.AuctionMenu => await AuctionController.GetStickerCount(sticker.Id, User.Session.GetModule<FiltersModule>()),
  23. _ => User.Stickers[sticker.Md5Hash].Count
  24. };
  25. switch (User.Session.State)
  26. {
  27. case UserState.CollectionMenu:
  28. User.Session.GetModule<CollectionModule>().SelectedSticker = sticker;
  29. User.Session.GetModule<CollectionModule>().Count = 1;
  30. break;
  31. case UserState.AuctionMenu:
  32. User.Session.GetModule<AuctionModule>().SelectedSticker = sticker;
  33. User.Session.GetModule<AuctionModule>().Count = 1;
  34. break;
  35. case UserState.CombineMenu:
  36. User.Session.GetModule<CombineModule>().SelectedSticker = sticker;
  37. User.Session.GetModule<CombineModule>().Count = 1;
  38. break;
  39. case UserState.Default:
  40. User.Session.GetModule<DefaultModule>().SelectedSticker = sticker;
  41. break;
  42. }
  43. var stickerMessage = await MessageController.SendSticker(User, sticker.Id);
  44. var infoMessage = await MessageController.SendMessage(User, sticker.ToString(stickerCount), Keyboard.GetStickerKeyboard(User.Session));
  45. if (User.Session.State == UserState.AuctionMenu) User.Session.State = UserState.ProductMenu;
  46. User.Session.Messages.Add(stickerMessage.MessageId);
  47. User.Session.Messages.Add(infoMessage.MessageId);
  48. }
  49. protected internal override bool IsMatches(UserEntity user, Update update)
  50. {
  51. return base.IsMatches(user, update) &&
  52. user.Session.State is UserState.CollectionMenu or UserState.AuctionMenu or UserState.CombineMenu or UserState.Default;
  53. }
  54. public SelectStickerInline() { }
  55. public SelectStickerInline(UserEntity user, Update update) : base(user, update) { }
  56. }
  57. }