Compare commits

..

1 commit
main ... main

Author SHA1 Message Date
dziban303 d2df2a48ba Update data/satellites.json 2025-01-18 07:24:04 -07:00
3 changed files with 37 additions and 64 deletions

View file

@ -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",

View file

@ -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",

View file

@ -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);