Первые шаги телемарафона в python - PullRequest
0 голосов
/ 07 мая 2020

Хорошо, поэтому я собирался использовать Telethon для автоматизации нескольких вещей в Telegram с помощью Python, но я не уверен, что понимаю его суть.

Прежде всего, вы нужны api_id и api_ha sh. Для этого вам нужно go в my.telegram и go в инструменты разработки API. Там вам будет отправлен код на ваш телефон telegram android и после отправки вы получите уникальный id / ha sh. Первый вопрос: этот код, который вам отправляют для создания приложения, больше необходим?

Теперь в python вы можете запустить клиента следующим образом.

from telethon import TelegramClient

api_id=12345
api_hash='abcdef12345ghij'

client=TelegramClient('name of the session',api_id,api_hash)

Вы можете попробуйте подключить клиента, но это может привести к тому, что он не будет авторизован или телефон не будет зарегистрирован, поэтому вы можете использовать start, который будет выбирать между входом в систему или регистрацией. Среди параметров, которые вы можете установить при запуске, есть force_sms (bool, optional), чтобы заставить Telegram поделиться кодом, необходимым для регистрации и входа в систему с помощью sms. У меня вопрос: если телефон не зарегистрирован, какие еще средства можно было использовать в Telegram? Я имею в виду, они не могут отправить его в мобильное приложение, так как на этом телефоне его нет.

Если телефон не зарегистрирован, возможно, это означает телефон, с которого вы получили свой идентификатор / ha sh - это не обязательно то же самое, с которым вы создаете клиента?

Поскольку этот метод имеет обратный вызов, вы можете ввести код, отправленный на ваш телефон, и подключиться к Telegram.

Другой способ подключения клиента - использование StringSession. Я нашел этот фрагмент кода:

from telethon.sync import TelegramClient
from telethon.sessions import StringSession

# Generating a new one
with TelegramClient(StringSession(), api_id, api_hash) as client:
    print(client.session.save())

# Converting SQLite (or any) to StringSession
with TelegramClient(name, api_id, api_hash) as client:
    print(StringSession.save(client.session))

# Usage
string = '1aaNk8EX-YRfwoRsebUkugFvht6DUPi_Q25UOCzOAqzc...'
with TelegramClient(StringSession(string), api_id, api_hash) as client:
    client.loop.run_until_complete(client.send_message('me', 'Hi'))

Это само по себе вызывает несколько вопросов. Согласно документации, это способ хранения в строке учетных данных, необходимых для входа в систему, включая ключ авторизации и телефон.

Как происходит получение ключа авторизации? В другом методе он был отправлен на ваш телефон для ввода, но здесь? Как указать телефон, к которому вы хотите подключиться? Вы можете использовать этот метод только или его следует использовать только после того, как телефону будет предоставлен доступ?

В коде, это возможно?

#Obtain an api_id, api_hash from phone 777777777

from telethon import TelegramClient
from telethon.sessions import StringSession

api_id=12345
api_hash='abcdef12345ghij'    
client=TelegramClient('name of the session',api_id,api_hash)

client.start(phone='5555555',force_sms=True,code_callback=True,first_name='John',last_name='Doe')
#Asked to input the code sent to the phone 555555 by sms. Is this code the authentication key?

string = StringSession.save(client.session) #Now I can connect whenever I want using string session.

Два последних вопроса

Можно ли провести несколько сеансов для одного и того же номера, даже если они не пытаются подключиться одновременно? Например, если разные api / ha sh запускают один и тот же телефон в разное время, или если первый сеанс хранится в телеграмме, создание второго разрывает ссылку на телеграмму первого?

Можете ли вы каким-либо образом пропустить проверочный код, который используется для регистрации?

С уважением

1 Ответ

4 голосов
/ 07 мая 2020

это код, который вам отправляют, чтобы сгенерировать необходимое приложение?

Да, как и во многих онлайн-сервисах, предлагающих API, вы регистрируете своего разработчика и получите токен (в случае Telegram комбинацию api_id и api_hash), который можно использовать для доступа к API (со всеми или с меньшими ограничениями).

Это может показаться немного запутанным что ваше приложение привязано к вашей учетной записи, однако это не означает, что его можно использовать только в вашей учетной записи. Вы, разработчик, создаете приложение, и любой другой пользователь (или даже бот) может запустить ваше приложение, используя ваши api_id и api_hash.

Например, когда вы используете Telegram для Android или Telegram Desktop, вы запускаете приложение, которое они разработали, и входите в систему, используя api_id и api_hash соответствующих разработчиков, а не свои собственные.

, если телефон не зарегистрирован , какие еще средства можно было использовать в Telegram?

Telegram может отправить SMS на номер телефона или совершить телефонный звонок. Вы можете использовать https://tl.telethon.dev, чтобы найти, что код отправки возвращает на момент написания SentCode. Это идет с SentCodeType, который в настоящее время может обозначать: отправлено через приложение, по телефону, fla sh по телефону или SMS.

означает ли это телефон, с которого вы получил ваш id / ha sh это не обязательно тот же, с которым вы создаете клиента?

Как объяснялось выше, api_id и api_hash предназначены для разработчика приложение , а не пользователей , которые войдут в ваше приложение. Когда вы начинаете, этот человек часто один и тот же (вы, разработчик), но когда вы публикуете sh свое приложение, любой может войти в систему, не указывая свои api_id и api_hash. Конечно, вам нужно будет держать их в секрете, чтобы попытаться свести к минимуму использование вашего ключа людьми в своих приложениях, хотя на самом деле это невозможно.

Как происходит получение ключа авторизации?

StringSession включает ключ авторизации, который был сгенерирован для использования для шифрования внутри самой строки. В следующий раз, когда вы воспользуетесь клиентом, вам понадобится только этот ключ, поскольку Telegram уже знает, кто вы с ним, потому что вы вошли в систему раньше.

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

Нет необходимости. Telegram запоминает учетную запись, в которую вошли с определенным ключом авторизации. В официальных клиентах вы можете увидеть, какие устройства вошли в систему и завершили свои сеансы (аннулируя свой ключ авторизации), чтобы выйти из системы.

Это метод, который вы можете использовать только или вы должны использовать только после телефон получил доступ?

Вы также можете использовать StringSession для входа в систему, просто распечатайте его и повторно используйте позже. В этом случае StringSession будет начинаться пустым, Telethon сгенерирует ключ авторизации, вы войдете в систему, и при сохранении сеанса будет получено что-то, что можно будет использовать повторно. сеанс для одного и того же номера, даже если они не пытаются подключиться одновременно?

Да, вот что происходит, когда вы используете, например, Telegram для Android и Telegram Desktop . Добавление третьего с помощью Telethon ничем не отличается.

Можете ли вы каким-либо образом пропустить проверочный код, который используется для регистрации?

Нет, потому что Telegram необходимо проверить телефон существует и используется.

...