Получение статуса пользователя telegram с помощью telethon

#python #telegram #status #telethon

#python #telegram #Статус #телемарафон

Вопрос:

я пытаюсь создать скрипт на python, который проверяет, подключен ли пользователь к сети или нет. Мне удалось сделать переход между Telegram и python с помощью telethon, но мне действительно трудно получить правильный синтаксис для получения статуса одного из моих контактов. Любая помощь будет оценена!

 from telethon.tl.types import UserStatusOnline, UserStatusOffline, ContactStatus
from telethon.sync import TelegramClient
from datetime import datetime

### Client Side ###
phone = " "
api_id = 
api_hash = ""
client = TelegramClient(phone, api_id, api_hash)
client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone)
    client.sign_in(phone, input('Enter the code: '))
else:
    print("Logging Complete")

account = client.get_entity('chats_name')
if isinstance(account.status, UserStatusOffline):
    if contact.online != False:
        contact.online = False
        event.respond(f'{utc2localtime(account.status.was_online).strftime(DATETIME_FORMAT)}: {contact.name} went offline.')
    elif contact.last_offline != account.status.was_online:
        if contact.last_offline is not None:
            event.respond(f'{utc2localtime(account.status.was_online).strftime(DATETIME_FORMAT)}: {contact.name} went offline after being online for short time.')
        else:
            event.respond(f'{utc2localtime(account.status.was_online).strftime(DATETIME_FORMAT)}: {contact.name} went offline.')
            contact.last_offline = account.status.was_online
    elif isinstance(account.status, UserStatusOnline):
            if contact.online != True:
                contact.online = True
                event.respond(f'{datetime.now().strftime(DATETIME_FORMAT)}: {contact.name} went online.')   
            else:
                if contact.online != False:
                    contact.online = False
                    event.respond(f'{datetime.now().strftime(DATETIME_FORMAT)}: {contact.name} went offline.')
                    contact.last_offline = None
        

  

Ответ №1:

Вам нужно получить User объект того, кто вас интересует, а затем проверить тип status поля, чтобы определить, подключен ли он к сети или нет isinstance .

Вы можете получить User его многими способами: через список ваших разговоров ( iter_dialogs ), извлекая их по целочисленному идентификатору или строковому номеру телефона ( get_entity ), или когда вы получаете от них сообщение (работа с обновлениями). Все методы в документации содержат примеры, но вам рекомендуется прочитать ее с самого начала, чтобы узнать, как пользоваться библиотекой.

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

1. Да, братан, я посмотрел глубже и нашел сущность, но на самом деле не знаю, как ее использовать.. Для меня не имеет значения, как получить пользователя, пока он работает.. Я пробовал все и потерпел неудачу .. Не могли бы вы мне немного помочь?

Ответ №2:

Возможно, вы можете использовать события.UserUpdate для этого что-то вроде:

 @client.on(events.UserUpdate)
async def user_update_event_handler(event):
    if event.online:
        try:
            user_details = await client.get_entity(event.user_id)
            print(f" {user_details.first_name}, came online at : {datetime.now()}")
        except:
            print(event)
  

Здесь вы можете найти более подробную информацию о событиях.