EnterEmoji.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System.Collections.Generic;
  2. using System.Text.RegularExpressions;
  3. using System.Threading.Tasks;
  4. using CardCollector.Controllers;
  5. using CardCollector.DataBase.Entity;
  6. using CardCollector.Resources;
  7. using CardCollector.Session.Modules;
  8. using Telegram.Bot.Types;
  9. using Telegram.Bot.Types.Enums;
  10. namespace CardCollector.Commands.Message
  11. {
  12. public class EnterEmoji : MessageCommand
  13. {
  14. protected override string CommandText => "";
  15. protected override bool ClearMenu => false;
  16. protected override bool AddToStack => false;
  17. private const string oneEmojiPattern =
  18. "^\\u00a9$|^\\u00ae$|^[\\u2000-\\u3300]$|^\\ud83c[\\ud000-\\udfff]$|^\\ud83d[\\ud000-\\udfff]$|^\\ud83e[\\ud000-\\udfff]$";
  19. private const string onlyEmojiPattern =
  20. "\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]";
  21. /* Список пользователей, от которых ожидается ввод эмоджи ключ - id пользователя, значение - сообщение с меню */
  22. private static readonly Dictionary<long, int> Queue = new ();
  23. public override async Task Execute()
  24. {
  25. var input = Update.Message!.Text;
  26. /* если пользователь ввел что-то кроме эмодзи */
  27. if (!Regex.IsMatch(input!, onlyEmojiPattern))
  28. await MessageController.EditMessage(User, Queue[User.Id], Messages.please_enter_emoji,
  29. Keyboard.EmojiOptions);
  30. /* если пользователь ввел несколько эмодзи или эмодзи и текст */
  31. else if (!Regex.IsMatch(input, oneEmojiPattern))
  32. await MessageController.EditMessage(User, Queue[User.Id], Messages.enter_only_one_emoji,
  33. Keyboard.EmojiOptions);
  34. else
  35. {
  36. var filtersModule = User.Session.GetModule<FiltersModule>();
  37. filtersModule.Filters[Command.emoji] = input;
  38. /* Формируем сообщение с имеющимися фильтрами у пользователя */
  39. var text = filtersModule.ToString(User.Session.State);
  40. /* Редактируем сообщение */
  41. await MessageController.EditMessage(User, Queue[User.Id], text, Keyboard.GetSortingMenu(User.Session.State));
  42. Queue.Remove(User.Id);
  43. }
  44. }
  45. /* Добавляем пользователя в очередь */
  46. public static void AddToQueue(long userId, int messageId)
  47. {
  48. Queue.TryAdd(userId, messageId);
  49. }
  50. /* Удаляем пользователя из очереди */
  51. public static void RemoveFromQueue(long userId)
  52. {
  53. Queue.Remove(userId);
  54. }
  55. protected internal override bool IsMatches(UserEntity user, Update update)
  56. {
  57. return Queue.ContainsKey(user.Id) && update.Message!.Type == MessageType.Text;
  58. }
  59. public EnterEmoji() { }
  60. public EnterEmoji(UserEntity user, Update update) : base(user, update) { }
  61. }
  62. }