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

Telethon中收到相册消息时如何取消触发NewMessage事件?

解决Telethon中Album与NewMessage事件重复触发的问题

当Telethon收到相册消息时,确实会同时触发Album和NewMessage事件——因为Album事件本质是对多条带grouped_id的NewMessage的封装。要实现相册消息只走Album事件、不触发NewMessage事件,有两种简洁的实现方式:

方法一:通过事件过滤直接排除相册消息

利用NewMessage事件的func参数,过滤掉带有grouped_id的消息(相册内的消息都会携带这个标识),这样非相册的消息才会进入NewMessage的处理逻辑:

@client.on(events.Album)
async def my_event_handler(event):
    if event.messages[0].peer_id.channel_id == 1859055581:
        await event.forward_to(1859055581)
        print("Album function")

@client.on(events.NewMessage(func=lambda e: e.message.grouped_id is None))
async def my_event_handler3(event):
    if event.message.peer_id.channel_id == 1859055581:
        if event.message.text:
            await event.message.forward_to(1859055581)
            print(event.message.photo)
    else:
        print(event.message)

方法二:标记已处理的相册消息(适合复杂场景)

如果需要更灵活的控制,可以维护一个集合记录已处理的相册消息ID,在NewMessage事件中跳过这些消息:

# 全局集合存储已处理的相册消息ID
processed_album_msg_ids = set()

@client.on(events.Album)
async def my_event_handler(event):
    if event.messages[0].peer_id.channel_id == 1859055581:
        await event.forward_to(1859055581)
        print("Album function")
        # 将相册内所有消息ID加入已处理集合
        for msg in event.messages:
            processed_album_msg_ids.add(msg.id)

@client.on(events.NewMessage)
async def my_event_handler3(event):
    # 检查当前消息是否属于已处理的相册,是则跳过
    msg_id = event.message.id
    if msg_id in processed_album_msg_ids:
        processed_album_msg_ids.remove(msg_id)  # 清理集合,避免内存占用
        return
    
    if event.message.peer_id.channel_id == 1859055581:
        if event.message.text:
            await event.message.forward_to(1859055581)
            print(event.message.photo)
    else:
        print(event.message)

为什么你之前的方法无效?

你直接在NewMessage事件中调用Album事件的处理函数是行不通的——两个事件的event对象类型不同:AlbumEvent包含整个相册的messages列表,而NewMessageEvent只是单条消息,参数不匹配自然无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:52:53