Skip to content

Commit 4d3e32e

Browse files
committed
upd
1 parent 8984ae6 commit 4d3e32e

File tree

7 files changed

+210
-68
lines changed

7 files changed

+210
-68
lines changed

README.md

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ ESP8266
3838
<a id="init"></a>
3939
## Инициализация
4040
```cpp
41+
FastBot bot;
4142
FastBot bot(токен);
4243
FastBot bot(токен, лимит);
4344
FastBot bot(токен, лимит, порог);
@@ -53,11 +54,20 @@ FastBot bot(токен, лимит, порог, период);
5354
```cpp
5455
// настройки
5556
void setChatID(String chatID); // установка ID чата для парсинга сообщений. Можно указать несколько через запятую
56-
void attach(void (*handler)(String&, String&)); // подключение обработчика сообщений
57-
void detach(); // отключение обработчика сообщений
5857
void setLimit(int limit); // макс кол-во сообщений на запрос
5958
void setOvf(int ovf); // макс символов
6059
void 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
// тикер
6373
uint8_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
168223
void 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
## Баги и обратная связь

examples/demo/demo.ino

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// общее демо библиотеки. Обязательно смотри остальные примеры и документацию на гитхаб!
2+
13
// узнать токен бота можно у BotFather
24
// узнать chat id можно по запросу https://api.telegram.org/bot<token>/getUpdates
35
// искать "chat":{"id": тут id
@@ -18,17 +20,10 @@ FastBot bot(BOT_TOKEN);
1820
// период - период автоматического опроса бота в мс (по умолч. 1000)
1921

2022
void setup() {
21-
delay(2000);
22-
Serial.begin(115200);
23-
Serial.println();
24-
25-
WiFi.begin(WIFI_SSID, WIFI_PASS);
26-
while (WiFi.status() != WL_CONNECTED) {
27-
delay(500);
28-
Serial.print(".");
29-
if (millis() > 15000) ESP.restart();
30-
}
31-
Serial.println("Connected");
23+
connectWiFi();
24+
25+
// можно сменить токен
26+
//bot.setToken(BOT_TOKEN);
3227

3328
// установить ID чата, чтобы принимать сообщения только из него
3429
// узнать ID можно из ручного запроса в браузере
@@ -80,6 +75,21 @@ void loop() {
8075
bot.tick();
8176
}
8277

78+
void connectWiFi() {
79+
delay(2000);
80+
Serial.begin(115200);
81+
Serial.println();
82+
83+
WiFi.begin(WIFI_SSID, WIFI_PASS);
84+
while (WiFi.status() != WL_CONNECTED) {
85+
delay(500);
86+
Serial.print(".");
87+
if (millis() > 15000) ESP.restart();
88+
}
89+
Serial.println("Connected");
90+
}
91+
92+
8393
/*
8494
Статусы tick:
8595
0 - ожидание

examples/echoBot/echoBot.ino

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// бот отправляет обратно сообщения из чата (эхо-бот)
2+
3+
#define WIFI_SSID "login"
4+
#define WIFI_PASS "pass"
5+
#define BOT_TOKEN "2654326546:asjhAsfAsfkllgUsaOuiz_axfkj_AsfkjhB"
6+
#define CHAT_ID "574578754"
7+
8+
#include <ESP8266WiFi.h>
9+
#include "FastBot.h"
10+
FastBot bot;
11+
12+
void setup() {
13+
connectWiFi();
14+
15+
bot.setToken(BOT_TOKEN);
16+
bot.attach(newMsg);
17+
}
18+
19+
// обработчик сообщений
20+
void newMsg(FB_msg& msg) {
21+
// выводим ID чата, имя юзера и текст сообщения
22+
Serial.print(msg.chat_id);
23+
Serial.print(", ");
24+
Serial.print(msg.name);
25+
Serial.print(", ");
26+
Serial.println(msg.text);
27+
28+
// отправить сообщение обратно
29+
bot.sendMessage(msg.text, msg.chat_id);
30+
}
31+
32+
void loop() {
33+
bot.tick();
34+
}
35+
36+
void connectWiFi() {
37+
delay(2000);
38+
Serial.begin(115200);
39+
Serial.println();
40+
41+
WiFi.begin(WIFI_SSID, WIFI_PASS);
42+
while (WiFi.status() != WL_CONNECTED) {
43+
delay(500);
44+
Serial.print(".");
45+
if (millis() > 15000) ESP.restart();
46+
}
47+
Serial.println("Connected");
48+
}

examples/menuTest/menuTest.ino

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,8 @@ String menu4 = "Answer 3.1 \t Answer 3.2 \t Answer 3.3 \n Back";
1717
byte depth = 0;
1818

1919
void setup() {
20-
delay(2000);
21-
Serial.begin(115200);
22-
Serial.println();
23-
24-
WiFi.begin(WIFI_SSID, WIFI_PASS);
25-
while (WiFi.status() != WL_CONNECTED) {
26-
delay(500);
27-
Serial.print(".");
28-
if (millis() > 15000) ESP.restart();
29-
}
30-
Serial.println("Connected");
31-
20+
connectWiFi();
21+
3222
bot.setPeriod(200);
3323
bot.setChatID(CHAT_ID); // передай "" (пустую строку) чтобы отключить проверку
3424
bot.attach(parseHandler); // подключаем функцию-обработчик
@@ -64,3 +54,17 @@ void parseHandler(String& name, String& msg) {
6454
void loop() {
6555
bot.tick();
6656
}
57+
58+
void connectWiFi() {
59+
delay(2000);
60+
Serial.begin(115200);
61+
Serial.println();
62+
63+
WiFi.begin(WIFI_SSID, WIFI_PASS);
64+
while (WiFi.status() != WL_CONNECTED) {
65+
delay(500);
66+
Serial.print(".");
67+
if (millis() > 15000) ESP.restart();
68+
}
69+
Serial.println("Connected");
70+
}

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ sendRequest KEYWORD2
3030
autoIncrement KEYWORD2
3131
incrementID KEYWORD2
3232
chatIDs KEYWORD2
33+
setToken KEYWORD2
3334

3435
#######################################
3536
# Constants (LITERAL1)

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=1.4
2+
version=1.5
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Simple library for Telegram bot (messages and menus)

0 commit comments

Comments
 (0)