Compare commits

..

3 commits

Author SHA1 Message Date
Christopher Cookman ac4d7c86e7 Test 4 2024-10-02 12:39:16 -06:00
Christopher Cookman 60f7c22083 Test 2 2024-10-02 12:33:20 -06:00
Christopher Cookman 443c82fcd9 Test1 2024-10-02 12:22:07 -06:00
5 changed files with 28 additions and 82 deletions

View file

@ -91,4 +91,6 @@
"zsechat@conference.weather.im", "zsechat@conference.weather.im",
"zdcchat@conference.weather.im", "zdcchat@conference.weather.im",
"znychat@conference.weather.im" "znychat@conference.weather.im"
] ]

View file

@ -1345,7 +1345,7 @@
}, },
"WSW": { "WSW": {
"text": "Winter Storm Warning", "text": "Winter Storm Warning",
"priority": 4 "priority": 5
}, },
"WWA": { "WWA": {
"priority": 1, "priority": 1,
@ -1524,7 +1524,7 @@
"priority": 3 "priority": 3
}, },
"PIR": { "PIR": {
"text": "Pilot Reports", "priority": 0,
"priority": 1 "_comment": "This is an unknown event type, ignore it for now until we know more info"
} }
} }

View file

@ -1,4 +1,3 @@
const geolib = require("geolib");
// Use OSM API to get coordinates https://nominatim.openstreetmap.org/search?q=search+query&format=json&limit=1 // Use OSM API to get coordinates https://nominatim.openstreetmap.org/search?q=search+query&format=json&limit=1
const getCoordinates = async (location) => { const getCoordinates = async (location) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {

101
index.js
View file

@ -21,7 +21,6 @@ satMessages = {};
// Setup Discord // Setup Discord
const discord = new Discord.Client({ const discord = new Discord.Client({
intents: [ intents: [
"Guilds", "Guilds",
"GuildVoiceStates", "GuildVoiceStates",
@ -36,6 +35,7 @@ const rest = new REST({
version: '10' version: '10'
}).setToken(config.discord.token); }).setToken(config.discord.token);
// Setup SQlite DB // Setup SQlite DB
const db = new sqlite3.Database("channels.db", (err) => { const db = new sqlite3.Database("channels.db", (err) => {
if (err) { if (err) {
@ -356,20 +356,12 @@ xmpp.on("stanza", (stanza) => {
// get product id from "x" tag // get product id from "x" tag
var evt = events[product_id.pil.substring(0, 3)]; var evt = events[product_id.pil.substring(0, 3)];
if (evt.priority === 0) return; // This is an event that we don't care about
if (!evt) { if (!evt) {
evt = { name: "Unknown", priority: 3 } evt = { name: "Unknown", priority: 3 }
console.log(`${colors.red("[ERROR]")} Unknown event type: ${product_id.pil.substring(0, 3)}. Fix me`); console.log(`${colors.red("[ERROR]")} Unknown event type: ${product_id.pil.substring(0, 3)}. Fix me`);
console.log(`${colors.magenta("[DEBUG]")} ${bodyData.string}`) console.log(`${colors.magenta("[DEBUG]")} ${bodyData.string}`)
const logChannel = discord.guilds.cache.get(config.discord.mainGuild).channels.cache.get(config.discord.logChannel);
logChannel.send({
embeds: [
{
title: "Unknown Event Type",
description: `Unknown event type: ${product_id.pil.substring(0, 3)}. Please check the logs for more details.`,
color: 0xff0000
}
]
});
} }
evt.code = product_id.pil.substring(0, 3); evt.code = product_id.pil.substring(0, 3);
@ -457,16 +449,18 @@ xmpp.on("stanza", (stanza) => {
console.log(`${colors.red("[ERROR]")} ${err.message}`); console.log(`${colors.red("[ERROR]")} ${err.message}`);
} }
if (!rows) return; // No channels to alert if (!rows) return; // No channels to alert
rows.forEach(async (row) => { rows.forEach((row) => {
// Get Filters as arrays // Get Filters as arrays
if (!row.filterEvt) row.filterEvt = ""; if (!row.filterEvt) row.filterEvt = "";
if (!row.filter) row.filter = ""; if (!row.filter) row.filter = "";
let filterEvt = row.filterEvt.toLowerCase().split(","); let filterEvt = row.filterEvt.toLowerCase().split(",");
let filters = row.filter.toLowerCase().split(","); let filters = row.filter.toLowerCase().split(",");
filterEvt = filterEvt.map(filter => filter.startsWith('!') ? filter.substring(1) : filter);
filters = filters.map(filter => filter.startsWith('!') ? filter.substring(1) : filter);
if (evt.priority < row.minPriority) return; if (evt.priority < row.minPriority) return;
// If the event type is not in th filter, ignore it. Make sure filterEvt isnt null // If the event type is not in th filter, ignore it. Make sure filterEvt isnt null
if (!filterEvt[0]) filterEvt = []; if (!filterEvt[0]) filterEvt = [];
if (!filterEvt.includes(evt.code.toLowerCase()) && !filterEvt.length == 0) return; if (filterEvt.some(filter => filter.startsWith('!') ? evt.code.toLowerCase() !== filter.substring(1) : !filter.includes(evt.code.toLowerCase())) && filterEvt.length > 0) return;
let channel = discord.channels.cache.get(row.channelid); let channel = discord.channels.cache.get(row.channelid);
if (!channel) return console.log(`${colors.red("[ERROR]")} Channel ${row.channelid} not found`); if (!channel) return console.log(`${colors.red("[ERROR]")} Channel ${row.channelid} not found`);
@ -483,53 +477,6 @@ xmpp.on("stanza", (stanza) => {
console.error(err); console.error(err);
}).then((msg) => { }).then((msg) => {
if (msg.channel.type === Discord.ChannelType.GuildAnnouncement) msg.crosspost(); if (msg.channel.type === Discord.ChannelType.GuildAnnouncement) msg.crosspost();
}).catch((err) => {
console.log(`${colors.yellow("[WARN]")} Failed to send message to ${channel.guild.name}/${channel.name} (${channel.guild.id}/${channel.id})`);
const logChannel = discord.guilds.cache.get(config.discord.mainGuild).channels.cache.get(config.discord.logChannel);
logChannel.send({
embeds: [
{
title: "Failed to send message",
description: `There is likely an issue with permissions. Please notify the server owner if possible.
Guild: ${channel.guild.name} (${channel.guild.id})
Channel: ${channel.name} (${channel.id})
Guild Owner: <@${channel.guild.ownerId}> (${channel.guild.ownerId})
Sub Info: \`\`\`json\n${JSON.stringify(row)}\`\`\``,
color: 0xff0000
}
]
});
discord.users.fetch(channel.guild.ownerId).then((user) => {
user.send({
embeds: [
{
title: "Issue with your subscribed channel.",
description: `There is likely an issue with permissions. Please check that I can send messages in <#${channel.id}>\nYour subscription has been removed, and you will need to resubscribe to get alerts.`,
color: 0xff0000,
fields: [
{
name: "Guild",
value: `${channel.guild.name} (${channel.guild.id})`
},
{
name: "Channel",
value: `${channel.name} (${channel.id})`
}
]
}
]
}).catch((err) => {
console.log(`${colors.red("[ERROR]")} Failed to send message to ${channel.guild.ownerId}`);
}).then(() => {
db.run(`DELETE FROM channels WHERE channelid = ? AND iemchannel = ?`, [channel.id, fromChannel], (err) => {
if (err) {
console.error(err.message);
}
console.log(`${colors.cyan("[INFO]")} Deleted channel ${channel.id} from database`);
});
})
});
}); });
}); });
}).catch((err) => { }).catch((err) => {
@ -556,12 +503,15 @@ xmpp.on("stanza", (stanza) => {
if (!row.filter) row.filter = ""; if (!row.filter) row.filter = "";
let filterEvt = row.filterEvt.toLowerCase().split(","); let filterEvt = row.filterEvt.toLowerCase().split(",");
let filters = row.filter.toLowerCase().split(","); let filters = row.filter.toLowerCase().split(",");
filterEvt = filterEvt.map(filter => filter.startsWith('!') ? filter.substring(1) : filter);
filters = filters.map(filter => filter.startsWith('!') ? filter.substring(1) : filter);
// If priority is less than the min priority, ignore it // If priority is less than the min priority, ignore it
if (evt.priority < row.minPriority) return; if (evt.priority < row.minPriority) return;
// If the event type is not in th filter, ignore it. Make sure filterEvt isnt null // If the event type is not in th filter, ignore it. Make sure filterEvt isnt null
if (!filterEvt[0]) filterEvt = []; if (!filterEvt[0]) filterEvt = [];
if (!filterEvt.includes(evt.code.toLowerCase()) && !filterEvt.length == 0) return; if (filterEvt.some(filter => filter.startsWith('!') ? evt.code.toLowerCase() === filter.substring(1) : !filter.includes(evt.code.toLowerCase())) && filterEvt.length > 0) return;
let user = discord.users.cache.get(row.userid); let user = discord.users.cache.get(row.userid);
if (!user) return console.log(`${colors.red("[ERROR]")} User ${row.userid} not found`); if (!user) return console.log(`${colors.red("[ERROR]")} User ${row.userid} not found`);
@ -842,35 +792,30 @@ discord.on("interactionCreate", async (interaction) => {
filterEvt = interaction.options.getString("filterevt") || null; filterEvt = interaction.options.getString("filterevt") || null;
message = interaction.options.getString("message") || null; message = interaction.options.getString("message") || null;
if (interaction.inGuild()) { if (interaction.inGuild()) {
interaction.channel.send("Permission check").then((msg) => { db.get(`SELECT * FROM channels WHERE channelid = ? AND iemchannel = ?`, [interaction.channel.id, room], (err, row) => {
msg.delete(); if (err) {
db.get(`SELECT * FROM channels WHERE channelid = ? AND iemchannel = ?`, [interaction.channel.id, room], (err, row) => { console.error(err.message);
interaction.reply({ content: "Failed to subscribe to room", ephemeral: true });
} /*else if (row) {
return interaction.reply({ content: `Already subscribed to \`${getWFOByRoom(room).location}\`\nIf you want to update a subscribtion, please unsubscribe and resubscribe. This will be made a command eventually.`, ephemeral: true });
}*/
db.run(`INSERT INTO channels (channelid, iemchannel, custommessage, filter, filterEvt, minPriority) VALUES (?, ?, ?, ? ,? ,?)`, [interaction.channel.id, room, message, filter, filterEvt, minPriority], (err) => {
if (err) { if (err) {
console.error(err.message); console.error(err.message);
interaction.reply({ content: "Failed to subscribe to room", ephemeral: true }); interaction.reply({ content: "Failed to subscribe to room", ephemeral: true });
} else if (row) { } else {
return interaction.reply({ content: `Already subscribed to \`${getWFOByRoom(room).location}\`\nIf you want to update a subscribtion, please unsubscribe and resubscribe. This will be made a command eventually.`, ephemeral: true }); interaction.reply({ content: `Subscribed to \`${getWFOByRoom(room).location}\``, ephemeral: true });
} }
db.run(`INSERT INTO channels (channelid, iemchannel, custommessage, filter, filterEvt, minPriority) VALUES (?, ?, ?, ? ,? ,?)`, [interaction.channel.id, room, message, filter, filterEvt, minPriority], (err) => {
if (err) {
console.error(err.message);
interaction.reply({ content: "Failed to subscribe to room", ephemeral: true });
} else {
interaction.reply({ content: `Subscribed to \`${getWFOByRoom(room).location}\``, ephemeral: true });
}
});
}); });
}).catch((err) => {
interaction.reply({ content: "Failed to subscribe to room. Bot does not have send message permissions here!", ephemeral: true });
}); });
} else { // We're in a DM } else { // We're in a DM
db.get(`SELECT * FROM userAlerts WHERE userid = ? AND iemchannel = ?`, [interaction.user.id, room], (err, row) => { db.get(`SELECT * FROM userAlerts WHERE userid = ? AND iemchannel = ?`, [interaction.user.id, room], (err, row) => {
if (err) { if (err) {
console.error(err.message); console.error(err.message);
interaction.reply({ content: "Failed to subscribe to room", ephemeral: true }); interaction.reply({ content: "Failed to subscribe to room", ephemeral: true });
} else if (row) { } /*else if (row) {
return interaction.reply({ content: `Already subscribed to \`${getWFOByRoom(room).location}\`\nIf you want to update a subscribtion, please unsubscribe and resubscribe. This will be made a command eventually.`, ephemeral: true }); return interaction.reply({ content: `Already subscribed to \`${getWFOByRoom(room).location}\`\nIf you want to update a subscribtion, please unsubscribe and resubscribe. This will be made a command eventually.`, ephemeral: true });
} }*/
db.run(`INSERT INTO userAlerts (userid, iemchannel, custommessage, filter, filterEvt, minPriority) VALUES (?, ?, ?, ? ,?, ?)`, [interaction.user.id, room, message, filter, filterEvt, minPriority], (err) => { db.run(`INSERT INTO userAlerts (userid, iemchannel, custommessage, filter, filterEvt, minPriority) VALUES (?, ?, ?, ? ,?, ?)`, [interaction.user.id, room, message, filter, filterEvt, minPriority], (err) => {
if (err) { if (err) {
console.error(err.message); console.error(err.message);