From ac3302ba0477dd767ed9fea87eb1f9c5a592dae2 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Sat, 12 Mar 2022 15:26:37 +0300 Subject: [PATCH] Fix allowed langs getting --- src/bots/factory/bots/approved/index.ts | 14 +++++--------- src/bots/factory/bots/approved/keyboard.ts | 11 ++--------- .../bots/approved/services/user_settings.ts | 10 ++++++++++ src/bots/factory/bots/approved/utils.ts | 13 ++++--------- 4 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/bots/factory/bots/approved/index.ts b/src/bots/factory/bots/approved/index.ts index ee899b7..777d42a 100644 --- a/src/bots/factory/bots/approved/index.ts +++ b/src/bots/factory/bots/approved/index.ts @@ -13,7 +13,7 @@ import * as CallbackData from "./callback_data"; import * as BookLibrary from "./services/book_library"; import UsersCounter from '@/analytics/users_counter'; -import { createOrUpdateUserSettings, getUserSettings } from './services/user_settings'; +import { createOrUpdateUserSettings, getUserOrDefaultLangCodes } from './services/user_settings'; import { formatBook, formatBookShort, formatAuthor, formatSequence, formatTranslator, formatDetailBook } from './format'; import { getCallbackArgs, getPaginatedMessage, getPrefixWithQueryCreator, getSearchArgs, registerLanguageSettingsCallback, registerPaginationCommand, registerRandomItemCallback } from './utils'; import { getRandomKeyboard, getTextPaginationData, getUpdateLogKeyboard, getUserAllowedLangsKeyboard } from './keyboard'; @@ -115,8 +115,7 @@ export async function createApprovedBot(token: string, state: BotState): Promise bot.action(new RegExp(CallbackData.UPDATE_LOG_PREFIX), async (ctx: Context) => { if (!ctx.callbackQuery || !('data' in ctx.callbackQuery)) return; - const userSettings = await getUserSettings(ctx.callbackQuery.from.id); - const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); + const allowedLangs = await getUserOrDefaultLangCodes(ctx.callbackQuery.from.id); const data = ctx.callbackQuery.data.split("_"); const page = parseInt(data[4]); @@ -305,8 +304,7 @@ export async function createApprovedBot(token: string, state: BotState): Promise const authorId = ctx.message.text.split('@')[0].split('_')[1]; - const userSettings = await getUserSettings(ctx.message.from.id); - const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); + const allowedLangs = await getUserOrDefaultLangCodes(ctx.message.from.id); const pMessage = await getPaginatedMessage( `${CallbackData.AUTHOR_BOOKS_PREFIX}${authorId}_`, parseInt(authorId), 1, @@ -325,8 +323,7 @@ export async function createApprovedBot(token: string, state: BotState): Promise const translatorId = ctx.message.text.split("@")[0].split('_')[1]; - const userSettings = await getUserSettings(ctx.message.from.id); - const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); + const allowedLangs = await getUserOrDefaultLangCodes(ctx.message.from.id); const pMessage = await getPaginatedMessage( `${CallbackData.TRANSLATOR_BOOKS_PREFIX}${translatorId}_`, parseInt(translatorId), 1, @@ -345,8 +342,7 @@ export async function createApprovedBot(token: string, state: BotState): Promise const sequenceId = ctx.message.text.split("@")[0].split('_')[1]; - const userSettings = await getUserSettings(ctx.message.from.id); - const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); + const allowedLangs = await getUserOrDefaultLangCodes(ctx.message.from.id); const pMessage = await getPaginatedMessage( `${CallbackData.SEQUENCE_BOOKS_PREFIX}${sequenceId}_`, parseInt(sequenceId), 1, allowedLangs, diff --git a/src/bots/factory/bots/approved/keyboard.ts b/src/bots/factory/bots/approved/keyboard.ts index 64123f9..ffa71b6 100644 --- a/src/bots/factory/bots/approved/keyboard.ts +++ b/src/bots/factory/bots/approved/keyboard.ts @@ -4,7 +4,7 @@ import moment from 'moment'; import chunkText from 'chunk-text'; import { RANDOM_BOOK, RANDOM_AUTHOR, RANDOM_SEQUENCE, ENABLE_LANG_PREFIX, DISABLE_LANG_PREFIX, UPDATE_LOG_PREFIX } from './callback_data'; -import { getUserSettings, getLanguages } from './services/user_settings'; +import { getLanguages, getUserOrDefaultLangCodes } from './services/user_settings'; function getButtonLabel(delta: number, direction: 'left' | 'right'): string { @@ -94,16 +94,9 @@ export function getUpdateLogKeyboard(): Markup.Markup { ]); } - -const DEFAULT_ALLOWED_LANGS_CODES = ['ru', 'be', 'uk']; - export async function getUserAllowedLangsKeyboard(userId: number): Promise> { const allLangs = await getLanguages(); - const userSettings = await getUserSettings(userId); - - const userAllowedLangsCodes = userSettings !== null - ? userSettings.allowed_langs.map((lang) => lang.code) - : DEFAULT_ALLOWED_LANGS_CODES; + const userAllowedLangsCodes = await getUserOrDefaultLangCodes(userId); const onEmoji = '🟢'; const offEmoji = '🔴'; diff --git a/src/bots/factory/bots/approved/services/user_settings.ts b/src/bots/factory/bots/approved/services/user_settings.ts index 06cbc69..9cb5c40 100644 --- a/src/bots/factory/bots/approved/services/user_settings.ts +++ b/src/bots/factory/bots/approved/services/user_settings.ts @@ -51,6 +51,16 @@ export async function getUserSettings(userId: number): Promise { return _makeGetRequest(`/users/${userId}`); } + +export async function getUserOrDefaultLangCodes(userId: number): Promise { + try { + return (await getUserSettings(userId)).allowed_langs.map((lang) => lang.code); + } catch { + return ["ru", "be", "uk"]; + } +} + + export async function createOrUpdateUserSettings(data: UserSettingsUpdateData): Promise { const response = await got.post(`${env.USER_SETTINGS_URL}/users/`, { json: data, diff --git a/src/bots/factory/bots/approved/utils.ts b/src/bots/factory/bots/approved/utils.ts index 307ebff..3439b40 100644 --- a/src/bots/factory/bots/approved/utils.ts +++ b/src/bots/factory/bots/approved/utils.ts @@ -9,7 +9,7 @@ import env from '@/config'; import { isNotModifiedMessage } from './errors_utils'; import { getPaginationKeyboard, getUserAllowedLangsKeyboard } from './keyboard'; import * as BookLibrary from "./services/book_library"; -import { createOrUpdateUserSettings, getUserSettings } from './services/user_settings'; +import { createOrUpdateUserSettings, getUserOrDefaultLangCodes } from './services/user_settings'; Sentry.init({ @@ -76,8 +76,7 @@ export function registerPaginationCommand( const { query, page } = args; - const userSettings = await getUserSettings(ctx.callbackQuery.from.id); - const allowedLangs = userSettings.allowed_langs.map((lang) => lang.code); + const allowedLangs = await getUserOrDefaultLangCodes(ctx.callbackQuery.from.id); const tPrefix = prefixCreator ? prefixCreator(query) : prefix; @@ -106,10 +105,8 @@ export function registerRandomItemCallback( bot.action(callback_data, async (ctx: Context) => { if (!ctx.callbackQuery || !('data' in ctx.callbackQuery)) return; - const userSettings = await getUserSettings(ctx.callbackQuery.from.id); - const item = await itemGetter( - userSettings.allowed_langs.map((lang) => lang.code) + await getUserOrDefaultLangCodes(ctx.callbackQuery.from.id), ); const keyboard = Markup.inlineKeyboard([ @@ -135,9 +132,7 @@ export function registerLanguageSettingsCallback( bot.action(new RegExp(prefix), async (ctx: Context) => { if (!ctx.callbackQuery || !('data' in ctx.callbackQuery)) return; - const userSettings = await getUserSettings(ctx.callbackQuery.from.id); - - let allowedLangsCodes = userSettings.allowed_langs.map((item) => item.code); + let allowedLangsCodes = await getUserOrDefaultLangCodes(ctx.callbackQuery.from.id); const tLang = ctx.callbackQuery.data.split("_")[2];