Telegram 转发机器人 的安装步骤

转发机器人 的功能介绍和使用说明,请前往 GitHub 项目主页查看。

项目地址: AhFeil/extract_forward_tgbot: 存储转发给它的消息,并能推送到网页,方便查看编辑信息,附带拼接图片、视频转 GIF 功能 (github.com)
文章只会在机器人有大变动后更新,最新的参数以 GitHub 为准。

适用系统:最简安装只需要系统支持 Docker,文章中使用 Debian 系统

走通 Docker 部署预计时间:10 分钟

最简安装,Docker 安装 转发机器人

前置准备

  1. 注册一个 Telegram 机器人, 获得 token
  2. (可选)获取自己 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

Alt Text
无须更改,执行保存 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

原生部署转发机器人

  1. 需要先部署 网页记事本 ,且假设其 _tmp 目录位于 /var/www/webnote/_tmp/ ,推荐参考本站文章:极简网页记事本 。下面的流程是按照它的「原生安装」进行的,Docker 安装下 _tmp 目录读写权限问题棘手,不过全用 root 倒也能运行。
  2. 注册一个 Telegram 机器人, 获得 token
  3. (可选)获取自己 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<span> </span>命令,保存通过 /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