前言
订阅了挺多的网盘影视 tg 频道,但是打开 tg 还是觉得麻烦,于是就简单让 cursor 糊了个实时更新订阅的几个网盘资源频道消息。
项目地址:https://github.com/DEKVIW/tgmonitor
demo:https://pan.pkll.de
项目介绍:
基于 Python + Telethon + Streamlit 的 Telegram 频道消息监控与管理系统。
- 自动监听网盘影视资源分享类 Telegram 频道,只保存包含网盘链接的消息
- 支持主流网盘类型:阿里云盘、百度网盘、夸克网盘、天翼云盘、115 网盘、123 云盘、UC 网盘、迅雷
- 推荐/适配频道(可自定义扩展):
频道名 |
频道名 |
频道名 |
频道名 |
BaiduCloudDisk |
tianyirigeng |
Aliyun_4K_Movies |
NewQuark |
XiangxiuNB |
shareAliyun |
bdwpzhpd |
Lsp115 |
tyypzhpd |
SharePanBaidu |
QuarkFree |
alyp_1 |
vip115hot |
QukanMovie |
|
|
下面是详细的部署和使用教程
电报api获取步骤
环境与依赖版本建议
- 推荐 Python 版本:3.10 或 3.11(3.12 也可,优先用 3.10/3.11,兼容性最佳)
- 推荐 PostgreSQL 版本:13、14 或 15
- 依赖安装:已在 requirements.txt 中声明,
pip install -r requirements.txt
一键安装。
首次 Telethon 登录
方法一:推荐 - 使用 session 获取脚本
运行专门的 session 获取脚本:
按提示输入 API 凭据:
- TELEGRAM_API_ID:你的 Telegram API ID
- TELEGRAM_API_HASH:你的 Telegram API Hash
按提示输入手机号、验证码
- 手机号格式:
+国家代码手机号
(如:+8613812345678
)
登录成功后,session 文件会自动保存为 tg_monitor_session.session
方法二:直接运行监控服务登录
本地运行监控服务进行登录:
1
| python -m app.core.monitor
|
按提示输入手机号、验证码
登录成功后,session 文件会自动保存为 tg_monitor_session.session
Session 文件说明:
- 文件名:
tg_monitor_session.session
- 包含 Telegram 登录凭据,无需重复登录
- 请妥善保管,不要泄露给他人
- 如果 session 失效,删除文件重新登录即可
- 把文件放到项目根目录
Docker 部署说明
1. 克隆项目
1 2
| git clone https://github.com/DEKVIW/tgmonitor.git cd docker
|
2. 环境准备
.env 环境配置:
1 2 3 4 5 6
| TELEGRAM_API_ID=你的API_ID TELEGRAM_API_HASH=你的API_HASH DATABASE_URL=postgresql://tg_user:password@db:5432/tg_monitor DEFAULT_CHANNELS=频道1,频道2 LOG_LEVEL=INFO SECRET_SALT=your_secret_salt_key_here
|
⚠️ 重要提示:
SECRET_SALT 密钥:用于用户登录验证,建议使用随机生成的强密钥
- 可以使用项目提供的脚本生成:
python generate_secret.py
- 可以使用在线工具生成:https://www.random.org/strings/
- 或使用命令生成:
openssl rand -hex 32
- 示例:
SECRET_SALT=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef1234
数据库密码包含特殊字符时的转义处理
如果数据库密码包含特殊字符(如 #
、@
、%
、&
、+
、=
、!
、$
、*
、(
、)
、[
、]
、{
、}
、|
、\
、:
、;
、"
、'
、<
、>
、,
、/
、?
),需要进行 URL 编码转义。在线 URL 编码工具:Online URL Encoder
示例:
- 原始密码:
1j7wxLn#ZTlNZ#3tpkwF
- 转义后:
1j7wxLn%23ZTlNZ%233tpkwF
(#
转义为 %23
)
完整示例:
1 2 3
| # 原始密码:1j7wxLn#ZTlNZ#3tpkwF DATABASE_URL=postgresql://tg_user:1j7wxLn%23ZTlNZ%233tpkwF@localhost:5432/tg_monitor SECRET_SALT=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef1234
|
3. 构建与初始化数据库
1 2 3
| cd docker docker-compose up -d db docker-compose run --rm monitor python -m app.scripts.init_db
|
注意: 此命令会自动创建默认管理员用户(用户名: admin,密码: admin123)
4. 启动服务
查看服务状态和日志:
1 2 3 4 5 6 7 8 9 10 11
| docker-compose ps
docker-compose logs -f monitor
docker-compose logs -f web
docker-compose logs -f db
|
5. 其它注意事项
快速部署(系统环境)
1. 克隆项目
1 2
| git clone https://github.com/DEKVIW/tgmonitor.git cd tgmonitor
|
2. 配置数据库(系统环境)
1 2 3 4 5 6 7 8
| sudo apt update sudo apt install postgresql postgresql-contrib -y sudo -u postgres psql
CREATE DATABASE tg_monitor; CREATE USER tg_user WITH PASSWORD 'your_password'; GRANT ALL PRIVILEGES ON DATABASE tg_monitor TO tg_user; \q
|
3. 创建虚拟环境并安装依赖
1 2 3
| python3 -m venv tgmonitor-venv source tgmonitor-venv/bin/activate pip install -r requirements.txt
|
4. 配置环境变量
编辑 .env
文件,示例:
1 2 3 4 5 6
| TELEGRAM_API_ID=你的API_ID TELEGRAM_API_HASH=你的API_HASH DATABASE_URL=postgresql://tg_user:your_password@localhost:5432/tg_monitor DEFAULT_CHANNELS=频道1,频道2 LOG_LEVEL=INFO SECRET_SALT=your_secret_salt_key_here
|
5. 初始化数据库表
1
| python -m app.scripts.init_db
|
注意: 此命令会自动创建默认管理员用户(用户名: admin,密码: admin123)
6. 启动服务
第一步:前台测试运行
先正常启动服务进行测试,确认稳定后再后台运行:
1 2 3 4 5
| python -m app.core.monitor
streamlit run app/web/web.py
|
测试要点:
第二步:后台稳定运行
测试稳定后,使用后台运行:
1 2 3 4 5
| nohup python -m app.core.monitor > data/monitor.log 2>&1 &
nohup streamlit run app/web/web.py > data/web.log 2>&1 &
|
查看运行状态:
1 2 3 4 5 6
| ps aux | grep python
tail -f data/monitor.log tail -f data/web.log
|
使用命令参考
说明:以下命令提供 Docker 和系统两种版本,部署完成后可根据需要选择使用。
频道管理命令
列出频道
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --list-channels
python -m app.scripts.manage --list-channels
|
添加频道
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --add-channel 频道名1 频道名2
python -m app.scripts.manage --add-channel 频道名1 频道名2
|
删除频道
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --del-channel 频道名
python -m app.scripts.manage --del-channel 频道名
|
修改频道名
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --edit-channel 旧频道名 新频道名
python -m app.scripts.manage --edit-channel 旧频道名 新频道名
|
频道诊断
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --diagnose-channels
python -m app.scripts.manage --diagnose-channels
|
用户管理命令
创建默认用户
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --create-default
python -m app.scripts.init_users --create-default
|
添加新用户
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --add-user 用户名 密码 [姓名] [邮箱]
python -m app.scripts.init_users --add-user 用户名 密码 [姓名] [邮箱]
|
修改密码
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --change-password 用户名 新密码
python -m app.scripts.init_users --change-password 用户名 新密码
|
修改用户名
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --change-username 旧用户名 新用户名
python -m app.scripts.init_users --change-username 旧用户名 新用户名
|
编辑用户信息
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --edit-user 用户名 [姓名] [邮箱]
python -m app.scripts.init_users --edit-user 用户名 [姓名] [邮箱]
|
查看所有用户
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --list-users
python -m app.scripts.init_users --list-users
|
删除用户
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --remove-user 用户名
python -m app.scripts.init_users --remove-user 用户名
|
数据维护命令
网盘链接去重
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --dedup-links
python -m app.scripts.manage --dedup-links
|
快速网盘链接去重
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --dedup-links-fast [批次大小]
python -m app.scripts.manage --dedup-links-fast [批次大小]
|
去重功能说明:
链接检测命令
检测最近 N 小时的链接
1 2 3 4 5 6 7 8 9 10 11
| docker-compose run --rm monitor python -m app.scripts.manage --check-links [小时数] [并发数]
python -m app.scripts.manage --check-links [小时数] [并发数]
docker-compose run --rm monitor python -m app.scripts.manage --check-links 24
docker-compose run --rm monitor python -m app.scripts.manage --check-links 48 10
|
检测所有历史链接
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --check-all-links [并发数]
python -m app.scripts.manage --check-all-links [并发数]
|
时间段检测
1 2 3 4 5 6 7 8 9 10
| docker-compose run --rm monitor python -m app.scripts.manage --check-period [时间段] [并发数]
python -m app.scripts.manage --check-period [时间段] [并发数]
docker-compose run --rm monitor python -m app.scripts.manage --check-period today docker-compose run --rm monitor python -m app.scripts.manage --check-period week 5 docker-compose run --rm monitor python -m app.scripts.manage --check-period 2024-01-15:2024-01-20
|
查看检测统计
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --link-stats
python -m app.scripts.manage --link-stats
|
查看失效链接
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --show-invalid-links [数量]
python -m app.scripts.manage --show-invalid-links [数量]
|
系统管理命令
查看帮助
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --help
python -m app.scripts.manage --help
|
查看用户管理帮助
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.init_users --help
python -m app.scripts.init_users --help
|
快速上手示例
首次使用流程
1 2 3 4 5 6 7 8 9 10 11
| docker-compose run --rm monitor python -m app.scripts.manage --list-channels
docker-compose run --rm monitor python -m app.scripts.manage --add-channel 频道名1 频道名2
docker-compose run --rm monitor python -m app.scripts.manage --dedup-links
docker-compose run --rm monitor python -m app.scripts.manage --check-links 1 3
|
查看帮助: python -m app.scripts.manage --help
链接检测高级功能
查看中断记录
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --show-interrupted
python -m app.scripts.manage --show-interrupted
|
清空检测数据
1 2 3 4 5
| docker-compose run --rm monitor python -m app.scripts.manage --clear-link-check-data
python -m app.scripts.manage --clear-link-check-data
|
清空旧检测数据
1 2 3 4 5 6 7 8 9 10
| docker-compose run --rm monitor python -m app.scripts.manage --clear-old-link-check-data [天数]
python -m app.scripts.manage --clear-old-link-check-data [天数]
docker-compose run --rm monitor python -m app.scripts.manage --clear-old-link-check-data 7 docker-compose run --rm monitor python -m app.scripts.manage --clear-old-link-check-data 30 docker-compose run --rm monitor python -m app.scripts.manage --clear-old-link-check-data 60
|
systemd 服务管理
为了方便启动和停止项目,可以使用 systemd。也可不做,用手动也行。
监控服务
创建文件:/etc/systemd/system/tg-monitor.service
内容:
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Unit] Description=TG Monitor Service After=network.target
[Service] User=root WorkingDirectory=/root/data/python/tg-monitor Environment="PATH=/root/data/python/tg-monitor/tgmonitor-venv/bin" ExecStart=/root/data/python/tg-monitor/tgmonitor-venv/bin/python -m app.core.monitor Restart=always
[Install] WantedBy=multi-user.target
|
Web 服务
创建文件:/etc/systemd/system/tg-monitor-web.service
内容:
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Unit] Description=TG Monitor Web Service After=network.target
[Service] User=root WorkingDirectory=/root/data/python/tg-monitor Environment="PATH=/root/data/python/tg-monitor/tgmonitor-venv/bin" ExecStart=/root/data/python/tg-monitor/tgmonitor-venv/bin/streamlit run app/web/web.py --server.port 8501 --server.address 0.0.0.0 Restart=always
[Install] WantedBy=multi-user.target
|
启动和管理服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # 重新加载 systemd 配置 sudo systemctl daemon-reload
# 启用服务(开机自启) sudo systemctl enable tg-monitor sudo systemctl enable tg-monitor-web
# 启动服务 sudo systemctl start tg-monitor sudo systemctl start tg-monitor-web
# 重启服务 sudo systemctl restart tg-monitor sudo systemctl restart tg-monitor-web
# 查看服务状态 sudo systemctl status tg-monitor sudo systemctl status tg-monitor-web
# 查看日志(推荐用 journalctl) sudo journalctl -u tg-monitor -f sudo journalctl -u tg-monitor-web -f
# 停止服务 sudo systemctl stop tg-monitor sudo systemctl stop tg-monitor-web
|
条目去重
相同的网盘链接只保存最新更新的条目信息,遇到更新间隔不超过 1 分钟保留网盘标签最多的条目。
systemd 定时去重和 crontab 二选一即可
systemd 定时去重
新建服务文件 /etc/systemd/system/tg-dedup.service
1 2 3 4 5 6 7
| [Unit] Description=TG Monitor Dedup Service
[Service] Type=oneshot WorkingDirectory=/root/data/python/tg-monitor ExecStart=/root/data/python/tg-monitor/tgmonitor-venv/bin/python -m app.scripts.manage --dedup-links
|
新建定时器 /etc/systemd/system/tg-dedup.timer
1 2 3 4 5 6 7 8 9
| [Unit] Description=Run TG Monitor Dedup daily
[Timer] OnCalendar=*-*-* 02:00:00 Persistent=true
[Install] WantedBy=timers.target
|
启用并启动定时器
1 2 3 4
| sudo systemctl daemon-reload sudo systemctl enable tg-dedup.timer sudo systemctl start tg-dedup.timer sudo systemctl status tg-dedup.timer
|
crontab
1
| (crontab -l 2>/dev/null; echo "0 * * * * cd /root/data/python/tg-monitor && /root/data/python/tg-monitor/tgmonitor-venv/bin/python -m app.scripts.manage --dedup-links-fast >> /root/data/python/tg-monitor/dedup.log 2>&1") | crontab -
|
数据库备份和恢复
备份
项目已提供智能备份脚本 scripts/backup_db.sh
,需要根据需求修改备份的目标目录:
1 2 3 4 5 6 7 8 9
| # 给脚本添加执行权限 chmod +x scripts/backup_db.sh
# 手动运行备份(推荐在项目根目录运行) ./scripts/backup_db.sh
# 或者在scripts目录运行 cd scripts ./backup_db.sh
|
使用前提:确保项目根目录存在 .env
文件,且包含正确的 DATABASE_URL
配置
添加定时任务:
1 2 3 4 5
| # 在项目根目录添加定时任务(推荐) (crontab -l 2>/dev/null; echo "0 3 * * * cd /root/data/python/tg-monitor && ./scripts/backup_db.sh >> /mnt/Google/backup/tg-monitor/backup.log 2>&1") | crontab -
# 或者使用绝对路径(备选方案) (crontab -l 2>/dev/null; echo "0 3 * * * /root/data/python/tg-monitor/scripts/backup_db.sh >> /mnt/Google/backup/tg-monitor/backup.log 2>&1") | crontab -
|
恢复
项目已提供智能恢复脚本 scripts/restore_db.sh
,完全自动化,无需手动配置:
1 2 3 4 5 6 7 8 9 10 11 12
| # 给脚本添加执行权限 chmod +x scripts/restore_db.sh
# 恢复数据库(推荐在项目根目录运行) ./scripts/restore_db.sh tg_monitor_20240607_091557.sql.gz
# 或者指定完整路径 ./scripts/restore_db.sh /mnt/Google/backup/tg-monitor/tg_monitor_20240607_091557.sql.gz
# 或者在scripts目录运行 cd scripts ./restore_db.sh ../backup/tg_monitor_20240607_091557.sql.gz
|
使用前提:确保项目根目录存在 .env
文件,且包含正确的 DATABASE_URL
配置
注意事项:恢复操作会覆盖现有数据库中的所有数据,请谨慎操作!