Интересная задача. Сразу скажу что через
Pyrogram сделать не получиться из-за отсутствия обновлений. Ну а вот через
Telethon легко.
Рассмотрим на примере. Возмём Телеграм канал сборник розыгрышей (
канал) и оттуда возмём любой
розыгрыш.
Нам нужно получить информацию об этом сообщении и это делается с помощью
get_messages и параметра
ids. Далее извлекаем всю информацию о розыгрыше по ключу
media:
MessageMediaGiveaway(
channels=[2037207714, 1218160262, 1404903079, 1849389623],
quantity=1,
months=3,
until_date=datetime.datetime(2024, 3, 3, 17, 30, 9, tzinfo=datetime.timezone.utc),
only_new_subscribers=False,
winners_are_visible=True,
countries_iso2=[],
prize_description=None
)
Уже видно что нужные каналы лежат в
channels. Остаётся в цикле пройти по списку и подписаться на каждый канал.
Весь код:
from telethon import TelegramClient
from telethon.tl.functions.channels import JoinChannelRequest
api_id = 12345678
api_hash = "0123456789abcdef0123456789abcdef"
client = TelegramClient('account', api_id=api_id, api_hash=api_hash, device_model="iPhone 55 Pro",
system_version="4.16.30-vxCUSTOM", app_version="1.10.8")
async def main():
messages = await client.get_messages("premiumlob", ids=979)
for channel in messages.media.channels:
await client(JoinChannelRequest(channel))
with client:
client.loop.run_until_complete(main())