diff --git a/src/app.ts b/src/app.ts index 91f5290..c9a4615 100644 --- a/src/app.ts +++ b/src/app.ts @@ -195,7 +195,8 @@ const taskPlugin = new Elysia({ prefix: "/job" }) return true; } catch (err) { set.status = 400; - return err; + logger.error(err); + return false; } }, { diff --git a/src/common/getFirstHtml.ts b/src/common/getFirstHtml.ts index fe01140..82fae16 100644 --- a/src/common/getFirstHtml.ts +++ b/src/common/getFirstHtml.ts @@ -2,10 +2,10 @@ import { config } from "@constants"; import axios from "axios"; import cheerio from "cheerio"; -export async function getFirstHtml(): Promise { +export async function getFirstHtml(): Promise { const response = await axios.get(config.LEGICA_URL); const html = response.data; const $ = cheerio.load(html); - const { href } = $(".News-link.c-def")?.attr() || {}; + const href = $(".legica-dana").first().find("a").attr("href"); return href; } diff --git a/src/common/getImgTitle.ts b/src/common/getImgTitle.ts index 8166e2f..00ee9f5 100644 --- a/src/common/getImgTitle.ts +++ b/src/common/getImgTitle.ts @@ -7,8 +7,9 @@ export async function getImgTitle(href: string): Promise { const html = response.data; const $ = cheerio.load(html); - const title = $(".Article-inner > h1").text(); - const { src: img } = $(".Article-media > img").attr() || {}; + const title = $(".article-title-container > h1").text(); + const src = $(".image-holder", ".article-content").find("img").attr("src"); + if (!src) throw new Error(`Image not found at ${href}.`); - return { title, img }; + return { title, img: src }; } diff --git a/src/common/sendDiscordMessage.ts b/src/common/sendDiscordMessage.ts index 9a4854a..a73df4b 100644 --- a/src/common/sendDiscordMessage.ts +++ b/src/common/sendDiscordMessage.ts @@ -11,7 +11,6 @@ export async function sendDiscordMessage( url: string, dateCheck?: dayjs.Dayjs ): Promise { - if (!url) return; const { img, title } = await getImgTitle(url); if (dateCheck) { @@ -26,7 +25,7 @@ export async function sendDiscordMessage( ); } - client.channels.cache.forEach(async (channel) => { + const promises = client.channels.cache.map(async (channel) => { try { if (channel.type !== "text") return null; const embeddedMessage = new MessageEmbed().setTitle(title).setImage(img); @@ -50,13 +49,16 @@ export async function sendDiscordMessage( console.error(`Reaction ${reaction} to channel ${channel.id} failed.`); } } - } catch { + } catch (err) { console.error(`Message to channel ${channel.id} failed.`); + throw err; } }); + await Promise.all(promises); } export async function sendNextMessage(client: Client): Promise { const href = await getFirstHtml(); + if (!href) throw new Error("URL cannot be empty!"); await sendDiscordMessage(client, href, dayjs()); }