@Jonhef

Как конвертировать telethon.tl.custom.file в hints.FIleLike?

Я делаю парсер постов из телеграма, и отправку их в другой канал, я столкнулся с проблемой - я не могу конвертировать telethon.tl.custom.file в hints.FileLike. Пожалуйста, не пишите что можно скачивать файл, или делать что то подобное
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
Lapita12
@Lapita12
Тесты, тесты?
Для конвертации telethon.tl.custom.file в hints.FileLike можно воспользоваться методом io.BytesIO()

import io
from telethon.tl.custom import File
from typing import List, Tuple, Union
from mypy_extensions import TypedDict
from telethon import TelegramClient, events
from telethon.tl.types import InputMessagesFilterPhotos
# Создаем клиента Telegram
client = TelegramClient('session_name', api_id, api_hash)

# Создаем типизированный словарь для сообщений
class MessageDict(TypedDict):
    id: int
    message: str
    media: Union[None, List[Tuple[str, bytes]]]

# Обработчик событий
@client.on(events.NewMessage(incoming=True, pattern='/start'))
async def handler(event):
    # Получаем сообщение
    message = event.message

    # Получаем медиа-файлы
    media = []
    if message.media:
        for file in message.media:
            if isinstance(file, File):
                # Конвертируем telethon.tl.custom.file в hints.FileLike
                file_bytes = io.BytesIO(await file.download_media(bytes))
                media.append((file.mime_type, file_bytes))

    # Создаем типизированный словарь для сообщения
    message_dict: MessageDict = {
        'id': message.id,
        'message': message.message,
        'media': media if media else None
    }

    # Отправляем сообщение в другой канал
    await client.send_message('other_channel', message_dict)

# Запускаем клиента Telegram
client.start()
client.run_until_disconnected()


В этом примере мы используем метод download_media() для загрузки файла в память, а затем создаем объект io.BytesIO() для конвертации в hints.FileLike
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы