一个telegram文件自动转存机器人

发布于 2023-12-28  15.95k 次阅读


介绍

一个简单的自动转存文件的telegram机器人,直接将消息转发给机器人,机器人自动提取文件,不限速下载消息中所有文件到本地,然后调用rclone上传文件到云端,完成后回复"xx文件下载完成+alist等列表程序访问该文件的地址"的消息(10分钟后删除该条回复的消息)。需借助自建的telegram bot api,官方api有文件大小限制.

Github项目地址:tg-auto-install-bot

2025年11月更新:修复了telegram-bot-api大文件下载时间长导致request请求超时的bug;添加了调用yt-dlp下载油管、b站等视频的功能;优化了脚本逻辑。

文件保存路径与重命名

单文件消息:根目录下,按照video、document、audio、photo分类保存

多文件消息:media_group目录下,再创建一个以“标题+media_group_id”的子目录保存一条消息中的所有文件

文件重命名

  • 所有文件的文件名后缀前都会追加文件大小
  • 若原有文件名全部为英文字符或不存在,截取消息标题前40个字符为文件名,若标题也不存在,使用分类名为文件名

由于很多tg文件其实不存在文件名称,或者全为英文乱码,故强制开启文件重命名

使用方法

用户将消息转发给机器人或发送文件给机器人,机器人自动、提取下载消息中的文件

将机器人拉入群组,设置为管理员,机器人即可自动提取、下载所有新发布的或新转入群组的消息中的文件

查看Bot状态: 发送/ping或者/start命令,若机器人正常工作,会回复"Pong! 🏓",2秒后会删除消息

利用yt-dlp下载视频:发送/ytdlp ,后台自动下载上传,默认不开启该功能

工作流程图

安装&使用

安装python与rclone,安装以下python依赖

apt update
apt install rclone -y
apt install python3 python3-pip -y
pip3 install requests

如需要ytdlp功能,安装yt-dlp与ffmpeg

bash <(curl -L -s https://raw.githubusercontent.com/ershiyi21/myprogram/main/yt/yt_install.sh)
apt install ffmpeg -y

本地托管自己的telegram bot api,采用docker或者编译

不推荐使用官方api,使用官方api上传文件不能超过50MB,下载文件不能超过20MB,而且本脚本未对官方api适配,强制自建api,且api自建机器与脚本运行机器需相同

(1) docker

docker run -d -p 8081:8081 \
    --name=telegram-bot-api --restart=always \
    -v /var/lib/telegram-bot-api:/var/lib/telegram-bot-api \
    -e TELEGRAM_API_ID=<> \
    -e TELEGRAM_API_HASH=<> \
    -e TELEGRAM_LOCAL=TRUE \
    aiogram/telegram-bot-api:latest

docker目前无arm镜像,甲骨文arm等机器请自编译官方可执行程序【2024.08.29更新,x86与arm均有docker镜像了】;为了保持docker内“telegram-bot-api程序运行过程中保存相关文件的目录”与宿主机器内映射目录路径一样 ,"-v /var/lib/telegram-bot-api:/var/lib/telegram-bot-api "不能修改; TELEGRAM_API_ID与TELEGRAM_API_ID自己官方申请;注意,download_path与/var/lib/telegram-bot-api跨盘符会存在硬链接失败问题,导致脚本失效.

(2) 编译

借助github项目:Telegram Bot API编译可执行文件,针对不同系统,官方有详细步骤介绍

例如debian10+系统:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install make git zlib1g-dev libssl-dev gperf cmake clang-10 libc++-dev libc++abi-dev
git clone --recursive https://github.com/tdlib/telegram-bot-api.git
cd telegram-bot-api
rm -rf build
mkdir build
cd build
CXXFLAGS="-stdlib=libc++" CC=/usr/bin/clang-10 CXX=/usr/bin/clang++-10 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=.. ..
cmake --build . --target install
cd ../..
ls -l telegram-bot-api/bin/telegram-bot-api*

编译好后得到telegram-bot-api可执行文件,赋予运行权限:

chmod +x /path/to/telegram-bot-api

运行可执行文件telegram-bot-api,/var/lib/telegram-bot-api目录是telegram-bot-api程序运行过程中保存相关文件的目录,对于缓存到本机的文件,一般24h自动删除,如需要个人删除,直接删除/var/lib/telegram-bot-api文件夹,并且重启telegram-bot-api服务:

/path/to/telegram-bot-api --local --api-id=<> --api-hash=<> --dir /var/lib/telegram-bot-api

后台运行:

nohup /path/to/telegram-bot-api --local --api-id=<> --api-hash=<> --dir /var/lib/telegram-bot-api &

运行tg-auto-install-bot.py脚本

下载脚本到本地:

wget https://raw.githubusercontent.com/ershiyi21/myprogram/main/tg-auto-install-bot/tg-auto-install-bot.py

修改的变量,具体见脚本

bot_token = "11111:aaaaa"  # 替换为您的Telegram Bot的令牌
download_path = "/tmp/tgmedia/"  # 可不修改,文件硬链接位置,rclone上传时的文件中转地址,注意须与telegram-bot-api的文件下载位置【一般/var/lib/telegram-bot-api】位于同一硬盘,不然硬链接会失败
remote_path = "/media/qunhui/share/tg-down"  # rclone上传文件的远程路径,默认为rclone move,上传完成会删除本地文件 eg. /media/tg转存  onedrive:/
api_base_url = "http://127.0.0.1:8081/bot" # 不需要修改,实际的Telegram Bot Api请求地址
logging_file = "/tmp/tg-auto-install-bot.log" # 不需要修改,日志记录文件,实时查看日志最后100行,tail -f -n 100 /tmp/tg-auto-install-bot.log
allowed_user_ids = [1111, 2222,-3333,-4444]  # 允许的用户或者群组ID列表,多个用英文逗号隔开
cleanup_interval = 3600  # 不需要修改,定义清理旧数据的时间间隔(以秒为单位),不需要修改
remote_url = "http://url/....path=%2Ftg%E4%B8%8B%E8%BD%BD" ## alist等列表程序,远程云盘对应remote_path的目录
max_retries=100   # telegram-bot-api远端请求次数,每一次为30s,超过次数则该文件下载失败
retry_delay=5    # telegram-bot-api远端请求间隔时间,搭配max_retries使用,如下载失败,调高max_retries即可

运行脚本:

python3 /path/to/tg-auto-install-bot.py

后台运行:

nohup python3 /path/to/tg-auto-install-bot.py &

“一花一世界,一叶一天堂。君掌盛无边,刹那成永恒。”