BuyStickerQuery.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.Threading.Tasks;
  3. using CardCollector.Controllers;
  4. using CardCollector.DataBase.Entity;
  5. using CardCollector.DataBase.EntityDao;
  6. using CardCollector.Resources;
  7. using Telegram.Bot.Types;
  8. namespace CardCollector.Commands.CallbackQuery
  9. {
  10. public class BuyStickerQuery : CallbackQuery
  11. {
  12. protected override string CommandText => Command.buy_sticker;
  13. public override async Task Execute()
  14. {
  15. try
  16. {
  17. var selectedSticker = User.Session.SelectedSticker;
  18. var count = User.Session.State switch
  19. {
  20. UserState.AuctionMenu => await AuctionController.GetStickerCount(selectedSticker.TraderInfo.Id),
  21. UserState.ShopMenu => await ShopController.GetStickerCount(selectedSticker.Id),
  22. _ => 0
  23. };
  24. var coinsPrice = selectedSticker.GetCoinsPrice();
  25. var gemsPrice = selectedSticker.GetGemsPrice();
  26. if (count < selectedSticker.Count && count != -1)
  27. await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id,
  28. Messages.not_enougth_stickers);
  29. else if (coinsPrice > User.Cash.Coins)
  30. await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id,
  31. Messages.not_enougth_coins);
  32. else if (gemsPrice > User.Cash.Gems)
  33. await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id,
  34. Messages.not_enougth_gems);
  35. else
  36. {
  37. switch (User.Session.State)
  38. {
  39. case UserState.AuctionMenu:
  40. await AuctionController.BuyCard(selectedSticker);
  41. break;
  42. case UserState.ShopMenu:
  43. await ShopController.SoldCard(selectedSticker);
  44. break;
  45. }
  46. if (User.Stickers.ContainsKey(selectedSticker.Md5Hash))
  47. {
  48. await User.Session.PayOutOne(selectedSticker.Md5Hash);
  49. await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id,
  50. $"{Messages.you_collected} {User.Session.IncomeCoins}{Text.coin} / {User.Session.IncomeGems}{Text.gem}");
  51. }
  52. await UserStickerRelationDao.AddNew(User, selectedSticker, selectedSticker.Count);
  53. User.Cash.Coins -= coinsPrice;
  54. User.Cash.Gems -= gemsPrice;
  55. User.Session.SelectedSticker = null;
  56. await User.ClearChat();
  57. }
  58. }
  59. catch (Exception)
  60. {
  61. await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id, Messages.not_enougth_stickers);
  62. await new BackToFiltersMenu(User, Update).Execute();
  63. }
  64. }
  65. public BuyStickerQuery() { }
  66. public BuyStickerQuery(UserEntity user, Update update) : base(user, update) { }
  67. }
  68. }