Selaa lähdekoodia

Refactor code

Tigran 4 vuotta sitten
vanhempi
commit
235bb8b7cb

+ 1 - 7
CardCollector/Commands/CallbackQuery/BackToStickerQuery.cs

@@ -12,13 +12,7 @@ namespace CardCollector.Commands.CallbackQuery
         public override async Task Execute()
         {
             var sticker = User.Session.SelectedSticker;
-            var stickerCount = sticker.TraderInfo?.Quantity ?? sticker.Count;
-            var text = $"\n<<{sticker.Title}>>" +
-                       $"\n{Text.emoji}: {sticker.Emoji}" +
-                       $"\n{Text.author}: {sticker.Author}" +
-                       $"\n{Text.count}: {(stickerCount != -1 ? stickerCount : "∞")}" +
-                       $"\n{sticker.IncomeCoins}{Text.coin} / {sticker.IncomeGems}{Text.gem} {sticker.IncomeTime}{Text.time}{Text.minutes}";
-            await MessageController.EditMessage(User, CallbackMessageId, text, Keyboard.GetStickerKeyboard(User.Session));
+            await MessageController.EditMessage(User, CallbackMessageId, sticker.ToString(), Keyboard.GetStickerKeyboard(User.Session));
         }
 
         public BackToStickerQuery() { }

+ 2 - 6
CardCollector/Commands/CallbackQuery/BuyStickerQuery.cs

@@ -19,12 +19,8 @@ namespace CardCollector.Commands.CallbackQuery
                 UserState.ShopMenu => await ShopController.GetStickerCount(selectedSticker.Id),
                 _ => 0
             };
-            var coinsPrice = User.Session.SelectedSticker.Count * (User.Session.State == UserState.AuctionMenu 
-                ? User.Session.SelectedSticker.TraderInfo.PriceCoins
-                : User.Session.SelectedSticker.PriceCoins);
-            var gemsPrice = User.Session.SelectedSticker.Count * (User.Session.State == UserState.AuctionMenu 
-                ? User.Session.SelectedSticker.TraderInfo.PriceGems
-                : User.Session.SelectedSticker.PriceGems);
+            var coinsPrice = selectedSticker.GetCoinsPrice();
+            var gemsPrice = selectedSticker.GetGemsPrice();
             if (count < selectedSticker.Count && count != -1)
                 await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id, Messages.not_enougth_stickers);
             else if (coinsPrice > User.Cash.Coins)

+ 1 - 0
CardCollector/Commands/CallbackQuery/CancelCallback.cs

@@ -11,6 +11,7 @@ namespace CardCollector.Commands.CallbackQuery
         public override async Task Execute()
         {
             User.Session.State = UserState.Default;
+            User.Session.SelectedSticker = null;
             await User.ClearChat();
         }
 

+ 4 - 9
CardCollector/Commands/CallbackQuery/ConfirmBuyingQuery.cs

@@ -11,21 +11,16 @@ namespace CardCollector.Commands.CallbackQuery
         protected override string CommandText => Command.confirm_buying;
         public override async Task Execute()
         {
-            var coinsPrice = User.Session.SelectedSticker.Count * (User.Session.State == UserState.AuctionMenu 
-                ? User.Session.SelectedSticker.TraderInfo.PriceCoins
-                : User.Session.SelectedSticker.PriceCoins);
-            var gemsPrice = User.Session.SelectedSticker.Count * (User.Session.State == UserState.AuctionMenu 
-                ? User.Session.SelectedSticker.TraderInfo.PriceGems
-                : User.Session.SelectedSticker.PriceGems);
+            var coinsPrice = User.Session.SelectedSticker.GetCoinsPrice();
+            var gemsPrice = User.Session.SelectedSticker.GetGemsPrice();
             if (coinsPrice > User.Cash.Coins)
                 await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id, Messages.not_enougth_coins);
             else if (gemsPrice > User.Cash.Gems)
                 await MessageController.AnswerCallbackQuery(User, Update.CallbackQuery!.Id, Messages.not_enougth_gems);
             else
             {
-                var text = $"{Messages.confirm_buying}" +
-                           $"\n{User.Session.SelectedSticker.Count}{Text.items} {Text.per} {coinsPrice}{Text.coin} / {gemsPrice}{Text.gem}" +
-                           $"\n{Messages.are_you_sure}";
+                var text = $"{Messages.confirm_buying}\n{User.Session.SelectedSticker.Count}{Text.items}" +
+                           $" {Text.per} {coinsPrice}{Text.coin} / {gemsPrice}{Text.gem}\n{Messages.are_you_sure}";
                 await MessageController.EditMessage(User, CallbackMessageId, text, Keyboard.GetConfirmationKeyboard(Command.buy_sticker));
             }
         }

+ 4 - 12
CardCollector/Commands/ChosenInlineResult/SelectStickerInlineResult.cs

@@ -1,5 +1,4 @@
-using System.Linq;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
 using CardCollector.Controllers;
 using CardCollector.DataBase.Entity;
 using CardCollector.DataBase.EntityDao;
@@ -23,17 +22,10 @@ namespace CardCollector.Commands.ChosenInlineResult
                 UserState.ShopMenu => await ShopController.GetStickerCount(sticker.Id),
                 _ => User.Stickers[sticker.Md5Hash].Count
             };
-            var messageText = string.Concat(Enumerable.Repeat(Text.star, sticker.Tier));
-            messageText += $"\n<<{sticker.Title}>>" +
-                           $"\n{Text.emoji}: {sticker.Emoji}" +
-                           $"\n{Text.author}: {sticker.Author}" +
-                           $"\n{Text.count}: {(stickerCount != -1 ? stickerCount : "∞")}" +
-                           $"\n{sticker.IncomeCoins}{Text.coin} / {sticker.IncomeGems}{Text.gem} {sticker.IncomeTime}{Text.time}{Text.minutes}";
-            if (sticker.Description != "") messageText += $"\n\n{Text.description}: {sticker.Description}";
-            var stickerMessage = await MessageController.SendSticker(User, sticker.Id);
-            var stickerInfo = new StickerInfo(sticker) {Count = 1};
+            var stickerInfo = new StickerInfo(sticker) {MaxCount = stickerCount};
             User.Session.SelectedSticker = stickerInfo;
-            var infoMessage = await MessageController.SendMessage(User, messageText, Keyboard.GetStickerKeyboard(User.Session));
+            var stickerMessage = await MessageController.SendSticker(User, sticker.Id);
+            var infoMessage = await MessageController.SendMessage(User, stickerInfo.ToString(), Keyboard.GetStickerKeyboard(User.Session));
             User.Session.Messages.Add(stickerMessage.MessageId);
             User.Session.Messages.Add(infoMessage.MessageId);
         }

+ 2 - 7
CardCollector/Commands/ChosenInlineResult/SelectTraderResult.cs

@@ -15,15 +15,10 @@ namespace CardCollector.Commands.ChosenInlineResult
             await User.ClearChat();
             var productId = int.Parse(InlineResult.Split('=')[1]);
             var trader = await AuctionDao.GetTraderInfo(productId);
-            User.Session.SelectedSticker.TraderInfo = trader;
             var sticker = User.Session.SelectedSticker;
-            var text = $"\n<<{sticker.Title}>>" +
-                       $"\n{Text.emoji}: {sticker.Emoji}" +
-                       $"\n{Text.author}: {sticker.Author}" +
-                       $"\n{Text.count}: {sticker.TraderInfo.Quantity}" +
-                       $"\n{sticker.IncomeCoins}{Text.coin} / {sticker.IncomeGems}{Text.gem} {sticker.IncomeTime}{Text.time}{Text.minutes}";
+            sticker.TraderInfo = trader;
             var messageSticker = await MessageController.SendSticker(User, User.Session.SelectedSticker.Id);
-            var message = await MessageController.SendMessage(User, text, Keyboard.GetStickerKeyboard(User.Session));
+            var message = await MessageController.SendMessage(User, sticker.ToString(), Keyboard.GetStickerKeyboard(User.Session));
             User.Session.Messages.Add(messageSticker.MessageId);
             User.Session.Messages.Add(message.MessageId);
         }

+ 2 - 1
CardCollector/Commands/InlineQuery/ShowAuctionStickers.cs

@@ -15,7 +15,8 @@ namespace CardCollector.Commands.InlineQuery
             var filter = Update.InlineQuery!.Query;
             // Получаем список стикеров
             var stickersList = await AuctionController.GetStickers(filter);
-            var results = User.Session.Filters.ApplyTo(stickersList, User.Session.State).ToTelegramResults(Command.select_sticker);
+            var results = User.Session.Filters
+                .ApplyTo(stickersList, User.Session.State).ToTelegramResults(Command.select_sticker);
             // Посылаем пользователю ответ на его запрос
             await MessageController.AnswerInlineQuery(InlineQueryId, results);
         }

+ 2 - 1
CardCollector/Commands/InlineQuery/ShowCollectionStickers.cs

@@ -16,7 +16,8 @@ namespace CardCollector.Commands.InlineQuery
             var filter = Update.InlineQuery!.Query;
             // Получаем список стикеров
             var stickersList = await User.GetStickersList(filter);
-            var results = User.Session.Filters.ApplyTo(stickersList, User.Session.State).ToTelegramResults(Command.select_sticker);
+            var results = User.Session.Filters
+                .ApplyTo(stickersList, User.Session.State).ToTelegramResults(Command.select_sticker);
             // Посылаем пользователю ответ на его запрос
             await MessageController.AnswerInlineQuery(InlineQueryId, results);
         }

+ 2 - 1
CardCollector/Commands/InlineQuery/ShowShopStickers.cs

@@ -15,7 +15,8 @@ namespace CardCollector.Commands.InlineQuery
             var filter = Update.InlineQuery!.Query;
             // Получаем список стикеров
             var stickersList = await ShopController.GetStickers(filter);
-            var results = User.Session.Filters.ApplyTo(stickersList, User.Session.State).ToTelegramResults(Command.select_sticker);
+            var results = User.Session.Filters
+                .ApplyTo(stickersList, User.Session.State).ToTelegramResults(Command.select_sticker);
             // Посылаем пользователю ответ на его запрос
             await MessageController.AnswerInlineQuery(InlineQueryId, results);
         }

+ 1 - 0
CardCollector/Commands/Message/TextMessage/ShowFiltersMenu.cs

@@ -12,6 +12,7 @@ namespace CardCollector.Commands.Message.TextMessage
         protected override string CommandText => "Message";
         public override async Task Execute()
         {
+            User.Session.SelectedSticker = null;
             /* Формируем сообщение с имеющимися фильтрами у пользователя */
             var text = User.Session.Filters.ToMessage(User.Session.State);
             /* Отправляем сообщение */

+ 1 - 1
CardCollector/Commands/Message/TextMessage/StartMessage.cs

@@ -18,7 +18,7 @@ namespace CardCollector.Commands.Message.TextMessage
             await MessageController.SendMessage(User, Messages.start_message, Keyboard.Menu);
         }
         
-        public StartMessage(UserEntity user, Update update) : base(user, update) { }
         public StartMessage() { }
+        public StartMessage(UserEntity user, Update update) : base(user, update) { }
     }
 }

+ 1 - 1
CardCollector/DataBase/CardCollectorDatabase.cs

@@ -28,7 +28,7 @@ namespace CardCollector.DataBase
             }
         }
 
-        private static Dictionary<Type, CardCollectorDatabase> _specificInstances = new ();
+        private static readonly Dictionary<Type, CardCollectorDatabase> _specificInstances = new ();
 
         public static CardCollectorDatabase GetSpecificInstance(Type type)
         {

+ 1 - 1
CardCollector/DataBase/EntityDao/UserDao.cs

@@ -76,7 +76,7 @@ namespace CardCollector.DataBase.EntityDao
             foreach (var (id, user) in ActiveUsers)
             {
                 if (user.Session.GetLastAccessInterval() <= Constants.SESSION_ACTIVE_PERIOD) continue;
-                user.Session.EndSession();
+                user.Session.Dispose();
                 ActiveUsers.Remove(id);
             }
         }

+ 1 - 1
CardCollector/Others/Session.cs

@@ -119,7 +119,7 @@ namespace CardCollector.Others
         public async void EndSession()
         {
             await ClearMessages();
-            
+            SelectedSticker = null;
         }
         
         public void Dispose()

+ 27 - 2
CardCollector/Others/StickerInfo.cs

@@ -1,4 +1,6 @@
-using CardCollector.DataBase.Entity;
+using System.Linq;
+using CardCollector.DataBase.Entity;
+using CardCollector.Resources;
 
 namespace CardCollector.Others
 {
@@ -21,9 +23,32 @@ namespace CardCollector.Others
             Md5Hash = entity.Md5Hash;
         }
         
-        public int Count;
+        public int Count = 1;
+        public int MaxCount;
         
         
         public TraderInformation TraderInfo = null;
+
+        public int GetCoinsPrice()
+        {
+            return Count * TraderInfo?.PriceCoins ?? PriceCoins;
+        }
+        
+        public int GetGemsPrice()
+        {
+            return Count * TraderInfo?.PriceCoins ?? PriceCoins;
+        }
+
+        public override string ToString()
+        {
+            var count = TraderInfo?.Quantity ?? MaxCount;
+            var str = $"\n{Title} {string.Concat(Enumerable.Repeat(Text.star, Tier))}" +
+                $"\n{Text.emoji}: {Emoji}" +
+                $"\n{Text.author}: {Author}" +
+                $"\n{Text.count}: {(count != -1 ? count : "∞")}" +
+                $"\n{IncomeCoins}{Text.coin} / {IncomeGems}{Text.gem} {IncomeTime}{Text.time}{Text.minutes}";
+            if (Description != "") str += $"\n\n{Text.description}: {Description}";
+            return str;
+        }
     }
 }