转发机器人 的功能介绍和使用说明,请前往 GitHub 项目主页查看。
项目地址: AhFeil/extract_forward_tgbot: 存储转发给它的消息,并能推送到网页,方便查看编辑信息,附带拼接图片、视频转 GIF 功能 (github.com)
文章只会在机器人有大变动后更新,最新的参数以 GitHub 为准。
适用系统:最简安装只需要系统支持 Docker,文章中使用 Debian 系统
走通 Docker 部署预计时间:10 分钟
最简安装,Docker 安装 转发机器人
前置准备
- 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
- (可选)获取自己 Telegram 账户的 chat_id,不填就不能运行管理员命令
全复制并执行,一键创建工作目录
| myserve=“ef_tgbot” | |
| mkdir -p ~/myserve/$myserve && cd ~/myserve/$myserve && mkdir -p backup forward_message configs |
根据注释自定义下面的配置文件,然后复制一键即可保存到机器上
| cat > configs/config.yaml << EOF | |
| is_production: true | |
| chat_id: 2066666604 # 你的 tg 用户 ID,会作为管理员,不能为空,没有随便填 | |
| bot_token: 5366666619:AAGG3rvfly2comtechniqueTIzc8y5z2pY9xmY | |
| push_dir: https://forward.vfly2.eu.org/ # 推送路径,最简安装这里选择一个网络记事本的网址,这里使用我搭建的,可以不用改 | |
| # 下面的每一个都可以省略 | |
| special_channel: | |
| image: [woshadiao, shadiao_refuse] # 转发这里的频道的消息给机器人,机器人会接收视频和图片 | |
| process_file: | |
| gif_max_width: 300 # 视频转的 GIF 的最大宽度 | |
| video_max_size: 25 # 超过这个大小的视频不接收,单位是 MB | |
| EOF |

无须更改,执行保存 docker-compose.yml 到机器上
| cat > docker-compose.yml << EOF | |
| version: “3” | |
| services: | |
| tgbot: | |
| image: ahfeil/extract_forward_tgbot:latest | |
| container_name: efTGbot | |
| restart: always | |
| volumes: | |
| – ./configs:/ef_tgbot/configs | |
| – ./backup:/ef_tgbot/backup | |
| – ./forward_message:/ef_tgbot/forward_message | |
| EOF |
拉取镜像
| docker compose pull |
启动机器人(这时就可以在 Telegram 上试用机器人了)
| docker compose up -d |
如果有问题,用这个查看日志
| docker logs efTGbot |
关闭机器人
| docker compose down |
原生部署转发机器人
- 需要先部署 网页记事本 ,且假设其
_tmp目录位于/var/www/webnote/_tmp/,推荐参考本站文章:分享我使用两年的极简网页记事本 。下面的流程是按照它的「原生安装」进行的,Docker 安装下_tmp目录读写权限问题棘手,不过全用 root 倒也能运行。 - 注册一个 Telegram 机器人, 获得 token,请看 注册 Telegram Bot 和使用 Python 编写机器人
- (可选)获取自己 Telegram 账户的 chat_id
前置准备
推荐使用普通用户,这里假设用户名为 vfly2,并在家目录下的 pythonServe 放置工作目录。
创建目录 /home/vfly2/pythonServe :
| mkdir -p ~/pythonServe/ && cd ~/pythonServe/ |
拉取仓库(并创建备份和保存目录,这是必需的):
| git clone https://github.com/AhFeil/extract_forward_tgbot.git && | |
| cd extract_forward_tgbot && mkdir backup forward_message # 创建备份目录和保存目录 |
安装环境和依赖( Python versions 3.8+ )
| sudo apt update | |
| sudo apt install python3 python3-pip python-venv | |
| # 手动安装 ffmpeg ,检查安装情况 ffmpeg -version | |
| sudo apt install ffmpeg |
为系统安装中文字体,如果不使用“添加说明文字”功能,也可以不装。
下载字体文件
| curl -O https://raw.githubusercontent.com/gasharper/linux-fonts/master/simsun.ttc |
把字体文件放在一个合适的目录。一般来说,用户自定义的字体可以放在 ~/.fonts/(针对当前用户)或者 /usr/share/fonts/(对所有用户生效)这两个目录下。
| font_dir=/usr/share/fonts/chinese | |
| sudo mkdir -p $font_dir && sudo mv simsun.ttc $font_dir && cd $font_dir |
更新字体缓存,这样系统才能够识别和使用新的字体。
| sudo fc-cache -fv |
查看是否有添加成功
| fc-list :lang=zh |
安装
创建虚拟环境
| python3 -m venv .env |
激活虚拟环境
| source .env/bin/activate |
安装依赖的库
| pip install -r requirements.txt |
根据注释自定义下面的配置文件,然后复制一键即可保存到机器上
| cat > config.yaml << EOF | |
| is_production: true | |
| chat_id: 2111111114 # 你的 tg 用户 ID,会作为管理员,不能为空,没有随便填 | |
| bot_token: 6111111110:AAxxxxxvfly2xxxx9iGxxLa_atxxcomxuNU | |
| push_dir: /var/www/webnote/_tmp/ # 推送路径,这里使用同机器搭建的网络记事本 | |
| domain: https://forward.vfly2.eu.org/ # 网络记事本的网址,最后以 / 结尾 | |
| # path: # 如果是一个人用,可以在这里规定推送时的路径,也可以用 /set 命令实现 | |
| # 下面的每一个都可以省略 | |
| special_channel: | |
| image: [woshadiao, shadiao_refuse] # 转发这里的频道的消息给机器人,机器人会接收视频和图片 | |
| process_file: | |
| gif_max_width: 300 # 视频转的 GIF 的最大宽度 | |
| video_max_size: 25 # 超过这个大小的视频不接收,单位是 MB | |
| EOF |
先运行一下,测试机器人是否正常工作(可以在 Telegram 上向机器人转发消息,检查功能)
| python extract_forward_tgbot.py |
这时除了不能推送保存的消息到网页之外,其他功能应该都正常。不能推送是因为 vfly2 没有写入权限到
/var/www/webnote/_tmp/
设置权限
设置 /var/www/webnote/_tmp/ 权限为 775,组改成 vfly2,
| sudo chown www-data:vfly2 /var/www/webnote/_tmp | |
| sudo chmod 775 /var/www/webnote/_tmp |
且将该目录下新创建的文件默认权限设为 664 ,组为 vfly2
| sudo apt-get update && sudo apt-get -y install acl && | |
| sudo setfacl -d -m u:www-data:rwx,g:vfly2:rwx,o::r /var/www/webnote/_tmp/ |
这时候可以再运行一次上面的命令,应该就能够推送转存了。
使用 systemd 守护进程
| sudo vim /lib/systemd/system/extract_forward_tgbot.service |
根据实际情况,修改 WorkingDirectory、User、Group、ExecStart 这四个就可以了。
| [Unit] | |
| Description=extract_forward_tgbot Server | |
| After=network.target | |
| [Service] | |
| WorkingDirectory=/home/vfly2/pythonServe/extract_forward_tgbot # 修改为实际目录 | |
| User=vfly2 # 修改 | |
| Group=vfly2 # 修改 | |
| Type=simple | |
| ExecStart=/home/vfly2/pythonServe/extract_forward_tgbot/.env/bin/python /home/vfly2/pythonServe/extract_forward_tgbot/extract_forward_tgbot.py # 修改 | |
| ExecStop=/bin/kill -s HUP $MAINPID | |
| Environment=PYTHONUNBUFFERED=1 | |
| RestartSec=15 | |
| Restart=on-failure | |
| [Install] | |
| WantedBy=default.target |
| sudo systemctl daemon-reload |
| sudo systemctl enable –now extract_forward_tgbot |
| sudo systemctl status extract_forward_tgbot |
| sudo systemctl stop extract_forward_tgbot |
| sudo systemctl start extract_forward_tgbot |
迁移
只需要转移旧的数据文件 2 个和配置文件即可,在项目目录下的 forward_message 中
更新
重启机器人时,推荐先用
/shutdown命令,保存通过 /set 设置的参数,再重启。
先停止运行
| sudo systemctl stop extract_forward_tgbot | |
| cd ~/pythonServe/extract_forward_tgbot |
在工作目录下,用 Git 拉取最新版本:
| git pull |
然后重启(如果报错,估计是修改了其他依赖库,可进入虚拟环境,安装库)
| sudo systemctl start extract_forward_tgbot | |
| sleep 3 | |
| sudo systemctl status extract_forward_tgbot |