import type { ParsedUpdate } from '@mtcute/client' import { I18nValue } from './types' let client: any try { client = require('@mtcute/client') } catch (e) {} /** * Create an index of i18n strings delimited by "." * * @param strings Strings object */ export function createI18nStringsIndex( strings: Record ): Record { const ret: Record = {} function add(obj: Record, prefix: string) { for (const key in obj) { const val = obj[key] if (typeof val === 'object') { add(val, prefix + key + '.') } else { ret[prefix + key] = val } } } add(strings, '') return ret } /** * Extract language from `@mtcute/client` update. Can be used for customized * adapters or external i18n libraries. * * @param update Update to extract language from */ export function extractLanguageFromUpdate( update: ParsedUpdate['data'] ): string | null | undefined { if (!client) { throw new Error( '@mtcute/client is not installed, you must provide your own adapter' ) } const upd = update as any switch (upd.constructor) { case client.Message: // if sender is Chat it will just be undefined return upd.sender.language case client.ChatMemberUpdate: case client.InlineQuery: case client.ChosenInlineResult: case client.CallbackQuery: case client.PollVoteUpdate: case client.BotStoppedUpdate: case client.BotChatJoinRequestUpdate: return upd.user.language } return null }