Browse Source

Add command to creating samples

Tigran 4 years ago
parent
commit
d0b84912d2

+ 4 - 1
CardCollector/Commands/Message/Message.cs

@@ -26,7 +26,10 @@ namespace CardCollector.Commands.Message
             // Команда "Профиль"
             new ProfileMessage(),
             // Команда "/start"
-            new StartMessage()
+            new StartMessage(),
+            
+            // Команда "Показать пример"
+            new ShowSample()
         };
 
         /* Метод, создающий объекты команд исходя из полученного обновления */

+ 65 - 0
CardCollector/Commands/Message/ShowSample.cs

@@ -0,0 +1,65 @@
+using System.Threading.Tasks;
+using CardCollector.Controllers;
+using CardCollector.DataBase.Entity;
+using CardCollector.Resources;
+using Telegram.Bot.Types;
+using Telegram.Bot.Types.ReplyMarkups;
+
+namespace CardCollector.Commands.Message
+{
+    /* Этот класс можно использовать для тестирования или наброски эскизов
+     Команда "Показать пример" доступна только пользователям суровнем доступа "Разработчик" и выше
+     PrivilegeLevel = 5 */
+    public class ShowSample : Message
+    {
+        protected override string Command => MessageCommands.show_sample;
+        public override async Task Execute()
+        {
+            await MessageController.SendMessage(User, "Текущие примененные фильтры:" +
+                                                      "\nАвтор (все)\nТир (все)\nЭмоция (все)\nСортировка(нет)" +
+                                                      "\n\nУстановите фильтры кнопками ниже:",
+                new InlineKeyboardMarkup(new []
+                {
+                    new [] {InlineKeyboardButton.WithCallbackData("Автор")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Тир")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Эмоция")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Сортировка")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Отмена")},
+                    new [] {InlineKeyboardButton.WithSwitchInlineQueryCurrentChat("Показать стикеры")},
+                }));
+            await MessageController.SendMessage(User, "Выберите автора из списка ниже:",
+                new InlineKeyboardMarkup(new []
+                {
+                    new [] {InlineKeyboardButton.WithCallbackData("Все")},
+                    new [] {InlineKeyboardButton.WithCallbackData("А"),InlineKeyboardButton.WithCallbackData("Б")},
+                    new [] {InlineKeyboardButton.WithCallbackData("В"),InlineKeyboardButton.WithCallbackData("Г"),},
+                    new [] {InlineKeyboardButton.WithCallbackData("Д"),InlineKeyboardButton.WithCallbackData("Е"),},
+                    new [] {InlineKeyboardButton.WithCallbackData("Ё"),InlineKeyboardButton.WithCallbackData("Ж"),},
+                    new [] {InlineKeyboardButton.WithCallbackData("З"),InlineKeyboardButton.WithCallbackData("З"),},
+                    new [] {InlineKeyboardButton.WithCallbackData("←"),InlineKeyboardButton.WithCallbackData("→")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Отмена")},
+                }));
+            await MessageController.SendMessage(User, "Текущие примененные фильтры:" +
+                                                      "\nАвтор (Г)\nТир (все)\nЭмоция (все)\nСортировка(нет)" +
+                                                      "\n\nУстановите фильтры кнопками ниже:",
+                new InlineKeyboardMarkup(new []
+                {
+                    new [] {InlineKeyboardButton.WithCallbackData("Автор")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Тир")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Эмоция")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Сортировка")},
+                    new [] {InlineKeyboardButton.WithCallbackData("Отмена")},
+                    new [] {InlineKeyboardButton.WithSwitchInlineQueryCurrentChat("Показать стикеры")},
+                }));
+        }
+
+        /* Нужно помимо совпадения текста проверить пользователя на уровень привилегий */
+        protected override bool IsMatches(string command)
+        {
+            return base.IsMatches(command) && User is not {PrivilegeLevel: < Constants.PROGRAMMER_PRIVILEGE_LEVEL};
+        }
+        
+        public ShowSample(UserEntity user, Update update) : base(user, update) { }
+        public ShowSample() { }
+    }
+}

+ 3 - 0
CardCollector/DataBase/Entity/UserEntity.cs

@@ -24,6 +24,9 @@ namespace CardCollector.DataBase.Entity
         
         /* Заблокирован ли пользователь */
         [Column("is_blocked"), MaxLength(11)] public bool IsBlocked { get; set; }
+
+        /* Уровень привилегий пользователя */
+        [Column("privilege_level"), MaxLength(32)] public int PrivilegeLevel { get; set; } = 0;
         
         /* Счет пользователя */
         [NotMapped] public CashEntity Cash { get; set; }

+ 10 - 0
CardCollector/Resources/Constants.cs

@@ -2,9 +2,19 @@ namespace CardCollector.Resources
 {
     public static class Constants
     {
+        /* Переключить данный флаг при сборке на сервер */
         public const bool DEBUG = true;
 
+        /* Интервал сохранения изменений */
         public const double SAVING_CHANGES_INTERVAL = DEBUG ? 10 * 1000 : 5 * 60 * 1000;
+        /* Время кэширования результатов @имя_бота команд */
         public const int INLINE_RESULTS_CACHE_TIME = 1;
+
+
+        /* Уровни привилегий пользователей системы */
+        public const int OWNER_PRIVILEGE_LEVEL = 10;
+        public const int ADMIN_PRIVILEGE_LEVEL = 9;
+        public const int PROGRAMMER_PRIVILEGE_LEVEL = 5;
+        public const int ARTIST_PRIVILEGE_LEVEL = 4;
     }
 }

+ 9 - 0
CardCollector/Resources/MessageCommands.Designer.cs

@@ -96,6 +96,15 @@ namespace CardCollector.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Показать пример.
+        /// </summary>
+        internal static string show_sample {
+            get {
+                return ResourceManager.GetString("show_sample", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to /start.
         /// </summary>

+ 3 - 0
CardCollector/Resources/MessageCommands.resx

@@ -33,4 +33,7 @@
     <data name="start" xml:space="preserve">
         <value>/start</value>
     </data>
+    <data name="show_sample" xml:space="preserve">
+        <value>Показать пример</value>
+    </data>
 </root>