@@ -38,6 +38,7 @@ ESP8266
3838<a id =" init " ></a >
3939## Инициализация
4040``` cpp
41+ FastBot bot;
4142FastBot bot (токен);
4243FastBot bot(токен, лимит);
4344FastBot bot(токен, лимит, порог);
@@ -53,11 +54,20 @@ FastBot bot(токен, лимит, порог, период);
5354```cpp
5455// настройки
5556void setChatID(String chatID); // установка ID чата для парсинга сообщений. Можно указать несколько через запятую
56- void attach(void (*handler)(String&, String&)); // подключение обработчика сообщений
57- void detach(); // отключение обработчика сообщений
5857void setLimit(int limit); // макс кол-во сообщений на запрос
5958void setOvf(int ovf); // макс символов
6059void setPeriod(int period); // период опроса
60+ void setToken(String token); // изменить/задать токен
61+
62+ // парсинг
63+ void attach(void (*handler)(String&, String&)); // подключение обработчика сообщений
64+ void attach(void (*FB_msg)(msg&)); // подключение обработчика сообщений
65+ void detach(); // отключение ВСЕХ ОБРАБОТЧИКОВ СООБЩЕНИЙ
66+
67+ // структура входящих сообщений FB_msg
68+ chat_id // id чата
69+ name // имя пользователя
70+ text // текст сообщения
6171
6272// тикер
6373uint8_t tickManual(); // ручная проверка обновлений
@@ -105,6 +115,46 @@ String chatIDs; // указанная в setChat
105115```
106116
107117<a id =" example " ></a >
118+ ## Особенности парсинга сообщений
119+ Сообщения автоматически читаются в ` tick() ` , при поступлении нового сообщения вызывается указанная функция-обработчик. Но тут есть варианты:
120+ - Если задан ID чата/чатов (через ` setChatID() ` ) - происходит автоматическое отсеивание сообщений НЕ из указанных чатов
121+ - Если ID чата/чатов не задан - сообщение будет обработано, т.е. вызван обработчик
122+
123+ Обработчик подключается при помощи ` attach(FB_msg&) ` или ` attach(String&, String&) ` (устаревший)
124+ - Создаём в скетче свою функцию вида ` void функция(FB_msg& сообщение) `
125+ - Вызываем ` attach(функция) `
126+ - Эта функция будет автоматически вызвана при входящем сообщении, если ID чата совпадают или не настроены
127+ - Внутри этой функции можно пользоваться переданной переменной ` сообщение ` , которая имеет тип ` FB_msg ` (структура) и содержит в себе:
128+ - ` chat_id ` - id чата
129+ - ` name ` - имя пользователя
130+ - ` text ` - текст сообщения
131+
132+ Минимальный пример:
133+ ``` cpp
134+ void setup () {
135+ // подключаемся к WiFi
136+ // .............
137+
138+ // подключаем обработчик сообщений
139+ bot.attach(newMsg);
140+ }
141+
142+ // функция-обработчик
143+ void newMsg (FB_msg& msg) {
144+ // выводим ID чата, имя юзера и текст сообщения
145+ Serial.print(msg.chat_id);
146+ Serial.print(", ");
147+ Serial.print(msg.name);
148+ Serial.print(", ");
149+ Serial.println(msg.text);
150+ }
151+
152+ // проверка происходит в лупе
153+ void loop() {
154+ bot.tick();
155+ }
156+ ```
157+
108158## Пример
109159```cpp
110160// узнать токен бота можно у BotFather
@@ -132,13 +182,16 @@ void setup() {
132182 if (millis() > 15000) ESP.restart();
133183 }
134184 Serial.println("Connected");
185+
186+ // можно сменить токен
187+ //bot.setToken(BOT_TOKEN);
135188
136189 // установить ID чата, чтобы принимать сообщения только из него
137190 // узнать ID можно из ручного запроса в браузере
138191 bot.setChatID(CHAT_ID); // передай "" (пустую строку) чтобы отключить проверку
139192
140193 // подключаем функцию-обработчик
141- bot.attach(parseHandler );
194+ bot.attach(newMsg );
142195
143196 // отправить сообщение (работает, если указан CHAT_ID)
144197 bot.sendMessage("Hello, World!");
@@ -155,15 +208,17 @@ void setup() {
155208 bot.inlineMenu("Choose wisely", "Answer 1 \t Answer 2 \t Answer 3 \n Answer 4");
156209}
157210
158- // создать свою функцию вида имя(String& ник, String& сообщение)
159- void parseHandler(String& name, String& msg) {
160- // msg - сообщение в чате от name юзера
161- Serial.print(name);
211+ // создать свою функцию вида имя(FB_msg& сообщение)
212+ void newMsg(FB_msg& msg) {
213+ // выводим ID чата, имя юзера и текст сообщения
214+ Serial.print(msg.chat_id);
215+ Serial.print(", ");
216+ Serial.print(msg.name);
162217 Serial.print(", ");
163- Serial.println(msg);
218+ Serial.println(msg.text);
164219}
165220
166- // можно вручную дёргать по одному сообщению при помощи tickManual
221+ // можно вручную дёргать по одному сообщению при помощи tickManual()
167222// тогда "лимит" при инициализации поставить 1
168223void loop() {
169224 // тикаем в луп
@@ -179,6 +234,7 @@ void loop() {
179234- v1.3 - добавлена возможность задать текст при открытии и закрытии меню
180235- v1.3.1 - исправлены ошибки с 1.3
181236- v1.4 - добавлена возможность удалять сообщения
237+ - v1.5 - оптимизация, возможность смены токена, новый парсинг сообщений (id, имя, текст)
182238
183239<a id =" feedback " ></a >
184240## Баги и обратная связь
0 commit comments