Tigran пре 3 година
родитељ
комит
0f4adad6a5

+ 1 - 1
CardCollector.sln.DotSettings.user

@@ -12,7 +12,7 @@
 	
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=CardCollector_002FDailyTasks_002FTitles/@EntryIndexedValue">False</s:Boolean>
 	
-	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=CardCollector_002FResources_002FCommand/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=CardCollector_002FResources_002FCommand/@EntryIndexedValue">False</s:Boolean>
 	
 	
 	

+ 1 - 1
CardCollector/Bot.cs

@@ -76,7 +76,7 @@ namespace CardCollector
         {
             var users = await UserDao.GetAllWhere(user => Task.FromResult(!user.IsBlocked));
             foreach (var user in users)
-                await SendMessage(user, Messages.daily_task_alertation, Keyboard.Menu);
+                await SendMessage(user, Messages.daily_task_alertation);
         }
     }
 }

+ 2 - 0
CardCollector/Commands/CallbackQuery/Back.cs

@@ -16,7 +16,9 @@ namespace CardCollector.Commands.CallbackQuery
             EnterGemsExchange.RemoveFromQueue(User.Id);
             EnterGemsPrice.RemoveFromQueue(User.Id);
             if (User.Session.TryGetPreviousMenu(out var menu))
+            {
                 await menu.BackToThis(User.Session);
+            }
             else await User.Session.EndSession();
         }
         

+ 6 - 4
CardCollector/Commands/CallbackQuery/BuyShopItem.cs

@@ -12,7 +12,6 @@ namespace CardCollector.Commands.CallbackQuery
     public class BuyShopItem : CallbackQueryCommand
     {
         protected override string CommandText => Command.buy_shop_item;
-        protected override bool ClearMenu => true;
         protected override bool ClearStickers => true;
 
         public override async Task Execute()
@@ -42,15 +41,18 @@ namespace CardCollector.Commands.CallbackQuery
             {
                 if (currency == "coins") User.Cash.Coins -= resultPriceCoins;
                 else if (currency == "gems") User.Cash.Gems -= resultPriceGems;
-                
+                var canBuy = currency == "coins" && User.Cash.Coins >= resultPriceCoins ||
+                             currency == "gems" && User.Cash.Gems >= resultPriceGems;
                 if (offerSpecial && !offerInfinite)
                     await SpecialOfferUsersDao.AddNew(User.Id, module.SelectedPosition.Id);
                 var packId = module.SelectedPosition?.PackId ?? module.SelectedPack?.Id ?? 1;
                 var userPack = await UserPacksDao.GetOne(User.Id, packId);
                 userPack.Count += module.SelectedPosition?.Count ?? module.Count;
                 if (module.SelectedPosition?.AdditionalPrize != "") await GivePrize(module.SelectedPosition?.AdditionalPrize);
-                await MessageController.SendMessage(User, Messages.thanks_for_buying);
-                User.Session.ResetModule<ShopModule>();
+                await MessageController.SendMessage(User, $"{Messages.thanks_for_buying} {userPack.Count}", 
+                    offerSpecial && !offerInfinite || (module.SelectedPosition?.Expired ?? false) || !canBuy
+                    ? Keyboard.BackKeyboard
+                    : Keyboard.RepeatCommand(Text.buy_more, CallbackData));
             }
         }
 

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

@@ -12,6 +12,7 @@ namespace CardCollector.Commands.CallbackQuery
     {
         protected override string CommandText => Command.my_packs;
         protected override bool AddToStack => true;
+        protected override bool ClearStickers => true;
 
         public override async Task Execute()
         {

+ 9 - 1
CardCollector/Commands/CallbackQuery/OpenAuthorPackMenu.cs

@@ -12,13 +12,21 @@ namespace CardCollector.Commands.CallbackQuery
     {
         protected override string CommandText => Command.open_author_pack_menu;
         protected override bool AddToStack => true;
+        protected override bool ClearStickers => true;
 
         public override async Task Execute()
         {
             var packs = (await UserPacksDao.GetUserPacks(User.Id))
                 .Where(item => item.Count > 0 && item.PackId != 1).ToList();
             if (packs.Count == 0)
-                await MessageController.AnswerCallbackQuery(User, CallbackQueryId, Messages.packs_count_zero, true);
+            {
+                if (User.Session.PreviousCommandType == typeof(OpenPack))
+                {
+                    User.Session.PopLast();
+                    await new Back(User, Update).Execute();
+                }
+                else await MessageController.AnswerCallbackQuery(User, CallbackQueryId, Messages.packs_count_zero, true);
+            }
             else
             {
                 var page = int.Parse(CallbackData.Split('=')[1]);

+ 4 - 1
CardCollector/Commands/CallbackQuery/OpenPack.cs

@@ -31,7 +31,10 @@ namespace CardCollector.Commands.CallbackQuery
                 else
                     await UserStickerRelationDao.AddNew(User, sticker, 1);
                 await MessageController.SendSticker(User, sticker.Id);
-                await MessageController.SendMessage(User, $"{Messages.congratulation}\n{sticker}");
+                await MessageController.SendMessage(User, $"{Messages.congratulation}\n{sticker}",
+                    userPack.Count > 0
+                        ? Keyboard.RepeatCommand(Text.open_more, CallbackData)
+                        : Keyboard.BackKeyboard);
             }
         }
 

+ 2 - 3
CardCollector/Commands/Message/EnterGemsPrice.cs

@@ -27,9 +27,8 @@ namespace CardCollector.Commands.Message
             else
             {
                 module.SellPrice = price;
-                await MessageController.EditMessage(User,
-                    $"{Messages.confirm_selling} {module.SellPrice}{Text.gem}:", Keyboard.AuctionPutCancelKeyboard);
-                Queue.Remove(User.Id);
+                await MessageController.EditMessage(User, $"{Messages.confirm_selling} {module.SellPrice}{Text.gem}:" +
+                                                          $"\n{Messages.or_enter_another_sum}", Keyboard.AuctionPutCancelKeyboard);
             }
         }
 

+ 2 - 1
CardCollector/Commands/Message/Menu.cs

@@ -13,7 +13,8 @@ namespace CardCollector.Commands.Message
         public override async Task Execute()
         {
             /* Отправляем пользователю сообщение со стандартной клавиатурой */
-            await MessageController.SendMessage(User, Messages.menu_message, Keyboard.Menu);
+            var message = await MessageController.SendMessage(User, Messages.menu_message, Keyboard.Menu);
+            User.Session.Messages.Remove(message.MessageId);
         }
 
         public Menu() { }

+ 1 - 0
CardCollector/Controllers/MessageController.cs

@@ -174,6 +174,7 @@ namespace CardCollector.Controllers
             }
             catch (Exception)
             {
+                //if (e is ApiRequestException && e.Message.Contains("message is not modified")) return new Message();
                 await user.ClearChat();
                 try
                 {

+ 9 - 0
CardCollector/Resources/Keyboard.cs

@@ -408,5 +408,14 @@ namespace CardCollector.Resources
         {
             return new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl(Text.login, loginLink));
         }
+
+        public static InlineKeyboardMarkup RepeatCommand(string buttonText, string callbackData)
+        {
+            return new InlineKeyboardMarkup(new[]
+            {
+                new []{InlineKeyboardButton.WithCallbackData(buttonText, callbackData)},
+                new []{InlineKeyboardButton.WithCallbackData(Text.back, Command.back)},
+            });
+        }
     }
 }

+ 10 - 1
CardCollector/Resources/Messages.Designer.cs

@@ -492,6 +492,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Или введите другую сумму:.
+        /// </summary>
+        internal static string or_enter_another_sum {
+            get {
+                return ResourceManager.GetString("or_enter_another_sum", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to При покупке &quot;Случайного пака&quot; Вам может выпасть ЛЮБОЙ стикер от ЛЮБОГО художника
         ///
@@ -645,7 +654,7 @@ namespace CardCollector.Resources {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Спасибо за покупку!.
+        ///   Looks up a localized string similar to Спасибо за покупку! У вас в наличии:.
         /// </summary>
         internal static string thanks_for_buying {
             get {

+ 4 - 1
CardCollector/Resources/Messages.resx

@@ -181,7 +181,7 @@
         <value>Выберите одну из опций ниже</value>
     </data>
     <data name="thanks_for_buying" xml:space="preserve">
-        <value>Спасибо за покупку!</value>
+        <value>Спасибо за покупку! У вас в наличии:</value>
     </data>
     <data name="pack_info" xml:space="preserve">
         <value>При покупке "Случайного пака" Вам может выпасть ЛЮБОЙ стикер от ЛЮБОГО художника
@@ -273,4 +273,7 @@
 5 - Случайный стикер 2 тира раз в 3 дня
 6 - Случайный стикер 1 тира раз в 3 дня</value>
     </data>
+    <data name="or_enter_another_sum" xml:space="preserve">
+        <value>Или введите другую сумму:</value>
+    </data>
 </root>

+ 18 - 0
CardCollector/Resources/Text.Designer.cs

@@ -168,6 +168,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Купить ещё.
+        /// </summary>
+        internal static string buy_more {
+            get {
+                return ResourceManager.GetString("buy_more", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Купить пак.
         /// </summary>
@@ -492,6 +501,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Открыть ещё.
+        /// </summary>
+        internal static string open_more {
+            get {
+                return ResourceManager.GetString("open_more", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Открыть случайный пак.
         /// </summary>

+ 6 - 0
CardCollector/Resources/Text.resx

@@ -255,4 +255,10 @@
     <data name="buy_gems_button" xml:space="preserve">
         <value>💎 Купить алмазы 💎</value>
     </data>
+    <data name="buy_more" xml:space="preserve">
+        <value>Купить ещё</value>
+    </data>
+    <data name="open_more" xml:space="preserve">
+        <value>Открыть ещё</value>
+    </data>
 </root>

+ 8 - 2
CardCollector/Session/Session.cs

@@ -25,7 +25,7 @@ namespace CardCollector.Session
         public readonly List<int> Messages = new();
         /* Последовательность вызова списка меню */
         private readonly Stack<MenuInformation> MenuStack = new();
-        private Type PreviousCommandType;
+        public Type PreviousCommandType;
         private Type CurrentCommandType;
 
         public UserSession(UserEntity user)
@@ -98,11 +98,16 @@ namespace CardCollector.Session
         public bool TryGetPreviousMenu(out MenuInformation menu)
         {
             while (MenuStack.TryPeek(out menu) && CurrentCommandType == menu.GetMenuType()) {
-                MenuStack.TryPop(out _);
+                PopLast();
             }
             return MenuStack.TryPeek(out menu);
         }
 
+        public void PopLast()
+        {
+            MenuStack.TryPop(out _);
+        }
+
         public void AddMenuToStack(UpdateModel menu)
         {
             var menuInfo = new MenuInformation(menu, State);
@@ -117,6 +122,7 @@ namespace CardCollector.Session
 
         public void UndoCurrentCommand()
         {
+            if (MenuStack.TryPeek(out var menu) && menu.GetType() == CurrentCommandType) MenuStack.Pop();
             CurrentCommandType = PreviousCommandType;
         }