Для конвертации 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