🤖 一个现代化的 Telegram 智能验证机器人,既可以用作群组加群验证,通过人机验证自动管理群组成员申请,也提供了完整的 RESTful API 接口,可供第三方 Telegram 程序调用,实现多用途的人机验证功能,为各种需要人机验证的场景提供安全、可靠的验证服务。
- 🔐 安全验证 - 集成多种人机验证服务,有效防止机器人
- ⚡ 自动处理 - 验证通过后自动批准用户加群
- 🌐 Mini Web App - 美观的Telegram Mini Web App界面
- 🏗️ 可扩展架构 - 支持多种验证码服务,易于扩展
- 📊 管理功能 - 完整的统计和管理命令
- 🐳 容器化部署 - Docker支持,一键部署
- 🔧 高性能 - 基于Python 3.13 + aiogram + FastAPI
- 🔌 外部API - 提供RESTful API接口,支持第三方Bot集成和多用途验证
| 驱动 | 描述 | 配置要求 |
|---|---|---|
| hCaptcha | 隐私友好的人机验证服务 | site_key, secret_key |
| Cap.js | 基于Proof-Of-Work的验证码解决方案 | server_url, site_key, secret_key |
| Turnstile | Cloudflare的免费人机验证服务 | site_key, secret_key |
- 🔄 自动切换 - 根据配置自动选择验证码服务
- 🎨 统一界面 - 所有驱动使用相同的用户界面
- ⚙️ 灵活配置 - 支持独立配置每个验证码服务
- 🔧 易于扩展 - 基于抽象接口,轻松添加新驱动
- Docker & Docker Compose
# 下载配置文件
mkdir tguard && cd tguard
wget https://github.com/SideCloudGroup/TGuard/raw/refs/heads/main/config.example.toml -O config.toml
wget https://github.com/SideCloudGroup/TGuard/raw/refs/heads/main/docker-compose.yml
# 编辑配置文件,填入你的密钥
nano config.toml
# 启动服务
docker compose up -d编辑 config.toml 文件,参考 config.example.toml 中的详细注释进行配置:
- Bot Token: 从 @BotFather 获取
- 验证码服务: 选择 hCaptcha 或 Cap.js,并填入相应密钥
- 数据库: 默认使用 PostgreSQL,可根据需要调整
- API域名: 更新为你的实际域名
- 将机器人添加到群组
- 给机器人管理员权限
- 开启群组的"批准新成员"功能
- 用户申请加群 → Bot接收到join request
- 发送验证链接 → 用户收到Mini Web App链接
- 完成人机验证 → 用户在Web App中通过验证码
- 自动批准入群 → 验证成功后自动加入群组
POST /api/v1/verify- 提交验证GET /api/v1/verification-status/{token}- 查询验证状态GET /api/v1/captcha-config- 获取验证码配置
TGuard 提供了外部 API 接口,允许其他 Telegram Bot 通过 API 创建验证请求,实现多用途的验证功能。
在 config.toml 中配置:
[api]
enable = true # 启用外部API
api_key = "your-secret-api-key" # 设置API密钥POST /api/verification/create- 创建验证请求- 认证: 需要在请求头中提供
X-API-Key: your-secret-api-key - 请求体:
{ "user_id": 123456789 } - 响应:
{ "token": "verification-token", "verification_url": "https://example.com/verify?token=...", "expires_at": "2025-01-01T12:00:00" } - 说明:
- 验证链接和Token有效期为10分钟
- 验证完成后,如果请求类型为API且chat_id有效,将自动执行approve操作
- 验证链接通过Telegram Mini Web App打开,用户完成验证后,可通过token查询验证状态
- 认证: 需要在请求头中提供
外部API适用于以下场景:
- 第三方Bot集成: 其他Telegram Bot可以通过API创建验证请求
- 多用途验证: 不仅限于群组加群验证,可用于任何需要人机验证的场景
- 统一验证服务: 作为独立的验证服务,为多个应用提供验证能力
GET /health- 基础健康检查GET /health/detailed- 详细健康检查
GET /verify?token={token}- 验证页面GET /- 主页
TGuard/
├── src/
│ ├── bot/ # Telegram Bot
│ │ ├── handlers/ # 消息处理器
│ │ └── main.py # Bot入口
│ ├── api/ # FastAPI后端
│ │ ├── routes/ # API路由
│ │ ├── services/ # 业务服务
│ │ └── main.py # API入口
│ ├── database/ # 数据库
│ │ ├── models.py # 数据模型
│ │ ├── operations.py # 数据库操作
│ │ └── connection.py # 连接管理
│ ├── captcha/ # 验证码服务
│ │ ├── base.py # 抽象接口
│ │ ├── hcaptcha.py # hCaptcha实现
│ │ ├── cap.py # Cap.js实现
│ │ └── factory.py # 工厂模式
│ ├── config/ # 配置管理
│ └── utils/ # 工具函数
├── templates/ # HTML模板
├── static/ # 静态文件
├── database/ # 数据库脚本
├── config.toml # 配置文件
├── requirements.txt # Python依赖
├── docker-compose.yml # Docker配置
└── Dockerfile # Docker镜像
TGuard采用抽象接口设计,轻松支持新的验证码服务:
from src.captcha.base import CaptchaProvider, CaptchaVerificationResult
class YourCaptchaProvider(CaptchaProvider):
@property
def provider_name(self) -> str:
return "your_captcha"
async def verify(self, response: str, **kwargs) -> CaptchaVerificationResult:
# 实现验证逻辑
# 返回 CaptchaVerificationResult 对象
pass
def get_frontend_config(self) -> Dict[str, Any]:
# 返回前端配置
# 包含验证码服务所需的所有配置
pass- 在
src/captcha/目录下创建新的驱动文件 - 继承
CaptchaProvider基类并实现必要方法 - 在
src/captcha/factory.py中注册新驱动 - 在
src/config/settings.py中添加配置支持 - 更新前端模板以支持新的验证码服务
- 用户信息、申请时间、验证状态
- 处理状态:pending/approved/rejected/expired
- 验证令牌、过期时间、验证结果
- IP地址、用户代理等安全信息
- 群组配置、超时设置、消息模板
# 运行健康检查
curl http://localhost:8000/health
# 测试验证码配置
curl http://localhost:8000/api/v1/captcha-config欢迎提交Issues和Pull Requests!
MIT License - 详见 LICENSE 文件
⚡ TGuard - 让Telegram群组管理更简单、更安全!