如何通过Telethon获取其他Telegram用户的「Last seen...」数据?
使用Telethon获取Telegram用户的「Last seen」数据
首先需要明确:只有当目标用户的「Last seen & online」设置为「Everybody」,或者当前API账号在对方的允许列表中时,才能获取到对方的「Last seen」数据。如果对方隐私设置限制,你将只能得到模糊状态(如“最近”“上周”)或无法获取任何信息。
实现步骤:
初始化并登录Telethon客户端
确保你已经获取了Telegram的API ID和API Hash(可在Telegram官方平台申请),然后完成客户端的初始化与登录:from telethon import TelegramClient from telethon.tl.types import UserStatusOffline, UserStatusOnline, UserStatusRecently, UserStatusLastWeek, UserStatusLastMonth # 替换为你的API信息和会话文件名 api_id = 123456 api_hash = "your_api_hash_here" session_name = "my_session" client = TelegramClient(session_name, api_id, api_hash) async def main(): await client.start() # 首次运行会提示输入手机号和验证码 # 后续逻辑写在这里 if __name__ == "__main__": import asyncio asyncio.run(main())获取目标用户的实体
通过目标用户的用户名、手机号或ID获取用户实体:# 可以替换为目标用户的用户名(如@username)、手机号或ID target_user = "target_username" entity = await client.get_entity(target_user)获取并解析用户状态
使用get_user_status方法获取状态,然后根据状态类型提取「Last seen」信息:status = await client.get_user_status(entity) if isinstance(status, UserStatusOnline): print(f"用户当前在线,在线状态将持续到: {status.until}") elif isinstance(status, UserStatusOffline): print(f"用户最后上线时间: {status.was_online}") elif isinstance(status, UserStatusRecently): print("用户最近上线") elif isinstance(status, UserStatusLastWeek): print("用户上周上线") elif isinstance(status, UserStatusLastMonth): print("用户上月上线") else: print("无法获取用户上线状态(可能对方隐私设置限制)")
完整示例代码:
from telethon import TelegramClient from telethon.tl.types import ( UserStatusOffline, UserStatusOnline, UserStatusRecently, UserStatusLastWeek, UserStatusLastMonth ) api_id = 123456 api_hash = "your_api_hash_here" session_name = "my_session" client = TelegramClient(session_name, api_id, api_hash) async def get_last_seen(target_user): await client.start() entity = await client.get_entity(target_user) status = await client.get_user_status(entity) if isinstance(status, UserStatusOnline): return f"用户当前在线,在线状态将持续到: {status.until}" elif isinstance(status, UserStatusOffline): return f"用户最后上线时间: {status.was_online}" elif isinstance(status, UserStatusRecently): return "用户最近上线" elif isinstance(status, UserStatusLastWeek): return "用户上周上线" elif isinstance(status, UserStatusLastMonth): return "用户上月上线" else: return "无法获取用户上线状态(可能对方隐私设置限制)" if __name__ == "__main__": import asyncio target = "target_username" # 替换为实际目标用户 result = asyncio.run(get_last_seen(target)) print(result)
内容的提问来源于stack exchange,提问作者Meghar
相关产品推荐
相关产品推荐

