diff --git a/src/bots/factory/bots/approved/hooks/downloading.ts b/src/bots/factory/bots/approved/hooks/downloading.ts index 3aa42c7..01533f3 100644 --- a/src/bots/factory/bots/approved/hooks/downloading.ts +++ b/src/bots/factory/bots/approved/hooks/downloading.ts @@ -1,7 +1,7 @@ import { Context } from 'telegraf'; import * as BookLibrary from "../services/book_library"; -import { clearBookCache, getBookCache } from '../services/book_cache'; +import { clearBookCache, getBookCache, downloadFromCache } from '../services/book_cache'; import { getBookCacheBuffer } from '../services/book_cache_buffer'; import { download } from '../services/downloader'; import { BotState, Cache } from '@/bots/manager'; @@ -14,6 +14,11 @@ async function _sendFile(ctx: Context, state: BotState, chatId: number, id: numb await ctx.telegram.sendDocument(chatId, data) } + const sendWithDownloadFromChannel = async () => { + const data = await downloadFromCache(id, format); + await ctx.telegram.sendDocument(chatId, data); + } + const getCachedMessage = async () => { if (state.cache === Cache.ORIGINAL) { return getBookCache(id, format); @@ -30,7 +35,11 @@ async function _sendFile(ctx: Context, state: BotState, chatId: number, id: numb }; if (state.cache === Cache.NO_CACHE) { - await sendWithoutCache(); + try { + await sendWithDownloadFromChannel(); + } catch (e) { + await sendWithoutCache(); + } return; } diff --git a/src/bots/factory/bots/approved/services/book_cache.ts b/src/bots/factory/bots/approved/services/book_cache.ts index 15e3b28..21d172d 100644 --- a/src/bots/factory/bots/approved/services/book_cache.ts +++ b/src/bots/factory/bots/approved/services/book_cache.ts @@ -51,3 +51,21 @@ export async function getBookCache(bookId: number, fileType: string): Promise { return (await _makeDeleteRequest(`/api/v1/${bookId}/${fileType}`)).data; } + +export interface DownloadedFile { + source: Buffer; + filename: string; +} + +export async function downloadFromCache(bookId: number, fileType: string): Promise { + const response = await got(`${env.DOWNLOADER_URL}/api/v1/download/${bookId}/${fileType}`, { + headers: { + 'Authorization': env.DOWNLOADER_API_KEY, + }, + }); + + return { + source: response.rawBody, + filename: (response.headers['content-disposition'] || '').split('filename=')[1] + } +} diff --git a/src/bots/factory/bots/approved/services/book_download.ts b/src/bots/factory/bots/approved/services/book_download.ts deleted file mode 100644 index e69de29..0000000