GyverLibs / FastBot

Многофункциональная быстрая библиотека для Телеграм бота на esp8266/esp32

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

inlineMenu (data)

Tlinmo opened this issue · comments

Дело вот в чем. При использовании inlineMenu, если в String menu указать русские символы, то в data они придут сломанным юникодом (не \u044f например, а \\u044f). поэтому они не преобразуются в символ, а остаются string(ом).
Пример:
if (msg.data != "")
Serial.println(msg.data);
bot.inlineMenu("Меню 1", "абв", msg.chatID);
В таком случае в msg.data окажется "\\u0430\\u0431\\u0432", хотя должно было "\u0430\u0431\u0432", что преобразуется в "абв".
Можно конечно использовать inlineMenuCallback, и в data будет возвращаться английский cback(если конечно мы его сделаем английским), но хотелось бы поддержку русских символов для data.
Лично я это сделал "костылем":
String rus[] = {"0430", "\u0430", "0431", "\u0431", ... , "042e", "\u042e", "042f", "\u042f"};
String rusFind(String str) {
String strNew ;
for (int i = 0; i < str.length(); i++)
if (str[i] == '\\'){
String num;
for (int j = 2; j < 6; j++)
num += str[i + j];
int k = 0;
while (rus[k] != num && k < 132) {
k += 2;
}
strNew += rus[k + 1];
i += 5;
}
else {
strNew += str[i];
}
return strNew;
}
void newMsg (FB_msg& msg) {
msg.data = rusFind(msg.data);
...
}

Посмотрю. Но работать в коде с русскими строками - такое, лучше использовать коллбэк всё таки