预览中的速度已经达到了代理的限制,同时速度取决于你是否是付费用户
Telegram
下载上传都有速率限制,此工具采用多线程并发,可以加速下载上传速度。Telegram
群组目前可以设置禁止下载转发,此工具不受此限制,可以下载限制内容。
适用于:Linux
MacOS
Windows
GitHub
项目:https://github.com/iyear/tdl
你可以从 releases 下载预编译的二进制文件,或者使用下面的方法安装:
tdl
将会被安装到 /usr/local/bin/tdl
,同时脚本也可以用于升级 tdl
。
# 安装最新版本 curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/iyear/tdl/master/scripts/install.sh | sudo bash
# 使用 `ghproxy.com` 加速下载 curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/iyear/tdl/master/scripts/install.sh | sudo bash -s -- --proxy # 安装指定版本 curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/iyear/tdl/master/scripts/install.sh | sudo bash -s -- --version VERSION
# 借助电脑上已有的官方桌面客户端登录 tdl login -n quickstart # 如果设置了 passcode, 需要指定 passcode tdl login -n quickstart -p YOUR_PASSCODE # 如果路径非默认路径,需要指定路径 tdl login -n quickstart -d /path/to/TelegramDesktop # 如果希望使用电话验证码登录,使用以下命令 tdl login -n quickstart --code tdl dl -n quickstart -u https://t.me/telegram/193
根据你的 shell 运行相应的命令,并在所有会话中启用 shell 补全:
# bash echo "source <(tdl completion bash)" >> ~/.bashrc # zsh echo "source <(tdl completion zsh)" >> ~/.zshrc # fish echo "tdl completion fish | source" >> ~/.config/fish/config.fish # powershell Add-Content -Path $PROFILE -Value "tdl completion powershell | Out-String | Invoke-Expression"
该文档其他部分不会写基础设置,因此请根据需要添加基础设置。
每个命名空间代表一个 Telegram 账号
你应该在每次执行命令时设置命名空间:
tdl -n iyear # 或 export TDL_NS=iyear # 推荐做法
tdl --proxy socks5://localhost:1080 # 或 export TDL_PROXY=socks5://localhost:1080 # 推荐做法
tdl --ntp pool.ntp.org # 或 export TDL_NTP=pool.ntp.org # 推荐做法
Note 如果网络环境较差请设置更高的超时时间或 0(无限)
tdl --reconnect-timeout 1m30s # or export TDL_RECONNECT_TIMEOUT=1m30s
当你第一次使用 tdl 时,你需要登录以获取一个 Telegram 会话
这将降低被封禁的风险,但尚未经过验证:
tdl login # 如果设置了 passcode, 需要指定 passcode tdl login -p YOUR_PASSCODE # 如果路径非默认路径,需要指定路径 tdl login -d /path/to/TelegramDesktop
如果你需要更高的下载速度,请设置更高的
threads
,但是不要随意设置过大的threads
。
tdl dl -u https://t.me/tdl/1 -u https://t.me/tdl/2
tdl dl -f result1.json -f result2.json
tdl dl \ -u https://t.me/tdl/1 -u https://t.me/tdl/2 \ -f result1.json -f result2.json
tdl dl -u https://t.me/tdl/1 -t 8 -s 524288 -l 4
Note 如果文件扩展名与 MIME 类型不匹配,tdl 将重命名文件以使用正确的扩展名。
副作用:例如
.apk
文件,它将被重命名为.zip
。
tdl dl -u https://t.me/tdl/1 --rewrite-ext
Note 判断依据:文件名(不包括扩展名)和大小相同
tdl dl -u https://t.me/tdl/1 --skip-same
tdl dl -u https://t.me/tdl/1 -d /path/to/dir
Note 不同的顺序会影响“恢复下载”功能
# 按照时间倒序下载文件(从最新到最旧) tdl dl -f result.json --desc # 默认按照时间顺序下载文件(从最旧到最新) tdl dl -f result.json
Note If you plan to download a lot of media, you may prefer to do this within a takeout session. Takeout sessions let you export data from your account with lower flood wait limits. 如果你想下载大量的媒体文件,推荐在 takeout session 下进行。Takeout session 可以让你以更低的接口限制导出你的账户数据。
tdl dl -u https://t.me/tdl/1 --takeout
Note 扩展名只与文件名匹配,而不与 MIME 类型匹配。因此,它可能无法按预期工作。
白名单和黑名单不能同时使用。
# 白名单过滤,只下载扩展名为 `.jpg` `.png` 的文件 tdl dl -u https://t.me/tdl/1 -i jpg,png # 黑名单过滤,下载除了 `.mp4` `.flv` 扩展名的所有文件 tdl dl -u https://t.me/tdl/1 -e mp4,flv
请参考 模板指南 以获取更多详细信息。
tdl dl -u https://t.me/tdl/1 \
--template "{{ .DialogID }}_{{ .MessageID }}_{{ .DownloadDate }}_{{ .FileName }}"
# 恢复下载 tdl dl -u https://t.me/tdl/1 --continue # 重新下载 tdl dl -u https://t.me/tdl/1 --restart
tdl dl --debug --ntp pool.ntp.org \ -n iyear --proxy socks5://localhost:1080 \ -u https://t.me/tdl/1 -u https://t.me/tdl/2 \ -f result1.json -f result2.json \ --rewrite-ext --skip-same -i jpg,png \ -d /path/to/dir --desc \ -t 8 -s 262144 -l 4
部分指令和高级选项与 下载 相同
收藏夹
,并排除指定的文件扩展名:tdl up -p /path/to/file -p /path/to/dir -e .so -e .tmp
tdl up -p /path/to/file -t 8 -s 524288 -l 4
tdl up -p /path/to/file --rm
# CHAT_INPUT 可接受例子: `@iyear`, `iyear`, `123456789`(会话 ID), `https://t.me/iyear`, `+1 123456789` # 空会话意味着 `收藏夹` tdl up -p /path/to/file -c CHAT_INPUT
tdl up --debug --ntp pool.ntp.org \ -n iyear --proxy socks5://localhost:1080 \ -p /path/to/file -p /path/to/dir \ -e .so -e .tmp \ -t 8 -s 262144 -l 4 -c @iyear
备份或恢复你的数据
tdl-backup-<time>.zip
):tdl backup
# 或者指定备份文件路径
tdl backup -d /path/to/backup.zip
tdl recover -f /path/to/backup.zip
tdl chat ls # 输出为 JSON 格式 tdl chat ls -o json # 指定使用表达式引擎的过滤器,默认值为 `true`(匹配所有) # 如果你对表达式引擎有任何问题,请发起新的 ISSUE # 表达式引擎文档: https://expr.medv.io/docs/Language-Definition # 列出所有可用的过滤器字段 tdl chat ls -f - # 列出所有名称包含 "Telegram" 的频道 tdl chat ls -f "Type contains 'channel' && VisibleName contains 'Telegram'" # 列出所有设置了话题功能的群组 tdl chat ls -f "len(Topics)>0"
tdl
下载# 将导出会话中的所有媒体文件 # CHAT_INPUT 可接受例子: `@iyear`, `iyear`, `123456789`(会话 ID), `https://t.me/iyear`, `+1 123456789` # 导出所有含媒体文件的消息 tdl chat export -c CHAT_INPUT # 导出包含非媒体文件的所有消息 tdl chat export -c CHAT_INPUT --all # 导出 Telegram MTProto 原生消息结构,可用于调试 tdl chat export -c CHAT_INPUT --raw # 从指定 Topic 导出 # 你可以从以下方式获取 topic id: # 1. 消息链接: https://t.me/c/1492447836/251011/269724(251011 为 topic id) # 2. `tdl chat ls` 命令 tdl chat export -c CHAT_INPUT --topic TOPIC_ID # 从指定频道文章的讨论区导出 tdl chat export -c CHAT_INPUT --reply MSG_ID # 导出指定时间范围内的消息 tdl chat export -c CHAT_INPUT -i 1665700000,1665761624 # 或 tdl chat export -c CHAT_INPUT -T time -i 1665700000,1665761624 # 导出指定消息 ID 范围内的消息 tdl chat export -c CHAT_INPUT -T id -i 100,500 # 导出最近 N 条消息(计数受过滤器影响) tdl chat export -c CHAT_INPUT -T last -i 100 # 使用由表达式引擎提供的过滤器,默认为 `true`(即匹配所有) # 如果你对表达式引擎有任何问题,请发起新的 ISSUE # 表达式引擎文档: https://expr.medv.io/docs/Language-Definition # 列出所有可用的过滤器字段 tdl chat export -c CHAT_INPUT -f - # 匹配所有 zip 文件,大小 > 5MiB,且消息浏览量 > 200 的最近 10 条消息 tdl chat export -c CHAT_INPUT -T last -i 10 -f "Views>200 && Media.Name endsWith '.zip' && Media.Size > 5*1024*1024" # 指定输出文件路径,默认为 `tdl-export.json` tdl chat export -c CHAT_INPUT -o /path/to/output.json # 同时导出消息内容 tdl chat export -c CHAT_INPUT --with-content
可以通过设置环境变量来避免每次都输入相同的参数值。
注意:所有环境变量的值都比命令行参数的优先级低。
命令行参数含义: flags
环境变量 | 命令行参数 |
---|---|
TDL_NS | -n/--ns |
TDL_PROXY | --proxy |
TDL_DEBUG | --debug |
TDL_SIZE | -s/--size |
TDL_THREADS | -t/--threads |
TDL_LIMIT | -l/--limit |
TDL_NTP | --ntp |
TDL_RECONNECT_TIMEOUT | --reconnect-timeout |
TDL_TEMPLATE | dl --template |
你的账号数据会被存储在 ~/.tdl
目录下。
日志文件会被存储在 ~/.tdl/log
目录下。
前往 docs 查看完整的命令文档。
如何将封禁的风险降至最低?
threads
和 size
。Q: 为什么输入命令后没有任何反应?为什么日志中有 'msg_id too high' 的错误?
A: 检查是否需要使用代理(使用 proxy
参数);检查系统的本地时间是否正确(使用 ntp
参数或校准系统时间)
如果都没有用,使用 --debug
参数再次运行,然后提交一个 issue 并将日志粘贴到 issue 中。
Q: Telegram 桌面客户端在使用 tdl 后无法正常工作?
A: If your desktop client can't receive messages, load chats, or send messages, you may encounter session conflicts.
A: 如果桌面客户端无法接收消息、加载聊天或发送消息,那么可能是会话冲突导致的。
你可以尝试使用 tdl
重新登录,并在 ”logout“ 部分选择 YES
,这将分离 tdl
和桌面客户端的会话。
Q: 如何将会话迁移到另一台设备?
A: 你可以使用 tdl backup
和 tdl recover
命令来导出和导入会话。更多细节请参阅 迁移 部分。
Q: 这是一种滥用行为吗?
A: 不是。下载和上传速度受服务器端限制。由于官方客户端的下载速度通常不会达到最高限制,所以开发了这个工具来实现最高速度的下载。
Q: 这会导致封禁吗?
A: 不确定。所有操作都不涉及敏感的行为,例如主动向其他人发送消息。但是,使用长期使用的帐户进行下载和上传操作更安全。
-----------------------------------------
按照系统下载相应版本并解压
# 下载 Linux_64 版本
wget https://github.com/iyear/tdl/releases/download/v0.5.5/tdl_Linux_64bit.tar.gz
# 解压
tar -zxvf tdl_Linux_64bit.tar.gz
# 赋予执行权限
chmod +x tdl
# 查看帮助
./tdl -h
下载 Linux_arm64 版本
wget https://github.com/iyear/tdl/releases/download/v0.5.5/tdl_Linux_arm64.tar.gz
# 解压
tar -zxvf tdl_Linux_arm64.tar.gz
# 赋予执行权限
chmod +x tdl
# 查看帮助
./tdl -h
命令中的sunpma
修改为自己的电报ID
# 设置用户空间
./tdl -n sunpma
# 登陆Telegram
./tdl login -n sunpma
输入用户ID
后再输入电话号码,最后在已登录的Telegram
中接受验证码后输入即可;
# 下载帮助
./tdl dl -h
# 下载链接,每多一个链接就多一个-u,多线程-t,默认8线程,设置代理--proxy
./tdl dl url -n sunpma -u https://t.me/sunpma/888 -u https://t.me/sunpma/999 -t 16 --proxy
socks5://localhost:1080
默认上传到收藏夹
# 上传帮助
./tdl up -h
# 上传路径-p,包括文件-e
./tdl up -n sunpma --proxy socks5://localhost:1080 -p /path/to/file -e .so -t 16