CombineStickers.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using CardCollector.Controllers;
  5. using CardCollector.DataBase.Entity;
  6. using CardCollector.DataBase.EntityDao;
  7. using CardCollector.Resources;
  8. using CardCollector.Session.Modules;
  9. using Telegram.Bot.Types;
  10. namespace CardCollector.Commands.CallbackQuery
  11. {
  12. public class CombineStickers : CallbackQuery
  13. {
  14. protected override string CommandText => Command.combine_stickers;
  15. public override async Task Execute()
  16. {
  17. var combineModule = User.Session.GetModule<CombineModule>();
  18. var price = combineModule.CalculateCombinePrice();
  19. if (User.Cash.Coins < price)
  20. await MessageController.AnswerCallbackQuery(User, CallbackQueryId, Messages.not_enougth_coins);
  21. else
  22. {
  23. await User.ClearChat();
  24. User.Cash.Coins -= price;
  25. var result = 0;
  26. foreach (var (item, count) in combineModule.CombineList)
  27. {
  28. result += await User.Cash.Payout(User.Stickers);
  29. User.Stickers[item.Md5Hash].Count -= count;
  30. }
  31. await MessageController.AnswerCallbackQuery(User, CallbackQueryId, $"{Messages.you_collected} {result}{Text.coin}");
  32. var authors = combineModule.CombineList.Select(i => i.Key.Author).ToList();
  33. var tier = combineModule.Tier;
  34. var rnd = new Random();
  35. var author = authors[rnd.Next(authors.Count)];
  36. var stickers = await StickerDao.GetListWhere(i => i.Author == author && i.Tier == tier + 1);
  37. var sticker = stickers[rnd.Next(stickers.Count)];
  38. if (User.Stickers.ContainsKey(sticker.Md5Hash)) await User.Cash.Payout(User.Stickers);
  39. await UserStickerRelationDao.AddNew(User, sticker, 1);
  40. var text = $"{Messages.combined_sticker}:\n" + sticker;
  41. var stickerMessage = await MessageController.SendSticker(User, sticker.Id);
  42. var message = await MessageController.SendMessage(User, text, Keyboard.BackToFilters(sticker.Title));
  43. User.Session.DeleteModule<CombineModule>();
  44. User.Session.Messages.Add(stickerMessage.MessageId);
  45. User.Session.Messages.Add(message.MessageId);
  46. }
  47. }
  48. public CombineStickers() { }
  49. public CombineStickers(UserEntity user, Update update) : base(user, update) { }
  50. }
  51. }