You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Telethon获取其他Telegram用户的「Last seen...」数据?

使用Telethon获取Telegram用户的「Last seen」数据

首先需要明确:只有当目标用户的「Last seen & online」设置为「Everybody」,或者当前API账号在对方的允许列表中时,才能获取到对方的「Last seen」数据。如果对方隐私设置限制,你将只能得到模糊状态(如“最近”“上周”)或无法获取任何信息。

实现步骤:

  1. 初始化并登录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())
    
  2. 获取目标用户的实体
    通过目标用户的用户名、手机号或ID获取用户实体:

    # 可以替换为目标用户的用户名(如@username)、手机号或ID
    target_user = "target_username"
    entity = await client.get_entity(target_user)
    
  3. 获取并解析用户状态
    使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:57:18