diff --git a/src/index.js b/src/index.js index 571f400..070db4f 100644 --- a/src/index.js +++ b/src/index.js @@ -14,8 +14,8 @@ import { parse } from 'node-html-parser'; -import { - pipeline +import { + pipeline } from 'node:stream/promises'; import path from 'node:path'; @@ -26,127 +26,145 @@ const client = new Client({ const config = JSON.parse(fs.readFileSync(path.resolve("config", "config.json"))); -process.env.TZ = config.timezone; +process.env.TZ = config.timezone; client.once(Events.ClientReady, readyClient => { console.log(`Ready! Logged in as ${readyClient.user.tag}`); }); async function get_rain_image() { - try { - let radar_src = "https://weather.bangkok.go.th/Images/Radar/radarh.jpg" - const radar_image = await axios.get(radar_src, { - responseType: "stream" - }); - - const radar_image_size = radar_image.headers['content-length']; - console.log("Got Radar Data"); - return [radar_image, radar_image_size]; - } catch (error) { - console.error(error); - return [error]; - } + try { + let radar_src = "https://weather.bangkok.go.th/Images/Radar/radarh.jpg" + const radar_image = await axios.get(radar_src, { + responseType: "stream" + }); + + const radar_image_size = radar_image.headers['content-length']; + console.log("Got Radar Data"); + return [radar_image, radar_image_size]; + } catch (error) { + console.error(error); + return [error]; + } } async function get_radar_caption() { - const response = await axios.get('https://weather.bangkok.go.th/Radar/RadarHighResolution.aspx'); + const response = await axios.get('https://weather.bangkok.go.th/Radar/RadarHighResolution.aspx'); - let root = parse(response.data); - console.log("Got Radar Caption") - return root.querySelector('#repeaDaily_lblDESCRIPTION_0').childNodes[0]._rawText; + let root = parse(response.data); + console.log("Got Radar Caption") + return root.querySelector('#repeaDaily_lblDESCRIPTION_0').childNodes[0]._rawText; } const curr_image_path = path.resolve("data", "current_radar.jpg"); client.on('ready', () => { - (async () => { - const channel = client.channels.cache.get(config.room); - const webhooks = await channel.fetchWebhooks(); - const webhook = webhooks.first(); - - let radar_image = await get_rain_image(); - let radar_caption = await get_radar_caption(); + (async () => { + const channel = client.channels.cache.get(config.room); + const webhooks = await channel.fetchWebhooks(); + const webhook = webhooks.first(); - await pipeline( - radar_image[0].data, - fs.createWriteStream(curr_image_path) - ); - console.log("File Saved"); - - console.log("Updating on boot"); - - let date = new Date().toLocaleString('th-TH'); + let radar_image = await get_rain_image(); + let radar_caption = await get_radar_caption(); - let caption = `# Raindar Update\n## ${date}\n${radar_caption}\n\nLeft: Current Observation\nRight: 3 hour forecast` - - let message = await channel.send({ - content: caption, - files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"] - }); - - let message_id = message.id; - console.log(`Sent ${message.id}: ${message.content}`); + await pipeline( + radar_image[0].data, + fs.createWriteStream(curr_image_path) + ); + console.log("File Saved"); - await webhook.send({ - content: caption, - files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"], - threadId: config.history, - }); - console.log(`Sent message to history`) - - setInterval(async () => { - let curr_image_size = fs.statSync(curr_image_path).size; + console.log("Updating on boot"); - let radar_image = await get_rain_image(); - let radar_caption = await get_radar_caption(); + let date = new Date().toLocaleString('th-TH'); + + let caption = `# Raindar Update\n## ${date}\n${radar_caption}\n\nLeft: Current Observation\nRight: 3 hour forecast` + + let message = await channel.send({ + content: caption, + files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"] + }); + + let message_id = message.id; + console.log(`Sent ${message.id}: ${message.content}`); + + await webhook.send({ + content: caption, + files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"], + threadId: config.history, + }); + console.log(`Sent message to history`) + + setInterval(async () => { + let curr_image_size = fs.statSync(curr_image_path).size; + + let radar_image = await get_rain_image(); + let radar_caption = await get_radar_caption(); await pipeline( - radar_image[0].data, - fs.createWriteStream(curr_image_path) + radar_image[0].data, + fs.createWriteStream(curr_image_path) ); console.log("File Saved"); let radar_image_size = radar_image[1]; - + console.log("Current: " + curr_image_size); console.log("New: " + radar_image_size); - - if(radar_image_size != curr_image_size) { - console.log("File change detected!"); - const delete_msg = await channel.messages.delete(message_id); - - let date = new Date().toLocaleString('th-TH'); + if (radar_image_size != curr_image_size) { + console.log("File change detected!"); + + channel.messages + .fetch(sentMessage.id) + .then((fetchedMessage) => { + console.log('Message exists'); + + fetchedMessage + .delete() + .then(() => console.log('Message deleted successfully')) + .catch((err) => console.log('Could not delete the message', err)); + }) + .catch((err) => { + if (err.httpStatus === 404) { + console.log('Message already deleted'); + } else { + console.log(err); + } + }); + + let date = new Date().toLocaleString('th-TH'); + + let caption = `# Raindar Update\n## ${date}\n${radar_caption}\n\nLeft: Current Observation\nRight: 3 hour forecast` + + let message = await channel.send({ + content: caption, + files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"] + }); - let caption = `# Raindar Update\n## ${date}\n${radar_caption}\n\nLeft: Current Observation\nRight: 3 hour forecast` - - let message = await channel.send({ - content: caption, - files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"] - }); - console.log(`Sent ${message.id}: ${message.content}`); - message_id = message.id; + message_id = message.id; + + await webhook.send({ + content: caption, + files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"], + threadId: config.history, + }); + console.log(`Sent message to history`) + - await webhook.send({ - content: caption, - files: [curr_image_path, "https://dds.bangkok.go.th/Radar/radar_rain.gif"], - threadId: config.history, - }); - console.log(`Sent message to history`) } else { console.log("No change in data, go on."); } - }, 60000); - })(); + }, 60000); + })(); }); client.on(Events.ShardError, error => { - console.log('A websocket connection encountered an error: ', error); + console.log('A websocket connection encountered an error: ', error); }); process.on('unhandledRejection', error => { - console.error(error); + console.error(error); }); client.login(config.token);