MIT License

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

深度分析:Telegram Restricted Media Downloader

项目背景与痛点

在 Telegram 这样的大型聊天平台上,用户常常会遇到一些无法直接下载的媒体文件。这可能是由于版权保护或其他限制条件所导致。这种情况下,用户经常需要借助第三方工具来下载媒体文件。

“Gentlesprite/Telegram_Restricted_Media_Downloader” 项目就是为了解决这一痛点。通过提供一个功能强大的机器人接口,用户可以直接发送链接或者命令来下载那些受限制的媒体文件。此项目基于 Python 环境,利用了 Telegram API 提供的 Pyrogram 库,支持断点续传等功能,原本繁琐的下载过程变得更为简便流畅。

核心技术揭秘

该项目主要利用了 Telegram 的 Bot API,通过 Pyrogram 库来实现,具备了稳定高效的数据处理能力。

技术架构

项目的核心技术栈采用了以下关键组件:

  • Pyrogram:一个高度集成、现代化的 Telegram API 库。
  • Python:编写脚本的核心语言,支持断点上传和下载。

在设计上,项目采用了模块化设计和面向对象的编程方法,实现了以下主要功能模块:

  • 命令解析:用户发出的命令和链接解析,确保请求的准确性和有效性。
  • 文件下载:根据提供的链接启动文件的下载任务,支持断点续传。
  • 文件转发:允许多样的转发选项,包括直接转发和监听转发。
  • 状态同步:实时更新下载状态,并支持下载后上传等一系列处理任务。

通过以下 Mermaid 图来更直观地描绘其技术架构:

graph TD A[用户命令/链接] --> B[命令解析] B --> C{"有效?"} C -->|"是"| D[下载任务启动] C -->|"否"| E[返回指令错误] D --> F[文件下载] F --> G{"下载失败?"} G -->|"是"| H[上传任务失败] G -->|"否"| I{"上传任务?"} I -->|"是"| J[上传文件] J --> K[状态同步] I -->|"否"| K[状态同步]

此架构图展示了用户的命令是如何被解析、任务启动、文件下载是否成功,以及上传任务的决策过程。

功能亮点与差异

相比同类竞品,此项目的核心亮点在以下几个方面:

  1. 支持断点续传:程序设计中内置了高效的断点续传功能,确保即使在网络不稳定的环境下,下载任务也可以在断开连接之后继续进行而不会造成数据丢失。
  2. 高度灵活的命令和链接解析能力:能够处理各种复杂用户请求,并将请求准确转向对应的处理模块。
  3. 全面的数据处理能力:不仅支持直接下载,还能实现各种转发、监听和上传等功能,满足多样化的使用场景。

应用场景与落地建议

此项目在实际环境中的应用需注意以下几点:

  • 网络带宽:由于处理大量媒体文件,建议保证充足的带宽资源与稳定的网络环境以确保可靠的数据传输。
  • 权限管理:确保机器人账号拥有足够的访问权限,以便顺利完成下载与上传任务。
  • 稳定性监控:设置合理的定时和长期运维策略,确保服务的高可用性。

适用于如媒体集中管理和分发,多线程并发下载,离线内容支持引流等业务场景。

综合评价

优点:

  • 项目设计合理模块化,易于维护与扩展。
  • 高效的实现机制,支持断点续传等功能,实用性极高。

缺点:

  • 新手入门门槛相对较高,部分复杂功能需求用户具备一定的技术背景知识。

此项目通过创新的功能设计和高实用性为用户带来极大的便利,是一个值得推荐的开源项目。

关于

GitHub 原始描述(英文)

💎💎💎支持断点续传的Telegram下载器💎💎💎支持向机器人发送链接下载、转发、监听下载、监听转发、上传、下载后上传。电报任意群组中不可下载的内容,提供媒体的链接即可下载对应媒体。Telegram API (Pyrogram) - Telegram downloader (TRMD): Supports resumable downloads and uploads. Bot supports commands/links for downloading, forwarding, listening, ​​uploading, and upload-after-download​​ of non-downloadable Telegram content via API.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
534
价值分
270
活跃状态
活跃

语言占比

CSS
Dockerfile
HTML
JavaScript
Python

Release

README

logo TRMD

支持断点续传的Telegram下载器。

Python 3.13.2 License Release Downloads Docker pulls DeepWiki

[!Tip] 本项目推荐代理:点击跳转。
欢迎提交附带详细复现步骤的BUG反馈。
接受付费定制化需求、付费远程搭建、教学、答疑。

[!Important] 本项目没有帮你解决问题的义务。
如果你遇到问题没有找到解决方案:
联系作者付费解答。
推荐先观看视频教程并配合“README.md”与“常见问题及解决方案汇总”。
加入TRMD交流群搜索历史聊天记录是否提到过相关问题,凡是重复的问题不予回答。

特点

Tip 提示

🤖表示需要配置机器人才能实现。

特点 说明
受限下载 下载(受保存限制)聊天中的媒体文件。
断点续传 下载与上传均支持断点续传。
网页面板 浏览器实时查看下载与上传进度。
开箱即用 提供Windows、Linux平台二进制文件,并支持通过Docker部署运行。
批量下载 🤖下载整个频道及其评论区(可选),并支持关键词、类型、日期等自定义过滤规则。
使用门槛 🤖在帮助菜单通过点击按钮逐步引导用户创建所需任务。
消息转发 🤖频道开启限制保存内容时自动回退为下载后上传。
文件上传 🤖批量上传本地文件到Telegram。
实时监听 🤖监听频道最新消息并自动下载或转发。

免责声明

本项目以GNU GPL-3.0协议开源发布。

所有使用本软件的行为及其后果均由使用者自行承担全部法律责任,开发者不对任何使用行为及其后果负责。


本项目按“原样”提供,不附带任何明示或暗示的保证。

作者 Gentlesprite
YouTube视频教程 点击观看
Telegram交流群 点击加入
支持作者 点击跳转

1.0.下载地址

平台 下载地址 备注
Github 点击跳转 –
Gitee 点击跳转 仅发布源码
蓝奏云 点击跳转 密码:ceze
Telegram交流群 点击加入 群文件

1.1.推荐终端(选看)

点击展开
  1. 对于Windows11用户,Windows Terminal默认已经安装好,可跳过下载的步骤,直接前往第3步(将Windows Terminal设为默认终端)。

  2. 对于Windows10用户,推荐使用Windows Terminal作为默认终端,仅作为推荐安装,无论安装与否不会影响本软件的使用,Windows Terminal能提供更出色的显示、交互、体验效果,以及避免出现文字显示乱码。

    Windows Terminal下载地址如下表:

    平台 下载地址
    微软商店 点击跳转
    Github 点击跳转
  3. 下载完成完成后win+r输入wt回车打开,然后将Windows Terminal设为默认终端再启动软件,教程如下:

    image

    image

2.0.快速开始

2.1.申请电报API

[!IMPORTANT] 申请电报API对IP纯净度要求极高,针对无法申请的情况:
可直接使用YouTube视频教程或B站视频简介下提供的api,随后申请电报API可省略。

  1. 前往网站:https://my.telegram.org/auth

  2. 填写自己绑定Telegram电报的手机号注意手机号格式先要+地区再写入电话号码例如+12223334455,+1为地区,222333445为你绑定Telegram的手机号,填写后点击Next。

    image

  3. 打开你的Telegram客户端,此时会收到来自Telegram账号的消息,将上面的验证码填入Confirmation code框中,然后点击Sign in。

    image

    image

  4. 点击API development tools按照提示填入即可。

    image

  5. 申请成功会得到一个api_hash和api_id保存下载,切记不要泄露给任何人!

2.2.电报机器人bot_token申请及使用教程(选看)

[!TIP] 大部分的使用需求都能通过配置机器人满足:
例如需要下载整个频道的内容亦或是监听、转发某个频道,根据实际需求查看对应机器人命令。
故可以将TRMD部署在服务器、NAS,无论是Windows、Linux还是Docker。

点击展开

2.2.1.申请教程

  1. 前往网站:https://t.me/BotFather

  2. 打开后会提示"要打开 Telegram Desktop 吗?"此时点击"打开Telegram Desktop"如下图所示:

    image

    如果没有这个弹窗,说明电脑没有安装Telegram客户端,安装后再重试即可。

  3. 点击开始,如下图所示:

    image

  4. 然后在当前聊天框中输入/newbot后回车,如下图所示:

    image

    它会回复你"Alright, a new bot. How are we going to call it? Please choose a name for your bot."意思是给机器人取一个名字,如下图所示:

    image

  5. 这个名字是显示名称(display name),并不是唯一识别码,随便设置一下即可,之后可以通过 /setname命令进行修改。

    image

  6. 接着设置机器人的唯一名称。字符串必须 以bot结尾,比如 HelloWorld_bot 或 HelloWorldbot 都是合法的。如果设置的名字已经被占用需要重新设置。如设置成了 trmd_bot但是这个名字已经有人使用了,此时会提示"Sorry, this username is already taken. Please try something different."意思是已经被使用了,需要拟定一个不重复的,如下图所示:

    image

    如果结果如上图所示,则就代表名字重复了,需要重新拟定一个。

  7. 直到提示你"Done! Congratulations on your new bot. . ."如下图所示:

    image

    如果结果如上图所示,则代表bot_token申请成功了,箭头指的红框处就是你所申请的bot_token,切记不要泄露给任何人!

2.2.2.使用教程

  1. 申请完成后,在软件配置时询问"是否启用「机器人」(需要提供bot_token)? - 「y|n」(默认n)"选择y代表需要使用,如下图所示:

    image

    然后在上图箭头所指处填入"2.2.1.申请教程"第7步申请的bot_token后回车,即可配置完成。

  2. 在一切配置完成,软件启动成功后等待提示"「机器人」启动成功。",就代表机器人可以使用了,如下图所示:

    image

  3. 在Telegram客户端中找到与BotFather的对话框,找到"2.2.1.申请教程"第7步对话的位置(或者用你自己的方式找到你的机器人的对话框),如下图所示:

    image

    然后在上图箭头所指处即可跳转到机器人对话框。

  4. 点击开始,如下图所示:

    image

    不出意外,会收到一条来自机器人发送的消息,如下图所示:

    image

    如果没收到尝试给机器人发送任意命令。

  5. 目前机器人支持的命令用法及解释如下表所示:

    命令 用法 解释
    /help 向机器人发送发送/help即可。 展示可用命令。
    /download /download 链接1 链接2 链接3 链接n或/download 频道链接 1 100 分配新的下载任务,两种方式可选(指定链接下载和范围下载,具体使用方法请见下方说明)。
    /table 向机器人发送/table即可。 在终端输出当前下载情况的统计信息。
    /forward /forward https://t.me/A https://t.me/B 1 100 将频道A的消息转发至频道B,其中1代表起始ID,100代表截止ID。
    /exit 向机器人发送/exit即可。 退出软件。
    /listen_download /listen_download https://t.me/A https://t.me/B https://t.me/n 实时监听频道A、频道B和频道n的最新消息(任意消息)进行下载。
    /listen_forward /listen_forward https://t.me/A https://t.me/B 实时监听频道A的最新消息(任意消息)转发至频道B。当频道A存在内容保护限制时,回退至下载后上传。
    /listen_info 向机器人发送/listen_info即可。 查看当前已经创建的监听信息。
    /upload /upload 本地文件 目标频道 上传本地的文件到指定频道。
    /upload_r /upload_r 本地文件夹 目标频道 递归上传文件夹(包含子文件夹)到指定频道。
    /download_chat /download_chat 频道链接 获取该频道全部内容,用户通过自定义条件进行内容筛选,最终下载该频道中用户所需内容。
    /auth /auth或/auth 用户ID或/auth @用户名 添加/移除/查看授权使用机器人的用户,支持用户ID或@用户名。

    其他功能:

    • (≥v1.8.7)转发视频、图片、音频、语音、GIF、文档、视频笔记、实况图片类型的消息给机器人,即可创建下载任务。
      • 此项功能不受用户自定义下载类型限制,确保文件即时获取。
      • 转发的消息将按新消息处理,每次均生成独立文件命名。暂不支持重复文件识别,请妥善管理多次转发的相同内容。
      • 此功能仅用于便利用户日常使用,对于无法被转发、下载的消息,请根据实际需求使用对应的命令。

2.2.3.命令

/help

image


菜单

image


/download

⚠️ 版本变更说明:

版本 说明
≥v1.6.3 已全面支持下载时的断点续传功能(支持所有上传场景),增强了在较差网络环境下的传输稳定性与可靠性。
  • 方式一:

    • image
    • 只要发送了正确的下载命令,终端就会创建对应的下载任务,如下图所示:
    • image
  • 方式二:

    • 该功能为版本≥v1.5.1的新增功能,用于对于单一链接的范围下载,并且该方式要求指定频道链接、起始ID与结束ID:

      # 语法格式如下:
      /download 频道链接 起始ID 结束ID
      # 举例:
      /download https://t.me/test 1 500
      # 代表下载https://t.me/test从消息ID=1到结束ID=500的媒体。
      

/table

需要注意的是,这个表格是实时的状态,并不是最终下载完成的结果,每一次使用它都会随着当前的下载记录而更新。

链接统计表的使用,如下图所示:

image

image

注意:由于早期代码设计缺陷,链接统计表为后续支持的功能:

  • 链接统计表仅会统计所有支持的类型,并不会只统计用户当前所选择的类型。

  • 链接统计表对于评论区媒体的统计,会出现总数统计错误的问题,体现在总数为1,小于当前的下载数,完成率>>100%的问题(该问题已在≥v1.5.9修复)。

  • 当用户未选择下载所有支持的类型时,在用户所选择的类型下载完成后(或使用机器人发送链接统计表),尽管所有用户指定类型的文件已经下载完成,当链接统计表显示完成率不为100%时,代表该链接还存在其他用户未指定的文件类型,但实际用户所指定的类型已经下载完成了,是正常情况(该问题已在≥v2.0.2调整:在机器人设置或配置文件中被定义为跳过的下载类型与不支持的下载类型,统计时不再计入总数)。

  • 版本≥v1.6.5起已支持导出表格功能,通过该命令可在运行时控制是否在退出后导出指定类型的表格。

计数统计表的使用,如下图所示:

image

image


/forward

⚠️ 注意:
消息能否转发,在于频道是否开启了限制保存内容功能。
如果无法转发,机器人会在聊天框提供一个下载按钮与下载后上传按钮(≥v1.6.7)。

⚠️ 版本变更说明:

版本 说明
≥v1.6.9 /forward将支持过滤转发类型。可通过[帮助页面]->[设置]->[转发设置]进行修改。
≥v1.7.5 为确保"受限转发"功能顺利完成,在下载后上传过程中,创建下载任务时将忽略配置文件中设置的下载类型限制,此时(指"受限转发"情况)/forward命令无法按照[转发设置]过滤类型。
≥v1.8.5 为确保"受限转发"功能顺利完成,在下载后上传过程中,创建下载任务时将忽略该链接是否被重复添加的判定。
  • 转发消息语法:

    /forward 频道A 频道B 起始ID 结束ID
    
  • 实例:

    • 该实例代表转发https://t.me/test频道中从消息ID=1到结束ID=500的消息到 https://t.me/test2 频道。
    /forward https://t.me/test https://t.me/test2 1 500
    
  • 转发至个人收藏夹(任选一种命令即可):

    • 方式1,使用me或self指向个人收藏夹(任选一种命令即可):

      /forward https://t.me/test me 1 500
      
      /forward https://t.me/test self 1 500
      
    • 方式2,使用 https://t.me/用户名 :

      • 用户名即指个人账户信息里@后面那一串,需用户提前手动自己设置,否则无法使用该方式。
      • 例如通过查询个人信息,得知当前设置的用户名为@developer,此时指向个人的链接即为https://t.me/developer。
      /forward https://t.me/test https://t.me/developer 1 500
      
    • 无论使用方式1或方式2,都代表转发 https://t.me/test 频道 中从消息ID=1到结束ID=500的消息到个人收藏夹。

  • 转发个人收藏夹的内容至任意频道:

    • 方式1:

      /forward me https://t.me/test 1 500
      
    • 方式2:

      /forward https://t.me/developer me 1 500
      
    • 无论使用方式1或方式2,都代表转发个人收藏夹中从消息ID=1到结束ID=500的消息到https://t.me/test 频道。


/exit

image


/listen_download
  • /listen_download监听下载用于,实时监听该链接的最新消息进行下载。
    • 在用户发送了正确的监听命令后,会收到机器人的成功提示。
    • 当被监听的频道有可下载的内容时,就会自动发送命令下载。
注册监听下载
/listen_download https://t.me/A
注销监听下载
注销方法

再次向机器人发送创建监听时的命令,机器人将会提供给用户一个用于注销监听的内联键盘,点击确认即可。

与此同时,也可通过网页面板的监听版块提供的按钮注销监听下载(≥v2.0.2)。

/listen_download https://t.me/A
注册多个监听下载
/listen_download https://t.me/A https://t.me/B https://t.me/n
注销多个监听下载
/listen_download https://t.me/A https://t.me/B https://t.me/n

/listen_forward

⚠️ 版本变更说明:

版本 说明
≥v1.6.7 当检测到"受限转发"时,自动采用"下载后上传"的方式(默认开启)。当下载并完成上传后,可选择是否删除本地文件(默认关闭)。并且可通过[帮助页面]->[设置]->[上传设置]进行修改。
≥v1.6.9 /listen_forward将支持过滤转发类型。可通过[帮助页面]->[设置]->[转发设置]进行修改。
≥v1.7.5 为确保"受限转发"功能顺利完成,在下载后上传过程中,创建下载任务时将忽略配置文件中设置的下载类型限制。
≥v1.8.5 为确保"受限转发"功能顺利完成,在下载后上传过程中,创建下载任务时将忽略该链接是否被重复添加的判定。
  • /listen_forward监听转发用于,实时监听该链接的最新消息。
    • 与/forward命令一样,消息能否转发,在于频道是否开启了限制保存内容功能。
    • 但在≥v1.6.7起可以通过下载再上传的方式进行"转发"。
    • 在用户发送了正确的监听命令后,会收到机器人的成功提示。
    • 当被监听的频道有任何新内容时,就会自动转发至用户所指定的频道。
监听行为说明
  • 频道独占原则:
    • 每个频道同一时间只能激活一种监听模式(下载或转发)。
    • 对于/listen_forward命令,"同一频道"特指被监听的源频道。
    • 转发目标频道不受此限制,仍可通过/listen_download创建下载任务。
  • 操作限制:
    • 当频道A正在监听转发频道B时:
      • 可以同时在频道B设置监听下载。
      • 但频道B的监听下载,不会响应来自频道A的监听转发。
  • 监听切换流程:
    • 必须先通过同一命令(注册监听时的命令)来取消现有监听。
    • 然后才能创建新的监听事件。
注册监听转发
/listen_forward https://t.me/A https://t.me/B
注销监听转发
注销方法

再次向机器人发送创建监听时的命令,机器人将会提供给用户一个用于注销监听的内联键盘,点击确认即可。

与此同时,也可通过网页面板的监听版块提供的按钮注销监听转发(≥v2.0.2)。

/listen_forward https://t.me/A https://t.me/B

/listen_info
  • /listen_info用于查看当前已经创建的监听信息,直接发送即可:

    /listen_info
    

/upload

⚠️ 版本变更说明:

版本 说明
≥v1.7.9 已全面支持上传时的断点续传功能(支持所有上传场景),增强了在较差网络环境下的传输稳定性与可靠性。
≥v1.8.4 /upload 命令支持me、self 作为目标频道的参数(me、self 作为目标频道参时,代表指向个人收藏夹Saved Messages)。
  • /upload用于上传本地的文件到指定频道。

    • 支持上传文件夹(当指定路径为文件夹时并且版本需≥v1.7.1)。
    • 当指定的路径为文件夹时,将会上传指定文件夹下所有的文件。
  • 上传文件语法:

    /upload 本地文件(夹) 目标频道
    
注意事项

Telegram 对上传的单个文件大小设有明确限制:

  • 普通用户:单个文件最大上传大小为2000 MiB(约 2 GB)。
  • 会员用户(Telegram Premium):单个文件最大上传大小为4000 MiB(约 4 GB)。
对于Windows用户
上传一个文件
/upload C:\files\video.mp4 https://t.me/test
上传一个文件夹

版本需要≥v1.7.1。

/upload C:\files https://t.me/test
对于Linux用户
上传一个文件
/upload /home/username/files/video.mp4 https://t.me/test
上传一个文件夹

版本需要≥v1.7.1。

/upload /home/username/files https://t.me/test

/upload_r

⚠️ 版本变更说明:

版本 说明
≥v1.8.4 /upload_r命令支持me、self作为目标频道的参数(me、self作为目标频道参时,代表指向个人收藏夹Saved Messages)。
  • /upload_r命令是/upload命令的扩展版本,专为批量文件上传场景设计,支持递归处理目录结构,与/upload不同的是:

    • /upload_r命令接收文件夹路径作为其第二个参数,自动遍历该目录及其所有子目录中的文件。

      /uploadr C:\files https://t.me/test
      
    • 当第二个参数为文件路径时,自动切换为 /upload的单文件上传模式。

      /uploadr C:\files\video.mp4 https://t.me/test
      
      /upload C:\files\video.mp4 https://t.me/test
      

      以上两个命令在功能上完全等效,系统会自动识别文件类型并采用相应的上传策略。


/download_chat
  • /download_chat下载指定频道。

    • 与/download不同的是:/download_chat支持通过机器人发送的内联键盘进行自定义内容过滤。
    • 该命令支持下载无法复制具体请求链接的对话。
    • 使用该命令后,需要通过操作机器人回复中的内联键盘,来设置过滤器、执行任务或取消任务。
    • 需要注意的是,在上一个/download_chat命令任务未执行或取消前,无法发起新的/download_chat命令来创建下载任务。
    • 自版本≥v1.7.5起,/download_chat命令创建的下载任务过滤条件将完全遵循用户在内联键盘中的设置,意味着该命令不会遵循配置文件中的任何规则(例如配置文件中的下载文件类型设置)。
  • 目前支持的过滤方式:

过滤方式 默认值
日期范围 第一条消息的发送日期~最后的一条消息的发生日期
文件类型 视频、图片、文档、音频、语音、动画(GIF)、视频笔记、实况照片
匹配关键词 –
包含评论区 关
  • 下载指定频道语法:

    /download_chat 频道链接
    
    • 发送命令后,可根据个人需求设置过滤器(可选)。

    • 在设置完成后,必须手动点击"执行任务"或"取消任务"以继续或终止流程,否则该命令将始终处于等待状态,并阻塞新的/download_chat命令。

  • 下载用户与机器人的对话媒体:

    用户与机器人的对话无法复制具体的请求链接,因此该方法用于解决某些用户与机器人对话中禁止用户进行转发、下载的情况。

    • 首先要获取机器人用户名称,在聊天对话框中点击机器人名称查看其用户名,此处假设机器人名称为@developer_bot。

    • 拼接机器人的请求链接为https://t.me/developer_bot。

      /download_chat https://t.me/developer_bot
      
  • 下载个人收藏夹(任选一种命令即可):

    • 方式1(任选一种命令即可):

      /download_chat me
      
      /download_chat self
      
    • 方式2:

      • 首先要获取用户名称,此处假设用户名已设定,个人信息中查看用户名为@developer。
      • 拼接个人收藏夹的请求链接为https://t.me/developer。
      /download_chat https://t.me/developer
      
  • 自版本≥v1.8.8起,/download_chat命令新增通过匹配关键词下载,匹配关键词说明:

    • 该命令会根据消息的text(文本)和caption(标题)信息,筛选并下载包含所设置关键词的相关对话内容。

    • 在使用该命令后点击[🔑设置匹配关键词]此时,机器人将进入接收关键词模式。

    • 关键词可以为一个或多个,当关键词为多个时,以空格分隔,例如:

      我的最爱

      学习 资料 健康 营养

    • 用户再次发送已添加的关键词时,机器人会提供一个[⌨️内联键盘]按钮用于[🗑️移除]或[👁️‍🗨️忽略]该关键词。

    • 同一时段内发送多个相同的已添加关键词,只会对第一个触发移除选项,后续重复内容不会重复触发。

    • 在[🔑设置匹配关键词]界面:

      • 点击[✅确认关键词]时,将会添加所有设置的关键词。
      • 点击[❌取消]时,将会清空所有设置的关键词。
      • 点击[🔙返回]时,不做任何操作,仅返回至主页面。
  • 包括评论区设置说明:

    • 评论区开关:
      • 默认为关闭状态。
      • 开启时,按钮状态为[✅包含评论区],匹配到的消息,存在评论区模块时,进一步匹配评论区。
      • 关闭时,按钮状态为[❌包含评论区],匹配到的消息,存在评论区模块时,忽略评论区内容。
    • 评论区功能适用性:
      • 平台部分频道在消息下方设有评论区模块,该功能为可选扩展项。用户需基于个人实际需求,自行判断是否需同步获取评论区内容。 评论区匹配与过滤规则:
      • 开启包含评论区选项后,即便消息因媒体类型被过滤而未下载,但只要该消息存在评论区,其评论同样会被获取(≥v2.0.8)。
      • 评论区的过滤条件仅遵循本次任务中用户指定的媒体类型作为过滤条件,其余过滤条件将被忽略(例如日期)。
    • 任务处理时效性:
      • 开启包含评论区选项后,需对所匹配到的消息的评论区进行读取,消息过多时,任务创建至完成的时间可能相应延长,需耐心等待。

/auth

⚠️ 权限说明: /auth命令为root专用(root即登录用户),非root用户发送该命令将收到"该命令仅root可用"的提示。

  • /auth用于管理授权使用机器人的用户,支持通过用户ID或@用户名添加授权,并支持查看与移除已授权用户。

  • 查看当前已授权的用户列表(不带任何参数,直接发送即可):

    /auth
    
  • 添加授权用户(root通过指定用户ID或@用户名进行添加):

    /auth 1234567890
    
    /auth @username
    
  • 移除授权用户:进入机器人菜单的[🔐授权用户]→[🔑添加/移除授权用户],在已授权用户列表中点击对应的[🗑️移除授权]内联按钮即可移除。

2.3.配置文件说明

用户配置文件

[!NOTE] 用户配置文件通常无需自行配置,此处旨在介绍全局配置文件中各参数的含义。
用户配置文件会在软件启动时自动在软件目录下生成config.yaml文件,并详细地引导用户配置参数。
手动编辑config.yaml对配置进行修改时,请仔细阅读下面内容理解各参数含义。
需注意配置文件使用的引号、冒号均为半角,冒号后需有一个空格。

api_hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
api_id: 'xxxxxxxx'
bot_token: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
download_type:
  - video
  - photo
  - document
  - audio
  - voice
  - animation
  - video_note
  - live_photo
is_shutdown: true
links: D:\path\where\your\link\files\save\content.txt
max_retries:
  download: 5
  upload: 3
max_tasks:
  download: 3
  upload: 3
proxy:
  enable_proxy: true
  hostname: 127.0.0.1
  scheme: socks5
  port: 10808
  username: null
  password: null
save_directory: F:\directory\media\where\you\save
session_directory: F:\directory\session\where\you\save
temp_directory: F:\directory\temp\where\you\save
参数说明
参数 说明
api_hash 申请的api_hash(Telegram API 凭据)。
api_id 申请的api_id(Telegram API 凭据,需加引号)。
bot_token 机器人令牌(选填);不填则无法使用机器人功能,可前往BotFather免费申请。
download_type 需要下载的媒体类型,详见download_type参数支持下载的媒体类型表。
is_shutdown 下载完成后是否自动关机,支持true、false。
links 链接地址文本文件路径(一个链接一行,不要加引号,运行前准备好)。
max_retries 任务重试次数,含download(下载任务重试次数)与upload(上传任务重试次数)。
max_tasks 最大并发任务数,含download与upload。
proxy 代理配置,子字段详见proxy参数配置项表;不使用代理时请将enable_proxy设为false(注意键值间冒号后需保留空格,否则YAML解析报错)。
save_directory 下载媒体保存目录(支持通配符)。
session_directory 会话保存目录(支持通配符)。
temp_directory 缓存保存目录(支持通配符)。
download_type参数支持下载的媒体类型
下载类型 说明
video 视频。
photo 图片。
document 文档。
audio 音频。
voice 语音。
animation 动画(GIF)。
video_note 视频笔记。
live_photo 实况照片(未指定且photo存在时视为photo)。
proxy参数配置项
配置项 说明
enable_proxy 是否启用代理,支持true、false。
scheme 代理协议,如socks5、http。
hostname 代理服务器IP或域名。
port 代理服务器端口。
username 代理认证用户名(选填)。
password 代理认证密码(选填)。

通配符说明

自版本≥v1.7.4起,save_directory参数将支持通配符,通配符允许用户动态生成存储路径。系统会在下载时自动将通配符替换为对应的实际值,实现按规则自动分类存储。

  • 目前save_directory支持的通配符如下表所示:
通配符 意义
%CHAT_ID% 以实际频道ID作为指定路径填充。
%CHAT_NAME% 以实际频道名作为指定路径填充(≥v1.9.6)。
%MIME_TYPE% 以实际文件类型作为指定路径填充。
%MESSAGE_ID% 以实际消息ID作为指定路径填充(≥v2.1.1);媒体组使用成员ID最小-最大区间(如123-129)。
%MESSAGE_ID_WITH_ENTITIES% 同%MESSAGE_ID%填充规则,并额外将消息文本与格式化实体序列化为json文件({区间或ID}_entities.json)落盘(≥v2.1.1)。
  • 用法示例1:

    F:\directory\media\%CHAT_ID%
    
  • 用法示例2(≥v1.9.6):

    F:\directory\media\%CHAT_NAME%
    
  • 用法示例3:

    F:\directory\media\%MIME_TYPE%
    
  • 用法示例4:

    F:\directory\media\%CHAT_NAME%\%CHAT_ID%\%MIME_TYPE%
    

全局配置文件

[!NOTE] 全局配置文件通常无需自行配置,此处旨在介绍全局配置文件中各参数的含义。
部分参数支持通过机器人设置进行修改。

authorized_users: []
console_log_level: WARNING
export_table:
  count: false
  link: false
file_log_level: INFO
forward_type:
  animation: true
  audio: true
  document: true
  photo: true
  text: true
  video: true
  voice: true
  video_note: true
  live_photo: true
notice: false
upload:
  delete: false
  download_upload: true
参数说明
参数 说明
authorized_users 通过/auth命令设置的记录有权限使用机器人的用户。
console_log_level 终端显示的最低日志级别(如WARNING)。
export_table 运行结束时是否导出统计表,含count(控制运行结束时是否导出下载计数统计表)、link(控制运行结束时是否导出下载链接统计表)、upload(控制运行结束时是否导出上传统计表)。
file_log_level TRMD_LOG.log文件中记录的最低日志级别(如INFO)。
forward_type 控制/listen_forward与/forward命令可转发的文件类型,详见forward_type参数支持转发的媒体类型。
notice 控制机器人启动时是否向用户发送启动提示(欢迎语)。
upload 控制转发时,频道中受保护内容的处理方式,含delete(控制频道中受保护内容在下载上传完成后是否删除本地文件,默认关闭)与download_upload(控制频道中受保护内容是否回退至下载后上传,默认开启)。
forward_type参数支持转发的媒体类型
下载类型 说明
text 文本。
video 视频。
photo 图片。
document 文档。
audio 音频。
voice 语音。
animation 动画(GIF)。
video_note 视频笔记。
live_photo 实况照片(未指定且photo存在时视为photo)。

全局配置文件存放路径

对于Windows用户
%APPDATA%/TRMD/.CONFIG.yaml
对于Linux用户
~/.config/TRMD/.CONFIG.yaml

2.4.使用注意事项

点击展开

链接获取方法

对想要保存的媒体文件点击鼠标右键然后选择复制消息直链,如下图所示:

image


links参数的文本内容具体写法

如下图所示,即一行代表一个链接:

image


常见的links参数的文本内容的错误写法

如下图所示:

image


关于私密频道链接的下载行为

  • 要求当前所登录的Telegram账号,在这个私密频道中,否则会报错无法下载。
  • 这是Telegram服务端设计所决定的,任何下载器都无法越界。

重复链接问题说明

问题描述
  • 如上图所示,在提交的下载任务中,存在多个前缀相同但参数不同的链接(如?comment、?single或?single&comment)。
问题原因
  • 当链接包含?comment参数时,会自动下载原始消息及其评论区内容。
  • 如果同时提交相同前缀但无?comment的链接,会导致同一资源被重复添加至下载队列。
  • 若前一次任务尚未完成,重复提交相同资源会触发任务冲突,进而引发下载异常。
解决方案
  • ≥v2.0.8已针对重复链接导致的资源竞争问题进行自动处理。
  • 仅需提交一个完整链接(如带?comment的版本),系统会自动处理原始内容及评论区,无需额外提交无参数版本。
  • 避免重复提交相同资源,确保每条链接的t.me/c/<频道>/<消息ID>部分唯一,防止任务冗余。
  • 由于这些链接的频道名和消息ID完全一致,实际上指向的是同一资源的不同表现形式。
  • 但请注意以下参数的功能差异:
    • ?comment用于标识是否下载评论区内容。
    • ?single用于在媒体组中指定仅下载该消息ID对应的单个资源。
    • ?single&comment用于指定仅下载评论区中该消息ID所对应的内容。

Telegram字段解释

字段 解释
?comment 评论区的链接。
?single 单独的链接。
?single&comment 评论区中单独的链接。
/c 私密频道的链接。
https://t.me/TEST/111/666 频道TEST话题111的链接。
https://t.me/c/1111111111/333/666 私密频道1111111111话题333的链接。
链接解释说明
Telegram链接组成
频道类型 链接组成
正常频道 https://t.me/频道名/消息ID
私密频道 https://t.me/c/频道名(10位纯数字)/消息ID
话题频道 https://t.me/频道名/话题ID/消息ID
私密话题频道 https://t.me/c/频道名(10位纯数字)/话题ID/消息ID
Telegram链接所有链接格式

"所有"指的是如果有合并发送为一组的文件,则给定一个链接,所有合并发送的文件会被全部下载。

"媒体"指的是用户在config.yaml文件中,通过download_type参数所设置的所需下载类型的媒体。

链接 实际频道名 消息ID 解释
https://t.me/TEST/111 TEST 111 下载该链接的所有媒体。
https://t.me/TEST/111?single TEST 111 下载该链接的对应的一个媒体。
https://t.me/TEST/111?comment=666 TEST 111 下载该链接的所有媒体的同时,下载该链接下方评论区里所有的媒体(前提该链接存在评论区,否则视为https://t.me/TEST/111处理)。
https://t.me/TEST/111?single&comment=666 TEST 111 下载该链接下方的评论区的对应的一个媒体。
https://t.me/c/1111111111/666 -1001111111111 666 下载该私密频道链接的所有媒体。
https://t.me/TEST/111/666 TEST 666 下载该话题链接的所有媒体。
https://t.me/c/1111111111/333/666 -1001111111111 666 下载该私密话题链接的所有媒体。

如何下载评论区的文件

复制的链接时,带?comment字段

通常在评论区复制任意一条消息链接即可。


评论区链接的下载行为规则的说明

标准链接(无?comment参数)
  • 仅下载消息正文内容(即频道/群组中直接发布的原始消息)。
  • 不包含评论区内容,即使原消息存在评论,也不会被纳入下载任务。
带?comment参数的链接
  • 下载消息正文 + 关联的全部评论区内容(完整会话结构)。
  • 若原消息无评论区(如频道消息或评论功能关闭),则仅下载消息正文内容,与无参数版本行为一致。

非下载评论区的推荐写法

如下表所示:

频道类型 链接
正常频道 https://t.me/xxx/111
私密频道 https://t.me/c/xxxxxxxxxx/111
话题频道 https://t.me/xxx/xxx/111
私密话题频道 https://t.me/c/xxxxxxxxxx/xxx/111

关于?single及?single&comment参数的下载行为说明

功能变更概述

自≥v1.5.8版本起,链接中包含?single或?single&comment参数时,系统将启用单文件下载模式。此模式专为以下场景设计与优化:

  • 解决≥1.5.8版本/listen_download当监听到合并发送的文件时,出现重复下载问题。
  • 用户需求,仅需从合并发送的多媒体组中提取特定单一文件。
  • 用户需求,仅需下载评论区中的单个指定媒体(避免评论区媒体过多时,迟迟下载不到想要的文件)。
参数行为详解
参数格式 下载范围 应用场景
xx?single 仅下载消息正文中的xx对应媒体文件 从合并图组/视频组提取单文件
?single&comment=xx 仅下载评论区中的xx所对应的媒体文件 获取评论区单独分享的图片/视频
版本兼容性说明
  • 此特性仅对≥v1.5.8版本生效。
  • 历史版本中这些参数可能被忽略,导致完整内容下载。
最佳实践建议
单一文件下载

当消息包含多个媒体文件时,使用标准链接附加?single参数可精准获取首个文件:

https://t.me/c/123456789/123?single
评论区单文件下载

需从评论区单独下载文件时,应采用复合参数格式:

https://t.me/c/123456789/123?single&comment=xx
参数互斥原则
  • 避免同时提交同一消息的完整版和单文件版链接(≥v2.0.8已针对重复链接导致的资源竞争问题进行自动处理)。
  • 单文件模式与评论区下载模式(?comment)不可混用。

2.5.软件更新教程

image

3.0.在生产环境中运行

推荐使用Python==3.13.2作为该项目环境(避免使用其他Python版本导致运行时出现报错)。

对于Windows用户

需自行安装python与git并配置环境变量。

git clone https://github.com/Gentlesprite/Telegram_Restricted_Media_Downloader.git
cd Telegram_Restricted_Media_Downloader
python -m pip install --upgrade pip
pip install -r requirements.txt
python main.py

对于Linux用户

克隆本项目并进入项目目录。

git clone https://github.com/Gentlesprite/Telegram_Restricted_Media_Downloader.git
cd Telegram_Restricted_Media_Downloader

更新pip版本(推荐)。

python3 -m pip install --upgrade pip

创建并使用虚拟环境(可选)。

python3 -m venv venv
source venv/bin/activate

安装程序运行所需依赖并等待全部安装完成。

pip3 install -r requirements.txt

运行程序(到这一步就安装完成并运行了,后面是注意事项)。

python3 main.py

注意事项

如果选择创建虚拟环境运行,在下次运行时也需要先激活虚拟环境。

在项目目录下,激活虚拟环境后再运行程序。

source venv/bin/activate
python3 main.py

如果提示没有安装pip使用如下命令进行安装:

sudo apt update
sudo apt-get install python3-pip

关于更新

在项目目录下打开终端使用如下命令拉取仓库当前的最新版本:

git pull

由于新版本可能使用了新的依赖,使用git pull拉取后,最好更新一下依赖(如果是虚拟环境请先激活再执行)。

pip3 install -r requirements.txt

4.0.运行前设置命令行参数(高阶用法)

[!NOTE] 自版本≥v1.8.3起:
用户可在运行前通过命令行参数对软件运行配置进行更多自定义设置。

点击展开

设置命令行运行参数需先在软件目录打开终端,或任意位置打开终端进入软件目录(经常使用建议配置环境变量)。

目前支持的命令行参数用法及解释如下表所示:

短参数 长参数 解释
-h --help 展示帮助
-v --version 展示版本信息
-q --quiet 跳过重新配置文件的确认提示
-c --config 设置用户配置文件的路径
-s --session 设置会话文件的路径
-t --temp 设置运行缓存的路径
-p --port 设置网页面板的端口

长参数与短参数最终结果一致。


4.1.参数

-h、–help

该参数用于展示帮助。

  • 对于生产环境用户(需要先完成前置步骤“3.0.在生产环境中运行”):

    python3 main.py -h
    
    python3 main.py --help
    
  • 对于Windows用户:

    TRMD.exe -h
    
    TRMD.exe --help
    
  • 对于Linux用户:

    ./TRMD -h
    
    ./TRMD --help
    

-v、–version

该参数用于展示版本信息。

  • 对于生产环境用户(需要先完成前置步骤“3.0.在生产环境中运行”):

    TRMD.exe -v
    
    TRMD.exe --version
    
  • 对于Windows用户:

    TRMD.exe -v
    
    TRMD.exe --version
    
  • 对于Linux用户:

    ./TRMD -v
    
    ./TRMD --version
    

-q、–quiet
使用须知
1.该参数用于跳过重新配置文件的确认提示。
2.用户配置文件缺少必要参数时,指定该参数无效。
3.该参数为一次性设置,不记忆。
  • 对于生产环境用户(需要先完成前置步骤“3.0.在生产环境中运行”):

    python3 main.py -q
    
    python3 main.py --quiet
    
  • 对于Windows用户:

    TRMD.exe -q
    
    TRMD.exe --quiet
    
  • 对于Linux用户:

    ./TRMD -q
    
    ./TRMD --quiet
    

-c、–config
使用须知
1.该参数用于设置用户配置文件的路径。
2.该参数旨在解决多个实例(多开)场景下,避免重复部署软件本体而设计的配置分离方案。
3.该参数需指定一个符合“2.3.配置文件说明(用户配置文件)”格式规范的文件,并且后缀名需为.yaml。
4.当指定的文件路径无效时,将使用软件默认设置。
5.该参数为一次性设置,不记忆。
  • 对于生产环境用户(需要先完成前置步骤“3.0.在生产环境中运行”):

    以Linux系统为例(Winodws系统同理),此处假设用户配置文件位于/home/username/files/example.yaml。

    python3 main.py -c /home/username/files/example.yaml
    
    python3 main.py --config /home/username/files/example.yaml
    
  • 对于Windows用户:

    此处假设用户配置文件位于C:\files\example.yaml。

    TRMD.exe -c C:\files\example.yaml
    
    TRMD.exe --config C:\files\example.yaml
    
  • 对于Linux用户:

    此处假设用户配置文件位于/home/username/files/example.yaml。

    ./TRMD -c /home/username/files/example.yaml
    
    ./TRMD --config /home/username/files/example.yaml
    

-s、–session

⚠️ 版本变更说明:

版本 说明
≥v1.8.5 -s、--session参数在设置后将被保存到用户配置文件的session_directory参数中,下次使用时无需重复指定,除非需要修改该设置。
≥v2.1.1 -s、--session指定的会话目录中会新增TRMDStorage.db数据库文件,用于保存网页面板的下载与上传记录,删除或迁移该文件仅影响网页记录,不影响账号登录。
使用须知
1.该参数用于设置会话文件的路径。
2.软件会在用户登录成功时后,默认在运行目录下生成sessions文件夹,用于保存当前账号信息,以便后续快速登录。
3.该参数旨在解决多账号登录场景下需手动重命名会话文件的问题,使用该参数用户可通过直接指定不同路径,选择对应账号进行登录。
4.该参数需指定一个文件夹,可包含已有的.session文件,指定为空文件夹或不存在时,登录后将在该路径自动生成会话文件。

README 内容过长,已截取前 64 KB。完整内容请前往 GitHub 仓库查看。

评论

暂无评论