Как посимвольно сравнить строку со списком валидных символов, среди которых есть эмоджи?
ребята!
Пилю телеграм бота.
Вопрос звучит следующим образом: Как мне посимвольно сравнить сообщение от юзера со списком валидных символов, среди которых есть эмоджи?
Задача по идее стоит простая до безумия. И до безумия сложна как для меня в реализации оказалась. Если юзер отправляет фиговые с точки зрения бота символы-буквы, неликвидные эмодзи, которые связка скриптов не может обработать, отправляем юзеру сообщение, мол этот символ удали или замени.
Пытаюсь сравнить посимвольно строку от юзера
string message.Text
со списком валидных символов
List<string> validCharacters.
В предыдущий раз я пошел следующим образом. Преобразовал строку в символы char
char[] characters = message.Text.ToCharArray();
Преобразовал строковый список
List<string> validCharacters = new List<string>() { "?" };
в char список
List<char> validCharactersChar
и проверяю каждый символ из сообщения юзера есть ли он в списке валидных символов
for (int i = 0; i < characters.Length; i++)
{
// если символ НЕ содержится в списке валидных символов, просим переводчика удалить символ.
bool check = validCharactersChar.Contains(characters[i]);
if (!check)
{
// Символ ... не содержится в списке допустимых символов. Просьба удалить его.
telegramMessage = $"Мне не нравится символ <b>{i.ToString()} {characters[i].ToString()}</b>\nПросьба удалить его.";
await bot.SendTextMessageAsync(message.Chat.Id, telegramMessage, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
return;
}
}
суть в том, что эмодзи может быть не одним символом, а несколькими. И тогда в случае когда эмодзи не ликвидный, задача становится еще сложнее, поскольку нужно собрать в кучу символы, которые составляют смайл, преобразовать в строку-смайл и отправить обратно юзеру с просьбой заменить или удалить. Преобразование символов в смайл нужно будет делать с помощью какой-то библиотеки смайлов-эмоджи, а они все не полные. Постоянно пополняются, дорисовываются и т.д. ((
Полный код, которые реализован и бесполезен:
// 6. Проверка валидности каждого символа
List<string> validCharacters = new List<string>() { "?" };
List<char> validCharactersChar = new List<char>();
foreach (string a in validCharacters)
{
var charArr = a.ToCharArray();
foreach (char c in charArr)
validCharactersChar.Add(c);
}
char[] characters = message.Text.ToCharArray();
for (int i = 0; i < characters.Length; i++)
{
// если символ НЕ содержится в списке валидных символов, просим переводчика удалить символ.
bool check = validCharactersChar.Contains(characters[i]);
if (!check)
{
// Символ ... не содержится в списке допустимых символов. Просьба удалить его.
telegramMessage = $"Мне не нравится символ <b>{i.ToString()} {characters[i].ToString()}</b>\nПросьба удалить его.";
await bot.SendTextMessageAsync(message.Chat.Id, telegramMessage, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
return;
}
}
await bot.SendTextMessageAsync(message.Chat.Id, "Проверка пройдена", parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
return;
Короче вопрос!!! Как мне посимвольно сравнить сообщение от юзера со списком валидных символов, среди которых есть эмоджи?