Можно ли проверить, был ли создан сеанс?

#python #telegram #telethon

Вопрос:

Я пытался проверить, был ли создан новый сеанс с помощью библиотеки телемарафона.

Моей первой идеей было получить предупреждающее сообщение от Telegram (Новый доступ: […]), поэтому, когда я получаю такое сообщение, я знаю, что к моей учетной записи подключено другое устройство. Я не мог получить это сообщение, поэтому попытался получить его другим способом:

 chat = client.get_entity(777000) # Telegram chat id
print(chat)
for message in client.iter_messages(chat):
    print(message.text)
 

(Это не полный код.)

Единственным сообщением, которое я смог получить, был код подтверждения, но только с этим я ничего не могу сделать.

Другая идея состояла в том, чтобы постоянно получать список активных сеансов (с использованием GetAuthorizationsRequest() ), и, если этот список изменился, это означает, что к моей учетной записи подключилось новое устройство. Но удобно ли постоянно отправлять запросы на серверы Telegram?

Я искал везде, но не мог найти хорошего решения своей проблемы.

Любая помощь приветствуется.

Комментарии:

1. Я не проверял, но я думаю, что вы получите events.NewMessage(777000) . Видишь docs.telethon.dev/en/latest/basic/updates.html .

2. Я уже пробовал это, но единственное сообщение, которое я получаю через API, — это код подтверждения, а не предупреждение о новом сеансе.

3. Ты можешь попробовать events.Raw . Это может быть другой тип обновления.

4. Спасибо, это сработало.

5. Вы можете опубликовать свое решение и отметить его как ответ для других людей, у которых есть тот же вопрос.

Ответ №1:

С помощью Лонами я смог решить свою проблему. С client.iter_messages(chat) помощью я мог просматривать только сообщения , в то время как «сообщение», которое я искал , было UpdateServiceNotification , поэтому я events.Raw получал все типы обновлений.

Вот код:

 from telethon.sync import TelegramClient, events
from telethon.tl.types import UpdateServiceNotification
api_id = 123456
api_hash = "42132142c132145ej"

with TelegramClient('anon', api_id, api_hash) as client:
   @client.on(events.Raw(func = lambda e: type(e) == UpdateServiceNotification))
   async def handler(event):
      print("New Login!")
   client.run_until_disconnected()