diff --git a/src/bots/factory/bots/approved/index.ts b/src/bots/factory/bots/approved/index.ts index 406fa5c..b0ceadd 100644 --- a/src/bots/factory/bots/approved/index.ts +++ b/src/bots/factory/bots/approved/index.ts @@ -66,14 +66,32 @@ export async function createApprovedBot(token: string, state: BotState): Promise bot.command(["help", `help@${me.username}`], async (ctx: Context) => ctx.reply(Messages.HELP_MESSAGE)); - registerPaginationCommand(bot, CallbackData.SEARCH_BOOK_PREFIX, getSearchArgs, null, BookLibrary.searchByBookName, formatBook); - registerPaginationCommand(bot, CallbackData.SEARCH_TRANSLATORS_PREFIX, getSearchArgs, null, BookLibrary.searchTranslators, formatTranslator); - registerPaginationCommand(bot, CallbackData.SEARCH_AUTHORS_PREFIX, getSearchArgs, null, BookLibrary.searchAuthors, formatAuthor); - registerPaginationCommand(bot, CallbackData.SEARCH_SERIES_PREFIX, getSearchArgs, null, BookLibrary.searchSequences, formatSequence); + registerPaginationCommand( + bot, CallbackData.SEARCH_BOOK_PREFIX, getSearchArgs, null, BookLibrary.searchByBookName, formatBook, undefined, Messages.BOOKS_NOT_FOUND + ); + registerPaginationCommand( + bot, CallbackData.SEARCH_TRANSLATORS_PREFIX, getSearchArgs, null, BookLibrary.searchTranslators, formatTranslator, + undefined, Messages.TRANSLATORS_NOT_FOUND + ); + registerPaginationCommand( + bot, CallbackData.SEARCH_AUTHORS_PREFIX, getSearchArgs, null, BookLibrary.searchAuthors, formatAuthor, undefined, Messages.AUTHORS_NOT_FOUND + ); + registerPaginationCommand( + bot, CallbackData.SEARCH_SERIES_PREFIX, getSearchArgs, null, BookLibrary.searchSequences, formatSequence, undefined, Messages.SEQUENCES_NOT_FOUND + ); - registerPaginationCommand(bot, CallbackData.AUTHOR_BOOKS_PREFIX, getCallbackArgs, getPrefixWithQueryCreator(CallbackData.AUTHOR_BOOKS_PREFIX), BookLibrary.getAuthorBooks, formatBook); - registerPaginationCommand(bot, CallbackData.TRANSLATOR_BOOKS_PREFIX, getCallbackArgs, getPrefixWithQueryCreator(CallbackData.TRANSLATOR_BOOKS_PREFIX), BookLibrary.getTranslatorBooks, formatBook); - registerPaginationCommand(bot, CallbackData.SEQUENCE_BOOKS_PREFIX, getCallbackArgs, getPrefixWithQueryCreator(CallbackData.SEQUENCE_BOOKS_PREFIX), BookLibrary.getSequenceBooks, formatBook); + registerPaginationCommand( + bot, CallbackData.AUTHOR_BOOKS_PREFIX, getCallbackArgs, getPrefixWithQueryCreator(CallbackData.AUTHOR_BOOKS_PREFIX), + BookLibrary.getAuthorBooks, formatBook, undefined, Messages.BOOKS_NOT_FOUND, + ); + registerPaginationCommand( + bot, CallbackData.TRANSLATOR_BOOKS_PREFIX, getCallbackArgs, getPrefixWithQueryCreator(CallbackData.TRANSLATOR_BOOKS_PREFIX), + BookLibrary.getTranslatorBooks, formatBook, undefined, Messages.BOOKS_NOT_FOUND, + ); + registerPaginationCommand( + bot, CallbackData.SEQUENCE_BOOKS_PREFIX, getCallbackArgs, getPrefixWithQueryCreator(CallbackData.SEQUENCE_BOOKS_PREFIX), + BookLibrary.getSequenceBooks, formatBook, undefined, Messages.BOOKS_NOT_FOUND, + ); bot.command(["random", `random@${me.username}`], async (ctx: Context) => { ctx.reply("Что хотим получить?", { @@ -102,12 +120,15 @@ export async function createApprovedBot(token: string, state: BotState): Promise const arg = `${data[2]}_${data[3]}`; - const header = `Обновление каталога (${moment(data[2]).format("DD.MM.YYYY")} - ${moment(data[3]).format("DD.MM.YYYY")}):\n\n` + const header = `Обновление каталога (${moment(data[2]).format("DD.MM.YYYY")} - ${moment(data[3]).format("DD.MM.YYYY")}):\n\n`; + const noItemsMessage = 'Нет новых книг за этот период.'; - const pMessage = await getPaginatedMessage(`${CallbackData.UPDATE_LOG_PREFIX}${arg}_`, arg, page, allowedLangs, BookLibrary.getBooks, formatBook, header); + const pMessage = await getPaginatedMessage( + `${CallbackData.UPDATE_LOG_PREFIX}${arg}_`, arg, page, allowedLangs, BookLibrary.getBooks, formatBook, header, noItemsMessage, + ); await ctx.editMessageText(pMessage.message, { - reply_markup: pMessage.keyboard.reply_markup + reply_markup: pMessage.keyboard?.reply_markup }); }); @@ -268,10 +289,13 @@ export async function createApprovedBot(token: string, state: BotState): Promise const userSettings = await getUserSettings(ctx.message.from.id); const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); - const pMessage = await getPaginatedMessage(`${CallbackData.AUTHOR_BOOKS_PREFIX}${authorId}_`, parseInt(authorId), 1, allowedLangs, BookLibrary.getAuthorBooks, formatBook); + const pMessage = await getPaginatedMessage( + `${CallbackData.AUTHOR_BOOKS_PREFIX}${authorId}_`, parseInt(authorId), 1, + allowedLangs, BookLibrary.getAuthorBooks, formatBook, undefined, Messages.BOOKS_NOT_FOUND + ); await ctx.reply(pMessage.message, { - reply_markup: pMessage.keyboard.reply_markup + reply_markup: pMessage.keyboard?.reply_markup }); }); @@ -285,10 +309,13 @@ export async function createApprovedBot(token: string, state: BotState): Promise const userSettings = await getUserSettings(ctx.message.from.id); const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); - const pMessage = await getPaginatedMessage(`${CallbackData.TRANSLATOR_BOOKS_PREFIX}${translatorId}_`, parseInt(translatorId), 1, allowedLangs, BookLibrary.getTranslatorBooks, formatBook); + const pMessage = await getPaginatedMessage( + `${CallbackData.TRANSLATOR_BOOKS_PREFIX}${translatorId}_`, parseInt(translatorId), 1, + allowedLangs, BookLibrary.getTranslatorBooks, formatBook, undefined, Messages.BOOKS_NOT_FOUND + ); await ctx.reply(pMessage.message, { - reply_markup: pMessage.keyboard.reply_markup + reply_markup: pMessage.keyboard?.reply_markup }); }); @@ -302,10 +329,13 @@ export async function createApprovedBot(token: string, state: BotState): Promise const userSettings = await getUserSettings(ctx.message.from.id); const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); - const pMessage = await getPaginatedMessage(`${CallbackData.SEQUENCE_BOOKS_PREFIX}${sequenceId}_`, parseInt(sequenceId), 1, allowedLangs, BookLibrary.getSequenceBooks, formatBook); + const pMessage = await getPaginatedMessage( + `${CallbackData.SEQUENCE_BOOKS_PREFIX}${sequenceId}_`, parseInt(sequenceId), 1, allowedLangs, + BookLibrary.getSequenceBooks, formatBook, undefined, Messages.BOOKS_NOT_FOUND, + ); await ctx.reply(pMessage.message, { - reply_markup: pMessage.keyboard.reply_markup + reply_markup: pMessage.keyboard?.reply_markup }); }); diff --git a/src/bots/factory/bots/approved/messages.ts b/src/bots/factory/bots/approved/messages.ts index 6a839ad..ebf46dd 100644 --- a/src/bots/factory/bots/approved/messages.ts +++ b/src/bots/factory/bots/approved/messages.ts @@ -3,11 +3,16 @@ export const START_MESSAGE = 'Привет, {name}! \n' + 'Узнать, как со мной работать /help.\n' + 'Настройки языков для поиска /settings.\n'; -// export const HELP_MESSAGE = 'Лучше один раз увидеть, чем сто раз услышать.\n' + -// 'https://youtu.be/HV6Wm87D6_A'; - export const HELP_MESSAGE = 'Пока пусто :('; export const SETTINGS_MESSAGE = 'Настройки:'; export const SEARCH_MESSAGE = 'Что ищем?'; + +export const BOOKS_NOT_FOUND = "Книги для не найдены."; + +export const AUTHORS_NOT_FOUND = "Авторы не найдены."; + +export const TRANSLATORS_NOT_FOUND = "Переводчики не найдены."; + +export const SEQUENCES_NOT_FOUND = "Серии не найдены."; diff --git a/src/bots/factory/bots/approved/utils.ts b/src/bots/factory/bots/approved/utils.ts index 53a87db..745550a 100644 --- a/src/bots/factory/bots/approved/utils.ts +++ b/src/bots/factory/bots/approved/utils.ts @@ -9,7 +9,7 @@ import { createOrUpdateUserSettings, getUserSettings } from './services/user_set interface PreparedMessage { message: string; - keyboard: Markup.Markup; + keyboard?: Markup.Markup; } @@ -20,10 +20,21 @@ export async function getPaginatedMessage( allowedLangs: string[], itemsGetter: (data: D, page: number, allowedLangs: string[]) => Promise>, itemFormater: (item: T) => string, - header: string = "" + header: string = "", + noItemsMessage: string = "", ): Promise { const itemsPage = await itemsGetter(data, page, allowedLangs); + if (itemsPage.total_pages === 0) { + return { + message: noItemsMessage, + } + } + + if (page > itemsPage.total_pages) { + return getPaginatedMessage(prefix, data, page, allowedLangs, itemsGetter, itemFormater, header, noItemsMessage); + } + const formatedItems = itemsPage.items.map(itemFormater).join('\n\n\n'); const message = header + formatedItems + `\n\nСтраница ${page}/${itemsPage.total_pages}`; @@ -43,6 +54,8 @@ export function registerPaginationCommand( prefixCreator: ((query: Q) => string) | null, itemsGetter: (data: Q, page: number, allowedLangs: string[]) => Promise>, itemFormater: (item: T) => string, + headers?: string, + noItemsMessage?: string, ) { bot.action(new RegExp(prefix), async (ctx: Context) => { if (!ctx.callbackQuery) return; @@ -58,11 +71,13 @@ export function registerPaginationCommand( const tPrefix = prefixCreator ? prefixCreator(query) : prefix; - const pMessage = await getPaginatedMessage(tPrefix, query, page, allowedLangs, itemsGetter, itemFormater); + const pMessage = await getPaginatedMessage( + tPrefix, query, page, allowedLangs, itemsGetter, itemFormater, headers, noItemsMessage, + ); try { await ctx.editMessageText(pMessage.message, { - reply_markup: pMessage.keyboard.reply_markup + reply_markup: pMessage.keyboard?.reply_markup }); } catch (err) { console.log(err);