commit 5ab815960c7eb0146909b24ad39b9ba44125a804 Author: Maxim Mikityanskiy Date: Fri Jan 19 00:35:53 2018 +0200 User online status polling diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..db58238 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/settings/keys.py +/tracker.session +__pycache__/ diff --git a/settings/__init__.py b/settings/__init__.py new file mode 100644 index 0000000..58137a4 --- /dev/null +++ b/settings/__init__.py @@ -0,0 +1,6 @@ +try: + from .keys import API_ID, API_HASH +except ImportError: + print('Put API_ID and API_HASH into settings/keys.py') + print() + raise IOError('Missing API_ID and API_HASH in settings/keys.py') diff --git a/track/__init__.py b/track/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/track/__main__.py b/track/__main__.py new file mode 100644 index 0000000..9f9fea8 --- /dev/null +++ b/track/__main__.py @@ -0,0 +1,41 @@ +from datetime import datetime +from settings import API_ID, API_HASH +from sys import argv, exit +from telethon import TelegramClient +from telethon.tl.types import UserStatusOnline, UserStatusOffline +from time import mktime, sleep + + +DATETIME_FORMAT = '%Y-%m-%d @ %H:%M:%S' + + +def utc2localtime(utc): + pivot = mktime(utc.timetuple()) + offset = datetime.fromtimestamp(pivot) - datetime.utcfromtimestamp(pivot) + return utc + offset + + +if len(argv) < 2: + print(f'usage: {argv[0]} ') + exit(1) +contact_id = argv[1] + +client = TelegramClient('tracker', API_ID, API_HASH) +client.start() + +online = None +last_offline = None +while True: + contact = client.get_entity(contact_id) + if isinstance(contact.status, UserStatusOffline): + if online != False: + online = False + print(f'User went offline: {utc2localtime(contact.status.was_online).strftime(DATETIME_FORMAT)}') + elif last_offline != contact.status.was_online: + print(f'User went online and back offline: {utc2localtime(contact.status.was_online).strftime(DATETIME_FORMAT)}') + last_offline = contact.status.was_online + else: + if online != True: + online = True + print(f'User went online: {datetime.now().strftime(DATETIME_FORMAT)}') + sleep(15)