Реализую бота, который собирает данные по подписчикам канала (бот для использования владельцем канала).
Делаю так: все мелкие функции выполняет бот (собрать подписчиков канала, получить открытые данные и т.д.), а для выгрузки всех админов канала и invite-ссылок каждого админа запускаю отдельный клиент pyrogram под аккаунтом владельца (потому что invite-ссылки всех админов может получить только владелец канала -
Client.get_chat_admin_invite_link()).
При первой авторизации телеграм отправляет код подтверждения, который хотелось бы запросить через бот, поймать и передать для успешной авторизации в клиент Pyrogram. Код подтверждения отправляется, но как его получить от пользователя и передать в Client.sign_in внутри вызванной функции - не пойму.
Хэндлер, в котором запускается парсер подписчиков:
@app.on_message(filters.private & filters.command(['parse'], prefixes='/'))
async def parsing(client, message):
if await is_admin(app, message.from_user.id) == True:
# получаем все отслеживаемые каналы из БД
channels = await get_channels(app)
await parse_channels(app, message.from_user.id, channels)
else:
await message.reply('❌ Доступ запрещен')
Сама функция parse_channels, в которой и запрашивается авторизация:
async def parse_channels(bot_app, init_by, channels):
# запускаем клиента владельца канала
user_app = Client(
session,
api_id=api_id,
api_hash=api_hash,
phone_number=phone_number,
password=password)
await user_app.connect()
sent_code_info = await user_app.send_code(phone_number)
await bot_app.send_message(init_by, 'Введите код подтверждения для предоставления прав боту:')
# pass - здесь как-то нужно получить код подтверждения
auth_result = await user_app.sign_in(
phone_number=phone_number,
phone_code_hash=sent_code_info.phone_code_hash,
phone_code=phone_code)
....