Count.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Threading.Tasks;
  2. using CardCollector.Controllers;
  3. using CardCollector.DataBase.Entity;
  4. using CardCollector.Resources;
  5. using CardCollector.Session.Modules;
  6. using Telegram.Bot.Types;
  7. namespace CardCollector.Commands.CallbackQuery
  8. {
  9. public class Count : CallbackQueryCommand
  10. {
  11. protected override string CommandText => Command.count;
  12. protected override bool ClearMenu => false;
  13. protected override bool AddToStack => false;
  14. public override async Task Execute()
  15. {
  16. var (stickerCount, maxCount) = User.Session.State switch
  17. {
  18. UserState.CollectionMenu when User.Session.GetModule<CollectionModule>() is {} module =>
  19. (module.Count, User.Stickers[module.SelectedSticker.Md5Hash].Count),
  20. UserState.ProductMenu when User.Session.GetModule<AuctionModule>() is {} module =>
  21. (module.Count, module.MaxCount),
  22. UserState.CombineMenu when User.Session.GetModule<CombineModule>() is {} module =>
  23. (module.Count, User.Stickers[module.SelectedSticker.Md5Hash].Count),
  24. _ => (0, 0)
  25. };
  26. var changed = false;
  27. if (CallbackData.Contains(Text.plus) && (stickerCount < maxCount || maxCount == -1))
  28. {
  29. stickerCount++;
  30. changed = true;
  31. }
  32. else if (CallbackData.Contains(Text.minus) && stickerCount > 1)
  33. {
  34. stickerCount--;
  35. changed = true;
  36. }
  37. switch(User.Session.State)
  38. {
  39. case UserState.CollectionMenu:
  40. User.Session.GetModule<CollectionModule>().Count = stickerCount;
  41. break;
  42. case UserState.ProductMenu:
  43. User.Session.GetModule<AuctionModule>().Count = stickerCount;
  44. break;
  45. case UserState.CombineMenu:
  46. User.Session.GetModule<CombineModule>().Count = stickerCount;
  47. break;
  48. }
  49. if (changed) await MessageController.EditReplyMarkup(User, CallbackMessageId, Keyboard.GetStickerKeyboard(User.Session));
  50. else await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id, Messages.cant_change_count);
  51. }
  52. public Count() { }
  53. public Count(UserEntity user, Update update) : base(user, update) { }
  54. }
  55. }