From f4ee1f599f41e5abb3b319044a291667aed5d12a Mon Sep 17 00:00:00 2001 From: Alina Sireneva Date: Mon, 11 Dec 2023 21:52:48 +0300 Subject: [PATCH] chore(client)!: improved translate* methods breaking: both methods now return `TextWithEntities` --- packages/client/src/client.ts | 10 ++----- packages/client/src/methods/_imports.ts | 2 +- .../src/methods/messages/translate-message.ts | 9 ++++-- .../src/methods/messages/translate-text.ts | 28 ++++++++++++------- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 7135a45b..0a7b1ff8 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -288,7 +288,6 @@ import { InputText, MaybeDynamic, Message, - MessageEntity, MessageMedia, MessageReactions, ParametersSkip2, @@ -315,6 +314,7 @@ import { StoryViewer, StoryViewersList, TakeoutSession, + TextWithEntities, TypingStatus, UploadedFile, UploadFileLike, @@ -3950,20 +3950,16 @@ export interface TelegramClient extends BaseTelegramClient { /** Target language (two-letter ISO 639-1 language code) */ toLanguage: string }, - ): Promise<[string, MessageEntity[]] | null> + ): Promise /** * Translate text to a given language. * - * Returns `null` if it could not translate the message. - * - * > **Note**: For now doesn't seem to work, returns null for all messages. - * * **Available**: 👤 users only * * @param text Text to translate * @param toLanguage Target language (two-letter ISO 639-1 language code) */ - translateText(text: string, toLanguage: string): Promise + translateText(text: InputText, toLanguage: string): Promise /** * Unpin all pinned messages in a chat. * diff --git a/packages/client/src/methods/_imports.ts b/packages/client/src/methods/_imports.ts index e5c3ca70..cb3d1b85 100644 --- a/packages/client/src/methods/_imports.ts +++ b/packages/client/src/methods/_imports.ts @@ -57,7 +57,6 @@ import { InputText, MaybeDynamic, Message, - MessageEntity, MessageMedia, MessageReactions, ParametersSkip2, @@ -84,6 +83,7 @@ import { StoryViewer, StoryViewersList, TakeoutSession, + TextWithEntities, TypingStatus, UploadedFile, UploadFileLike, diff --git a/packages/client/src/methods/messages/translate-message.ts b/packages/client/src/methods/messages/translate-message.ts index c2297344..bc54d4b5 100644 --- a/packages/client/src/methods/messages/translate-message.ts +++ b/packages/client/src/methods/messages/translate-message.ts @@ -1,6 +1,6 @@ import { BaseTelegramClient } from '@mtcute/core' -import { InputMessageId, MessageEntity, normalizeInputMessageId } from '../../types/index.js' +import { InputMessageId, normalizeInputMessageId, TextWithEntities } from '../../types/index.js' import { resolvePeer } from '../users/resolve-peer.js' /** @@ -14,7 +14,7 @@ export async function translateMessage( /** Target language (two-letter ISO 639-1 language code) */ toLanguage: string }, -): Promise<[string, MessageEntity[]] | null> { +): Promise { const { toLanguage } = params const { chatId, message } = normalizeInputMessageId(params) @@ -25,5 +25,8 @@ export async function translateMessage( toLang: toLanguage, }) - return [res.result[0].text, res.result[0].entities.map((it) => new MessageEntity(it, res.result[0].text))] + return { + text: res.result[0].text, + entities: res.result[0].entities, + } } diff --git a/packages/client/src/methods/messages/translate-text.ts b/packages/client/src/methods/messages/translate-text.ts index b74d6d5a..bdfce90a 100644 --- a/packages/client/src/methods/messages/translate-text.ts +++ b/packages/client/src/methods/messages/translate-text.ts @@ -1,31 +1,39 @@ -import { BaseTelegramClient } from '@mtcute/core' +import { BaseTelegramClient, MtTypeAssertionError } from '@mtcute/core' + +import { InputText, TextWithEntities } from '../../types/misc/entities.js' +import { _normalizeInputText } from '../misc/normalize-text.js' /** * Translate text to a given language. * - * Returns `null` if it could not translate the message. - * - * > **Note**: For now doesn't seem to work, returns null for all messages. - * * @param text Text to translate * @param toLanguage Target language (two-letter ISO 639-1 language code) */ export async function translateText( client: BaseTelegramClient, - text: string, + text: InputText, toLanguage: string, -): Promise { +): Promise { + const [message, entities] = await _normalizeInputText(client, text) + const res = await client.call({ _: 'messages.translateText', text: [ { _: 'textWithEntities', - text, - entities: [], + text: message, + entities: entities || [], }, ], toLang: toLanguage, }) - return res.result[0].text + if (!res.result[0]) { + throw new MtTypeAssertionError('messages.translateResult#result', 'not empty', 'empty') + } + + return { + text: res.result[0].text, + entities: res.result[0].entities, + } }