Python, Телемарафон отправить альбом

#python #telethon

#python #телемарафон

Вопрос:

Я долго не могу создать скрипт. У меня есть один канал telegram, я не хочу повторно отправлять альбом с этого канала, а просто отправьте его мне в одном сообщении

 from telethon import TelegramClient, events
from telethon import events

api_id = 
api_hash = ""

chat = ''

client = TelegramClient('', api_id, api_hash)

print('started')

@client.on(events.Album)
async def handler(event):
 #what farther
  

Ответ №1:

Вот один из способов сделать это:

 from telethon import TelegramClient, events

api_id = ...
api_hash = ' ... '

chat = -1001277xxxxxx

client = TelegramClient('session', api_id, api_hash)

@client.on(events.Album)
async def handler(event):

    # craft a new message and send
    await client.send_message(
        chat,
        file=event.messages, # event.messages is a List - meaning we're sending an album
        message=event.original_update.message.message,  # get the caption message from the album
    )

    ## or forward it directly
    # await event.forward_to(chat)

client.start()
client.run_until_disconnected()
  

Комментарии:

1. У каждого файла в альбоме есть заголовок как использовать их все?

2. «Не удается найти ссылку «на» в » init.py ‘ » ошибка в декораторе

Ответ №2:

Там send_file написано

file (…): Чтобы отправить альбом, вы должны указать список в этом параметре. Если предоставлен список или аналогичный, файлы в нем будут отправлены как альбом в том порядке, в котором они появляются, нарезанные на куски по 10, если указано больше 10.

caption (str, optional): Необязательный заголовок для отправленного медиа-сообщения. При отправке альбома заголовок может представлять собой список строк, которые будут назначены файлам попарно.

Итак, расширяя ответ @Tibebes

 await client.send_file( # Note this is send_file not send_message
    chat,
    file=event.messages
    caption=list(map(lambda a: str(a.message), event.messages))
)