python - 是否可以检查会话是否已创建?
问题描述
我试图检查是否已使用 telethon 库创建了新会话。
我的第一个想法是从 Telegram 获取警告消息(新访问权限:[...]),因此当我收到此类消息时,我知道另一台设备已连接到我的帐户。我无法收到该消息,因此我尝试以另一种方式获得它:
chat = client.get_entity(777000) # Telegram chat id
print(chat)
for message in client.iter_messages(chat):
print(message.text)
(这不是完整的代码。)
我能够检索到的唯一消息是确认码,但只有这样我才能做任何事情。
另一个想法是不断接收活动会话列表(使用GetAuthorizationsRequest()
),如果该列表发生更改,则意味着新设备已连接到我的帐户。但是连续向 Telegram 服务器发送请求是否方便?
我到处搜索,但找不到解决问题的好方法。
任何帮助表示赞赏。
解决方案
在 Lonami 的帮助下,我能够解决我的问题。使用client.iter_messages(chat)
,我只能查看消息,而我正在寻找的“消息”是UpdateServiceNotification
,所以我曾经events.Raw
获得所有类型的更新。
这是代码:
from telethon.sync import TelegramClient, events
from telethon.tl.types import UpdateServiceNotification
api_id = 123456
api_hash = "42132142c132145ej"
with TelegramClient('anon', api_id, api_hash) as client:
@client.on(events.Raw(func = lambda e: type(e) == UpdateServiceNotification))
async def handler(event):
print("New Login!")
client.run_until_disconnected()
推荐阅读
- python-3.x - 为什么总是“模块'xxx'没有属性'xxx'”?
- bash - 如何在 bash 中并行执行脚本?
- node.js - 在 Windows 上的 package.json 脚本中使用 NODE_PATH 变量
- devise - 将 devise-jwt 添加到 rails api -> 如何在为 JWTBlacklist 生成模型时解决问题?
- algorithm - 生成随机数但排除多个范围而不循环
- javascript - 烧瓶是否支持通过 GET REQUEST 传递的 JSON 编码参数(在正文中)
- c# - c#为Outlook生成ics文件
- selenium-webdriver - 当除innerText之外的所有元素都相同时如何单击按钮
- javascript - 如果您拥有相同字符串的解密和加密版本,您能否反向生成 RSA/AES 密钥?(JS 客户端加密)
- php - php-fpm、PHP PDO与ATTR_PRESISTENT和DB事务有什么关系