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

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


介绍

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

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

文件保存路径与重命名

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

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

文件重命名

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

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

使用方法

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

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

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

工作流程图

安装&使用

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

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

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

不推荐使用官方api,使用官方api上传文件不能超过50MB,下载文件不能超过20MB

(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自己官方申请;注意使用docker情况下,跨盘符可能存在硬链接问题.

(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,/home/tg-local-api目录是telegram-bot-api程序运行过程中保存相关文件的目录,对于缓存到本机的文件,一般24h自动删除:

/path/to/telegram-bot-api --local --api-id=<> --api-hash=<> --dir /home/tg-local-api

后台运行:

nohup /path/to/telegram-bot-api --local --api-id=<> --api-hash=<> --dir /home/tg-local-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 = ""  # 替换为您的Telegram Bot的令牌
download_path = "/home/tgmedia"  # 下载文件的本地保存路径,若开启rclone上传,即文件中转地址
enable_upload = True  # 是否开启rclone上传,根据需要设置为True或False,rclone上传默认为"move",即rclone上传后会删除本地文件
remote_path = "盘符:路径"  # rclone上传文件的远程路径
api_base_url = "http://127.0.0.1:8081/bot" # 实际的Telegram Bot Api请求地址
logging_file = "/tmp/tg-auto-install-bot.log" # 日志记录文件
allowed_user_ids = [aaa,bbb,-ccc]  # 允许的用户或者群组ID列表,多个用英文逗号隔开
cleanup_interval = 3600  # 定义清理旧数据的时间间隔(以秒为单位)
remote_url = "https://xxx.com/odrive" ## alist等列表程序,远程云盘对应remote_path的目录

运行脚本:

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

后台运行:

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

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