求助:如何通过Bot导出Telegram账号中聊天对象的Handle
实现方案建议
一、Python + Telethon(推荐方案)
这个方案直接调用Telegram官方API,稳定性高、处理效率快,全程自己掌控账号权限,完全适配你的基础开发能力。
操作步骤:
获取Telegram API凭证
登录my.telegram.org,创建一个个人应用,获取对应的api_id和api_hash,这是调用API的核心凭证。安装依赖库
打开终端/命令提示符,执行安装命令:pip install telethon核心代码示例
以下代码会遍历所有对话,筛选并提取私人聊天、私密群组的对象handle:from telethon import TelegramClient from telethon.tl.types import PeerUser, PeerChat, PeerChannel # 替换为你的API信息 api_id = 你的api_id数字 api_hash = '你的api_hash字符串' session_file = 'my_telegram_session' # 登录会话文件,自动生成 async def export_handles(): client = TelegramClient(session_file, api_id, api_hash) await client.start() # 用集合存储handle,自动去重 collected_handles = set() # 遍历所有对话 async for dialog in client.iter_dialogs(): peer = dialog.peer # 处理私人聊天对象 if isinstance(peer, PeerUser): user = await client.get_entity(peer) if user.username: collected_handles.add(f'@{user.username}') # 处理私密群组(排除公开频道、超级群组) elif isinstance(peer, (PeerChat, PeerChannel)): chat = await client.get_entity(peer) if not chat.broadcast and not chat.megagroup and chat.username: collected_handles.add(f'@{chat.username}') # 导出到本地文件 with open('telegram_handles.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(collected_handles)) print(f"共导出{len(collected_handles)}个handle,已保存到telegram_handles.txt") if __name__ == '__main__': import asyncio asyncio.run(export_handles())代码说明:
- 首次运行会要求输入手机号和验证码,登录后生成会话文件,后续无需重复验证
- 自动过滤无handle的对象,并用集合去重
- 仅提取私人聊天和普通私密群组,排除公开频道、超级群组等非目标对象
二、鼠标键盘自动化方案(备选)
如果不想接触API,可以用桌面自动化工具模拟人工操作,缺点是依赖Telegram桌面端的界面布局,稳定性差、效率低,适合临时少量处理。
操作步骤:
安装依赖库
pip install pyautogui核心代码框架
import pyautogui import time # 提前手动打开Telegram桌面端,确保聊天列表处于可视状态 time.sleep(3) collected_handles = set() # 初始聊天位置坐标(需自行用pyautogui.displayMousePosition()获取) chat_x, chat_y = 200, 300 # 每次滚动的垂直距离 scroll_step = 50 # 根据聊天数量调整循环次数 for _ in range(100): # 点击当前聊天项 pyautogui.click(chat_x, chat_y) time.sleep(1) # 获取handle所在位置坐标(自行获取) handle_x, handle_y = 500, 100 # 选中并复制handle pyautogui.doubleClick(handle_x, handle_y) pyautogui.hotkey('ctrl', 'c') handle_content = pyautogui.paste() if handle_content.startswith('@'): collected_handles.add(handle_content) # 滚动到下一个聊天 pyautogui.scroll(-scroll_step) chat_y += scroll_step time.sleep(0.5) # 保存结果 with open('auto_handles.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(collected_handles))注意事项:
- 需用
pyautogui.displayMousePosition()工具获取准确的界面坐标 - 不同系统、Telegram版本的界面布局不同,需自行调整坐标和操作逻辑
- 运行期间不要移动鼠标或切换窗口,否则会导致操作错位
- 需用
通用注意事项
- API凭证需妥善保管,不要泄露给第三方
- 使用Telethon方案时,避免短时间内频繁调用API,防止触发Telegram的频率限制
- 两种方案都建议先小范围测试,确认逻辑无误后再批量处理
内容的提问来源于stack exchange,提问作者Omer
相关产品推荐
相关产品推荐

