Telegram Bot调用API检测用户在线状态并返回布尔值的技术咨询
Telegram Bot 用户在线状态检测Python实现方案
首先明确前提:Telegram 官方公开的 Bot API 没有提供直接获取用户在线状态的接口,这是平台出于用户隐私保护做的权限限制,你可以通过以下两种替代方案实现需求:
方案1:使用用户端API实现(准确度最高)
该方案使用普通Telegram账号的权限而非Bot权限调用接口,依赖Telethon/Pyrogram这类用户客户端开发库实现:
- 第一步:安装依赖库
pip install telethon - 第二步:获取API凭证
使用普通Telegram账号登录Telegram官方开发者平台后申请api_id和api_hash,注意不能使用Bot Token,必须使用普通账号的凭证 - 示例实现代码:
from telethon import TelegramClient from telethon.tl.types import UserStatusOnline # 替换为你自己的api_id、api_hash、普通账号session名 api_id = 123456 api_hash = '你的api_hash字符串' client = TelegramClient('session_name', api_id, api_hash) async def check_user_online(user_id: int) -> bool: async with client: user = await client.get_entity(user_id) # 判定用户状态是否为在线 return isinstance(user.status, UserStatusOnline) # 调用示例 # import asyncio # print(asyncio.run(check_user_online(目标用户ID)))
- 注意事项:
- 仅能获取对你的普通账号开放了在线状态可见权限的用户状态,如果用户隐藏了在线状态或拉黑了你的账号,无法获取真实状态
- 控制调用频率,建议两次查询间隔不低于60秒,高频调用会触发Telegram的限流机制,严重时会被封禁账号
方案2:仅使用Bot账号的间接实现(兼容性最高)
如果只能使用Bot权限开发,只能通过交互逻辑间接判断在线状态:
- Bot向目标用户发送无打扰的回调消息(比如设置短时间自动销毁的占位消息,或者不需要用户手动输入的inline按钮回调)
- 若用户在设定的超时时间内有响应(点击按钮/回复消息),返回
True,否则返回False - 该方案准确度较低,仅适合用于已主动和Bot有过交互的活跃用户检测
通用限制
Telegram平台的隐私规则允许用户对所有人隐藏在线状态,没有任何方案可以绕过该限制获取用户的真实在线状态,所有实现的检测结果仅作为参考。
内容的提问来源于stack exchange,提问作者Shvanshu Singh
相关产品推荐
相关产品推荐

