Telethon切换主机后出现AuthKeyUnregisteredError问题求助
问题描述
我用Telethon开发的用户机器人原本运行正常,将其部署到德国主机并登出赫尔辛基旧主机的会话后,每次在新主机或本地运行机器人都会触发AuthKeyUnregisteredError,报错时会自动终止所有会话。启动机器人输入验证码后一切正常,但运行2-5分钟(时长不定)、机器人处理操作时,会出现如下日志:
2023-09-09 19:48:14,685 - telethon.client.updates - INFO - Cannot get difference since the account is not logged in: AuthKeyUnregisteredError
尝试过删除旧会话数据库,将代码中client = TelegramClient('anon', api_id, api_hash)修改为client = TelegramClient('userbot', api_id, api_hash),重复操作近10次仍未解决。
解决方案
彻底清理所有旧会话文件
不要只修改会话文件名,需找到Telethon存储会话的目录,彻底删除所有以.session、.session-journal结尾的文件:- Linux:
~/.local/share/Telethon/或机器人运行的当前目录 - Windows:
C:\Users\<你的用户名>\AppData\Roaming\Telethon\或当前运行目录 - macOS:
~/Library/Application Support/Telethon/或当前运行目录
- Linux:
强制重新生成AuthKey
初始化客户端时添加force_sessions=True参数,强制创建全新会话文件,避免复用残留的旧AuthKey信息:client = TelegramClient('userbot', api_id, api_hash, force_sessions=True)排查多会话冲突
登录Telegram官方客户端,进入「设置」-「设备」,查看所有已登录设备,移除旧主机或陌生设备,确保没有其他进程/设备使用同一API ID和账号登录。捕获更新模块异常避免会话终止
报错来自更新模块的get difference操作,可在代码中捕获该异常,实现自动重连:from telethon.errors import AuthKeyUnregisteredError @client.on(events.NewMessage) async def handler(event): try: # 你的业务逻辑代码 await event.reply("处理中...") except AuthKeyUnregisteredError: await client.disconnect() await client.start(phone='你的手机号')检查主机网络与Telegram DC连通性
德国主机可能存在网络波动导致会话失效,可测试api.telegram.org的连通性,或手动切换Telegram数据中心(DC):from telethon import TelegramClient, connection # 指定DC初始化客户端(示例为DC2) client = TelegramClient('userbot', api_id, api_hash, connection=connection.ConnectionTcpFull(ipv6=False, dc_id=2))
内容的提问来源于stack exchange,提问作者Damir

