#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()