Skip to content

Commit 463c85c

Browse files
committed
Update README.md
1 parent 3b7b2ac commit 463c85c

File tree

1 file changed

+63
-7
lines changed

1 file changed

+63
-7
lines changed

README.md

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[![Foo](https://img.shields.io/badge/Version-2.12-brightgreen.svg?style=flat-square)](#versions)
1+
[![Foo](https://img.shields.io/badge/Version-2.13-brightgreen.svg?style=flat-square)](#versions)
22
[![Foo](https://img.shields.io/badge/Website-AlexGyver.ru-blue.svg?style=flat-square)](https://alexgyver.ru/)
33
[![Foo](https://img.shields.io/badge/%E2%82%BD$%E2%82%AC%20%D0%9D%D0%B0%20%D0%BF%D0%B8%D0%B2%D0%BE-%D1%81%20%D1%80%D1%8B%D0%B1%D0%BA%D0%BE%D0%B9-orange.svg?style=flat-square)](https://alexgyver.ru/support_alex/)
44

@@ -19,6 +19,7 @@
1919
- Поддержка Unicode (другие языки + эмодзи) для входящих сообщений
2020
- Встроенный urlencode для исходящих сообщений
2121
- Встроенные часы реального времени с синхронизацией от сервера Telegram
22+
- Возможность OTA обновления прошивки файлом из чата Telegram
2223

2324
### Совместимость
2425
ESP8266 (SDK v2.6+), ESP32
@@ -48,7 +49,21 @@ ESP8266 (SDK v2.6+), ESP32
4849
- [Инициализация](#init)
4950
- [Документация](#docs)
5051
- [Использование](#usage)
51-
- [Пример](#example)
52+
- [ID чата/чатов](#chatid)
53+
- [Парсинг сообщений](#inbox)
54+
- [Тикер](#tick)
55+
- [Минимальный пример](#example)
56+
- [Обращение к сообщениям](#msgid)
57+
- [Отправка стикеров](#sticker)
58+
- [Меню](#menu)
59+
- [Обычное меню](#basic)
60+
- [Инлайн меню](#inline)
61+
- [Инлайн меню с коллбэком](#callb)
62+
- [Ответ на коллбэк](#answer)
63+
- [Модуль времени](#unix)
64+
- [Время получения сообщения](#time)
65+
- [Часы реального времени](#rtc)
66+
- [OTA обновление прошивки](#ota)
5267
- [Версии](#versions)
5368
- [Баги и обратная связь](#feedback)
5469

@@ -67,9 +82,11 @@ ESP8266 (SDK v2.6+), ESP32
6782

6883
<a id="init"></a>
6984
## Инициализация
85+
- [Инструкция как создать и настроить Telegram бота](https://kit.alexgyver.ru/tutorials/telegram-basic/)
86+
7087
```cpp
7188
FastBot bot;
72-
FastBot bot(токен); // токен - уникальный код бота, берётся у BotFather
89+
FastBot bot(токен); // с указанием токена
7390
```
7491
7592
<a id="docs"></a>
@@ -235,7 +252,7 @@ String dateString(); // получить строку даты формата
235252
// Многие функции возвращают статус:
236253
// 0 - ожидание
237254
// 1 - ОК
238-
// 2 - Переполнен по ovf
255+
// 2 - Переполнен
239256
// 3 - Ошибка телеграм
240257
// 4 - Ошибка подключения
241258
// 5 - не задан chat ID
@@ -251,12 +268,15 @@ String dateString(); // получить строку даты формата
251268

252269
<a id="usage"></a>
253270
## Использование
271+
272+
<a id="chatid"></a>
254273
### ID чата/чатов
255274
В библиотеке реализован необязательный "белый список" ID чатов, в которых работает бот. По умолчанию отключен.
256275
- Устанавливается через `setChatID()`, куда можно передать одиночный ID или сразу несколько через запятую: `setChatID("id1,id2,id3")`
257276
- Можно редактировать строку `chatIDs` напрямую как член класса
258277
- Все функции отправки будут отправлять данные в заданный чат/чаты, если не указать его вручную в функции
259278

279+
<a id="inbox"></a>
260280
### Парсинг сообщений
261281
Сообщения автоматически читаются в `tick()`, при поступлении нового сообщения вызывается указанная функция-обработчик. Но тут есть варианты:
262282
- Если задан ID чата/чатов (через `setChatID()`) - происходит автоматическое отсеивание сообщений НЕ из указанных чатов
@@ -272,11 +292,12 @@ String dateString(); // получить строку даты формата
272292
- `String username` - имя пользователя (в API Telegram это first_name)
273293
- `String chatID` - ID чата
274294
- `int32_t messageID` - ID сообщения в чате
275-
- `String text` - текст сообщения
295+
- `String text` - текст сообщения или попдпись к файлу
276296
- `String data` - callback дата сообщения (если есть)
277297
- `bool query` - запрос
278298
- `bool edited` - сообщение отредактировано
279299
- `bool isBot` - сообщение от бота
300+
- `bool OTA` - запрос на OTA обновление (получен .bin файл)
280301
- `uint32_t unix` - время сообщения
281302

282303
С версии 2.11 добавлен метод `toString()`, позволяющий вывести строкой всё содержимое структуры
@@ -286,12 +307,14 @@ String dateString(); // получить строку даты формата
286307

287308
> Примечание: Телеграм разделяет текст на несколько сообщений, если длина текста превышает ~4000 символов! Эти сообщения будут иметь разный ID в чате.
288309
310+
<a id="tick"></a>
289311
### Тикер
290312
Для опроса входящих сообщений нужно подключить обработчик сообщений и вызывать `tick()` в главном цикле программы `loop()`, опрос происходит по встроенному таймеру.
291313
По умолчанию период опроса установлен 3600 миллисекунд. Можно опрашивать чаще (сменить через `setPeriod()`), но Телеграм иногда тупит и
292314
при частом опросе запрос может выполняться ~3 секунды вместо 60 миллисекунд! На это время программа "зависает" внутри `tick()`.
293315
При периоде ~3600 мс этого не происходит, поэтому я сделал его по умолчанию.
294316

317+
<a id="example"></a>
295318
### Минимальный пример
296319
```cpp
297320
void setup() {
@@ -314,6 +337,7 @@ void loop() {
314337
}
315338
```
316339
340+
<a id="msgid"></a>
317341
### Обращение к сообщениям
318342
Для редактирования и удаления сообщений и меню, а также закрепления сообщений, нужно знать ID сообщения.
319343
- ID входящего сообщения приходит в обработчик входящих сообщений
@@ -322,10 +346,12 @@ void loop() {
322346
323347
Будьте внимательны с ID чата, у всех чатов своя нумерация ID сообщений!
324348
349+
<a id="sticker"></a>
325350
### Отправка стикеров
326351
Для отправки стикера нужно знать ID стикера. Отправь нужный стикер боту *@idstickerbot*, он пришлёт ID стикера.
327352
Этот ID нужно передать в функцию `sendSticker()`.
328353
354+
<a id="menu"></a>
329355
### Меню
330356
> Примечание: для всех вариантов меню *не производится* url encode. Избегайте символов `#` и `&` или используйте уже закодированный url!
331357
@@ -347,20 +373,23 @@ void loop() {
347373
|_______________________|
348374
```
349375

376+
<a id="basic"></a>
350377
### Обычное меню
351378
Большое меню в нижней части чата.
352379
```cpp
353380
showMenu("Menu1 \t Menu2 \t Menu3 \n Menu4");
354381
```
355382
Нажатие на кнопку отправляет текст с кнопки (поле сообщения `text`).
356383
384+
<a id="inline"></a>
357385
### Инлайн меню
358386
Меню в сообщении. Требует ввода имени меню.
359387
```cpp
360388
inlineMenu("MyMenu", "Menu1 \t Menu2 \t Menu3 \n Menu4");
361389
```
362390
Нажатие на кнопку отправляет имя меню (поле сообщения `text`) и текст с кнопки (поле сообщения `data`).
363391

392+
<a id="callb"></a>
364393
### Инлайн меню с коллбэком
365394
Меню в сообщении. Позволяет задать каждой кнопке уникальный текст, который будет отправляться ботом вместе с именем меню.
366395
Список коллбэков перечисляется через запятую по порядку кнопок меню:
@@ -372,6 +401,7 @@ bot.inlineMenuCallback("Menu 1", menu1, cback1);
372401
Нажатие на кнопку отправляет имя меню (поле сообщения `text`) и указанные данные (поле сообщения `data`).
373402
- (С версии 2.11) если callback задан как http/https адрес, кнопка автоматически станет **кнопкой-ссылкой**
374403

404+
<a id="answer"></a>
375405
### Ответ на коллбэк
376406
При нажатии на кнопку инлайн-меню боту отправляется коллбэк, в обработчике сообщения будет поднят флаг `query`. Сервер Телеграм будет ждать ответа.
377407
Ответить на коллбэк можно при помощи:
@@ -387,6 +417,7 @@ void newMsg(FB_msg& msg) {
387417
388418
> Если ничего не отвечать, библиотека сама отправит пустой ответ и "таймер" на кнопке исчезнет.
389419
420+
<a id="unix"></a>
390421
### Модуль времени
391422
В библиотеке есть тип данных `FB_Time`, который является структурой с полями:
392423
```cpp
@@ -424,6 +455,7 @@ Serial.print(' ');
424455
Serial.println(t.dateString()); // ДД.ММ.ГГГГ
425456
```
426457

458+
<a id="time"></a>
427459
### Время получения сообщения
428460
В обработчике входящих сообщений у структуры `FB_msg` есть поле `unix`, оно хранит время сообщения в unix формате.
429461
Для перевода в более читаемый формат действуем по описанной выше схеме:
@@ -436,6 +468,7 @@ void newMsg(FB_msg& msg) {
436468
}
437469
```
438470
471+
<a id="rtc"></a>
439472
### Часы реального времени
440473
В ответ на любое сообщение от бота сервер сообщает время отправки в формате unix. С версии 2.6 это время парсится
441474
библиотекой и **счёт продолжается дальше** при помощи стандартных функций времени. Таким образом достаточно один раз отправить
@@ -453,7 +486,29 @@ FB_Time t = bot.getTime(3);
453486
FB_Time t(bot.getUnix(), 3);
454487
```
455488

456-
<a id="example"></a>
489+
<a id="ota"></a>
490+
### OTA обновление прошивки
491+
С версии библиотеки 2.13 появилось обновление прошивки "по воздуху" (OTA) через чат. Для обновления нужно:
492+
- Скомпилировать программу в файл: *Arduino IDE/Скетч/Экспорт бинарного файла* (файл **.bin** появится в папке со скетчем)
493+
- Отправить файл в чат с ботом, можно добавить подпись
494+
- Файл будет обработан как обычное входящее сообщение от пользователя
495+
- Подпись к файлу можно получить из поля `text`
496+
- Будет поднят флаг `OTA`
497+
- Для запуска процесса обновления нужно вызвать `update` внутри обработчика сообщений
498+
- В тот же чат чат будет отправлен статус обновления (*OK* или *error*)
499+
- После успешного обновления esp перезагрузится
500+
501+
```cpp
502+
// обновить, если просто прислали bin файл
503+
if (msg.OTA) bot.update();
504+
505+
// обновить, если файл имеет нужную подпись
506+
if (msg.OTA && msg.text == "update") bot.update();
507+
508+
// обновить, если прислал известный человек (админ)
509+
if (msg.OTA && msg.chatID == "123456") bot.update();
510+
```
511+
457512

458513
<a id="versions"></a>
459514
## Версии
@@ -513,7 +568,8 @@ FB_Time t(bot.getUnix(), 3);
513568
- Окончательно убран старый обработчик входящих сообщений
514569

515570
- v2.12: поправлены примеры, исправлен парсинг isBot, переделан механизм защиты от длинных сообщений, переделана инициализация
516-
571+
- v2.13: Оптимизация памяти. Добавил OTA обновление
572+
517573
<a id="feedback"></a>
518574
## Баги и обратная связь
519575
При нахождении багов создавайте **Issue**, а лучше сразу пишите на почту [alex@alexgyver.ru](mailto:alex@alexgyver.ru)

0 commit comments

Comments
 (0)