@Jonhef

Как получить каналы, на которые нужно подписаться в розыгрыше премиума?

У меня есть код, который отслеживает новые сообщения в канале. Я хотел бы, чтобы при сообщении с розыгрышем, он автоматически подписался на все каналы, которые есть в розыгрыше, как я могу это сделать? В доках ничего нет
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
Laiwers
@Laiwers
Python, Telegram, Parsing
Интересная задача. Сразу скажу что через 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())
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы