diff --git a/src/bots/factory/bots/approved/hooks/downloading.ts b/src/bots/factory/bots/approved/hooks/downloading.ts index 47a3002..923ff53 100644 --- a/src/bots/factory/bots/approved/hooks/downloading.ts +++ b/src/bots/factory/bots/approved/hooks/downloading.ts @@ -8,6 +8,12 @@ import { BotState, Cache } from '@/bots/manager'; async function _sendFile(ctx: Context, state: BotState, chatId: number, id: number, format: string) { const sendWithDownloadFromChannel = async () => { const data = await downloadFromCache(id, format); + + if (data === null) { + await ctx.reply("Ошибка скачивания книги. Попробуйте позже"); + return + } + await ctx.telegram.sendDocument(chatId, { source: data.source, filename: data.filename }, { caption: data.caption }); } diff --git a/src/bots/factory/bots/approved/services/book_cache.ts b/src/bots/factory/bots/approved/services/book_cache.ts index aed99c3..d7daeb4 100644 --- a/src/bots/factory/bots/approved/services/book_cache.ts +++ b/src/bots/factory/bots/approved/services/book_cache.ts @@ -1,4 +1,4 @@ -import got from 'got'; +import got, { Response } from 'got'; import { decode } from 'js-base64'; import env from '@/config'; @@ -59,15 +59,20 @@ export interface DownloadedFile { caption: string; } -export async function downloadFromCache(bookId: number, fileType: string): Promise { +export async function downloadFromCache(bookId: number, fileType: string): Promise { const readStream = got.stream.get(`${env.CACHE_SERVER_URL}/api/v1/download/${bookId}/${fileType}`, { headers: { 'Authorization': env.CACHE_SERVER_API_KEY, }, }); - return new Promise((resolve, reject) => { - readStream.on("response", async response => { + return new Promise((resolve, reject) => { + readStream.on("response", async (response: Response) => { + if (response.statusCode !== 200) { + resolve(null); + return + } + const captionData = response.headers['x-caption-b64']; if (captionData === undefined || Array.isArray(captionData)) throw Error('No caption?');