Telethon如何获取最新消息ID?多媒体系列帖仅取首个ID的方案验证
问题解答
你的方案是正确的,属于Telethon处理媒体专辑(多图/视频帖子)的标准实现方式,核心逻辑没有问题,下面详细说明:
方案有效性说明
Telegram的多媒体专辑帖子在Telethon中会触发两类事件:
events.Album:当完整的专辑发布时触发,事件对象的messages属性包含专辑内所有媒体消息的列表,取event.messages[0].id就能拿到专辑首个媒体的消息ID,完全匹配你的需求。events.NewMessage:专辑里的每一条媒体都会单独触发该事件,但这些消息都带有相同的grouped_id(用于标记同属一个专辑),通过if event.grouped_id: return可以过滤掉这些重复的单条媒体消息,只处理非专辑的普通单条消息。
需要修正的细节
你的代码里两个事件处理函数用了同一个名字newMessageListener,这会导致后定义的函数覆盖前一个,运行时只会执行handle_album逻辑,建议修改为不同的函数名:
@client.on(events.NewMessage) async def handle_single_message(event): if event.grouped_id: return message_id = event.message.id print(f"Received single message {message_id}") @client.on(events.Album) async def handle_album(event): message_id = event.messages[0].id print(f"Received album, first message id {message_id}")
额外注意事项
- 确保Telethon版本为较新稳定版,
events.Album是后续版本新增的事件,旧版本可能不支持,可通过pip install --upgrade telethon更新。 - 若机器人需要处理频道/超级群组的帖子,需确保机器人拥有读取消息的权限,否则可能无法正常接收
Album事件。
内容的提问来源于stack exchange,提问作者Test This
相关产品推荐
相关产品推荐

