-
Notifications
You must be signed in to change notification settings - Fork 315
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of github.com:witnessmenow/Universal-Arduino-Te…
…legram-Bot
- Loading branch information
Showing
5 changed files
with
228 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
examples/ESP32/CustomKeyboard/UpdateInlineKeyboard/README.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#ESP32 - LED button update | ||
|
||
This is an example of how one can update inline keyboard messages (buttons). | ||
The message_id of the specific message is sent when a message is received. | ||
This message_id can be used to UPDATE that message. | ||
One can update text inside a message, but also buttons can be updated. | ||
This way one can build menu's, like the menu the botfather uses. | ||
|
||
In this simple example we use a inlinekeyboard button to toggle (and update) the state of a LED. | ||
|
||
NOTE: You will need to enter your SSID, password and bot Token for the example to work. | ||
|
||
Example and update to Universal-Arduino-Telegram-Bot originally written by | ||
[Frits Jan van Kempen] (https://github.com/fritsjan) with inspiration from [RomeHein] (https://github.com/RomeHein) | ||
|
||
Adapted by [Brian Lough](https://github.com/witnessmenow) | ||
|
||
## License | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | ||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. |
178 changes: 178 additions & 0 deletions
178
examples/ESP32/CustomKeyboard/UpdateInlineKeyboard/UpdateInlineKeyboard.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
/******************************************************************* | ||
An example to show how to edit an existing inline keyboard. | ||
In this example the keyboard is updated with the state of | ||
the LED. | ||
written by Frits Jan van Kempen | ||
*******************************************************************/ | ||
#include <Arduino.h> | ||
#include <WiFi.h> | ||
#include <WiFiClientSecure.h> | ||
#include <UniversalTelegramBot.h> | ||
|
||
// Initialize Wifi connection to the router | ||
const char *ssid = "mySSID"; | ||
const char *password = "myPASSWORD"; | ||
|
||
// Initialize Telegram BOT | ||
#define BOTtoken "xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxx" // your Bot Token (Get from Botfather) | ||
WiFiClientSecure client; | ||
UniversalTelegramBot bot(BOTtoken, client); | ||
|
||
int Bot_mtbs = 1000; //mean time between scan messages | ||
long Bot_lasttime; //last time messages' scan has been done | ||
int last_message_id = 0; | ||
|
||
// LED parameters | ||
const int ledPin = 2; // Internal LED on DevKit ESP32-WROOM (GPIO2) | ||
int ledState = LOW; | ||
|
||
void handleNewMessages(int numNewMessages) | ||
{ | ||
|
||
for (int i = 0; i < numNewMessages; i++) | ||
{ | ||
|
||
// Get all the important data from the message | ||
int message_id = bot.messages[i].message_id; | ||
String chat_id = String(bot.messages[i].chat_id); | ||
String text = bot.messages[i].text; | ||
String from_name = bot.messages[i].from_name; | ||
if (from_name == "") | ||
from_name = "Guest"; | ||
String msg = ""; // init a message string to use | ||
|
||
// Output the message_id to give you feeling on how this example works | ||
Serial.print("Message id: "); | ||
Serial.println(message_id); | ||
|
||
// Inline buttons with callbacks when pressed will raise a callback_query message | ||
if (bot.messages[i].type == "callback_query") | ||
{ | ||
Serial.print("Call back button pressed by: "); | ||
Serial.println(bot.messages[i].from_id); | ||
Serial.print("Data on the button: "); | ||
Serial.println(bot.messages[i].text); | ||
|
||
if (text == "/toggleLED") | ||
{ | ||
|
||
// Toggle the ledState and update the LED itself | ||
ledState = !ledState; | ||
digitalWrite(ledPin, ledState); | ||
|
||
// Now we can UPDATE the message, lets prepare it for sending: | ||
msg = "Hi " + from_name + "!\n"; | ||
msg += "Notice how the LED state has changed!\n\n"; | ||
msg += "Try it again, see the button has updated as well:\n\n"; | ||
|
||
// Prepare the buttons | ||
String keyboardJson = "["; // start Json | ||
keyboardJson += "[{ \"text\" : \"The LED is "; | ||
if (ledState) | ||
{ | ||
keyboardJson += "ON"; | ||
} | ||
else | ||
{ | ||
keyboardJson += "OFF"; | ||
} | ||
keyboardJson += "\", \"callback_data\" : \"/toggleLED\" }]"; | ||
keyboardJson += ", [{ \"text\" : \"Send text\", \"callback_data\" : \"This text was sent by inline button\" }]"; // add another button | ||
//keyboardJson += ", [{ \"text\" : \"Go to Google\", \"url\" : \"https://www.google.com\" }]"; // add another button, this one appears after first Update | ||
keyboardJson += "]"; // end Json | ||
|
||
// Now send this message including the current message_id as the 5th input to UPDATE that message | ||
bot.sendMessageWithInlineKeyboard(chat_id, msg, "Markdown", keyboardJson, message_id); | ||
} | ||
|
||
else | ||
{ | ||
// echo back callback_query which is not handled above | ||
bot.sendMessage(chat_id, text, "Markdown"); | ||
} | ||
} | ||
|
||
// 'Normal' messages are handled here | ||
else | ||
{ | ||
if (text == "/start") | ||
{ | ||
// lets create a friendly welcome message | ||
msg = "Hi " + from_name + "!\n"; | ||
msg += "I am your Telegram Bot running on ESP32.\n\n"; | ||
msg += "Lets test this updating LED button below:\n\n"; | ||
|
||
// lets create a button depending on the current ledState | ||
String keyboardJson = "["; // start of keyboard json | ||
keyboardJson += "[{ \"text\" : \"The LED is "; | ||
if (ledState) | ||
{ | ||
keyboardJson += "ON"; | ||
} | ||
else | ||
{ | ||
keyboardJson += "OFF"; | ||
} | ||
keyboardJson += "\", \"callback_data\" : \"/toggleLED\" }]"; //callback is /toggleLED | ||
keyboardJson += ", [{ \"text\" : \"Send text\", \"callback_data\" : \"This text was sent by inline button\" }]"; // add another button | ||
keyboardJson += "]"; // end of keyboard json | ||
|
||
//first time, send this message as a normal inline keyboard message: | ||
bot.sendMessageWithInlineKeyboard(chat_id, msg, "Markdown", keyboardJson); | ||
} | ||
if (text == "/options") | ||
{ | ||
String keyboardJson = "[[{ \"text\" : \"Go to Google\", \"url\" : \"https://www.google.com\" }], [{ \"text\" : \"Send\", \"callback_data\" : \"This was sent by inline\" }]]"; | ||
bot.sendMessageWithInlineKeyboard(chat_id, "Choose from one of the following options", "", keyboardJson); | ||
} | ||
} | ||
} | ||
} | ||
|
||
void setup() | ||
{ | ||
Serial.begin(115200); | ||
|
||
// Attempt to connect to Wifi network: | ||
Serial.print("Connecting Wifi: "); | ||
Serial.println(ssid); | ||
|
||
// Set WiFi to station mode and disconnect from an AP if it was Previously | ||
// connected | ||
WiFi.mode(WIFI_STA); | ||
WiFi.begin(ssid, password); | ||
|
||
while (WiFi.status() != WL_CONNECTED) | ||
{ | ||
Serial.print("."); | ||
delay(500); | ||
} | ||
|
||
Serial.println(""); | ||
Serial.println("WiFi connected"); | ||
Serial.print("IP address: "); | ||
Serial.println(WiFi.localIP()); | ||
|
||
pinMode(ledPin, OUTPUT); // initialize ledPin as an output. | ||
digitalWrite(ledPin, ledState); // initialize pin as low (LED Off) | ||
} | ||
|
||
void loop() | ||
{ | ||
// run this in loop to poll new messages | ||
if (millis() > Bot_lasttime + Bot_mtbs) | ||
{ | ||
int numNewMessages = bot.getUpdates(bot.last_message_received + 1); | ||
|
||
while (numNewMessages) | ||
{ | ||
Serial.println("got response"); | ||
handleNewMessages(numNewMessages); | ||
numNewMessages = bot.getUpdates(bot.last_message_received + 1); | ||
} | ||
|
||
Bot_lasttime = millis(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters