Skip to content

搬运任务与持续监听实战 ​

TG Migrator 提供两种互补的搬运工作流:

  1. 单次/批量搬运任务(Tasks):直接向 Bot 发送消息链接或区间,随发随搬。
  2. 持续监听路由(Watch Routes):将源频道/群组/子话题与一个或多个目的地长期绑定,实现 7×24 小时实时同步 + 历史回溯。

1. 发起单次与批量搬运任务 ​

日常想要搬运某条消息、整组相册(Album)或某一段历史消息时,直接把链接发给 Bot 即可。

支持的链接与区间格式 ​

搬运场景直接发送给 Bot 的内容示例
单条消息 / 整组相册https://t.me/c/123456789/42
https://t.me/public_channel/42
子 Topic 内的单条消息https://t.me/c/123456789/15/42 (自动识别子话题 15 的第 42 号消息)
消息 ID 区间(连字符写法)https://t.me/c/123456789/100-500
https://t.me/c/123456789/15/100-500 (仅扫描子话题 15 内 100~500 号消息)
消息 ID 区间(首尾两条链接)https://t.me/c/123456789/100 https://t.me/c/123456789/500
私密群邀请链接https://t.me/+AbCdEfGhIjKlMnOp (需读取号已加入该群)

选择目的地并启动 ​

当你发送链接后:

  1. Bot 会弹出目的地多选卡片(例如 ☑️ #1 归档群_t128、⬜ #2 nas_video)。
  2. 点击按钮即可勾选或取消(支持一源多投,例如同时发往 Telegram 群并备份到 WebDAV)。
  3. 点击 🚀 开始,扫描器就会将消息入队并由后台 Worker 开始搬运。

相册自动聚合与全局幂等去重

  • 相册自动完整搬运:即便你只复制了 9 宫格相册中第 1 张图的链接,TG Migrator 也会自动向前后探测相同的 grouped_id,把整组相册合并为一个任务原样发出,绝不会拆散成单张刷屏。
  • 自动去重:所有文件按 Telegram 全局唯一 doc_id / photo_id 计算哈希去重。重复扫描重叠区间时,已搬运过的内容会自动跳过。

2. 持续监听路由(/routes) ​

如果你希望长期跟踪某个群组/频道(或其中某个特定的子 Topic),让它每发一条新内容就自动同步到你的目的地,请使用 路由(Route)。

新建监听路由步骤 ​

  1. 打开 🔁 路由 → 点击 ➕ 新建路由(或发送 /add_route)。
  2. 按 4 步向导填写:
    • 路由名称:如 design_channel_sync
    • 来源(Source):
      • 直接粘贴一条源群组/频道的消息链接;
      • 💡 锁定源子 Topic 技巧:如果你粘贴的是带有子话题的链接(如 https://t.me/c/123456/15/99),该路由会自动锁定只监听子话题 15,群内其他话题的消息不会混入!
      • 也支持直接输入 @用户名 或 -100群ID 话题ID。
    • 目的地编号:输入一个或多个目的地 ID,用逗号分隔(如 1, 2)。
    • 开启实时监听(y/n):选 y 即可立即生效。

实时事件 + 水位线轮询「双保险机制」 ​

单纯依赖客户端实时事件在断网或容器重启时会漏消息。因此 TG Migrator 采用了双引擎设计:

  1. Telethon 实时事件流:源端发消息瞬间实时捕获(遇到相册自动等待 2.5 秒聚合成组后入队)。
  2. last_seen_msg_id 水位线周期轮询:每隔 watch.poll_interval_seconds(默认 300 秒),自动检查是否有比数据库水位线更新的消息。哪怕服务器断网维护半天,恢复后也会自动从断点补齐停机期间漏掉的所有消息!

在路由上回溯历史消息(📜 扫描历史) ​

进入 🔁 路由 → 点击某条路由 → 点击 📜 扫描历史:

  • 全部历史(从 1 开始):从头到尾完整搬运该源频道(或源子话题)的所有存量历史消息。
  • 指定范围:输入 起始ID - 结束ID(如 1 - 1000 或首尾两条消息链接)进行分段回溯。
  • ⏩ 立即补齐:不等待 300 秒定时器,立刻执行一次增量拉取。

3. 关键词与正则内容过滤(/filters) ​

无论是单次任务还是长期监听,都可以通过过滤规则自动拦截广告、推广链接或特定关键字。

  • 打开过滤面板:发送 /filters(或进入 ⚙️ 设置 → 🧹 过滤规则)。
  • 添加关键词过滤:
    text
    /filter_add keyword 广告合作
  • 添加正则表达式过滤(例如屏蔽所有含外链或推广群链接的消息):
    text
    /filter_add regex https?://t\.me/(\+|joinchat/)\S+
  • 删除规则:
    text
    /filter_del 1

4. 单路由独立参数覆盖(/route_set) ​

如果你希望全局默认保留消息说明文字(Caption),但希望某一条特定路由在搬运时自动去掉文字、或者只搬运视频不搬运纯文本,可以使用路由级参数覆盖:

text
# 仅在 1 号路由上剥离媒体说明文字(只发纯图/纯视频)
/route_set 1 transfer.drop_caption true

# 仅在 1 号路由上忽略纯文本消息
/route_set 1 transfer.include.text false

# 清除 1 号路由的覆盖项,恢复跟随全局设置
/route_set 1 transfer.drop_caption -

5. 队列控制与故障恢复 ​

  • 查看实时队列与磁盘余量:发送 /status(或点击主菜单 📊 状态)。
  • 暂停与恢复队列:发送 /pause(等待当前正在传输的文件完成后安全暂停)与 /resume。
  • 一键重试失败项:发送 /retry(重试全部失败项)或 /retry 5(仅重试任务 #5 中的失败项)。
  • 取消正在执行的任务:发送 /cancel_task 5(或在 📋 任务 详情页点击 ✖️ 取消任务)。
  • 目的地到达率校验:发送 /verify,系统会自动抽检已投递到 Telegram 目的地的消息是否仍然完好存在。

基于 AGPL-3.0 协议开源发布。