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

Telethon脚本优化需求:短时间多帖时仅回复频道最新帖子

解决方案:延迟执行+取消旧任务实现仅回复最新帖子

可以通过延迟回复+取消未执行的旧任务的方式解决这个问题,核心逻辑是:短时间内收到多条消息时,只保留最新消息的回复任务,取消之前还没执行的任务,等设定的等待窗口结束后再回复最新的那条。

修改后的代码如下:

import asyncio

# 全局变量存储待执行的回复任务
pending_reply_task = None

@client.on(events.NewMessage(CHANNEL))
async def main(event):
    global pending_reply_task
    
    # 只处理目标频道的消息
    if event.chat_id != -100123456789:
        return
    
    # 如果存在未完成的旧任务,直接取消(放弃回复旧消息)
    if pending_reply_task and not pending_reply_task.done():
        pending_reply_task.cancel()
    
    # 定义延迟回复的异步函数
    async def send_latest_reply():
        # 设置等待窗口,这里设为10秒,可根据需求调整
        await asyncio.sleep(10)
        await client.send_message(event.chat_id, 'my_message', comment_to=event.id)
    
    # 创建并保存新的回复任务
    pending_reply_task = asyncio.create_task(send_latest_reply())

代码说明:

  • pending_reply_task:全局变量用来追踪当前待执行的回复任务,确保同一时间只有一个待执行的回复任务存在。
  • asyncio.sleep(10):设置你的等待窗口时长(比如10秒),这段时间内如果有新消息进来,就会取消之前的旧任务,只保留最新消息的回复任务。
  • 等待窗口结束后,只会回复最后一条触发任务的消息,完美实现“短时间内仅回复最新帖子”的需求。

额外说明:

  • 如果频道消息的间隔超过你设置的等待时长,每条消息都会正常触发回复;
  • 如果等待窗口内有多条消息,只有最后一条会被回复,旧消息的回复任务会被提前取消。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:12:03