1. Отслеживание онлайн/офлайн человека Следить за указанным username (USERNAME_TO_TRACK) Когда человек в сети: Моментально шлёт сообщение " в сети" с временем. Когда человек выходит из сети: Моментально шлёт сообщение " вышел из сети" 2. Запись всех сессий Каждую сессию (время входа и выхода) записывает в файл sessions.txt Формат строки: 3. Отправка дневного отчёта в 00:00 Считает общее время, сколько человек был в сети за день и отправляет короткий текстовый отчёт в чат бота: И дополнительно sessions.txt файл. 1 раз в неделю тоже самое, недельный отчёт + txt. 4. Работа в фоне 24/7 Скрипт работает постоянно и проверяет статус человека каждые 10 секунд. Требования Планшет/телефон на Android (для Termux) Установлен Termux Аккаунт Telegram для скрипта (можно личный) Созданный Telegram бот через BotFather Установка окружения в Termux pkg update && pkg upgrade pkg install python pkg install git pip install telethon pytz Код pkg update && pkg upgrade pkg install python pkg install git pip install telethon pytz Подготовка данных API_ID = ВАШ API ID (число) API_HASH = "ВАШ API HASH" (строка в кавычках) USERNAME_TO_TRACK = "Юзернейм человека" (строка с @ без кавычек) BOT_TOKEN = "Токен вашего бота" (строка в кавычках) CHAT_ID = Ваш чат ID (число) Где взять данные API_ID и API_HASH: Получаешь на сайте https://my.telegram.org (раздел API Development Tools). USERNAME_TO_TRACK: Берёшь у человека его renameduser_7185940 в Telegram. BOT_TOKEN: Создаёшь бота через BotFather и получаешь токен. CHAT_ID: Узнаешь свой ID с помощью любого бота, например, @userinfobot. Пример заполнения API_ID = 1234567 API_HASH = "abcdef1234567890abcdef1234567890" USERNAME_TO_TRACK = "exampleuser" BOT_TOKEN = "1234567890:ABCDEF1234567890ABCDEF1234567890ABCDEF" CHAT_ID = 123456789 Создание файла скрипта nano track_user_activity.py Код nano track_user_activity.py Туда нужно будет вставить код который будет ниже. Этапы выше должны заполнять сам скрипт. Финальный код трекера from telethon import TelegramClient, events import asyncio import pytz from datetime import datetime, timedelta import requests import os # --- ДАННЫЕ ДЛЯ НАСТРОЙКИ --- API_ID = ВАШ_API_ID API_HASH = "ВАШ_API_HASH" USERNAME_TO_TRACK = "USERNAME_ОТСЛЕЖИВАЕМОГО_ПОЛЬЗОВАТЕЛЯ" BOT_TOKEN = "ТОКЕН_ВАШЕГО_БОТА" CHAT_ID = ЧАТ_ИД_КУДА_ОТПРАВЛЯТЬ_ОТЧЁТЫ # --- Настройка времени (Франция) --- paris_tz = pytz.timezone('Europe/Paris') # --- Инициализация клиента --- client = TelegramClient('session_name', API_ID, API_HASH) # --- Переменные --- tracking = False session_start = None daily_online_seconds = 0 weekly_online_seconds = 0 # --- Функция отправки сообщения --- def send_telegram_message(text): url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage" payload = {"chat_id": CHAT_ID, "text": text} requests.post(url, data=payload) # --- Функция форматирования времени --- def format_time(seconds): return str(timedelta(seconds=seconds)) # --- Сохранение сессий в txt --- def save_session(start, end): with open("sessions.txt", "a") as f: f.write(f"Онлайн: {start} - Оффлайн: {end}\n") # --- Отправка txt файла и очистка --- def send_and_clear_sessions(): if os.path.exists("sessions.txt"): with open("sessions.txt", "rb") as f: files = {'document': f} url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendDocument" data = {'chat_id': CHAT_ID} requests.post(url, files=files, data=data) os.remove("sessions.txt") # --- Главная логика --- async def main(): global tracking, session_start, daily_online_seconds, weekly_online_seconds user = await client.get_entity(USERNAME_TO_TRACK) async def track(): nonlocal tracking, session_start, daily_online_seconds, weekly_online_seconds while True: user_updated = await client.get_entity(user.id) now = datetime.now(paris_tz) if user_updated.status and user_updated.status.__class__.__name__ == "UserStatusOnline": if not tracking: tracking = True session_start = now.strftime("%Y-%m-%d %H:%M:%S") send_telegram_message(f" {USERNAME_TO_TRACK} в сети ({session_start})") else: if tracking: tracking = False session_end = now.strftime("%Y-%m-%d %H:%M:%S") send_telegram_message(f" {USERNAME_TO_TRACK} вышел из сети ({session_end})") save_session(session_start, session_end) # Обновляем счётчик времени в сети start_dt = datetime.strptime(session_start, "%Y-%m-%d %H:%M:%S") end_dt = datetime.strptime(session_end, "%Y-%m-%d %H:%M:%S") session_duration = int((end_dt - start_dt).total_seconds()) daily_online_seconds += session_duration weekly_online_seconds += session_duration await asyncio.sleep(10) # проверять каждые 10 секунд async def daily_report(): global daily_online_seconds while True: now = datetime.now(paris_tz) next_midnight = (now + timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0) seconds_until_midnight = (next_midnight - now).total_seconds() await asyncio.sleep(seconds_until_midnight) today_time = format_time(daily_online_seconds) send_telegram_message(f" Отчёт за день ({now.strftime('%Y-%m-%d')}): {today_time}") send_and_clear_sessions() daily_online_seconds = 0 async def weekly_report(): global weekly_online_seconds while True: now = datetime.now(paris_tz) days_ahead = 7 - now.weekday() next_week = (now + timedelta(days=days_ahead)).replace(hour=0, minute=0, second=0, microsecond=0) seconds_until_week = (next_week - now).total_seconds() await asyncio.sleep(seconds_until_week) week_time = format_time(weekly_online_seconds) send_telegram_message(f" Отчёт за неделю ({now.strftime('%Y-%m-%d')}): {week_time}") weekly_online_seconds = 0 await asyncio.gather(track(), daily_report(), weekly_report()) # --- Запуск --- with client: client.loop.run_until_complete(main()) Код from telethon import TelegramClient, events import asyncio import pytz from datetime import datetime, timedelta import requests import os # --- ДАННЫЕ ДЛЯ НАСТРОЙКИ --- API_ID = ВАШ_API_ID API_HASH = "ВАШ_API_HASH" USERNAME_TO_TRACK = "USERNAME_ОТСЛЕЖИВАЕМОГО_ПОЛЬЗОВАТЕЛЯ" BOT_TOKEN = "ТОКЕН_ВАШЕГО_БОТА" CHAT_ID = ЧАТ_ИД_КУДА_ОТПРАВЛЯТЬ_ОТЧЁТЫ # --- Настройка времени (Франция) --- paris_tz = pytz.timezone('Europe/Paris') # --- Инициализация клиента --- client = TelegramClient('session_name', API_ID, API_HASH) # --- Переменные --- tracking = False session_start = None daily_online_seconds = 0 weekly_online_seconds = 0 # --- Функция отправки сообщения --- def send_telegram_message(text): url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage" payload = {"chat_id": CHAT_ID, "text": text} requests.post(url, data=payload) # --- Функция форматирования времени --- def format_time(seconds): return str(timedelta(seconds=seconds)) # --- Сохранение сессий в txt --- def save_session(start, end): with open("sessions.txt", "a") as f: f.write(f"Онлайн: {start} - Оффлайн: {end}\n") # --- Отправка txt файла и очистка --- def send_and_clear_sessions(): if os.path.exists("sessions.txt"): with open("sessions.txt", "rb") as f: files = {'document': f} url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendDocument" data = {'chat_id': CHAT_ID} requests.post(url, files=files, data=data) os.remove("sessions.txt") # --- Главная логика --- async def main(): global tracking, session_start, daily_online_seconds, weekly_online_seconds user = await client.get_entity(USERNAME_TO_TRACK) async def track(): nonlocal tracking, session_start, daily_online_seconds, weekly_online_seconds while True: user_updated = await client.get_entity(user.id) now = datetime.now(paris_tz) if user_updated.status and user_updated.status.__class__.__name__ == "UserStatusOnline": if not tracking: tracking = True session_start = now.strftime("%Y-%m-%d %H:%M:%S") send_telegram_message(f" {USERNAME_TO_TRACK} в сети ({session_start})") else: if tracking: tracking = False session_end = now.strftime("%Y-%m-%d %H:%M:%S") send_telegram_message(f" {USERNAME_TO_TRACK} вышел из сети ({session_end})") save_session(session_start, session_end) # Обновляем счётчик времени в сети start_dt = datetime.strptime(session_start, "%Y-%m-%d %H:%M:%S") end_dt = datetime.strptime(session_end, "%Y-%m-%d %H:%M:%S") session_duration = int((end_dt - start_dt).total_seconds()) daily_online_seconds += session_duration weekly_online_seconds += session_duration await asyncio.sleep(10) # проверять каждые 10 секунд async def daily_report(): global daily_online_seconds while True: now = datetime.now(paris_tz) next_midnight = (now + timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0) seconds_until_midnight = (next_midnight - now).total_seconds() await asyncio.sleep(seconds_until_midnight) today_time = format_time(daily_online_seconds) send_telegram_message(f" Отчёт за день ({now.strftime('%Y-%m-%d')}): {today_time}") send_and_clear_sessions() daily_online_seconds = 0 async def weekly_report(): global weekly_online_seconds while True: now = datetime.now(paris_tz) days_ahead = 7 - now.weekday() next_week = (now + timedelta(days=days_ahead)).replace(hour=0, minute=0, second=0, microsecond=0) seconds_until_week = (next_week - now).total_seconds() await asyncio.sleep(seconds_until_week) week_time = format_time(weekly_online_seconds) send_telegram_message(f" Отчёт за неделю ({now.strftime('%Y-%m-%d')}): {week_time}") weekly_online_seconds = 0 await asyncio.gather(track(), daily_report(), weekly_report()) # --- Запуск --- with client: client.loop.run_until_complete(main()) !Вставать его и нажми CTRL+X и после Y(yes) и ENTER! После этого можешь запустить скрипт этой командой python track_user_activity.py Код python track_user_activity.py Примеры Всё! Твой приватный Telegram трекер готов )
czarchik, Извинияюсь, не увидел твоё сообщение раньше. Лучше использовать или купить другой аккаунт только для отслеживания. Также если человек скрыл активность то никак не получится его отслеживать!