![如何以编程方式将文件上传到 Telegram?](https://linux22.com/image/1572888/%E5%A6%82%E4%BD%95%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E5%B0%86%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%B0%20Telegram%EF%BC%9F.png)
由于 Telegram 是一个无限云服务,我将其用作辅助备份位置。我想自动执行此操作,这样我就不必记住每个月都执行此操作(在过去的两年中,我几乎错过了每月第二次备份)。
但我找不到不使用点击宏来自动化任何 Telegram 客户端的方法(我想让它在后台静默运行):
./Telegram --help
除了打开程序外不执行任何操作。- 我无法确定
argv
变量从哪里开始main 方法,所以我不知道是否还有控制台参数。 - 机器人无法访问我的文件系统(这是一件好事)。
我可以使用 7z 轻松地将我想要的文件自动打包到 1.5GB 的存档中,但我不知道如何实际发送它们。有没有不使用点击宏的方法?
我使用的是 Debian 9.5 并使用来自 telegram.org 的官方 Linux 客户端。
答案1
我找到了解决方案!官方客户端可能不允许这样做(所有已知的命令行参数都非正式记录这里),但对于 Linux 和 Mac(可能还有 Windows 上的 Linux 子系统),有一个名为“tg”的非官方 Telegram 命令行界面:https://github.com/vysheng/tg
它的描述中没有提到它也可以发送文件,但在Github 问题有人写道有这个send_file
函数。一般来说,它没有很好的文档记录,但用它调用--help
并输入help
程序内部会提供很多信息,其余的可以通过摆弄参数和尝试不同的东西来弄清楚。
这是我用这种方法想出的解决方案:
准备
- 按照自述文件所述安装 tg。由于存在错误,它在 Debian 上无法立即运行,但正如此错误报告评论,安装
libssl1.0-dev
是解决该错误的一种方法:sudo apt install libssl1.0-dev
在./configure
和之间执行make
。 - 使用您的 Telegram 帐户登录:
bin/telegram-cli
要启动交互式程序,请输入电话号码(带有国家代码,所以在我的情况下以 开头+49
),输入登录代码。 - 现在使用另一个 Telegram 客户端在目标聊天中发送消息(或者在那里接收消息)。这会将聊天的名称添加到程序的内部聊天列表中。如果存在多个同名的聊天,它似乎会选择最近添加的聊天。我还没有找到通过 ID 向聊天发送消息的方法。
设置就是这样,quit
退出程序。
以编程方式上传文件
现在可以通过send_file
向程序发出命令来上传文件--execute
,这使得程序执行该命令然后自动退出:
/path/to/tg/bin/telegram-cli --exec 'send_file <chat> <filename>'
<chat>
是聊天的名称。
<filename>
是文件的路径。
/path/to/tg
应该很明显。
示例用法
我将使用类似下面的方法将使用 p7zip 创建 Google Drive 文件夹的备份上传到 Telegram:
for filename in ~/drive_backup/drive.zip.*; do ~/tg/bin/telegram-cli --exec 'send_file Backup_chat '"$filename"; done
这会将drive.zip.
文件夹中名称以“ ”开头的所有文件(.001、.002 等)上传~/drive_backup
到 Telegram 聊天“Backup_chat”。
答案2
您可以使用以下方式将加密备份上传到 Telegram 云PGP图谱。它使用gpg
加密,允许您上传任何大小的文件而无需手动拆分;从 0.2 版开始,它甚至允许您备份 YouTube 视频和频道。当然,它具有数据库文件导入/导出功能。
答案3
尝试
telegram-desktop -sendpath <fullpath>