#include <WiFi.h> //Library untuk menghubungkan ESP32 ke jaringan WiFi.
#include <WiFiClientSecure.h> //Library untuk membuat koneksi HTTPS yang aman.
#include <UniversalTelegramBot.h> //Library untuk berinteraksi dengan bot Telegram
#include <ArduinoJson.h> //Library untuk parsing JSON, digunakan untuk memproses pesan dari bot Telegram.

// Ganti dengan kredensial WiFi Anda
const char* ssid = "Wokwi-GUEST"; //Nama jaringan WiFi
const char* password = ""; //password wifi

// oken API bot Telegram yang didapatkan dari BotFather
#define BOTtoken "7319685759:AAHkgvBD73CpMeUEe_rvowZMSLLgmDx6m3g"

// Waktu interval untuk pengecekan pesan baru (dalam milidetik)
const unsigned long BOT_MTBS = 1000; // 1 detik

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

unsigned long lastTimeBotRan;

const int ledPin = 4; // Pin LED yang terhubung

void setup() {
  Serial.begin(115200);

  // Konfigurasi pin LED sebagai output
  pinMode(ledPin, OUTPUT); //Mengatur pin LED sebagai output
  digitalWrite(ledPin, LOW); //Mematikan LED saat startup

  // Menghubungkan ke WiFi
  WiFi.begin(ssid, password); //Memulai koneksi ke jaringan WiFi
  while (WiFi.status() != WL_CONNECTED) { //Looping hingga terhubung ke WiFi.
    delay(1000);
    Serial.println("Menghubungkan ke WiFi...");
  }
  Serial.println("Terhubung ke WiFi");

  // Mengatur waktu SSL untuk memastikan koneksi aman
  client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
}

void handleNewMessages(int numNewMessages) {
  Serial.print("Pesan baru: ");
  Serial.println(numNewMessages);

  for (int i = 0; i < numNewMessages; i++) {
    String chat_id = String(bot.messages[i].chat_id); //Mengambil ID chat dari pesan
    String text = bot.messages[i].text;

    Serial.println("Pesan dari: " + chat_id);
    Serial.println("Teks pesan: " + text);

    String response;

    if (text == "/on") { //Menyalakan LED jika pesan adalah "/on".
      digitalWrite(ledPin, HIGH);
      response = "LED dinyalakan.";
    } else if (text == "/off") { //Mematikan LED jika pesan adalah "/off".
      digitalWrite(ledPin, LOW);
      response = "LED dimatikan.";
    } else {
      response = "Perintah IoT. Gunakan /on atau /off untuk mengendalikan LED.";
    }

    bot.sendMessage(chat_id, response, ""); //Mengirim pesan balasan ke pengguna.
  }
}
void loop() {
  if (millis() - lastTimeBotRan > BOT_MTBS) {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while (numNewMessages) {
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    } //Mendapatkan pesan baru dari bot Telegram.

    lastTimeBotRan = millis();
  }
}
$abcdeabcde151015202530fghijfghij