Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
|
d2df2a48ba |
|
@ -365,7 +365,7 @@
|
||||||
},
|
},
|
||||||
"FFW": {
|
"FFW": {
|
||||||
"text": "Flash Flood Warning",
|
"text": "Flash Flood Warning",
|
||||||
"priority": 5
|
"priority": 4
|
||||||
},
|
},
|
||||||
"FLN": {
|
"FLN": {
|
||||||
"priority": 1,
|
"priority": 1,
|
||||||
|
@ -1164,7 +1164,7 @@
|
||||||
"text": "Tropical Cyclone Watch/Warning Break Points"
|
"text": "Tropical Cyclone Watch/Warning Break Points"
|
||||||
},
|
},
|
||||||
"TIB": {
|
"TIB": {
|
||||||
"priority": 3,
|
"priority": 4,
|
||||||
"text": "Tsunami Bulletin"
|
"text": "Tsunami Bulletin"
|
||||||
},
|
},
|
||||||
"TID": {
|
"TID": {
|
||||||
|
@ -1308,7 +1308,7 @@
|
||||||
"text": "Routine Space Environment Product Issued Weekly"
|
"text": "Routine Space Environment Product Issued Weekly"
|
||||||
},
|
},
|
||||||
"WOU": {
|
"WOU": {
|
||||||
"priority": 5,
|
"priority": 4,
|
||||||
"text": "Tornado/Severe Thunderstorm Watch"
|
"text": "Tornado/Severe Thunderstorm Watch"
|
||||||
},
|
},
|
||||||
"WS1": {
|
"WS1": {
|
||||||
|
@ -1365,11 +1365,11 @@
|
||||||
},
|
},
|
||||||
"CFA": {
|
"CFA": {
|
||||||
"text": "Coastal Flood Watch",
|
"text": "Coastal Flood Watch",
|
||||||
"priority": 3
|
"priority": 4
|
||||||
},
|
},
|
||||||
"FLA": {
|
"FLA": {
|
||||||
"text": "Flood Watch",
|
"text": "Flood Watch",
|
||||||
"priority": 3
|
"priority": 2
|
||||||
},
|
},
|
||||||
"HWA": {
|
"HWA": {
|
||||||
"text": "High Wind Watch",
|
"text": "High Wind Watch",
|
||||||
|
@ -1389,7 +1389,7 @@
|
||||||
},
|
},
|
||||||
"SVA": {
|
"SVA": {
|
||||||
"text": "Severe Thunderstorm Watch",
|
"text": "Severe Thunderstorm Watch",
|
||||||
"priority": 5
|
"priority": 4
|
||||||
},
|
},
|
||||||
"TOA": {
|
"TOA": {
|
||||||
"text": "Tornado Watch",
|
"text": "Tornado Watch",
|
||||||
|
@ -1405,7 +1405,7 @@
|
||||||
},
|
},
|
||||||
"TSA": {
|
"TSA": {
|
||||||
"text": "Tsunami Watch",
|
"text": "Tsunami Watch",
|
||||||
"priority": 5
|
"priority": 4
|
||||||
},
|
},
|
||||||
"TSW": {
|
"TSW": {
|
||||||
"text": "Tsunami Warning",
|
"text": "Tsunami Warning",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"convective": [
|
"convective": [
|
||||||
"https://weather.cod.edu/cdata/text/images/spc/co/day1/categorical/spccoday1.categorical.latest.png",
|
"https://www.spc.noaa.gov/products/outlook/day1otlk.gif",
|
||||||
"https://climate.cod.edu/data/text/images/spc/co/day2/categorical/spccoday2.categorical.latest.png",
|
"https://www.spc.noaa.gov/products/outlook/day2otlk.gif",
|
||||||
"https://climate.cod.edu/data/text/images/spc/co/day3/categorical/spccoday3.categorical.latest.png",
|
"https://www.spc.noaa.gov/products/outlook/day3otlk.gif",
|
||||||
"https://climate.cod.edu/data/text/images/spc/co/day4/severe/spccoday4.severe.latest.png",
|
"https://www.spc.noaa.gov/products/exper/day4-8/day4prob.gif",
|
||||||
"https://climate.cod.edu/data/text/images/spc/co/day5/severe/spccoday5.severe.latest.png",
|
"https://www.spc.noaa.gov/products/exper/day4-8/day5prob.gif",
|
||||||
"https://climate.cod.edu/data/text/images/spc/co/day6/severe/spccoday6.severe.latest.png",
|
"https://www.spc.noaa.gov/products/exper/day4-8/day6prob.gif",
|
||||||
"https://climate.cod.edu/data/text/images/spc/co/day7/severe/spccoday7.severe.latest.png",
|
"https://www.spc.noaa.gov/products/exper/day4-8/day7prob.gif",
|
||||||
"https://climate.cod.edu/data/text/images/spc/co/day8/severe/spccoday8.severe.latest.png"
|
"https://www.spc.noaa.gov/products/exper/day4-8/day8prob.gif"
|
||||||
],
|
],
|
||||||
"fire": [
|
"fire": [
|
||||||
"https://www.spc.noaa.gov/products/exper/fire_wx/imgs/day1otlk_fire.gif",
|
"https://www.spc.noaa.gov/products/exper/fire_wx/imgs/day1otlk_fire.gif",
|
||||||
|
|
71
index.js
71
index.js
|
@ -6,7 +6,7 @@ const wfos = require("./data/wfos.json");
|
||||||
const blacklist = require("./data/blacklist.json");
|
const blacklist = require("./data/blacklist.json");
|
||||||
const events = require("./data/events.json");
|
const events = require("./data/events.json");
|
||||||
const outlookURLs = require("./data/outlook.json");
|
const outlookURLs = require("./data/outlook.json");
|
||||||
const satellites = require("./data/satellites.json");
|
const sattelites = require("./data/sattelites.json");
|
||||||
const nwrstreams = {callsigns:{}};
|
const nwrstreams = {callsigns:{}};
|
||||||
const Jimp = require("jimp");
|
const Jimp = require("jimp");
|
||||||
const { client, xml } = require("@xmpp/client");
|
const { client, xml } = require("@xmpp/client");
|
||||||
|
@ -377,14 +377,13 @@ xmpp.on("stanza", (stanza) => {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const diff = (now - product_id.timestamp) / 1000 / 60;
|
const diff = (now - product_id.timestamp) / 1000 / 60;
|
||||||
if (diff > 3) return;
|
if (diff > 3) return;
|
||||||
// if (config.debug >= 1) console.log(`${colors.magenta("[DEBUG]")} New message from ${fromChannel}`);
|
if (config.debug >= 1) console.log(`${colors.magenta("[DEBUG]")} New message from ${fromChannel}`);
|
||||||
console.log(`${colors.cyan("[INFO]")} ${getWFOByRoom(fromChannel).location} - ${evt.text} - ${product_id.timestamp}`);
|
|
||||||
messages++;
|
messages++;
|
||||||
|
|
||||||
|
|
||||||
// Handle NTFY
|
// Handle NTFY
|
||||||
if (config.ntfy.enabled) {
|
if (config.ntfy.enabled) {
|
||||||
//if (config.debug >= 1) console.log(`${colors.magenta("[DEBUG]")} Sending NTFY for ${config.ntfy.prefix}${fromChannel}`)
|
if (config.debug >= 1) console.log(`${colors.magenta("[DEBUG]")} Sending NTFY for ${config.ntfy.prefix}${fromChannel}`)
|
||||||
ntfyBody = {
|
ntfyBody = {
|
||||||
"topic": `${config.ntfy.prefix}${fromChannel}`,
|
"topic": `${config.ntfy.prefix}${fromChannel}`,
|
||||||
"message": bodyData.string,
|
"message": bodyData.string,
|
||||||
|
@ -402,7 +401,7 @@ xmpp.on("stanza", (stanza) => {
|
||||||
'Authorization': `Bearer ${config.ntfy.token}`
|
'Authorization': `Bearer ${config.ntfy.token}`
|
||||||
}
|
}
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
//if (config.debug >= 1) console.log(`${colors.magenta("[DEBUG]")} NTFY sent for ${config.ntfy.prefix}${fromChannel} with status ${res.status} ${res.statusText}`);
|
if (config.debug >= 1) console.log(`${colors.magenta("[DEBUG]")} NTFY sent for ${config.ntfy.prefix}${fromChannel} with status ${res.status} ${res.statusText}`);
|
||||||
if (res.status !== 200) console.log(`${colors.red("[ERROR]")} NTFY failed for ${config.ntfy.prefix}${fromChannel} with status ${res.status} ${res.statusText}`);
|
if (res.status !== 200) console.log(`${colors.red("[ERROR]")} NTFY failed for ${config.ntfy.prefix}${fromChannel} with status ${res.status} ${res.statusText}`);
|
||||||
|
|
||||||
|
|
||||||
|
@ -523,7 +522,6 @@ xmpp.on("stanza", (stanza) => {
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.log(`${colors.red("[ERROR]")} Failed to send message to ${channel.guild.ownerId}`);
|
console.log(`${colors.red("[ERROR]")} Failed to send message to ${channel.guild.ownerId}`);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (channel.guildId == config.discord.mainGuild) return;
|
|
||||||
db.run(`DELETE FROM channels WHERE channelid = ? AND iemchannel = ?`, [channel.id, fromChannel], (err) => {
|
db.run(`DELETE FROM channels WHERE channelid = ? AND iemchannel = ?`, [channel.id, fromChannel], (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err.message);
|
console.error(err.message);
|
||||||
|
@ -577,27 +575,6 @@ xmpp.on("stanza", (stanza) => {
|
||||||
thisMsg.content = row.custommessage || null;
|
thisMsg.content = row.custommessage || null;
|
||||||
user.send(thisMsg).catch((err) => {
|
user.send(thisMsg).catch((err) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}).catch((err) => {
|
|
||||||
console.log(`${colors.yellow("[WARN]")} Failed to send message to ${user.tag} (${user.id})`);
|
|
||||||
const logChannel = discord.guilds.cache.get(config.discord.mainGuild).channels.cache.get(config.discord.logChannel);
|
|
||||||
logChannel.send({
|
|
||||||
embeds: [
|
|
||||||
{
|
|
||||||
title: "Failed to send DM",
|
|
||||||
description: `User may have DMs disabled, or bot doesnt' share a server anymore!.
|
|
||||||
User: ${user.tag} (${user.id})
|
|
||||||
Sub Info: \`\`\`json\n${JSON.stringify(row)}\`\`\``,
|
|
||||||
color: 0xff0000
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}).then(() => {
|
|
||||||
db.run(`DELETE FROM userAlerts WHERE userid = ? AND iemchannel = ?`, [user.id, fromChannel], (err) => {
|
|
||||||
if (err) {
|
|
||||||
console.error(err.message);
|
|
||||||
}
|
|
||||||
console.log(`${colors.cyan("[INFO]")} Deleted user ${user.id} from database`);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
|
@ -704,19 +681,19 @@ discord.on('ready', async () => {
|
||||||
commands = require("./data/commands.json");
|
commands = require("./data/commands.json");
|
||||||
// Add dynamic commands (based on datas files)
|
// Add dynamic commands (based on datas files)
|
||||||
satCommand = {
|
satCommand = {
|
||||||
"name": "satellite",
|
"name": "sattelite",
|
||||||
"description": "Get the latest satellite images from a given satellite",
|
"description": "Get the latest sattelite images from a given sattelite",
|
||||||
"options": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "satellite",
|
"name": "sattelite",
|
||||||
"description": "The satellite to get images from",
|
"description": "The sattelite to get images from",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"required": true,
|
"required": true,
|
||||||
"choices": []
|
"choices": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
for (const key in satellites) {
|
for (const key in sattelites) {
|
||||||
satCommand.options[0].choices.push({
|
satCommand.options[0].choices.push({
|
||||||
"name": key,
|
"name": key,
|
||||||
"value": key
|
"value": key
|
||||||
|
@ -1355,18 +1332,18 @@ discord.on("interactionCreate", async (interaction) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case "satellite": // Get satellite images
|
case "sattelite": // Get satellite images
|
||||||
sat = interaction.options.getString("satellite");
|
sat = interaction.options.getString("sattelite");
|
||||||
if (!satellites[sat]) return interaction.reply({ content: "Invalid satellite", ephemeral: true });
|
if (!sattelites[sat]) return interaction.reply({ content: "Invalid satellite", ephemeral: true });
|
||||||
// Fetch all the images
|
// Fetch all the images
|
||||||
productOptions = []
|
productOptions = []
|
||||||
await (() => {
|
await (() => {
|
||||||
for (const key in satellites[sat].products) {
|
for (const key in sattelites[sat].products) {
|
||||||
// make a discord customid safe id for the product name, add it to the satellites object
|
// make a discord customid safe id for the product name, add it to the sattelites object
|
||||||
satellites[sat].products[key].customid = key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
|
sattelites[sat].products[key].customid = key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
|
||||||
productOptions.push({
|
productOptions.push({
|
||||||
label: key,
|
label: key,
|
||||||
value: satellites[sat].products[key].customid
|
value: sattelites[sat].products[key].customid
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
console.log(JSON.stringify(productOptions, null, 2))
|
console.log(JSON.stringify(productOptions, null, 2))
|
||||||
|
@ -1449,7 +1426,7 @@ discord.on("interactionCreate", async (interaction) => {
|
||||||
sat = satData.sat
|
sat = satData.sat
|
||||||
product = interaction.values[0];
|
product = interaction.values[0];
|
||||||
// find the original product name
|
// find the original product name
|
||||||
product_name = Object.keys(satellites[sat].products).find(key => satellites[sat].products[key].customid === product);
|
product_name = Object.keys(sattelites[sat].products).find(key => sattelites[sat].products[key].customid === product);
|
||||||
imageOptions = []
|
imageOptions = []
|
||||||
satMessages[interaction.customId.split("|")[1]] = {
|
satMessages[interaction.customId.split("|")[1]] = {
|
||||||
sat,
|
sat,
|
||||||
|
@ -1458,13 +1435,13 @@ discord.on("interactionCreate", async (interaction) => {
|
||||||
images: {}
|
images: {}
|
||||||
}
|
}
|
||||||
await (() => {
|
await (() => {
|
||||||
// for key, value in satellites[sat].products[product_name]
|
// for key, value in sattelites[sat].products[product_name]
|
||||||
console.log(product_name)
|
console.log(product_name)
|
||||||
for (const key in satellites[sat].products[product_name]) {
|
for (const key in sattelites[sat].products[product_name]) {
|
||||||
// make a discord customid safe id for the product name, add it to the satellites object
|
// make a discord customid safe id for the product name, add it to the sattelites object
|
||||||
//console.log(satellites[sat].products[product_name])
|
//console.log(sattelites[sat].products[product_name])
|
||||||
if (key === "customid") continue;
|
if (key === "customid") continue;
|
||||||
satMessages[interaction.customId.split("|")[1]].images[key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase()] = satellites[sat].products[product_name][key];
|
satMessages[interaction.customId.split("|")[1]].images[key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase()] = sattelites[sat].products[product_name][key];
|
||||||
imageOptions.push({
|
imageOptions.push({
|
||||||
label: key,
|
label: key,
|
||||||
value: key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase()
|
value: key.replace(/[^a-zA-Z0-9]/g, "").toLowerCase()
|
||||||
|
@ -1590,8 +1567,6 @@ discord.on("guildCreate", async (guild) => {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}).catch((err) => {
|
|
||||||
console.log(`${colors.red("[ERROR]")} Failed to send message to user ${user.id}: ${err.message}`);
|
|
||||||
})
|
})
|
||||||
channel.send({
|
channel.send({
|
||||||
embeds: [
|
embeds: [
|
||||||
|
@ -1670,7 +1645,5 @@ process.on("uncaughtException", (error) => {
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Login to discord
|
// Login to discord
|
||||||
discord.login(config.discord.token);
|
discord.login(config.discord.token);
|
Loading…
Reference in a new issue