本文详解如何用 telethon 客户端连接 telegram 账户,并准确、高效地拉取目标群组(而非“我的消息”)的最新消息,包含完整异步示例、参数说明与关键注意事项。
本文详解如何用 telethon 客户端连接 telegram 账户,并准确、高效地拉取目标群组(而非“我的消息”)的最新消息,包含完整异步示例、参数说明与关键注意事项。
Telethon 是一个功能强大且活跃维护的 Python Telegram API 客户端库,支持同步与异步操作。初学者常遇到的核心误区是:client.iter_messages('me') 并非读取任意群聊,而是固定指向当前用户的「Saved Messages」(收藏消息),因此即使代码无报错,也不会输出目标群组内容。
要正确读取指定群组消息,需确保以下三点:
群组标识符准确:iter_messages() 的第一个参数应为群组的 username(如 'telegram')、ID(如 -1001234567890)或 PeerChannel 对象;
✅ 正确示例:'FOOBAR'(公开群组用户名)、-1001234567890(私有群组 ID,注意负号和前缀 -100);
❌ 错误示例:'My Group'(空格/中文名不可直接使用,需先通过 get_entity() 解析)。必须使用异步上下文:iter_messages() 在较新版本中返回异步生成器(AsyncGenerator),不能在普通 for 循环中直接遍历,必须配合 async for 和事件循环。
显式启动客户端:推荐调用 client.start()(自动处理授权与会话),而非仅依赖 with 语句(sync 模式已不推荐用于消息迭代)。
以下是可直接运行的完整示例(适配 Telethon ≥ 1.24):
from telethon import TelegramClient
import asyncio
# 替换为你自己的 API 凭据(从 https://my.telegram.org 获取)
api_id = 1234567
api_hash = 'your_api_hash_here'
client = TelegramClient('session_name', api_id, api_hash)
async def fetch_group_messages():
await client.start() # 启动并完成首次登录(若未登录则触发短信/二维码验证)
# 示例1:按用户名读取公开群组(限最近10条,正序)
async for message in client.iter_messages('FOOBAR', limit=10):
if message.text: # 过滤无文本的消息(如图片、服务通知)
print(f"[{message.id}] {message.text[:50]}...")
# 示例2:按群组 ID 读取私有/无用户名群组(需 -100 前缀)
# async for message in client.iter_messages(-1001234567890, limit=5, reverse=True):
# print(f"ID:{message.id} | Date:{message.date} | Text:{message.text}")
# 运行异步主函数
asyncio.run(fetch_group_messages())⚠️ 重要注意事项:
- 首次运行会提示输入手机号、验证码或扫描二维码,请确保网络可访问 Telegram 服务器;
- 私有群组(无 username)必须使用 channel ID(格式为 -100 + 群组真实 ID),可通过 client.get_entity('群组链接') 或 Bot API 获取;
- limit 参数控制拉取数量(默认 None 即全部,但海量消息慎用);reverse=True 可从最早消息开始读取;
- 生产环境请添加异常处理(如 ConnectionError、SessionPasswordNeededError)并妥善管理会话文件(session_name.session);
- 遵守 Telegram API 使用条款,避免高频请求(建议间隔 ≥ 1 秒)。
掌握以上要点后,你即可稳定、合规地从任意授权群组中获取结构化消息数据,为自动化监控、内容分析或机器人开发打下坚实基础。

















