Compare commits
2 Commits
040b427d97
...
e11d941a93
Author | SHA1 | Date | |
---|---|---|---|
e11d941a93 | |||
9eb25f706e |
50
src/index.ts
50
src/index.ts
@ -1,6 +1,5 @@
|
|||||||
import { getAllChapters, getLatestChapter } from './mangadex/chapters';
|
import { getAllChapters, getLatestChapter } from './mangadex/chapters';
|
||||||
import { getManga } from './mangadex/manga';
|
import { getManga } from './mangadex/manga';
|
||||||
import { getCover } from './mangadex/cover';
|
|
||||||
import { lazyKv } from './db/lazyKv';
|
import { lazyKv } from './db/lazyKv';
|
||||||
import { sendWebhook } from './utils/webhook';
|
import { sendWebhook } from './utils/webhook';
|
||||||
import { ChapterId } from './types';
|
import { ChapterId } from './types';
|
||||||
@ -22,34 +21,37 @@ void (async () => {
|
|||||||
await getMangaToFetch(config);
|
await getMangaToFetch(config);
|
||||||
|
|
||||||
for (const mangaId of uniqueMangaIds) {
|
for (const mangaId of uniqueMangaIds) {
|
||||||
const lastChapterId = await mangaHistory.get<ChapterId>(mangaId);
|
try {
|
||||||
|
const lastChapterId = await mangaHistory.get<ChapterId>(mangaId);
|
||||||
|
|
||||||
const manga = await getManga(mangaId, userAgent);
|
const manga = await getManga(mangaId, userAgent);
|
||||||
const chapters = await getAllChapters(mangaId, userAgent);
|
const chapters = await getAllChapters(mangaId, userAgent);
|
||||||
const latestChapter = getLatestChapter(chapters);
|
const latestChapter = getLatestChapter(chapters);
|
||||||
const cover = await getCover(manga, userAgent);
|
const title = getMangaTitle(manga);
|
||||||
const title = getMangaTitle(manga);
|
|
||||||
|
|
||||||
if (lastChapterId !== latestChapter.id) {
|
if (lastChapterId !== latestChapter.id) {
|
||||||
console.log('Update found for manga:', title);
|
console.log('Update found for manga:', title);
|
||||||
|
|
||||||
const webhooksForManga = mangaIdsToWebhooks[mangaId];
|
const webhooksForManga = mangaIdsToWebhooks[mangaId];
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
webhooksForManga.map(
|
webhooksForManga.map(
|
||||||
async (webhookUrl) =>
|
async (webhookUrl) =>
|
||||||
await sendWebhook({
|
await sendWebhook({
|
||||||
webhookUrl,
|
webhookUrl,
|
||||||
manga,
|
manga,
|
||||||
latestChapter,
|
latestChapter,
|
||||||
cover,
|
}),
|
||||||
}),
|
),
|
||||||
),
|
);
|
||||||
);
|
|
||||||
|
|
||||||
await mangaHistory.set(mangaId, latestChapter.id);
|
await mangaHistory.set(mangaId, latestChapter.id);
|
||||||
} else {
|
} else {
|
||||||
console.log('No Updates found for manga:', title);
|
console.log('No Updates found for manga:', title);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Failed to fetch ${mangaId}!`);
|
||||||
|
console.error(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
import axios from 'axios';
|
|
||||||
import { Manga } from '../types';
|
|
||||||
|
|
||||||
export const getCover = async (
|
|
||||||
manga: Manga,
|
|
||||||
userAgent: string,
|
|
||||||
): Promise<string> => {
|
|
||||||
const coverId = Object.values(manga.relationships).find(
|
|
||||||
(relationship) => relationship.type === 'cover_art',
|
|
||||||
)?.id;
|
|
||||||
|
|
||||||
if (!coverId) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
const response = await axios.get<{
|
|
||||||
data: { attributes: { fileName: string } };
|
|
||||||
}>(`https://api.mangadex.org/cover/${coverId}`, {
|
|
||||||
headers: {
|
|
||||||
'User-Agent': userAgent,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return `https://mangadex.org/covers/${manga.id}/${response.data.data.attributes.fileName}`;
|
|
||||||
};
|
|
@ -7,25 +7,21 @@ export const sendWebhook = async (args: {
|
|||||||
webhookUrl: string;
|
webhookUrl: string;
|
||||||
manga: Manga;
|
manga: Manga;
|
||||||
latestChapter: Chapter;
|
latestChapter: Chapter;
|
||||||
cover: string;
|
|
||||||
}) => {
|
}) => {
|
||||||
const { webhookUrl, manga, latestChapter, cover } = args;
|
const { webhookUrl, manga, latestChapter } = args;
|
||||||
const title = getMangaTitle(manga);
|
const title = getMangaTitle(manga);
|
||||||
|
|
||||||
await axios.post(webhookUrl, {
|
await axios.post(webhookUrl, {
|
||||||
username: 'Manga Updates',
|
username: 'Manga Updates',
|
||||||
avatar_url: 'https://assets.pfy.ch/icons/manga.png',
|
avatar_url: 'https://mangadex.org/pwa/icons/icon-180.png',
|
||||||
content: `[New chapter for ${title}](https://mangadex.org/chapter/${latestChapter.id})`,
|
|
||||||
embeds: [
|
embeds: [
|
||||||
{
|
{
|
||||||
author: {
|
url: `https://mangadex.org/chapter/${latestChapter.id}`,
|
||||||
icon_url: 'https://assets.pfy.ch/icons/manga.png',
|
image: {
|
||||||
name: title,
|
url: `https://og.mangadex.org/og-image/chapter/${latestChapter.id}`,
|
||||||
},
|
},
|
||||||
thumbnail: {
|
title: `${title}`,
|
||||||
url: cover,
|
description: ` Ch. ${latestChapter.attributes.chapter} - ${latestChapter.attributes.title} `,
|
||||||
},
|
|
||||||
description: `Chapter ${latestChapter.attributes.chapter}: "${latestChapter.attributes.title}"`,
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user