Skip to content

Instantly share code, notes, and snippets.

@RedRussianBear
Last active December 4, 2018 21:10
Show Gist options
  • Save RedRussianBear/6176eaaf2e15f0a0e168a98f8830eb0c to your computer and use it in GitHub Desktop.
Save RedRussianBear/6176eaaf2e15f0a0e168a98f8830eb0c to your computer and use it in GitHub Desktop.
// Import Botkit
const Botkit = require('botkit');
// Import Node HTTP for API requests
const http = require('http');
// Create the Botkit controller
const controller = Botkit.sparkbot({
public_address: process.env.public_address,
access_token: process.env.access_token,
secret: process.env.secret,
webhook_name: 'WeatherBot',
});
// Set up an Express-powered webserver
const webserver = require(__dirname + '/components/express_webserver.js')(controller);
// Tell Cisco Spark to start sending events to this application
require(__dirname + '/components/subscribe_events.js')(controller);
// Load in some helpers that make running Botkit on Glitch.com better
require(__dirname + '/components/plugin_glitch.js')(controller);
function getWeatherFor(bot, message, city) {
const query = 'http://api.openweathermap.org/data/2.5/weather?q=' + encodeURI(city)
+ '&appid=' + process.env.weather_token;
http.get(query, (res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
try {
const parsedData = JSON.parse(rawData);
if(statusCode != '200') {
bot.reply(message, parsedData.message);
return;
}
const weather = parsedData.weather[0].description;
const temp = Math.round((parsedData.main.temp - 273.15)*9/5 + 32);
bot.reply(message, weather + ', ' + temp + 'F');
} catch (e) { console.error(e.message); }
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});
}
controller.on('direct_mention', function(bot, message) {
if(message.text){
const query = message.text.trim();
if(query.includes('help')) {
bot.reply(message, 'Hi! I\'m Weatherbot! I can get you the weather in any city!');
bot.reply(message, 'Usage: @weather-bot [city] or @weatherbot [city],[country code]');
}
else {
bot.reply(message, 'Let me check...');
getWeatherFor(bot, message, query);
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment