OpenPack.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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 Telegram.Bot.Types;
  7. namespace CardCollector.Commands.CallbackQuery
  8. {
  9. public class OpenPack : CallbackQueryCommand
  10. {
  11. protected override string CommandText => Command.open_pack;
  12. protected override bool ClearMenu => false;
  13. protected override bool AddToStack => false;
  14. public override async Task Execute()
  15. {
  16. var packId = int.Parse(CallbackData.Split("=")[1]);
  17. var userPack = await UserPacksDao.GetOne(User.Id, packId);
  18. if (userPack.Count < 1)
  19. await MessageController.AnswerCallbackQuery(User, CallbackQueryId, Messages.packs_count_zero, true);
  20. else
  21. {
  22. await User.ClearChat();
  23. var packInfo = await PacksDao.GetById(packId);
  24. packInfo.OpenedCount++;
  25. userPack.Count--;
  26. var tier = GetTier(Utilities.rnd.NextDouble() * 100);
  27. var stickers = await StickerDao.GetListWhere(item =>
  28. item.Tier == tier && (packId == 1 || item.PackId == packId));
  29. var sticker = stickers[Utilities.rnd.Next(stickers.Count)];
  30. if (User.Stickers.ContainsKey(sticker.Md5Hash))
  31. User.Stickers[sticker.Md5Hash].Count++;
  32. else
  33. await UserStickerRelationDao.AddNew(User, sticker, 1);
  34. var stickerMessage = await MessageController.SendSticker(User, sticker.Id);
  35. var message = await MessageController.SendMessage(User, $"{Messages.congratulation}\n{sticker}");
  36. User.Session.Messages.Add(stickerMessage.MessageId);
  37. User.Session.Messages.Add(message.MessageId);
  38. }
  39. }
  40. private int GetTier(double chance)
  41. {
  42. return chance switch
  43. {
  44. < 0.7 => 4,
  45. < 3.3 => 3,
  46. < 16 => 2,
  47. _ => 1
  48. };
  49. }
  50. public OpenPack() { }
  51. public OpenPack(UserEntity user, Update update) : base(user, update) { }
  52. }
  53. }