Ver Fonte

showing information about sticker released

Tigran há 4 anos atrás
pai
commit
de7159b1d6

+ 1 - 1
CardCollector.sln.DotSettings.user

@@ -1,6 +1,6 @@
 <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
 	
-	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=CardCollector_002FResources_002FCommand/@EntryIndexedValue">False</s:Boolean>
+	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=CardCollector_002FResources_002FCommand/@EntryIndexedValue">True</s:Boolean>
 	
 	
 	

+ 6 - 0
CardCollector/Auction/AuctionController.cs

@@ -32,5 +32,11 @@ namespace CardCollector.Auction
             user.Cash.Coins += price * count;
             return ResultCode.Ok;
         }
+
+        public static async Task<int> GetStickerCount(string stickerId)
+        {
+            //TODO вернуть количество стикера на аукционе по его id
+            return 0;
+        }
     }
 }

+ 10 - 2
CardCollector/Commands/CallbackQuery/BackToFiltersMenu.cs

@@ -1,5 +1,4 @@
 using System.Threading.Tasks;
-using CardCollector.Commands.Message;
 using CardCollector.Commands.Message.TextMessage;
 using CardCollector.Controllers;
 using CardCollector.DataBase.Entity;
@@ -15,6 +14,9 @@ namespace CardCollector.Commands.CallbackQuery
         {
             /* Удаляем пользователя из очереди */
             EnterEmojiMessage.RemoveFromQueue(User.Id);
+            /* Очищаем чат, если был передан параметр очистки */
+            var clearChat = CallbackData.Contains(Command.clear_chat);
+            if (clearChat) await User.ClearChat();
             /* Формируем сообщение с имеющимися фильтрами у пользователя */
             var text = $"{Messages.current_filters}\n" +
                        $"{Messages.author} {(User.Filters[Command.author].Equals("") ? Messages.all : User.Filters[Command.author])}\n" +
@@ -27,7 +29,13 @@ namespace CardCollector.Commands.CallbackQuery
                         $" {(User.Filters[Command.price_gems_to] is int g && g != 0 ? g : "∞")}\n";
             text += $"{Messages.sorting} {User.Filters[Command.sort]}\n\n{Messages.select_filter}";
             /* Редактируем сообщение */
-            await MessageController.EditMessage(User, CallbackMessageId, text, Keyboard.GetSortingMenu(User.State));
+            if (!clearChat) 
+                await MessageController.EditMessage(User, CallbackMessageId, text, Keyboard.GetSortingMenu(User.State));
+            else
+            {
+                var message = await MessageController.SendMessage(User, text, Keyboard.GetSortingMenu(User.State));
+                User.Messages.Add(message.MessageId);
+            }
         }
         
         public BackToFiltersMenu() { }

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

@@ -45,6 +45,8 @@ namespace CardCollector.Commands.CallbackQuery
             
             /* Отмена в момент выбора "значения фильтра", не в самом меню */
             new BackToFiltersMenu(),
+            /* Очистка чата */
+            new ClearChat(),
         };
 
         /* Метод, создающий объекты команд исходя из полученного обновления */

+ 19 - 0
CardCollector/Commands/CallbackQuery/ClearChat.cs

@@ -0,0 +1,19 @@
+using System.Threading.Tasks;
+using CardCollector.DataBase.Entity;
+using CardCollector.Resources;
+using Telegram.Bot.Types;
+
+namespace CardCollector.Commands.CallbackQuery
+{
+    public class ClearChat : CallbackQuery
+    {
+        protected override string CommandText => Command.clear_chat;
+        public override async Task Execute()
+        {
+            await User.ClearChat();
+        }
+
+        public ClearChat() { }
+        public ClearChat(UserEntity user, Update update) : base(user, update) { }
+    }
+}

+ 1 - 0
CardCollector/Commands/ChosenInlineResult/ChosenInlineResult.cs

@@ -33,6 +33,7 @@ namespace CardCollector.Commands.ChosenInlineResult
         
             // Обработка результата при отправке стикера
             new SendStickerResult(),
+            new SelectStickerInlineResult(),
         };
         
         /* Метод, создающий объекты команд исходя из полученного обновления */

+ 42 - 0
CardCollector/Commands/ChosenInlineResult/SelectStickerInlineResult.cs

@@ -0,0 +1,42 @@
+using System.Linq;
+using System.Threading.Tasks;
+using CardCollector.Auction;
+using CardCollector.Controllers;
+using CardCollector.DataBase.Entity;
+using CardCollector.DataBase.EntityDao;
+using CardCollector.Resources;
+using Telegram.Bot.Types;
+
+namespace CardCollector.Commands.ChosenInlineResult
+{
+    public class SelectStickerInlineResult : ChosenInlineResult
+    {
+        protected override string CommandText => Command.select_sticker;
+        public override async Task Execute()
+        {
+            await User.ClearChat();
+            var hash = InlineResult.Split('=')[1];
+            var sticker = await StickerDao.GetStickerByHash(hash);
+            var stickerCount = User.State switch
+            {
+                UserState.AuctionMenu => await AuctionController.GetStickerCount(sticker.Id),
+                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}" +
+                           $"\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 infoMessage = await MessageController.SendMessage(User, messageText, Keyboard.GetStickerKeyboard(User.State, sticker.Md5Hash, sticker.Title));
+            User.Messages.Add(stickerMessage.MessageId);
+            User.Messages.Add(infoMessage.MessageId);
+        }
+
+        public SelectStickerInlineResult() { }
+        public SelectStickerInlineResult(UserEntity user, Update update, string inlineResult) : base(user, update, inlineResult) { }
+    }
+}

+ 8 - 7
CardCollector/Controllers/MessageController.cs

@@ -95,7 +95,7 @@ namespace CardCollector.Controllers
             }
             catch (Exception e)
             {
-                LogOutWarning("Can't send text message " + e);
+                LogOutWarning("Can't send text message " + e.Message);
             }
             return new TgMessage();
         }
@@ -113,7 +113,7 @@ namespace CardCollector.Controllers
             }
             catch (Exception e)
             {
-                LogOutWarning("Can't send text message with html " + e);
+                LogOutWarning("Can't send text message with html " + e.Message);
             }
             return new TgMessage();
         }
@@ -130,7 +130,7 @@ namespace CardCollector.Controllers
             }
             catch (Exception e)
             {
-                LogOutWarning("Can't send sticker " + e);
+                LogOutWarning("Can't send sticker " + e.Message);
             }
             return new TgMessage();
         }
@@ -149,7 +149,8 @@ namespace CardCollector.Controllers
             }
             catch (Exception e)
             {
-                LogOutWarning("Can't edit message text " + e);
+                LogOutWarning("Can't edit message text " + e.Message);
+                return await SendMessage(user, message, keyboard);
             }
             return new TgMessage();
         }
@@ -167,7 +168,7 @@ namespace CardCollector.Controllers
             }
             catch (Exception e)
             {
-                LogOutWarning("Can't edit reply markup " + e);
+                LogOutWarning("Can't edit reply markup " + e.Message);
             }
             return new TgMessage();
         }
@@ -184,7 +185,7 @@ namespace CardCollector.Controllers
             }
             catch (Exception e)
             {
-                LogOutWarning("Can't delete message " + e);
+                LogOutWarning("Can't delete message " + e.Message);
             }
         }
 
@@ -202,7 +203,7 @@ namespace CardCollector.Controllers
             }
             catch (Exception e)
             {
-                LogOutWarning("Can't send photo " + e);
+                LogOutWarning("Can't send photo " + e.Message);
             }
             return new TgMessage();
         }

+ 13 - 0
CardCollector/Controllers/ShopController.cs

@@ -0,0 +1,13 @@
+using System.Threading.Tasks;
+
+namespace CardCollector.Controllers
+{
+    public static class ShopController
+    {
+        public static async Task<int> GetStickerCount(string stickerId)
+        {
+            //TODO вернуть количество стикеров в магазине по id
+            return 0;
+        }
+    }
+}

+ 36 - 0
CardCollector/Resources/Command.Designer.cs

@@ -78,6 +78,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to buy.
+        /// </summary>
+        internal static string buy_sticker {
+            get {
+                return ResourceManager.GetString("buy_sticker", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to cancel.
         /// </summary>
@@ -87,6 +96,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to clear.
+        /// </summary>
+        internal static string clear_chat {
+            get {
+                return ResourceManager.GetString("clear_chat", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to collect_income.
         /// </summary>
@@ -96,6 +114,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to combine.
+        /// </summary>
+        internal static string combine {
+            get {
+                return ResourceManager.GetString("combine", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to emoji.
         /// </summary>
@@ -159,6 +186,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to sell.
+        /// </summary>
+        internal static string sell_on_auction {
+            get {
+                return ResourceManager.GetString("sell_on_auction", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to send.
         /// </summary>

+ 12 - 0
CardCollector/Resources/Command.resx

@@ -66,4 +66,16 @@
     <data name="price" xml:space="preserve">
         <value>price</value>
     </data>
+    <data name="buy_sticker" xml:space="preserve">
+        <value>buy</value>
+    </data>
+    <data name="clear_chat" xml:space="preserve">
+        <value>clear</value>
+    </data>
+    <data name="combine" xml:space="preserve">
+        <value>combine</value>
+    </data>
+    <data name="sell_on_auction" xml:space="preserve">
+        <value>sell</value>
+    </data>
 </root>

+ 21 - 0
CardCollector/Resources/Keyboard.cs

@@ -176,5 +176,26 @@ namespace CardCollector.Resources
             /* Вовзращаем клавиатуру */
             return new InlineKeyboardMarkup(keyboardList);
         }
+
+        public static InlineKeyboardMarkup GetStickerKeyboard(UserState state, string hash, string query)
+        {
+            return state switch
+            {
+                UserState.AuctionMenu or UserState.ShopMenu => new InlineKeyboardMarkup(new[] {
+                    new[] {InlineKeyboardButton.WithCallbackData(Text.buy, $"{Command.buy_sticker}={hash}")},
+                    new[] {InlineKeyboardButton.WithCallbackData(Text.back, $"{Command.back}={Command.clear_chat}")},
+                }),
+                UserState.CollectionMenu => new InlineKeyboardMarkup(new[] {
+                    new[] {InlineKeyboardButton.WithSwitchInlineQuery(Text.send_sticker, query)},
+                    new[] {InlineKeyboardButton.WithCallbackData(Text.sell_on_auction, $"{Command.sell_on_auction}={hash}")},
+                    new[] {InlineKeyboardButton.WithCallbackData(Text.combine, $"{Command.combine}={hash}")},
+                    new[] {InlineKeyboardButton.WithCallbackData(Text.back, $"{Command.back}={Command.clear_chat}")},
+                }),
+                _ => new InlineKeyboardMarkup(new[] {
+                    new[] {InlineKeyboardButton.WithSwitchInlineQuery(Text.send_sticker, query)},
+                    new[] {InlineKeyboardButton.WithCallbackData(Text.back, Command.clear_chat)},
+                }),
+            };
+        }
     }
 }

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

@@ -87,6 +87,24 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Назад.
+        /// </summary>
+        internal static string back {
+            get {
+                return ResourceManager.GetString("back", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Купить.
+        /// </summary>
+        internal static string buy {
+            get {
+                return ResourceManager.GetString("buy", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Отмена.
         /// </summary>
@@ -96,6 +114,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to 💰.
+        /// </summary>
+        internal static string coin {
+            get {
+                return ResourceManager.GetString("coin", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Собрать прибыль.
         /// </summary>
@@ -114,6 +141,33 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Объединить.
+        /// </summary>
+        internal static string combine {
+            get {
+                return ResourceManager.GetString("combine", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Количество.
+        /// </summary>
+        internal static string count {
+            get {
+                return ResourceManager.GetString("count", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Описание.
+        /// </summary>
+        internal static string description {
+            get {
+                return ResourceManager.GetString("description", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Загрузить стикерпак.
         /// </summary>
@@ -141,6 +195,24 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to 💎.
+        /// </summary>
+        internal static string gem {
+            get {
+                return ResourceManager.GetString("gem", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to мин.
+        /// </summary>
+        internal static string minutes {
+            get {
+                return ResourceManager.GetString("minutes", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to →.
         /// </summary>
@@ -186,6 +258,24 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Выставить на аукцион.
+        /// </summary>
+        internal static string sell_on_auction {
+            get {
+                return ResourceManager.GetString("sell_on_auction", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Отправить стикер.
+        /// </summary>
+        internal static string send_sticker {
+            get {
+                return ResourceManager.GetString("send_sticker", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Магазин.
         /// </summary>
@@ -222,6 +312,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to ⭐.
+        /// </summary>
+        internal static string star {
+            get {
+                return ResourceManager.GetString("star", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to /start.
         /// </summary>
@@ -240,6 +339,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to ⏱.
+        /// </summary>
+        internal static string time {
+            get {
+                return ResourceManager.GetString("time", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to До.
         /// </summary>

+ 36 - 0
CardCollector/Resources/Text.resx

@@ -81,4 +81,40 @@
     <data name="download_stickerpack" xml:space="preserve">
         <value>Загрузить стикерпак</value>
     </data>
+    <data name="star" xml:space="preserve">
+        <value>⭐</value>
+    </data>
+    <data name="coin" xml:space="preserve">
+        <value>💰</value>
+    </data>
+    <data name="gem" xml:space="preserve">
+        <value>💎</value>
+    </data>
+    <data name="count" xml:space="preserve">
+        <value>Количество</value>
+    </data>
+    <data name="minutes" xml:space="preserve">
+        <value>мин</value>
+    </data>
+    <data name="time" xml:space="preserve">
+        <value>⏱</value>
+    </data>
+    <data name="description" xml:space="preserve">
+        <value>Описание</value>
+    </data>
+    <data name="buy" xml:space="preserve">
+        <value>Купить</value>
+    </data>
+    <data name="back" xml:space="preserve">
+        <value>Назад</value>
+    </data>
+    <data name="send_sticker" xml:space="preserve">
+        <value>Отправить стикер</value>
+    </data>
+    <data name="combine" xml:space="preserve">
+        <value>Объединить</value>
+    </data>
+    <data name="sell_on_auction" xml:space="preserve">
+        <value>Выставить на аукцион</value>
+    </data>
 </root>