3

在我问这个问题之前,我检查了这里。我想杀死除了我现在连接的会话之外的所有其他会话。基于我使用的 Telethon api all_sessions = client(GetAuthorizationsRequest()).to_dict(),我得到了这个结果:

{
       '_': 'Authorization',
       'api_id': ...,
       'app_name': '...',
       'app_version': '4.1.4',
       'country': 'Unknown',
       'date_active': ...,
       'date_created': ...,
       'device_model': 'SamsungSM-G920F',
       'flags': 0,
       'hash': ...,
       'ip': '...',
       'platform': 'Android',
       'region': '',
       'system_version': 'SDK 23'
}

我想终止这个会话,但我不知道session id上面的链接中提到了什么(telethon API 文档)。我尝试使用这些命令:

client(DestroySessionRequest(api_id))
client(DestroySessionRequest(hash))

但不仅没有删除会话,而且没有来自 api 的响应,并且命令等待并等待响应没有错误或没有异常。我怎样才能终止会话?

4

3 回答 3

4

要终止其他会话,您需要使用该ResetAuthorizationRequest功能。

来自官方文档的示例:

from telethon.sync import TelegramClient
from telethon import functions, types
with TelegramClient(name, api_id, api_hash) as client:
    result = client(functions.account.ResetAuthorizationRequest(hash=-12398745604826))
print(result)

https://lonamiwebs.github.io/Telethon/methods/account/reset_authorization.html#examples

于 2019-01-10T23:22:53.277 回答
0

要删除当前会话,您:

from telethon import TelegramClient

# start session
client = TelegramClient(username, api_id, api_hash).start()

# Now you can use all client methods listed below, like for example...
client.send_message('me', 'Hello to myself!')


# list all sessions
print(client.session.list_sessions())

# delete current session (current session is associated with `username` variable)
client.log_out()

.session每次使用新用户名时,Telethon 都会自动创建一个文件来存储会话详细信息。文件名以用户名变量开头(例如my_username.session)。会话文件永久存储在文件系统中,因此您有时可以看到几个可用的会话。您可以手动删除不需要的会话文件,并且关联的会话将不再可用。关于 Telethon 会话的更多信息可以在Telethon API 文档中找到。

于 2018-09-15T17:46:17.410 回答
0

尝试这个

GetSessions = await client(functions.account.GetAuthorizationsRequest()) 
if len(GetSessions.authorizations)>1:
    print("Another Session    :\tYes")
    for ss in GetSessions.authorizations:
        SessionHash = ss.hash
        SessionIp   = ss.ip
        if SessionHash>0:
            result = await client(functions.account.ResetAuthorizationRequest(hash=SessionHash))
            print("Session Killed     :\t" + str(SessionIp)) 
else:
    print("Another Session    :\tNo")
于 2021-10-26T01:18:13.387 回答