diff --git a/src/bots/factory/bots/approved/callback_data.ts b/src/bots/factory/bots/approved/callback_data.ts index 942ec62..47a3931 100644 --- a/src/bots/factory/bots/approved/callback_data.ts +++ b/src/bots/factory/bots/approved/callback_data.ts @@ -6,3 +6,7 @@ export const SEARCH_SERIES_PREFIX = 'ss_'; export const AUTHOR_BOOKS_PREFIX = 'ba_'; export const SEQUENCE_BOOKS_PREFIX = 'bs_'; + +export const RANDOM_BOOK = 'random_book'; +export const RANDOM_AUTHOR = 'random_author'; +export const RANDOM_SEQUENCE = 'random_sequence'; diff --git a/src/bots/factory/bots/approved/index.ts b/src/bots/factory/bots/approved/index.ts index 3526833..2c343fe 100644 --- a/src/bots/factory/bots/approved/index.ts +++ b/src/bots/factory/bots/approved/index.ts @@ -13,6 +13,7 @@ import { CachedMessage, getBookCache } from './services/book_cache'; import { getBookCacheBuffer } from './services/book_cache_buffer'; import { formatBook, formatAuthor, formatSequence } from './format'; import { getPaginatedMessage, registerPaginationCommand } from './utils'; +import { getRandomKeyboard } from './keyboard'; export async function createApprovedBot(token: string, state: BotState): Promise { @@ -23,7 +24,7 @@ export async function createApprovedBot(token: string, state: BotState): Promise }); await bot.telegram.setMyCommands([ - {command: "random_book", description: "Случайная книга"}, + {command: "random", description: "Попытать удачу"}, {command: "update_log", description: "Информация об обновлении каталога"}, {command: "settings", description: "Настройки"}, {command: "help", description: "Помощь"}, @@ -47,9 +48,58 @@ export async function createApprovedBot(token: string, state: BotState): Promise registerPaginationCommand(bot, CallbackData.SEARCH_BOOK_PREFIX, BookLibrary.searchByBookName, formatBook); registerPaginationCommand(bot, CallbackData.SEARCH_AUTHORS_PREFIX, BookLibrary.searchAuthors, formatAuthor); registerPaginationCommand(bot, CallbackData.SEARCH_SERIES_PREFIX, BookLibrary.searchSequences, formatSequence); + registerPaginationCommand(bot, CallbackData.AUTHOR_BOOKS_PREFIX, BookLibrary.getAuthorBooks, formatBook); registerPaginationCommand(bot, CallbackData.SEQUENCE_BOOKS_PREFIX, BookLibrary.getSequenceBooks, formatBook); + bot.command("random", async (ctx: Context) => { + ctx.reply("Что хотим получить?", { + reply_markup: getRandomKeyboard().reply_markup + }) + }); + + bot.action(CallbackData.RANDOM_BOOK, async (ctx: Context) => { + const book = await BookLibrary.getRandomBook(); + + const keyboard = Markup.inlineKeyboard([ + [Markup.button.callback("Повторить?", CallbackData.RANDOM_BOOK)] + ]); + + ctx.editMessageReplyMarkup(undefined); + + ctx.reply(formatBook(book), { + reply_markup: keyboard.reply_markup, + }); + }); + + bot.action(CallbackData.RANDOM_AUTHOR, async (ctx: Context) => { + const author = await BookLibrary.getRandomAuthor(); + + const keyboard = Markup.inlineKeyboard([ + [Markup.button.callback("Повторить?", CallbackData.RANDOM_AUTHOR)] + ]); + + ctx.editMessageReplyMarkup(undefined); + + ctx.reply(formatAuthor(author), { + reply_markup: keyboard.reply_markup, + }); + }); + + bot.action(CallbackData.RANDOM_SEQUENCE, async (ctx: Context) => { + const sequence = await BookLibrary.getRandomSequence(); + + const keyboard = Markup.inlineKeyboard([ + [Markup.button.callback("Повторить?", CallbackData.RANDOM_SEQUENCE)] + ]); + + ctx.editMessageReplyMarkup(undefined); + + ctx.reply(formatSequence(sequence), { + reply_markup: keyboard.reply_markup, + }); + }); + bot.hears(/^\/d_[a-zA-Z0-9]+_[\d]+$/gm, async (ctx: Context) => { if (!ctx.message || !('text' in ctx.message)) { return; diff --git a/src/bots/factory/bots/approved/keyboard.ts b/src/bots/factory/bots/approved/keyboard.ts index 67356bf..d1491ab 100644 --- a/src/bots/factory/bots/approved/keyboard.ts +++ b/src/bots/factory/bots/approved/keyboard.ts @@ -1,6 +1,8 @@ import { Markup } from 'telegraf'; import { InlineKeyboardMarkup } from 'typegram'; +import { RANDOM_BOOK, RANDOM_AUTHOR, RANDOM_SEQUENCE } from './callback_data'; + export function getPaginationKeyboard(prefix: string, query: string, page: number, totalPages: number): Markup.Markup { function getRow(delta: number) { @@ -29,4 +31,13 @@ export function getPaginationKeyboard(prefix: string, query: string, page: numbe } return Markup.inlineKeyboard(rows); -} \ No newline at end of file +} + + +export function getRandomKeyboard(): Markup.Markup { + return Markup.inlineKeyboard([ + [Markup.button.callback('Книгу', RANDOM_BOOK)], + [Markup.button.callback('Автора', RANDOM_AUTHOR)], + [Markup.button.callback('Серию', RANDOM_SEQUENCE)], + ]); +} diff --git a/src/bots/factory/bots/approved/services/book_library.ts b/src/bots/factory/bots/approved/services/book_library.ts index ffc7b8e..cd02ec6 100644 --- a/src/bots/factory/bots/approved/services/book_library.ts +++ b/src/bots/factory/bots/approved/services/book_library.ts @@ -119,3 +119,15 @@ export async function getSequenceBooks(sequenceId: number, page: number): Promis size: PAGE_SIZE, }); } + +export async function getRandomBook(): Promise { + return _makeRequest('/api/v1/books/random'); +} + +export async function getRandomAuthor(): Promise { + return _makeRequest('/api/v1/authors/random'); +} + +export async function getRandomSequence(): Promise { + return _makeRequest('/api/v1/sequences/random'); +} diff --git a/src/bots/factory/bots/approved/utils.ts b/src/bots/factory/bots/approved/utils.ts index ffe8cd8..f794d32 100644 --- a/src/bots/factory/bots/approved/utils.ts +++ b/src/bots/factory/bots/approved/utils.ts @@ -49,7 +49,7 @@ export function registerPaginationCommand( reply_markup: pMessage.keyboard.reply_markup }); } catch (err) { - // console.log(err); + console.log(err); } }) }