Skip to content

Commit dc3a155

Browse files
committed
upd
1 parent bbcfb13 commit dc3a155

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ void setChatID(int64_t id); // то же самое, но в
123123
void setPeriod(int period); // период опроса в мс (по умолч. 3500)
124124
void setLimit(int limit); // кол-во сообщений, которое обрабатывается за один запрос, 1..100. (по умолч. 10)
125125
void setBufferSizes(uint16_t rx, uint16_t tx); // установить размеры буфера на приём и отправку, по умолч. 512 и 512 байт (только для esp8266)
126-
126+
void skipUpdates(); // пропустить непрочитанные сообщения
127+
127128
void setTextMode(uint8_t mode); // режим текста "для отправки": FB_TEXT, FB_MARKDOWN, FB_HTML (см. пример textMode)
128129
void notify(bool mode); // true/false вкл/выкл уведомления от сообщений бота (по умолч. вкл)
129130
void clearServiceMessages(bool state); // удалять из чата сервисные сообщения о смене названия и закреплении сообщений (умолч. false)
@@ -763,7 +764,9 @@ void loop() {
763764
}
764765
```
765766
766-
### Пропуск "пропущенных" сообщений
767+
### Пропуск "пропущенных" сообщений на основе времени
768+
В библиотеке есть функция skipUpdates, позволяющая пропустить все непрочитанные сообщения. Но иногда бывает удобно ориентироваться по времени.
769+
767770
Если нужно проигнорировать сообщения, отправленные юзером в то время как бот был оффлайн (или выключен), то можно поступить так:
768771
- Запомнить unix-время, когда бот вышел в онлайн
769772
- Сравнивать время текущего сообщения с ним. Если оно меньше - игнорировать сообщение
@@ -864,6 +867,7 @@ void newMsg(FB_msg& msg) {
864867
- v2.22: мелкая оптимизация, исправил ошибку компиляции при дефайне FB_NO_OTA
865868
- v2.23: пофиксил источник реального времени на editMessage
866869
- v2.24: фикс отправки больших файлов https://github.com/GyverLibs/FastBot/pull/17
870+
- v2.25: добавил skipUpdates - пропуск непрочитанных сообщений
867871

868872
<a id="feedback"></a>
869873
## Баги и обратная связь

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ FB_DYNAMIC KEYWORD1
1919
setChatID KEYWORD2
2020
setPeriod KEYWORD2
2121
setLimit KEYWORD2
22+
skipUpdates KEYWORD2
2223
attach KEYWORD2
2324
detach KEYWORD2
2425
tickManual KEYWORD2

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=FastBot
2-
version=2.24
2+
version=2.25
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Fast ESP8266/ESP32 library for Telegram bot (messages, menus, time sync, OTA update + SPIFFS, files upload and download)

src/FastBot.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
v2.22: мелкая оптимизация, исправил ошибку компиляции при дефайне FB_NO_OTA
9898
v2.23: пофиксил источник реального времени на editMessage
9999
v2.24: фикс отправки больших файлов https://github.com/GyverLibs/FastBot/pull/17
100+
v2.25: добавил skipUpdates - пропуск непрочитанных сообщений
100101
*/
101102

102103
/*
@@ -199,9 +200,15 @@ class FastBot {
199200
else chatIDs = "";
200201
}
201202

203+
// установить токен
202204
void setToken(const String& token) {
203205
_token = token;
204206
}
207+
208+
// пропустить непрочитанные сообщения
209+
void skipUpdates() {
210+
ID = -1;
211+
}
205212

206213
// подключение обработчика сообщений
207214
void attach(void (*handler)(FB_msg& msg)) {
@@ -1109,16 +1116,21 @@ class FastBot {
11091116
uint8_t parseMessages(const String& str) {
11101117
if (!str.startsWith(F("{\"ok\":true"))) return 3; // ошибка запроса (неправильный токен итд)
11111118
int16_t IDpos = str.indexOf(F("{\"update_id\":"), 0); // первая позиция ключа update_id
1112-
1119+
if (IDpos < 0) {
1120+
if (ID < 0) ID = 0;
1121+
return 1;
1122+
}
11131123
int16_t counter = 0;
11141124
while (true) {
11151125
if (IDpos < 0 || IDpos == (int16_t)str.length()) break;
1116-
if (ID == 0) ID = str.substring(IDpos + 13, str.indexOf(',', IDpos)).toInt() + 1; // холодный запуск, ищем ID
1117-
else counter++; // иначе считаем пакеты
1126+
bool skip = (ID == -1);
1127+
if (!counter) ID = str.substring(IDpos + 13, str.indexOf(',', IDpos)).toInt() + 1;
1128+
else counter++; // иначе считаем пакеты
11181129

11191130
int16_t textPos = IDpos; // стартовая позиция для поиска
11201131
IDpos = str.indexOf(F("{\"update_id\":"), IDpos + 1); // позиция id СЛЕДУЮЩЕГО обновления (мы всегда на шаг впереди)
11211132
if (IDpos < 0) IDpos = str.length(); // если конец пакета - для удобства считаем что позиция ID в конце
1133+
if (skip) continue;
11221134

11231135
String query;
11241136
int16_t queryEnd = 0;

0 commit comments

Comments
 (0)