|
17 | 17 | from datetime import datetime |
18 | 18 | from telethon import TelegramClient, events |
19 | 19 | from telethon.tl import types |
| 20 | +from telethon.tl.functions.messages import TranslateTextRequest |
20 | 21 | from telethon.tl.patched import Message |
21 | 22 | from telethon.tl.types import User, Chat, Channel |
| 23 | +from telethon.tl.types.messages import TranslateResultText |
22 | 24 | from telethon.utils import get_display_name |
23 | 25 |
|
24 | 26 | LOG_LEVEL_INFO = 35 |
@@ -256,10 +258,10 @@ def __init__(self, config: dict): |
256 | 258 | self.config: dict = config |
257 | 259 |
|
258 | 260 | @abstractmethod |
259 | | - async def write_message(self, message, downloaded_media: DownloadedMedia): |
| 261 | + async def write_message(self, message, translated_text: str | None, downloaded_media: DownloadedMedia): |
260 | 262 | pass |
261 | 263 |
|
262 | | - async def get_message_dict(self, message, downloaded_media: DownloadedMedia): |
| 264 | + async def get_message_dict(self, message, translated_text: str | None, downloaded_media: DownloadedMedia): |
263 | 265 | sender_user = await message.get_sender() |
264 | 266 |
|
265 | 267 | if sender_user is None: |
@@ -293,6 +295,7 @@ async def get_message_dict(self, message, downloaded_media: DownloadedMedia): |
293 | 295 | "message": message, |
294 | 296 | "sender": sender, |
295 | 297 | "get_display_name": get_display_name, |
| 298 | + "translated_text": translated_text, |
296 | 299 | "media": downloaded_media |
297 | 300 | }) |
298 | 301 |
|
@@ -331,10 +334,11 @@ def get_from_chat(cls, chat): |
331 | 334 |
|
332 | 335 |
|
333 | 336 | class OutputHandler: |
334 | | - def __init__(self, media_config: dict): |
| 337 | + def __init__(self, media_config: dict, translate_to_lang: str = None): |
335 | 338 | self.outputs = [] |
336 | 339 | self.imports = {} |
337 | 340 | self.media_config = MediaConfiguration(media_config) |
| 341 | + self.translate_to_lang = translate_to_lang |
338 | 342 |
|
339 | 343 | def add(self, config: dict): |
340 | 344 | output_type = config.get("type") |
@@ -364,8 +368,18 @@ async def write_message(self, message, is_chat_enabled: callable): |
364 | 368 | else: |
365 | 369 | downloaded_media = None |
366 | 370 |
|
| 371 | + if self.translate_to_lang and message.text: |
| 372 | + try: |
| 373 | + translate_text_result: TranslateResultText = await message.client(TranslateTextRequest(to_lang=self.translate_to_lang, peer=message.input_sender, msg_id=message.id)) |
| 374 | + translated_text = translate_text_result.text |
| 375 | + except BaseException as exception: |
| 376 | + logging.error(f"Unable to translate text '{message.text}' using language '{self.translate_to_lang}': {exception}") |
| 377 | + translated_text = None |
| 378 | + else: |
| 379 | + translated_text = None |
| 380 | + |
367 | 381 | for output in self.outputs: |
368 | | - await output.write_message(message, downloaded_media) |
| 382 | + await output.write_message(message=message, translated_text=translated_text, downloaded_media=downloaded_media) |
369 | 383 |
|
370 | 384 | async def download_media(self, message): |
371 | 385 | if message.file.name is None: |
@@ -533,7 +547,7 @@ def main(): |
533 | 547 | logging.error("Unable to parse config file '{}'".format(arguments.config)) |
534 | 548 | exit(1) |
535 | 549 |
|
536 | | - output_handler = OutputHandler(media_config=config.get("media", {})) |
| 550 | + output_handler = OutputHandler(media_config=config.get("media", {}), translate_to_lang=config.get("translate_to_lang")) |
537 | 551 |
|
538 | 552 | for output in config.get("outputs", []): |
539 | 553 | output_handler.add(output) |
|
0 commit comments