|
|
|
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 getLocationInfo(callsign, message) {
|
|
|
|
request.get(
|
|
|
|
`https://api.aprs.fi/api/get?name=${callsign}&what=loc&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 lat = data.entries[0].lat;
|
|
|
|
let lng = data.entries[0].lng;
|
|
|
|
let altitude = data.entries[0].altitude
|
|
|
|
/*? `${data.entries[0].altitude}m (${Math.round(
|
|
|
|
data.entries[0].altitude * 3.28084
|
|
|
|
)}ft)`
|
|
|
|
: "Not available";*/
|
|
|
|
? `${data.entries[0].altitude}m`
|
|
|
|
: "0.00m";
|
|
|
|
let speed = data.entries[0].speed
|
|
|
|
? `${data.entries[0].speed} km/h`
|
|
|
|
: "0";
|
|
|
|
let course = data.entries[0].course
|
|
|
|
? `${data.entries[0].course}`
|
|
|
|
: "0";
|
|
|
|
let comment = data.entries[0].comment
|
|
|
|
? `${data.entries[0].comment}`
|
|
|
|
: "No comment";
|
|
|
|
let status = data.entries[0].status
|
|
|
|
? `${data.entries[0].status}`
|
|
|
|
: "No status";
|
|
|
|
let path = data.entries[0].path
|
|
|
|
? `${data.entries[0].path}`
|
|
|
|
: "No path";
|
|
|
|
if (data.entries[0].status_lasttime) {
|
|
|
|
let status_last = new Date(parseInt(data.entries[0].status_lasttime, 10) * 1000);
|
|
|
|
var laststat = status_last.toLocaleString("en-US", dateOptions);
|
|
|
|
//status += `\nSent on: ${laststat}`;
|
|
|
|
}
|
|
|
|
let coords = `${lat},${lng}`;
|
|
|
|
let timeUpdated = new Date(data.entries[0].time * 1000);
|
|
|
|
let miniMapUrl = `https://maps.googleapis.com/maps/api/staticmap?center=${coords}&zoom=17&size=600x300&maptype=terrain&markers=color:red|${coords}&key=${config.gmaps_token}`;
|
|
|
|
let title = `APRS Information for ${callsign.toUpperCase()}`;
|
|
|
|
let locationEmbed = new Discord.RichEmbed()
|
|
|
|
.setColor(config.embed_color)
|
|
|
|
.setTitle(title)
|
|
|
|
.setAuthor("APRS Bot")
|
|
|
|
//.setThumbnail("https://cdn.discordapp.com/avatars/449250687868469258/1709ab4f567c56eaa731518ff621747c.png?size=2048")
|
|
|
|
.addField("Coordinates", coords.replace(",", ", "))
|
|
|
|
.addField("Last seen", timeUpdated.toLocaleString("en-US", dateOptions));
|
|
|
|
if (speed != "0") {
|
|
|
|
locationEmbed.addField("Speed", speed);
|
|
|
|
}
|
|
|
|
if (course !== "0") {
|
|
|
|
let cc = parseInt (course, 10);
|
|
|
|
let dir = "parse error";
|
|
|
|
|
|
|
|
switch(true) {
|
|
|
|
case (cc === 0):
|
|
|
|
case (cc === 365):
|
|
|
|
dir = "Heading north";
|
|
|
|
break;
|
|
|
|
case (cc === 90):
|
|
|
|
dir = "Heading east";
|
|
|
|
break;
|
|
|
|
case (cc === 180):
|
|
|
|
dir = "Heading south";
|
|
|
|
break;
|
|
|
|
case (cc === 270):
|
|
|
|
dir = "Heading west";
|
|
|
|
break;
|
|
|
|
case (cc < 90):
|
|
|
|
dir = "Heading north-east";
|
|
|
|
break;
|
|
|
|
case (cc < 180):
|
|
|
|
dir = "Heading south-east";
|
|
|
|
break;
|
|
|
|
case (cc < 270):
|
|
|
|
dir = "Heading south-west";
|
|
|
|
break;
|
|
|
|
case (cc < 365):
|
|
|
|
dir = "Heading north-west";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
dir = "parse error";
|
|
|
|
}
|
|
|
|
|
|
|
|
dir += ` (${cc} °)`;
|
|
|
|
|
|
|
|
|
|
|
|
locationEmbed.addField("Direction", dir);
|
|
|
|
}
|
|
|
|
if (altitude !== "0.00m") {
|
|
|
|
locationEmbed.addField("Altitude", altitude);
|
|
|
|
}
|
|
|
|
if (comment !== "No comment") {
|
|
|
|
locationEmbed.addField("Comment", comment);
|
|
|
|
}
|
|
|
|
if (status !== "No status") {
|
|
|
|
locationEmbed.addField(`Status (${laststat})`, status);
|
|
|
|
}
|
|
|
|
if (path !== "No path") {
|
|
|
|
locationEmbed.addField("Path", path);
|
|
|
|
}
|
|
|
|
/*locationEmbed.addField(
|
|
|
|
"Google Maps",
|
|
|
|
`https://www.google.com/maps/search/?api=1&query=${coords}`
|
|
|
|
)*/
|
|
|
|
locationEmbed.addField(
|
|
|
|
"APRS.fi",
|
|
|
|
`https://aprs.fi/#!mt=roadmap&z=11&call=a%2F${callsign.toUpperCase()}&timerange=3600&tail=3600`
|
|
|
|
)
|
|
|
|
.setImage(miniMapUrl)
|
|
|
|
//.addField("Path",
|
|
|
|
.setTimestamp()
|
|
|
|
.setFooter("Data sourced from https://aprs.fi/");
|
|
|
|
message.channel.send({ embed: locationEmbed });
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = getLocationInfo;
|