基于Python Telethon的Telegram消息转发工具频繁掉线求助
问题:Telegram消息转发工具频繁被强制下线
我写了一个基于Telegram API的消息转发工具,功能是把指定群组的消息同步到另一个目标群组。工具仅在我登录Telegram客户端(手机/PC端)时能正常运行5-10秒,之后所有设备上的账号都会被强制下线,代码也随之停止工作。代码确实能实现转发功能,但单独通过代码(如PyCharm中)登录后,约5-10秒就会被踢下线,求修复方案。
代码如下:
from telethon.sync import TelegramClient, events api_id = '*******' api_hash = '*************************' #phone = '*********' DESTINATION_GROUP_ID = -1001964185842 #our channel for recieving messages SOURCE_GROUP_ID = -1001923879320 #information source channels with TelegramClient('session_name', api_id, api_hash) as client: #for message in client.iter_messages(chat): #print(message.sender_id, ':', message.text) async def forward_message_to_destination(message): await client.send_message(DESTINATION_GROUP_ID, message) print(f"Message forwarded: {message.text}") @client.on(events.NewMessage(chats=SOURCE_GROUP_ID)) async def forward_messages(event): message = event.message await forward_message_to_destination(message) with client: client.run_until_disconnected()
修复方案
启用两步验证(2FA)并完善登录流程
Telegram的安全机制会对非官方客户端登录做严格检测,启用2FA后,代码登录时需提供会话密码,能大幅降低被判定为异常登录的概率。先在Telegram客户端开启2FA,运行代码时按照提示输入密码即可。修正会话管理的嵌套问题
原代码嵌套了两层with TelegramClient语句,会导致会话管理异常。调整代码结构,显式调用登录方法:from telethon.sync import TelegramClient, events api_id = '*******' api_hash = '*************************' phone = '*********' # 取消注释并填写手机号 DESTINATION_GROUP_ID = -1001964185842 SOURCE_GROUP_ID = -1001923879320 client = TelegramClient('session_name', api_id, api_hash) async def forward_message_to_destination(message): await message.forward(DESTINATION_GROUP_ID) print(f"Message forwarded: {message.text}") @client.on(events.NewMessage(chats=SOURCE_GROUP_ID)) async def forward_messages(event): await forward_message_to_destination(event.message) with client: client.start(phone) # 显式触发登录流程 client.run_until_disconnected()使用官方
forward方法替代send_message
直接发送消息对象容易被检测为异常行为,改用Telethon提供的forward方法,更符合官方API的使用规范,降低被限制的风险。复用会话文件,避免频繁重建会话
不要反复删除session_name.session文件,复用已有会话能减少Telegram的安全触发阈值。如果会话文件损坏,再删除后重新登录。确保账号处于正常状态
如果是新注册的Telegram账号,先在客户端手动活跃3-7天,再使用代码登录;同时检查API ID和Hash是否与当前账号正确绑定。
内容的提问来源于stack exchange,提问作者IlaiHappy
相关产品推荐
相关产品推荐

