123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using CardCollector.Controllers;
- using CardCollector.DataBase.Entity;
- using CardCollector.Resources;
- using CardCollector.Session.Modules;
- using Telegram.Bot.Types;
- using Telegram.Bot.Types.Enums;
- namespace CardCollector.Commands.Message
- {
- public class EnterEmoji : MessageCommand
- {
- protected override string CommandText => "";
- protected override bool ClearMenu => false;
- protected override bool AddToStack => false;
- private const string oneEmojiPattern =
- "^\\u00a9$|^\\u00ae$|^[\\u2000-\\u3300]$|^\\ud83c[\\ud000-\\udfff]$|^\\ud83d[\\ud000-\\udfff]$|^\\ud83e[\\ud000-\\udfff]$";
- private const string onlyEmojiPattern =
- "\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]";
-
- /* Список пользователей, от которых ожидается ввод эмоджи ключ - id пользователя, значение - сообщение с меню */
- private static readonly Dictionary<long, int> Queue = new ();
- public override async Task Execute()
- {
- var input = Update.Message!.Text;
- /* если пользователь ввел что-то кроме эмодзи */
- if (!Regex.IsMatch(input!, onlyEmojiPattern))
- await MessageController.EditMessage(User, Queue[User.Id], Messages.please_enter_emoji,
- Keyboard.EmojiOptions);
- /* если пользователь ввел несколько эмодзи или эмодзи и текст */
- else if (!Regex.IsMatch(input, oneEmojiPattern))
- await MessageController.EditMessage(User, Queue[User.Id], Messages.enter_only_one_emoji,
- Keyboard.EmojiOptions);
- else
- {
- var filtersModule = User.Session.GetModule<FiltersModule>();
- filtersModule.Filters[Command.emoji] = input;
- /* Формируем сообщение с имеющимися фильтрами у пользователя */
- var text = filtersModule.ToString(User.Session.State);
- /* Редактируем сообщение */
- await MessageController.EditMessage(User, Queue[User.Id], text, Keyboard.GetSortingMenu(User.Session.State));
- Queue.Remove(User.Id);
- }
- }
- /* Добавляем пользователя в очередь */
- public static void AddToQueue(long userId, int messageId)
- {
- Queue.TryAdd(userId, messageId);
- }
- /* Удаляем пользователя из очереди */
- public static void RemoveFromQueue(long userId)
- {
- Queue.Remove(userId);
- }
- protected internal override bool IsMatches(UserEntity user, Update update)
- {
- return Queue.ContainsKey(user.Id) && update.Message!.Type == MessageType.Text;
- }
- public EnterEmoji() { }
- public EnterEmoji(UserEntity user, Update update) : base(user, update) { }
- }
- }
|