diff --git a/src/bots/factory/bots/approved/index.ts b/src/bots/factory/bots/approved/index.ts index 42e230d..ee06481 100644 --- a/src/bots/factory/bots/approved/index.ts +++ b/src/bots/factory/bots/approved/index.ts @@ -12,6 +12,7 @@ import * as BookLibrary from "./services/book_library"; import { CachedMessage, getBookCache } from './services/book_cache'; import { getBookCacheBuffer } from './services/book_cache_buffer'; import { download } from './services/downloader'; +import { createOrUpdateUserSettings } from './services/user_settings'; import { formatBook, formatAuthor, formatSequence } from './format'; import { getPaginatedMessage, registerPaginationCommand } from './utils'; import { getRandomKeyboard } from './keyboard'; @@ -31,6 +32,20 @@ export async function createApprovedBot(token: string, state: BotState): Promise {command: "help", description: "Помощь"}, ]); + bot.use(async (ctx: Context, next) => { + if (ctx.from) { + const user = ctx.from; + createOrUpdateUserSettings({ + user_id: user.id, + last_name: user.last_name || '', + first_name: user.first_name, + username: user.username || '', + source: ctx.botInfo.username, + }); + } + await next(); + }); + bot.help((ctx: Context) => ctx.reply(Messages.HELP_MESSAGE)); bot.start((ctx: Context) => { diff --git a/src/bots/factory/bots/approved/services/user_settings.ts b/src/bots/factory/bots/approved/services/user_settings.ts new file mode 100644 index 0000000..ba08205 --- /dev/null +++ b/src/bots/factory/bots/approved/services/user_settings.ts @@ -0,0 +1,64 @@ +import got, { HTTPError } from 'got'; + +import env from '@/config'; + + +interface Language { + id: number; + label: string; + code: string; +} + + +interface UserSettings { + user_id: number; + last_name: string; + first_name: string; + source: string; + allowed_langs: Language[]; +} + + +export interface UserSettingsUpdateData { + user_id: number; + last_name: string; + first_name: string; + username: string; + source: string; +} + + +async function _makeGetRequest(url: string, searchParams?: string | Record | URLSearchParams | undefined): Promise { + const response = await got(`${env.USER_SETTINGS_URL}${url}`, { + searchParams, + headers: { + 'Authorization': env.USER_SETTINGS_API_KEY, + }, + responseType: 'json' + }); + + return response.body; +} + + +export async function getLanguages(): Promise { + return _makeGetRequest('/languages'); +} + + +export async function getUserSettings(user_id: number): Promise { + return _makeGetRequest(`/users/${user_id}`); +} + +export async function createOrUpdateUserSettings(data: UserSettingsUpdateData): Promise { + const response = await got.post(`${env.USER_SETTINGS_URL}/users/`, { + json: data, + headers: { + 'Authorization': env.USER_SETTINGS_API_KEY, + 'Content-Type': 'application/json', + }, + responseType: 'json' + }); + + return response.body; +} diff --git a/src/config.ts b/src/config.ts index 7362cbb..17031c8 100644 --- a/src/config.ts +++ b/src/config.ts @@ -15,4 +15,6 @@ export default cleanEnv(process.env, { BUFFER_SERVER_API_KEY: str(), DOWNLOADER_URL: str(), DOWNLOADER_API_KEY: str(), + USER_SETTINGS_URL: str(), + USER_SETTINGS_API_KEY: str(), });