Telethon中使用StringSession初始化TelegramClient时自定义授权参数失效的问题咨询
Telethon中使用StringSession初始化TelegramClient时自定义授权参数失效的问题咨询
我来帮你分析下问题出在哪哈~
你遇到的核心问题是:StringSession只存储Telegram的授权凭证信息,并不会保存你初始化TelegramClient时设置的客户端配置参数,比如device_model、system_version、app_version这些。
问题重现的原因
- 第一次用
StringSession()初始化客户端时,你确实传入了自定义参数,这时候授权请求会带着这些参数发送给Telegram,所以授权过程是正常的; - 但当你用保存的
string会话字符串重新创建TelegramClient实例时,你只传了StringSession(string)、api_id和api_hash,完全没带上那些自定义的客户端参数,这时候Telethon会自动使用默认的授权参数来建立连接,自然就覆盖了你之前设置的内容。
而你用sqlite session的时候看起来正常,是因为sqlite会话文件会和第一次初始化时的客户端配置关联起来,每次启动都会复用那些参数,但StringSession没有这个特性。
解决方案
每次创建TelegramClient实例(包括用保存的StringSession重新初始化时),都必须显式传入所有自定义的客户端参数,不能省略。修改你第二次初始化客户端的代码:
client = TelegramClient( StringSession(string), api_id, api_hash, device_model='iPhone 13 Pro Max', system_version='Windows 10', app_version='3.7.3' )
这样重新连接并登录时,Telethon就会使用你指定的自定义参数,而不是默认值了。
另外提醒下,如果你希望后续每次启动客户端都不用重复写这些参数,可以把它们封装成一个配置字典,方便复用:
client_config = { "device_model": "iPhone 13 Pro Max", "system_version": "Windows 10", "app_version": "3.7.3" } # 第一次初始化 client = TelegramClient(StringSession(), api_id, api_hash, **client_config) # 后续用保存的StringSession初始化 client = TelegramClient(StringSession(saved_string), api_id, api_hash, **client_config)
这样能避免遗漏参数,也更便于维护。
备注:内容来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

