|
|
|
const request = require("request");
|
|
|
|
const config = require("../config.json");
|
|
|
|
const Discord = require("discord.js");
|
|
|
|
|
|
|
|
let dateOptions = {
|
|
|
|
weekday: "short",
|
|
|
|
year: "numeric",
|
|
|
|
month: "long",
|
|
|
|
day: "numeric",
|
|
|
|
hour: "numeric",
|
|
|
|
minute: "numeric",
|
|
|
|
timeZone: config.timezone
|
|
|
|
};
|
|
|
|
|
|
|
|
function titleCase(title) {
|
|
|
|
if (title.length > 0) {
|
|
|
|
return title.charAt(0).toUpperCase() + title.slice(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getWeather(callsign, message) {
|
|
|
|
request.get(
|
|
|
|
`https://api.aprs.fi/api/get?name=${callsign}&what=wx&apikey=${
|
|
|
|
config.aprs_token
|
|
|
|
}&format=json`,
|
|
|
|
function(error, res, body) {
|
|
|
|
if (error) {
|
|
|
|
console.log(error);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
let data = JSON.parse(body);
|
|
|
|
if (data.found === 0) {
|
|
|
|
message.channel.send(
|
|
|
|
"Sorry, I couldn't find that. Please check the call sign and try again."
|
|
|
|
);
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
let temp = data.entries[0].temp
|
|
|
|
? `${data.entries[0].temp}C`
|
|
|
|
: "Not available";
|
|
|
|
let pressure = data.entries[0].pressure || "Not available";
|
|
|
|
let humidity = data.entries[0].humidity || "Not available";
|
|
|
|
let wind_direction = data.entries[0].wind_direction || "Not available";
|
|
|
|
let wind_speed = data.entries[0].wind_speed || "Not available";
|
|
|
|
let wind_gust = data.entries[0].wind_gust || "Not available";
|
|
|
|
let rain_1h = data.entries[0].rain_1h
|
|
|
|
? `${data.entries[0].rain_1h}mm`
|
|
|
|
: "Not available";
|
|
|
|
let rain_24h = data.entries[0].rain_24h
|
|
|
|
? `${data.entries[0].rain_24h}mm`
|
|
|
|
: "Not available";
|
|
|
|
let rain_mn = data.entries[0].rain_mn
|
|
|
|
? `${data.entries[0].rain_mn}mm`
|
|
|
|
: "Not available";
|
|
|
|
let luminosity = data.entries[0].luminosity || "Not available";
|
|
|
|
timeUpdated = new Date(data.entries[0].time * 1000);
|
|
|
|
let miniMapUrl = `http://www.findu.com/cgi-bin/radar-find.cgi?call=${callsign}`;
|
|
|
|
let locationEmbed = new Discord.RichEmbed()
|
|
|
|
.setColor(config.embed_color)
|
|
|
|
.setAuthor("APRS Bot")
|
|
|
|
.addField("Temp", temp)
|
|
|
|
.addField("Pressure", pressure)
|
|
|
|
.addField("Humidity", humidity)
|
|
|
|
.addField("Wind direction", wind_direction)
|
|
|
|
.addField("Wind speed", wind_speed)
|
|
|
|
.addField("Wind gust", wind_gust)
|
|
|
|
.addField("Rainfall past 1hr", rain_1h)
|
|
|
|
.addField("Rainfall past 24hrs", rain_1h)
|
|
|
|
.addField("Rainfall since midnight", rain_mn)
|
|
|
|
.addField("Luminosity", luminosity)
|
|
|
|
.addField("Time", timeUpdated.toLocaleString("en-US", dateOptions))
|
|
|
|
.setImage(miniMapUrl)
|
|
|
|
.setTimestamp()
|
|
|
|
.setFooter("Data sourced from https://aprs.fi/");
|
|
|
|
message.channel.send({ embed: locationEmbed });
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = getWeather;
|