33 Документация:
44 GitHub: https://github.com/GyverLibs/FastBot
55 Возможности:
6- - Работает на стандартных библиотеках
7- - Работает без SSL
8- - Оптимизирована для большой нагрузки
9- - Опциональный белый список ID чатов
6+ - Работает на стандартных библиотеках без SSL
7+ - Опциональный "белый список" ID чатов
108 - Проверка обновлений вручную или по таймеру
119 - Отправка/удаление/редактирование/ответ на сообщения
12- - Отправка стикеров
13- - Вывод меню и инлайн меню (с поддержкой ссылок)
10+ - Работает (чтение и отправка) в чатах, группах, каналах
1411 - Изменение названия и описания чата
1512 - Закрепление/открепление сообщений
13+ - Отправка стикеров, отправка с форматированием markdown/html
14+ - Вывод обычного и инлайн меню с поддержкой кнопок-ссылок
1615 - Поддержка Unicode (другие языки + эмодзи) для входящих сообщений
1716 - Встроенный urlencode для исходящих сообщений
1817 - Встроенные часы реального времени с синхронизацией от сервера Telegram
19- - Возможность OTA обновления прошивки файлом из чата Telegram
18+ - Возможность OTA обновления прошивки .bin файлом из чата Telegram
2019
21202221 https://alexgyver.ru/
8079 - Окончательно убран старый обработчик входящих сообщений
8180 v2.12: поправлены примеры, исправлен парсинг isBot, переделан механизм защиты от длинных сообщений, переделана инициализация
8281 v2.13: Оптимизация памяти. Добавил OTA обновление
82+ v2.14: Улучшен парсинг строки с ID, добавил отключение OTA, добавил парсинг названия группы/канала в username
8383*/
8484
8585/*
107107#include < Arduino.h>
108108#include < StreamString.h>
109109#include " utils.h"
110+ #include " datatypes.h"
110111
111112#ifdef ESP8266
112113#include < ESP8266WiFi.h>
113114#include < ESP8266HTTPClient.h>
115+ #ifndef FB_NO_OTA
114116#include < ESP8266httpUpdate.h>
117+ #endif
115118#include < WiFiClientSecure.h>
116119#include < WiFiClientSecureBearSSL.h>
117120static BearSSL::WiFiClientSecure _FB_client;
118121static HTTPClient _FB_http;
119- #else
122+
123+ #else // ESP32
120124#include < WiFi.h>
121125#include < HTTPClient.h>
126+ #ifndef FB_NO_OTA
122127#include < HTTPUpdate.h>
128+ #endif
123129#include < WiFiClientSecure.h>
124130WiFiClientSecure _FB_client;
125131static HTTPClient _FB_http;
@@ -162,6 +168,10 @@ class FastBot {
162168 void setChatID (const String& chatID) {
163169 chatIDs = chatID;
164170 }
171+ void setChatID (int64_t id) {
172+ if (id) chatIDs = FB_64str (id);
173+ else chatIDs = " " ;
174+ }
165175
166176 void setToken (const String& token) {
167177 _token = token;
@@ -192,18 +202,21 @@ class FastBot {
192202 uint8_t tickManual () {
193203 if (!*_callback) return 7 ;
194204 String req;
205+ req.reserve (120 );
195206 _addToken (req);
196207 req += F (" /getUpdates?limit=" );
197208 req += ovfFlag ? 1 : _limit; // берём по 1 сообщению если переполнен
198209 req += F (" &offset=" );
199210 req += ID;
211+ // req += F("&allowed_updates=[\"update_id\",\"message\",\"edited_message\",\"channel_post\",\"edited_channel_post\",\"callback_query\"]");
200212
201213 if (!_FB_http.begin (_FB_client, req)) return 4 ; // ошибка подключения
202214 if (_FB_http.GET () != HTTP_CODE_OK) {
203215 _FB_http.end ();
204216 return 3 ; // ошибка сервера телеграм
205217 }
206218
219+ #ifndef FB_NO_OTA
207220 // была попытка OTA обновления. Обновляемся после ответа серверу!
208221 if (OTAstate >= 0 ) {
209222 String ota;
@@ -214,6 +227,7 @@ class FastBot {
214227 if (OTAstate == 2 ) ESP.restart ();
215228 OTAstate = -1 ;
216229 }
230+ #endif
217231
218232 int size = _FB_http.getSize ();
219233 ovfFlag = size > 25000 ; // 1 полное сообщение на русском языке или ~5 на английском
@@ -801,11 +815,17 @@ class FastBot {
801815 String chatID;
802816 find (str, chatID, textPos, F (" \" chat\" :{\" id\" :" ), ' ,' , IDpos);
803817
818+ if (!first_name.length ()) {
819+ int typePos = str.indexOf (" \" type\" " , textPos);
820+ find (str, first_name, textPos, F (" \" title\" :\" " ), ' \" ' , IDpos);
821+ }
822+
804823 if (chatIDs.length () > 0 && chatIDs.indexOf (chatID) < 0 ) continue ; // проверка на ID чата
805824
806825 String date;
807826 find (str, date, textPos, F (" \" date\" :" ), ' ,' , IDpos);
808827
828+ #ifndef FB_NO_OTA
809829 String file;
810830 if (_file_ptr) _file_ptr = nullptr ;
811831 if (find (str, file, textPos, F (" \" file_name\" :\" " ), ' \" ' , IDpos)) {
@@ -815,6 +835,7 @@ class FastBot {
815835 _otaID = chatID;
816836 }
817837 }
838+ #endif
818839
819840 // удаление сервисных сообщений
820841 if (clrSrv) {
@@ -875,6 +896,7 @@ class FastBot {
875896 _unix = buf.toInt ();
876897 _lastUpd = millis ();
877898 }
899+ #ifndef FB_NO_OTA
878900 if (find (answ, buf, st, F (" \" file_path\" :\" " ), ' \" ' , answ.length ())) {
879901 String url (F (" https://api.telegram.org/file/bot" ));
880902 url += _token;
@@ -890,6 +912,7 @@ class FastBot {
890912 OTAstate = httpUpdate.update (client, url);
891913 #endif
892914 }
915+ #endif
893916 }
894917
895918 void (*_callback)(FB_msg& msg) = nullptr ;
0 commit comments