TLG_JoinCaptchaBot动画视频验证码揭秘:Manim实时生成与视频池管理策略
TLG_JoinCaptchaBot动画视频验证码揭秘:Manim实时生成与视频池管理策略
【免费下载链接】TLG_JoinCaptchaBotTelegram Bot to verify if users joining a group are human. The Bot sends a captcha challenge to each new user and removes those who fail to solve it within a specified time.项目地址: https://gitcode.com/gh_mirrors/tl/TLG_JoinCaptchaBot
TLG_JoinCaptchaBot 是一款 Telegram 入群验证码机器人(Join Captcha Bot),用于验证新加入群聊的用户是否为真人。它的最大亮点之一,是用 Manim 数学动画引擎实时生成动画视频验证码,并通过"视频池"预生成策略让每次入群验证毫秒级响应。本文带你拆解这套动画视频验证码的生成原理、视频池管理机制,以及如何按需调优配置。
为什么用动画视频验证码 🎬
传统文本验证码(数字、算式、图片)已被成熟的 OCR 和打码平台大量破解。而 Manim 生成的动画视频验证码由连续运动的图形与字符组成,动态画面让机器识别难度大幅提升,同时真人只需看一遍动画就能快速读出答案,体验友好。
TLG_JoinCaptchaBot 内置多种验证码模式,其中video(动画视频)是默认模式,与nums(数字)、math(算式)、poll(投票)、hex(十六进制)、ascii等模式可随时按群切换,也可随机混合出题,防止脚本针对性破解。
Manim 实时生成动画验证码的原理 💡
机器人并不自己渲染动画,而是依赖 requirements.txt 中锁定的manim-captcha(1.2.2)组件。它是基于 Manim 社区版封装的验证码生成库,核心类CaptchaAutoGenerator负责自动化完成"出题 → 动画 → 渲染成片"全流程。
在 src/join_captcha_bot.py 第 181 行附近,机器人实例化了一个视频验证码生成器:
- 传入视频存放目录(
CAPTCHAS_DIR_VIDEO) - 传入补货间隔(
TIME_VIDEO_GEN_INTERVAL_S,默认 600 秒) - 传入视频池上限(
MAX_NUM_VIDEO_CAPTCHAS,默认 100 条)
生成器会在后台线程周期性工作:检查池中视频数量是否低于阈值,不足时自动调用 Manim 场景渲染新的验证码视频并追加进池子。也就是说,Manim 的渲染始终发生在后台,与用户入群事件解耦——这是"实时生成"背后的关键设计。
视频池管理策略:为什么不是按需生成? ⏱️
Manim 渲染一段动画视频需要数秒甚至更久,如果等用户入群后再临时渲染,验证码迟迟发不出来,体验很差。TLG_JoinCaptchaBot 的解法是视频池 + 定期补货:
| 配置项 | 默认值 | 作用 |
|---|---|---|
CAPTCHABOT_MAX_NUM_VIDEO_CAPTCHAS | 100 | 视频池最大容量,池内始终囤着可直接下发的视频 |
CAPTCHABOT_TIME_VIDEO_GEN_INTERVAL_S | 600 | 后台检查/补货间隔(秒),即每 10 分钟盘点一次池子 |
这套策略的好处:
- 即时响应:用户入群时直接从池里
get_captcha()取一条现成视频,几乎零延迟; - 削峰填谷:渲染压力被摊平到后台周期任务中,不会在群爆入时集中卡顿;
- 防耗尽:池容量有上限,补货间隔可控,既不会无限占满磁盘,也能保证高峰期有货可发。
相关默认值定义在 src/settings.py,并由 src/constants.py 统一解析(还支持通过CAPTCHABOT_MAX_NUM_VIDEO_CAPTCHAS、CAPTCHABOT_TIME_VIDEO_GEN_INTERVAL_S等环境变量覆盖,方便 Docker 部署时注入)。
视频验证码下发全流程 📤
在 src/join_captcha_bot.py 的send_captcha_video函数中,完整的下发逻辑相当稳健:
- 取题:从视频池获取一条验证码,拿到视频文件与对应答案;
- 发送:以
captcha.mp4名义把视频发到群里,附带的说明文字做了 1024 字符截断保护(视频 caption 上限),支持"双语模式"自动追加英文提示; - 重试:发送失败最多重试 5 次,应对网络抖动;
- 降级兜底:若 5 次均失败,自动降级为图片验证码重新出题,确保用户始终能完成验证,不会卡死在入群流程;
- 风控联动:验证期间临时限制该用户发送图片、视频等媒体消息,配合 URL 消息删除策略,进一步压住机器刷屏。
发送成功后,答案、超时时间、待清理消息 ID 一并写入用户验证状态,等待用户在限时内回复正确答案。
如何调整视频验证码配置 🛠️
所有关键参数都集中在 src/settings.py,按需修改即可:
- 想要更低的视频消耗:调小
CAPTCHABOT_MAX_NUM_VIDEO_CAPTCHAS(池上限); - 想更快补货:调小
CAPTCHABOT_TIME_VIDEO_GEN_INTERVAL_S(如 300 秒); - 想换默认模式:修改
CAPTCHABOT_INIT_CAPTCHA_MODE(默认"video")。
💡 提示:视频池文件存放在
CAPTCHABOT_CAPTCHAS_DIR(默认src/data/captchas)下,磁盘紧张时记得定期清理该目录。
部署注意:Manim 环境依赖 ⚙️
Manim 渲染依赖系统级图形库,Linux 部署前需先安装前置依赖(见 README 安装说明):build-essential、libcairo2-dev、libpango1.0-dev等。拿到代码后,一条命令即可完成环境初始化:
git clone https://gitcode.com/gh_mirrors/tl/TLG_JoinCaptchaBot cd TLG_JoinCaptchaBot make setup make start日常运维同样由 Makefile 接管:make status查状态、make stop停止服务。生产环境推荐使用 systemd 常驻,或直接使用项目提供的 docker/Dockerfile 构建容器(配套 docker/README.md),Manim 依赖已包含在镜像构建流程中,省去手动装库的麻烦。
小结
TLG_JoinCaptchaBot 的动画视频验证码 =Manim 后台渲染+视频池预生成+发送失败自动降级。这套"生成与下发解耦"的设计,既保证了入群验证的低延迟体验,又把 Manim 这种重型渲染开销稳稳消化在后台。对于想自建群组防机器人方案的你,这套视频池管理思路也值得借鉴。
【免费下载链接】TLG_JoinCaptchaBotTelegram Bot to verify if users joining a group are human. The Bot sends a captcha challenge to each new user and removes those who fail to solve it within a specified time.项目地址: https://gitcode.com/gh_mirrors/tl/TLG_JoinCaptchaBot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
