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

使用Telethon登录Telegram时频繁被登出的技术求助

问题原因及解决方案

你的问题核心是普通Telegram账号的单设备Session冲突:Telethon默认使用的单设备MTProto Session,和手机端官方APP的登录是互斥的——当代码通过这个Session登录时,Telegram会判定为新设备登录,强制踢掉旧的手机端会话。

解决办法

1. 改用机器人账号(推荐)

通过BotFather创建的机器人账号支持多端同时在线,不会触发设备挤登。修改登录逻辑,用Bot Token替代用户Session:

from telethon import TelegramClient, types

async def get_channel_messages(chat_id, msg_id):
    api_id = '12345678'
    api_hash = '1234'
    # 替换为你的Bot Token,格式为「12345:ABCDEF...」
    bot_token = '你的BotToken'

    chat_id = int(chat_id)
    data = {}
      
    # 使用Bot Token初始化客户端
    async with TelegramClient('bot_session', api_id, api_hash).start(bot_token=bot_token) as client:
        channel = await client.get_entity(types.PeerChannel(chat_id))
        messages = await client.get_messages(channel, limit=100, offset_id=0)
        # 后续业务逻辑

2. 使用多设备Session(仅针对普通用户账号)

如果必须使用个人普通账号,需要生成Telegram的多设备Session(MTProto v2),这类Session允许和手机端官方APP同时在线:

  • 先生成多设备Session:
from telethon import TelegramClient
from telethon.sessions import StringSession

api_id = '12345678'
api_hash = '1234'

# 生成多设备StringSession
client = TelegramClient(StringSession(), api_id, api_hash, sequential_updates=True)
async def generate_session():
    await client.start()
    print("多设备Session字符串:", client.session.save())

import asyncio
asyncio.run(generate_session())
  • 将生成的新Session字符串,替换你代码中原有的session_hash即可。

额外注意事项

  • 禁止重复使用同一个单设备Session在多个客户端(代码+手机)登录,这是Telegram的安全机制,必然触发挤登。
  • 确保API ID/Hash和对应账号(机器人/个人账号)绑定,不要混用不同账号的API信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:22:37