EnterEmoji.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. private const string oneEmojiPattern =
  16. "^\\u00a9$|^\\u00ae$|^[\\u2000-\\u3300]$|^\\ud83c[\\ud000-\\udfff]$|^\\ud83d[\\ud000-\\udfff]$|^\\ud83e[\\ud000-\\udfff]$";
  17. private const string onlyEmojiPattern =
  18. "\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]";
  19. private static readonly List<long> Queue = new ();
  20. public override async Task Execute()
  21. {
  22. var input = Update.Message!.Text;
  23. /* если пользователь ввел что-то кроме эмодзи */
  24. if (!Regex.IsMatch(input!, onlyEmojiPattern))
  25. await MessageController.SendMessage(User, Messages.please_enter_emoji, Keyboard.EmojiOptions);
  26. /* если пользователь ввел несколько эмодзи или эмодзи и текст */
  27. else if (!Regex.IsMatch(input, oneEmojiPattern))
  28. await MessageController.SendMessage(User, Messages.enter_only_one_emoji,
  29. Keyboard.EmojiOptions);
  30. else
  31. {
  32. var filtersModule = User.Session.GetModule<FiltersModule>();
  33. filtersModule.Filters[Command.emoji] = input;
  34. /* Формируем сообщение с имеющимися фильтрами у пользователя */
  35. var text = filtersModule.ToString(User.Session.State);
  36. /* Редактируем сообщение */
  37. await MessageController.SendMessage(User, text, Keyboard.GetSortingMenu(User.Session.State));
  38. Queue.Remove(User.Id);
  39. }
  40. }
  41. /* Добавляем пользователя в очередь */
  42. public static void AddToQueue(long userId)
  43. {
  44. if (!Queue.Contains(userId)) Queue.Add(userId);
  45. }
  46. /* Удаляем пользователя из очереди */
  47. public static void RemoveFromQueue(long userId)
  48. {
  49. Queue.Remove(userId);
  50. }
  51. protected internal override bool IsMatches(UserEntity user, Update update)
  52. {
  53. return Queue.Contains(user.Id) && update.Message!.Type == MessageType.Text;
  54. }
  55. public EnterEmoji() { }
  56. public EnterEmoji(UserEntity user, Update update) : base(user, update) { }
  57. }
  58. }