You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跳过Telethon会话无效时的号码/机器人令牌请求?

解决Telethon会话失效时自动弹出输入提示的问题

不需要修改源码,有两种简单方式跳过这个交互式输入请求:

1. 捕获会话失效异常,手动终止流程

Telethon在会话失效需要重新认证时,会抛出AuthorizationError或SessionPasswordNeededError这类异常。你可以在代码里提前捕获这些异常,自定义处理逻辑(比如直接退出程序、记录日志),避免触发默认的交互式输入提示。

示例代码:

from telethon import TelegramClient
from telethon.errors import AuthorizationError, SessionPasswordNeededError

api_id = 12345
api_hash = 'your_api_hash'
session_name = 'my_session'

client = TelegramClient(session_name, api_id, api_hash)

async def main():
    try:
        await client.start()
        # 这里写你的业务逻辑
        await client.send_message('me', '会话正常')
    except (AuthorizationError, SessionPasswordNeededError):
        print('会话已失效,需要重新登录,但已跳过输入提示')
        # 直接退出或做其他处理
        exit(1)

with client:
    client.loop.run_until_complete(main())

2. 自定义客户端类,重写认证请求方法

通过继承TelegramClient,重写负责请求验证码的_request_code方法,让它直接抛出异常而不是弹出输入提示。这样只要会话失效需要重新认证,就会直接触发异常,不会进入交互式流程。

示例代码:

from telethon import TelegramClient
from telethon.errors import AuthKeyError

class NoPromptTelegramClient(TelegramClient):
    async def _request_code(self, phone, *args, **kwargs):
        # 直接抛出异常,跳过输入提示
        raise AuthKeyError('会话失效,已跳过输入请求')

api_id = 12345
api_hash = 'your_api_hash'
session_name = 'my_session'

client = NoPromptTelegramClient(session_name, api_id, api_hash)

async def main():
    try:
        await client.start()
        await client.send_message('me', '会话正常')
    except AuthKeyError as e:
        print(e)
        exit(1)

with client:
    client.loop.run_until_complete(main())

如果是使用机器人账号(bot token),初始化客户端时直接传入bot_token参数,会话失效时会直接抛出异常,不会弹出输入提示:

client = TelegramClient(session_name, api_id, api_hash).start(bot_token='your_bot_token')

内容的提问来源于stack exchange,提问作者Marz1k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:10:51