2023-06-05 03:30:48 +03:00
|
|
|
import type { BotChatJoinRequestUpdate, BotStoppedUpdate, CallbackQuery, ChatMemberUpdate, ChosenInlineResult, InlineQuery, Message, ParsedUpdate, PollVoteUpdate, User } from '@mtcute/client'
|
2022-07-19 02:47:59 +03:00
|
|
|
|
2023-06-05 03:30:48 +03:00
|
|
|
import { I18nStrings, I18nValue } from './types'
|
|
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
2022-08-29 18:54:43 +03:00
|
|
|
let client: any
|
2023-06-05 03:30:48 +03:00
|
|
|
|
2022-08-29 18:54:43 +03:00
|
|
|
try {
|
|
|
|
client = require('@mtcute/client')
|
|
|
|
} catch (e) {}
|
|
|
|
|
2022-09-12 15:01:43 +03:00
|
|
|
/**
|
|
|
|
* Create an index of i18n strings delimited by "."
|
|
|
|
*
|
|
|
|
* @param strings Strings object
|
|
|
|
*/
|
2022-07-19 02:47:59 +03:00
|
|
|
export function createI18nStringsIndex(
|
2023-06-05 03:30:48 +03:00
|
|
|
strings: I18nStrings,
|
2022-07-19 02:47:59 +03:00
|
|
|
): Record<string, I18nValue> {
|
|
|
|
const ret: Record<string, I18nValue> = {}
|
|
|
|
|
2023-06-05 03:30:48 +03:00
|
|
|
function add(obj: I18nStrings, prefix: string) {
|
2022-07-19 02:47:59 +03:00
|
|
|
for (const key in obj) {
|
|
|
|
const val = obj[key]
|
|
|
|
|
2023-06-05 03:30:48 +03:00
|
|
|
if (typeof val === 'object' && !('value' in val)) {
|
2022-07-19 02:47:59 +03:00
|
|
|
add(val, prefix + key + '.')
|
|
|
|
} else {
|
2023-06-05 03:30:48 +03:00
|
|
|
ret[prefix + key] = val as string
|
2022-07-19 02:47:59 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
add(strings, '')
|
|
|
|
|
|
|
|
return ret
|
|
|
|
}
|
|
|
|
|
2022-09-12 15:01:43 +03:00
|
|
|
/**
|
|
|
|
* Extract language from `@mtcute/client` update. Can be used for customized
|
|
|
|
* adapters or external i18n libraries.
|
|
|
|
*
|
|
|
|
* @param update Update to extract language from
|
|
|
|
*/
|
2022-07-19 02:47:59 +03:00
|
|
|
export function extractLanguageFromUpdate(
|
2023-06-05 03:30:48 +03:00
|
|
|
update: ParsedUpdate['data'],
|
2022-07-19 02:47:59 +03:00
|
|
|
): string | null | undefined {
|
2022-08-29 18:54:43 +03:00
|
|
|
if (!client) {
|
|
|
|
throw new Error(
|
2023-06-05 03:30:48 +03:00
|
|
|
'@mtcute/client is not installed, you must provide your own adapter',
|
2022-08-29 18:54:43 +03:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2023-06-05 03:30:48 +03:00
|
|
|
switch (update.constructor) {
|
2022-08-29 18:54:43 +03:00
|
|
|
case client.Message:
|
2022-07-19 02:47:59 +03:00
|
|
|
// if sender is Chat it will just be undefined
|
2023-06-05 03:30:48 +03:00
|
|
|
return ((update as Message).sender as User).language
|
2022-08-29 18:54:43 +03:00
|
|
|
case client.ChatMemberUpdate:
|
|
|
|
case client.InlineQuery:
|
|
|
|
case client.ChosenInlineResult:
|
|
|
|
case client.CallbackQuery:
|
|
|
|
case client.PollVoteUpdate:
|
|
|
|
case client.BotStoppedUpdate:
|
|
|
|
case client.BotChatJoinRequestUpdate:
|
2023-06-05 03:30:48 +03:00
|
|
|
return (
|
|
|
|
update as
|
|
|
|
| ChatMemberUpdate
|
|
|
|
| InlineQuery
|
|
|
|
| ChosenInlineResult
|
|
|
|
| CallbackQuery
|
|
|
|
| PollVoteUpdate
|
|
|
|
| BotStoppedUpdate
|
|
|
|
| BotChatJoinRequestUpdate
|
|
|
|
).user.language
|
2022-07-19 02:47:59 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
return null
|
|
|
|
}
|