Open In App

How to Design a Weather Bot in Telegram using JavaScript ?

Last Updated : 05 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Telegram bot can be used to know the complete weather details of any city, state, a country without going using another application. Telegram provides a bunch of API methods to perform different functions. You can use telegram bot API to create a Chatbot that returns weather-based information about a city, state, or country based on the parameters and command sent to the bot.

Prerequisites:

  • Knowledge of JavaScript and setting up a node environment.
  • The latest version of Node (version > 10)
  • The latest version of npm (version > 6)

Command to check if Node and npm are present in your system:

$ npm --v
6.14.5

$ node --version
v10.15.0

Creating Bot and getting API token:

  • Open the telegram app and search for @BotFather.
  • Click on the start button or send “/start”.
  • Then send “/newbot” message to set up a name and a username.
  • The BotFather will then give you an API token.

Getting Weather API key:

  • Go to the Open weather map website.
  • Create an account as per the limit.
  • You will receive your own API key.
  • Read the documentation if you want to use different parameters instead of the city name.

Modules Installation:

Install requests and node-telegram-bot-api (Node.js module to interact with the official Telegram Bot API)

$ npm install --save requests node-telegram-bot-api

Filename: weather.js

Javascript




// Requiring modules
const TelegramBot = require('node-telegram-bot-api')
const request = require('request')
 
// Token obtained from bot father
const token = "YOUR_TELEGRAM_BOT_TOKEN"
 
const bot = new TelegramBot(token, { polling: true });
 
// Create a bot that uses 'polling' to
// fetch new updates
bot.on("polling_error", (err) => console.log(err));
 
// The 'msg' is the received Message from user and
// 'match' is the result of execution above
// on the text content
bot.onText(/\/city (.+)/, function (msg, match) {
 
    // Getting the name of movie from the message
    // sent to bot
    const city = match[1];
    const chatId = msg.chat.id
    const query =
        + city + '&appid=YOUR_WEATHER_API_KEY'
 
    // Key obtained from openweathermap API
    request(query, function (error, response, body) {
 
        if (!error && response.statusCode == 200) {
 
            bot.sendMessage(chatId,
                '_Looking for details of_ ' + city
                + '...', { parse_mode: "Markdown" })
                .then(msg) {
                res = JSON.parse(body)
                const temp = Math.round((parseInt(
                    res.main.temp_min) - 273.15), 2)
 
                // Kelvin to celsius and then round
                // off and conversion to atm
                const pressure = Math.round(parseInt(
                    res.main.pressure) - 1013.15)
 
                const rise = new Date(parseInt(
                    res.sys.sunrise) * 1000);
 
                const set = new Date(parseInt(
                    res.sys.sunset) * 1000);
                // Unix time to IST time conversion
 
                bot.sendMessage(chatId, '**** '
                    + res.name + ' ****\nTemperature: '
                    + String(temp) + '°C\nHumidity: ' +
                    res.main.humidity + ' %\nWeather: '
                    + res.weather[0].description +
                    '\nPressure: ' + String(pressure)
                    + ' atm\nSunrise: ' +
                    rise.toLocaleTimeString() +
                    ' \nSunset: ' +
                    set.toLocaleTimeString() +
                    '\nCountry: ' + res.sys.country)
            }
 
            // Sending back the response from
            // the bot to user. The response
            // has many other details also
            // which can be used or sent as
            // per requirement
        }
    })
})


Steps to run the program: Run the weather.js file using the following command:

$ node weather.js

Go to your bot and type /city city-name and see the results.

Output:

Weather Information using Telegram bot



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads