library(telegram.bot)
library(httr)
library(jsonlite)

bot_token <- "7110788354:AAE0sYdrM2gRYGvMVJVRYkX3HFCXE8IkhT0"
chat_id <- "5996527429"
api_key <- "f925a7eecb0e895b4cee6b67a31c22ff"
location <- "Gurugram,India"

# Function to get weather forecast
get_weather_forecast <- function(api_key, location) {
  weather_url <- paste0("http://api.openweathermap.org/data/2.5/weather?q=", location, "&appid=", api_key, "&units=metric")
  response <- GET(weather_url)
  
  if (status_code(response) != 200) {
    stop("Failed to fetch weather data: ", status_code(response))
  }
  
  weather_data <- content(response, as = "parsed", type = "application/json")
  return(weather_data)
}

# Debugging function to inspect weather data structure
debug_weather_data <- function(weather_data) {
  print("Weather data structure:")
  print(str(weather_data))
}

# Function to send weather update message
send_weather_update <- function(bot, chat_id, api_key, location) {
  weather_data <- tryCatch({
    get_weather_forecast(api_key, location)
  }, error = function(e) {
    message <- paste("Failed to get weather data:", e$message)
    bot$sendMessage(chat_id = chat_id, text = message)
    return(NULL)
  })
  
  if (is.null(weather_data)) {
    return()
  }
  
  # Debugging
  debug_weather_data(weather_data)
  
  if (!is.null(weather_data$weather) && length(weather_data$weather) > 0) {
    weather_description <- weather_data$weather[[1]]$description
  } else {
    weather_description <- "N/A"
  }
  
  temperature <- weather_data$main$temp
  
  message <- paste("Weather Update:\n",
                   "Description:", weather_description, "\n",
                   "Temperature:", temperature, "°C")
  
  bot$sendMessage(chat_id = chat_id, text = message)
}

# Function to handle commands
handle_command <- function(bot, update) {
  chat_id <- update$message$chat$id
  message <- update$message$text

  cat("Chat ID:", chat_id, "\n")  # Log the chat ID to the console

  if (startsWith(message, "/start")) {
    bot$sendMessage(chat_id = chat_id, text = "Hello! I am your weather update bot. Use /weather to get the current weather.")
  } else if (startsWith(message, "/weather")) {
    send_weather_update(bot, chat_id, api_key, location)
  } else {
    bot$sendMessage(chat_id = chat_id, text = "Sorry, I don't understand that command.")
  }
}

# Create bot and set up command handlers
bot <- Bot(token = bot_token)
updater <- Updater(token = bot_token)

# Add command handlers
updater <- updater + CommandHandler("start", handle_command)
updater <- updater + CommandHandler("weather", handle_command)

# Start polling
updater$start_polling()
LS0tCnRpdGxlOiAiV2VhdGhlciBVcGRhdGVzIFRlbGVncmFtIgphdXRob3I6ICJMYWliYSBLaGFuIgpkYXRlOiAiMjAyNC0wNy0xNSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CgpsaWJyYXJ5KHRlbGVncmFtLmJvdCkKbGlicmFyeShodHRyKQpsaWJyYXJ5KGpzb25saXRlKQoKYGBgCgpgYGB7cn0KCmJvdF90b2tlbiA8LSAiNzExMDc4ODM1NDpBQUUwc1lkck0yZ1JZR3ZNVkpWUllrWDNIRkNYRThJa2hUMCIKY2hhdF9pZCA8LSAiNTk5NjUyNzQyOSIKYXBpX2tleSA8LSAiZjkyNWE3ZWVjYjBlODk1YjRjZWU2YjY3YTMxYzIyZmYiCmxvY2F0aW9uIDwtICJHdXJ1Z3JhbSxJbmRpYSIKCmBgYAoKCmBgYHtyfQoKIyBGdW5jdGlvbiB0byBnZXQgd2VhdGhlciBmb3JlY2FzdApnZXRfd2VhdGhlcl9mb3JlY2FzdCA8LSBmdW5jdGlvbihhcGlfa2V5LCBsb2NhdGlvbikgewogIHdlYXRoZXJfdXJsIDwtIHBhc3RlMCgiaHR0cDovL2FwaS5vcGVud2VhdGhlcm1hcC5vcmcvZGF0YS8yLjUvd2VhdGhlcj9xPSIsIGxvY2F0aW9uLCAiJmFwcGlkPSIsIGFwaV9rZXksICImdW5pdHM9bWV0cmljIikKICByZXNwb25zZSA8LSBHRVQod2VhdGhlcl91cmwpCiAgCiAgaWYgKHN0YXR1c19jb2RlKHJlc3BvbnNlKSAhPSAyMDApIHsKICAgIHN0b3AoIkZhaWxlZCB0byBmZXRjaCB3ZWF0aGVyIGRhdGE6ICIsIHN0YXR1c19jb2RlKHJlc3BvbnNlKSkKICB9CiAgCiAgd2VhdGhlcl9kYXRhIDwtIGNvbnRlbnQocmVzcG9uc2UsIGFzID0gInBhcnNlZCIsIHR5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCiAgcmV0dXJuKHdlYXRoZXJfZGF0YSkKfQoKIyBEZWJ1Z2dpbmcgZnVuY3Rpb24gdG8gaW5zcGVjdCB3ZWF0aGVyIGRhdGEgc3RydWN0dXJlCmRlYnVnX3dlYXRoZXJfZGF0YSA8LSBmdW5jdGlvbih3ZWF0aGVyX2RhdGEpIHsKICBwcmludCgiV2VhdGhlciBkYXRhIHN0cnVjdHVyZToiKQogIHByaW50KHN0cih3ZWF0aGVyX2RhdGEpKQp9CgojIEZ1bmN0aW9uIHRvIHNlbmQgd2VhdGhlciB1cGRhdGUgbWVzc2FnZQpzZW5kX3dlYXRoZXJfdXBkYXRlIDwtIGZ1bmN0aW9uKGJvdCwgY2hhdF9pZCwgYXBpX2tleSwgbG9jYXRpb24pIHsKICB3ZWF0aGVyX2RhdGEgPC0gdHJ5Q2F0Y2goewogICAgZ2V0X3dlYXRoZXJfZm9yZWNhc3QoYXBpX2tleSwgbG9jYXRpb24pCiAgfSwgZXJyb3IgPSBmdW5jdGlvbihlKSB7CiAgICBtZXNzYWdlIDwtIHBhc3RlKCJGYWlsZWQgdG8gZ2V0IHdlYXRoZXIgZGF0YToiLCBlJG1lc3NhZ2UpCiAgICBib3Qkc2VuZE1lc3NhZ2UoY2hhdF9pZCA9IGNoYXRfaWQsIHRleHQgPSBtZXNzYWdlKQogICAgcmV0dXJuKE5VTEwpCiAgfSkKICAKICBpZiAoaXMubnVsbCh3ZWF0aGVyX2RhdGEpKSB7CiAgICByZXR1cm4oKQogIH0KICAKICAjIERlYnVnZ2luZwogIGRlYnVnX3dlYXRoZXJfZGF0YSh3ZWF0aGVyX2RhdGEpCiAgCiAgaWYgKCFpcy5udWxsKHdlYXRoZXJfZGF0YSR3ZWF0aGVyKSAmJiBsZW5ndGgod2VhdGhlcl9kYXRhJHdlYXRoZXIpID4gMCkgewogICAgd2VhdGhlcl9kZXNjcmlwdGlvbiA8LSB3ZWF0aGVyX2RhdGEkd2VhdGhlcltbMV1dJGRlc2NyaXB0aW9uCiAgfSBlbHNlIHsKICAgIHdlYXRoZXJfZGVzY3JpcHRpb24gPC0gIk4vQSIKICB9CiAgCiAgdGVtcGVyYXR1cmUgPC0gd2VhdGhlcl9kYXRhJG1haW4kdGVtcAogIAogIG1lc3NhZ2UgPC0gcGFzdGUoIldlYXRoZXIgVXBkYXRlOlxuIiwKICAgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbjoiLCB3ZWF0aGVyX2Rlc2NyaXB0aW9uLCAiXG4iLAogICAgICAgICAgICAgICAgICAgIlRlbXBlcmF0dXJlOiIsIHRlbXBlcmF0dXJlLCAiwrBDIikKICAKICBib3Qkc2VuZE1lc3NhZ2UoY2hhdF9pZCA9IGNoYXRfaWQsIHRleHQgPSBtZXNzYWdlKQp9CgojIEZ1bmN0aW9uIHRvIGhhbmRsZSBjb21tYW5kcwpoYW5kbGVfY29tbWFuZCA8LSBmdW5jdGlvbihib3QsIHVwZGF0ZSkgewogIGNoYXRfaWQgPC0gdXBkYXRlJG1lc3NhZ2UkY2hhdCRpZAogIG1lc3NhZ2UgPC0gdXBkYXRlJG1lc3NhZ2UkdGV4dAoKICBjYXQoIkNoYXQgSUQ6IiwgY2hhdF9pZCwgIlxuIikgICMgTG9nIHRoZSBjaGF0IElEIHRvIHRoZSBjb25zb2xlCgogIGlmIChzdGFydHNXaXRoKG1lc3NhZ2UsICIvc3RhcnQiKSkgewogICAgYm90JHNlbmRNZXNzYWdlKGNoYXRfaWQgPSBjaGF0X2lkLCB0ZXh0ID0gIkhlbGxvISBJIGFtIHlvdXIgd2VhdGhlciB1cGRhdGUgYm90LiBVc2UgL3dlYXRoZXIgdG8gZ2V0IHRoZSBjdXJyZW50IHdlYXRoZXIuIikKICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgobWVzc2FnZSwgIi93ZWF0aGVyIikpIHsKICAgIHNlbmRfd2VhdGhlcl91cGRhdGUoYm90LCBjaGF0X2lkLCBhcGlfa2V5LCBsb2NhdGlvbikKICB9IGVsc2UgewogICAgYm90JHNlbmRNZXNzYWdlKGNoYXRfaWQgPSBjaGF0X2lkLCB0ZXh0ID0gIlNvcnJ5LCBJIGRvbid0IHVuZGVyc3RhbmQgdGhhdCBjb21tYW5kLiIpCiAgfQp9CgojIENyZWF0ZSBib3QgYW5kIHNldCB1cCBjb21tYW5kIGhhbmRsZXJzCmJvdCA8LSBCb3QodG9rZW4gPSBib3RfdG9rZW4pCnVwZGF0ZXIgPC0gVXBkYXRlcih0b2tlbiA9IGJvdF90b2tlbikKCiMgQWRkIGNvbW1hbmQgaGFuZGxlcnMKdXBkYXRlciA8LSB1cGRhdGVyICsgQ29tbWFuZEhhbmRsZXIoInN0YXJ0IiwgaGFuZGxlX2NvbW1hbmQpCnVwZGF0ZXIgPC0gdXBkYXRlciArIENvbW1hbmRIYW5kbGVyKCJ3ZWF0aGVyIiwgaGFuZGxlX2NvbW1hbmQpCgojIFN0YXJ0IHBvbGxpbmcKdXBkYXRlciRzdGFydF9wb2xsaW5nKCkKCmBgYAo=