如何以编程方式将文件上传到 Telegram?

如何以编程方式将文件上传到 Telegram?

由于 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>

相关内容