#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))
)