You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/3.start.md
+9-1Lines changed: 9 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -90,7 +90,15 @@ void loop() {
90
90
}
91
91
```
92
92
93
-
> Разбор обновлений описан в следующей главе документации
93
+
Подробнее разбор обновлений описан в следующей главе документации
94
+
95
+
> Указатель на текущий объект FastBot (тот, который вызвал коллбэк) можно получить из переменной `fb::Core* fb::thisBot`. Кастовать его в нужный класс и использовать:
Copy file name to clipboardExpand all lines: docs/4.updates.md
+4-12Lines changed: 4 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,14 +14,6 @@ void update(fb::Update& u) {
14
14
}
15
15
```
16
16
17
-
> Указатель на текущий объект FastBot (тот, который вызвал коллбэк) можно получить из переменной `fb::Core* fb::thisBot`. Кастовать его в нужный класс и использовать:
Отличие FastBot2 состоит в том, что библиотека не разбирает пакет обновления по отдельным переменным: данные извлекаются в момент обращения к ним. Это сильно быстрее и расходует в сотни раз меньше памяти.
26
18
27
19
### Тип данных Text
@@ -49,20 +41,20 @@ void update(fb::Update& u) {
49
41
50
42
// пример с разбором callback query через хэш
51
43
switch (u.query().data().hash()) {
52
-
case su::SH("abc123"):
44
+
case SH("abc123"):
53
45
// ....
54
46
break;
55
-
case su::SH("hfghfgh"):
47
+
case SH("hfghfgh"):
56
48
// ....
57
49
break;
58
-
case su::SH("test222"):
50
+
case SH("test222"):
59
51
// ....
60
52
break;
61
53
}
62
54
}
63
55
```
64
56
65
-
> В примере с хэшем строка, указанная в `su::SH`, не существует в программе: вместо этого компилятор подставляет её хэш (число). А в `switch` мы подаём хэш пришедшей строки. Это позволяет максимально быстро, оптимально и очень удобно сравнивать строки в сценариях, когда приходящий текст может иметь известный набор значений. В данном случае - обработка query, очень типовая задача (определение кнопки клавиатуры, на которую нажал юзер).
57
+
> В примере с хэшем строка, указанная в `SH`, не существует в программе: вместо этого компилятор подставляет её хэш (число). А в `switch` мы подаём хэш пришедшей строки. Это позволяет максимально быстро, оптимально и очень удобно сравнивать строки в сценариях, когда приходящий текст может иметь известный набор значений. В данном случае - обработка query, очень типовая задача (определение кнопки клавиатуры, на которую нажал юзер).
66
58
67
59
### Личка с админом
68
60
Телеграм бот - публичная штука, любой пользователь может найти вашего бота в поиске и взаимодействовать с ним. Чтобы ограничить круг лиц (админов), которые могут работать с ботом (или иметь дополнительные функции), достаточно вручную фильтровать обновления по id юзера. Несколько способов:
Copy file name to clipboardExpand all lines: docs/7.files.md
+13Lines changed: 13 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,6 +53,19 @@ void update(fb::Update& u) {
53
53
```
54
54
> После успешного OTA обновления МК дождётся следующего Update обновления от сервера, принудительно пропустит сообщение с файлом прошивки и сам перезагрузится!
55
55
56
+
### OTA обновление
57
+
Есть второй способ OTA обновления, менее требовательный к памяти. Описанный выше способ вызывает обновление из обработчика, а лучше делать это из loop. При получении файла с обновлением нужно вызвать `updateFlash` или `updateFS` (для файловой системы), передав файл из сообщения и по желанию ID юзера, которому будет отправлено уведомление об окончании обновления. Это может быть тот же юзер, который отправил файл, например:
58
+
59
+
```cpp
60
+
voidupdateh(fb::Update& u) {
61
+
if (u.message().hasDocument() && u.message().document().name().endsWith(".bin")) {
Библиотека запомнит файл и запустит обновление из следующего вызова tick, указанный юзер получит сообщение, а после успешного обновления esp автоматически перезагрузится.
0 commit comments