BuyByGems.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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 CardCollector.Session.Modules;
  8. using Telegram.Bot.Types;
  9. namespace CardCollector.Commands.CallbackQuery
  10. {
  11. public class BuyByGems : CallbackQueryCommand
  12. {
  13. protected override string CommandText => Command.buy_by_gems;
  14. public override async Task Execute()
  15. {
  16. var offerInfo = User.Session.GetModule<ShopModule>().SelectedPosition;
  17. if (User.Cash.Gems < offerInfo.ResultPriceGems)
  18. await MessageController.AnswerCallbackQuery(User, CallbackQueryId, Messages.not_enougth_gems);
  19. else if (offerInfo.Expired)
  20. await MessageController.AnswerCallbackQuery(User, CallbackQueryId, Messages.offer_expired);
  21. else if (offerInfo.IsSpecial && !offerInfo.IsInfinite && await SpecialOfferUsersDao.NowUsed(User.Id, offerInfo.Id))
  22. await MessageController.AnswerCallbackQuery(User, CallbackQueryId, Messages.you_already_use_this_offer);
  23. else
  24. {
  25. await User.ClearChat();
  26. User.Cash.Gems -= offerInfo.ResultPriceGems;
  27. if (offerInfo.IsSpecial && !offerInfo.IsInfinite)
  28. await SpecialOfferUsersDao.AddNew(User.Id, offerInfo.Id);
  29. var userPacks = await UsersPacksDao.GetUserPacks(User.Id);
  30. switch (offerInfo.PackId)
  31. {
  32. case 1:
  33. userPacks.RandomCount += offerInfo.Count;
  34. break;
  35. case 2:
  36. userPacks.AuthorCount += offerInfo.Count;
  37. break;
  38. default:
  39. var info = await SpecificPackDao.GetInfo(User.Id, offerInfo.PackId);
  40. info.Count += offerInfo.Count;
  41. break;
  42. }
  43. await MessageController.EditMessage(User, CallbackMessageId, Messages.thanks_for_buying);
  44. if (offerInfo.AdditionalPrize != "") await GivePrize(offerInfo.AdditionalPrize);
  45. }
  46. }
  47. private async Task GivePrize(string prizeInfo)
  48. {
  49. var data = prizeInfo.Split('=');
  50. StickerEntity sticker = null;
  51. switch (data[0])
  52. {
  53. case "tier":
  54. var tier = int.Parse(data[1]);
  55. var stickers = await StickerDao.GetListWhere(item => item.Tier == tier);
  56. var rnd = new Random();
  57. sticker = stickers[rnd.Next(stickers.Count)];
  58. break;
  59. case "sticker":
  60. sticker = await StickerDao.GetStickerByHash(data[1]);
  61. break;
  62. }
  63. if (sticker != null)
  64. {
  65. if (!User.Stickers.ContainsKey(sticker.Md5Hash))
  66. await UserStickerRelationDao.AddNew(User, sticker, 1);
  67. else
  68. User.Stickers[sticker.Md5Hash].Count ++;
  69. var stickerMessage = await MessageController.SendSticker(User, sticker.Id);
  70. var message = await MessageController.SendMessage(User, $"{Messages.congratulation}\n{sticker}");
  71. User.Session.Messages.Add(stickerMessage.MessageId);
  72. User.Session.Messages.Add(message.MessageId);
  73. }
  74. }
  75. public BuyByGems() { }
  76. public BuyByGems(UserEntity user, Update update) : base(user, update) { }
  77. }
  78. }