diff --git a/bot.js b/bot.js index d5ca8d3..4190284 100644 --- a/bot.js +++ b/bot.js @@ -25,32 +25,42 @@ client.on("ready", () => { client.channels.size } channels of ${client.guilds.size} guilds.` ); - return client.user.setActivity("Stations", { type: "Watching" }); + //return client.user.setActivity("", { type: "Watching" }); }); client.on("message", message => { if (message.author.bot) return; - if (message.content.indexOf(config.prefix) !== 0) return; + //if (message.content.indexOf(config.prefix) !== 0) return; const args = message.content - .slice(config.prefix.length) + //.slice(config.prefix.length) .trim() .split(/ +/g); - const command = args.shift(); - if (command === "loc") { + //const command = args.shift(); + /*if (command === "loc") { let callsign = args.join("").toLowerCase(); getLocationInfo(callsign, message); return; - } + }*/ + const command = args.shift(); if (command === "weather" || command === "wx") { let callsign = args.join("").toLowerCase(); getWeather(callsign, message); return; - } - if (command === "help") { + } else if (command === "hilfe" || command === "help") { message.channel.send( - "**Currently available commands**:\n`?loc callsign` to retrieve location information.\n`?wx callsign` to retrieve weather data." + //"**Currently available commands**:\n`?loc callsign` to retrieve location information.\n`?wx callsign` to retrieve weather data." + "**Usage:**\n`help` to print this help\n`aprs_callsign` to retrieve info about *aprs_callsign*" ); return; + } else if (command === "info") { + message.channel.send( + "Hello, my name is Ron. I show the _last heard station information_ about the station that you type into the channel. Just send the callsign that you want the information about and I will see what I can do for you. If you want more information about a weather station type `wx` or `weather` before the callsign.\n\n_For example_\n**`wx OE7XEI-13`** will show the latest weather information from `OE7XEI-13`, which is a weather station from OE7AAI.\nType **`help`** or **`hilfe`** to get more information about the used commands…" + ); + } else { + //let callsign = args.join("").toLowerCase(); + let callsign = command.toLowerCase(); + getLocationInfo(callsign, message); + return; } }); client.login(config.token); diff --git a/modules/getLocationInfo.js b/modules/getLocationInfo.js index f07f991..b744c9e 100644 --- a/modules/getLocationInfo.js +++ b/modules/getLocationInfo.js @@ -39,26 +39,107 @@ function getLocationInfo(callsign, message) { 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}m (${Math.round( data.entries[0].altitude * 3.28084 )}ft)` - : "Not available"; + : "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=13&size=600x300&maptype=roadmap&markers=color:blue|${coords}&key=${ - config.gmaps_token - }`; + 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") - .addField("Coordinates", coords) - .addField("Altitude", altitude) - .addField("Time", timeUpdated.toLocaleString("en-US", dateOptions)) - .addField( - "Gmaps", + //.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 });