Skip to content

Commit b954cad

Browse files
committed
Code rewroted for better logic and fixed some problems.
1 parent b43a1e1 commit b954cad

File tree

1 file changed

+70
-42
lines changed

1 file changed

+70
-42
lines changed

examples/ESP8266/BulkMessages/BulkMessages.ino

Lines changed: 70 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ long Bot_lasttime; //last time messages' scan has been done
2626
int bulk_messages_mtbs = 1500; //mean time between send messages, 1.5 seconds
2727
int messages_limit_per_second = 25; // Telegram API have limit for bulk messages ~30 messages in 1 second
2828

29-
StaticJsonBuffer<200> jsonBuffer;
30-
JsonObject& subscribed_users = jsonBuffer.createObject();
31-
3229
void handleNewMessages(int numNewMessages) {
3330
Serial.println("handleNewMessages");
3431
Serial.println(String(numNewMessages));
@@ -38,99 +35,132 @@ void handleNewMessages(int numNewMessages) {
3835
String text = bot.messages[i].text;
3936

4037
if (text == "/start") {
41-
addSubscribedUser(chat_id);
42-
bot.sendMessage(chat_id, "Welcome", "");
43-
loadSubscribedUsersFile();
38+
if (addSubscribedUser(chat_id)) {
39+
bot.sendMessage(chat_id, "Welcome!", "");
40+
} else {
41+
bot.sendMessage(chat_id, "Something wrong, please try again", "");
42+
}
4443
}
4544

4645
if (text == "/stop") {
4746
bot.sendMessage(chat_id, "Thank you, we always waiting you back", "");
4847
removeSubscribedUser(chat_id);
49-
loadSubscribedUsersFile();
5048
}
5149

5250
if (text == "/testbulkmessage") {
5351
sendMessageToAllSubscribedUsers("Current temperature is 0.0C");
5452
}
53+
54+
if (text == "\/showallusers") {
55+
File subscribedUsersFile = SPIFFS.open("/subscribed_users.json", "r");
56+
57+
if (!subscribedUsersFile) {
58+
bot.sendMessage(chat_id, "No subscription file", "");
59+
}
60+
61+
size_t size = subscribedUsersFile.size();
62+
63+
if (size > 1024) {
64+
bot.sendMessage(chat_id, "Subscribed users file is too large", "");
65+
} else {
66+
String file_content = subscribedUsersFile.readString();
67+
bot.sendMessage(chat_id, file_content, "");
68+
}
69+
}
70+
71+
if (text == "\/removeallusers") {
72+
SPIFFS.remove("/subscribed_users.json");
73+
}
5574
}
5675
}
5776

58-
bool loadSubscribedUsersFile() {
77+
JsonObject& getSubscribedUsers(JsonBuffer& jsonBuffer) {
5978
File subscribedUsersFile = SPIFFS.open("/subscribed_users.json", "r");
6079

6180
if (!subscribedUsersFile) {
81+
6282
Serial.println("Failed to open subscribed users file");
63-
return false;
64-
}
6583

66-
size_t size = subscribedUsersFile.size();
84+
// Create empyt file (w+ not working as expect)
85+
File f = SPIFFS.open("/subscribed_users.json", "w");
86+
f.close();
6787

68-
if (size > 1024) {
69-
Serial.println("Subscribed users file is too large");
70-
return false;
71-
}
88+
JsonObject& users = jsonBuffer.createObject();
7289

73-
// Allocate a buffer to store contents of the file.
74-
std::unique_ptr<char[]> buf(new char[size]);
90+
return users;
91+
} else {
7592

76-
// We don't use String here because ArduinoJson library requires the input
77-
// buffer to be mutable. If you don't use ArduinoJson, you may as well
78-
// use configFile.readString instead.
79-
subscribedUsersFile.readBytes(buf.get(), size);
93+
size_t size = subscribedUsersFile.size();
8094

81-
StaticJsonBuffer<200> jsonBuffer;
82-
JsonObject& subscribed_users = jsonBuffer.parseObject(buf.get());
95+
if (size > 1024) {
96+
Serial.println("Subscribed users file is too large");
97+
//return users;
98+
}
8399

84-
if (!subscribed_users.success()) {
85-
Serial.println("Failed to parse subscribed users file");
86-
return false;
87-
}
100+
String file_content = subscribedUsersFile.readString();
88101

89-
subscribedUsersFile.close();
102+
JsonObject& users = jsonBuffer.parseObject(file_content);
90103

91-
subscribed_users.printTo(Serial);
104+
if (!users.success()) {
105+
Serial.println("Failed to parse subscribed users file");
106+
return users;
107+
}
108+
109+
subscribedUsersFile.close();
110+
111+
// Serial.println("Test");
112+
// users.printTo(Serial);
113+
114+
return users;
115+
}
92116

93-
return true;
94117
}
95118

96119
bool addSubscribedUser(String chat_id) {
97-
File subscribedUsersFile = SPIFFS.open("/subscribed_users.json", "w");
120+
StaticJsonBuffer<200> jsonBuffer;
121+
JsonObject& users = getSubscribedUsers(jsonBuffer);
122+
123+
File subscribedUsersFile = SPIFFS.open("/subscribed_users.json", "w+");
98124

99125
if (!subscribedUsersFile) {
100126
Serial.println("Failed to open subscribed users file for writing");
101-
return false;
127+
//return false;
102128
}
103129

104-
subscribed_users[chat_id] = 1;
105-
106-
subscribed_users.printTo(subscribedUsersFile);
130+
users.set(chat_id, 1);
131+
users.printTo(subscribedUsersFile);
107132

108133
subscribedUsersFile.close();
109134

110135
return true;
111136
}
112137

113138
bool removeSubscribedUser(String chat_id) {
139+
StaticJsonBuffer<200> jsonBuffer;
140+
JsonObject& users = getSubscribedUsers(jsonBuffer);
141+
114142
File subscribedUsersFile = SPIFFS.open("/subscribed_users.json", "w");
115143

116144
if (!subscribedUsersFile) {
117145
Serial.println("Failed to open subscribed users file for writing");
118146
return false;
119147
}
120148

121-
subscribed_users.remove(chat_id);
122-
123-
subscribed_users.printTo(subscribedUsersFile);
149+
users.remove(chat_id);
150+
users.printTo(subscribedUsersFile);
124151

125152
subscribedUsersFile.close();
126153

127154
return true;
128155
}
129156

130157
void sendMessageToAllSubscribedUsers(String message) {
131-
int users_processed = 0;
158+
int users_processed = 0;
132159

133-
for(JsonObject::iterator it=subscribed_users.begin(); it!=subscribed_users.end(); ++it)
160+
StaticJsonBuffer<200> jsonBuffer;
161+
JsonObject& users = getSubscribedUsers(jsonBuffer);
162+
163+
for(JsonObject::iterator it=users.begin(); it!=users.end(); ++it)
134164
{
135165
users_processed++;
136166

@@ -152,8 +182,6 @@ void setup() {
152182
return;
153183
}
154184

155-
loadSubscribedUsersFile();
156-
157185
// Set WiFi to station mode and disconnect from an AP if it was Previously
158186
// connected
159187
WiFi.disconnect();

0 commit comments

Comments
 (0)