Catbox Uploader Bot
ata
发布于 2022-03-09 / 0 阅读 / 0 评论 / 0 点赞

Catbox Uploader Bot

Catbox Uploader Bot

CatboxLitterbox 是免费的文件传输服务,所有文件以直链形式分享,十分方便。此机器人可以将 Telegram 的文件上传到上述服务。

Demo | GitHub

Features

  • 支持图片、音频、视频、文件、贴纸
  • 存储服务支持 Catbox(单文件限制 200 MB,永久储存)和 Litterbox(单文件限制 1 GB,文件会过期)
  • 多语言支持,可添加翻译文件,自动导入
  • 可自定义默认语言、默认服务、Litterbox 文件过期时限、说明文字、同时上传文件的数量
  • 用户可使用自己的 Catbox token 上传文件,可删除文件

开发过程小记

碎碎念

最初是使用 Bot API 写的,有非常严重的限制,即只能下载最大 20 MB 的文件。22 年初用基于 MTProto API 的 GramJS(Telethon 套壳)重写了一遍,加了一些自己的新想法。

初次接触 MTProto API 顿时晕头转向,毕竟是客户端直接使用的协议,复杂程度和套壳 + 简化过的 Bot API 完全不可同日而语(Bot API 是构建在 MTProto API 之上的,使用 HTTP(S),经由 MTProto 后端和 TG 服务端通信;MTProto API 也称 Telegram API,客户端使用 MTProto 协议与服务端直接通信)。数据格式和方法也完全不同。不过好处就是通信效率和速度比 Bot API 高非常多、传输文件没有大小限制(指和客户端相同,单文件最大 2000 MB),然后 rate limit 貌似要低一些。

下载

比较简单的下载方式是直接使用现成的 method,不过会把 Buffer 全部塞内存里,似乎要等下载完成后才能写进文件。小鸡内存比较吃紧,所以尝试了一下实现分片下载。原理是使用 getFileHashQuery 方法一次向服务端请求数个 chunk 的 offset、长度和对应 hash,向服务端请求文件(Buffer 形式),验证 hash 后写进 writeStream。不过这种方法经常会遇到 disconnect 问题,一旦遇上还没法重新连接,只能切换回现成 method。不知道是请求太频繁还是 GramJS 的问题还是我太菜的缘故,待解决。

上传

上传部分,使用了 Node.js 的依赖 catbox.moe,没什么特别想讲的。

Log & 黑名单

提供这类服务,log 是必要的,否则无法保证用户上传的内容是否遵守 ToS ,若违反了可能会导致 Catbox / Litterbox 消失,或者被封 IP……(部署的时候发现 GCP 香港 VPS 上传文件一直超时,就联系了站长,说因滥用严重屏蔽了我国的 IP 段😂)下载成功的文件会转发到日志频道,附带必要的信息,如 UID 和上传结果。


评论