Files
WechatOnCloud/.github
Gloridust 91c591f1dd feat(tg-bot): 入群验证(加法验证码)拦广告号
群里广告号变多。原思路是「进群后删广告 + 提示 + 3 天禁言/移除」,但事后删除
救不回来——广告在 5~15 分钟轮询间隔里已经被所有人看到,而广告号本就发完即走。

改用 Telegram 原生的「入群审批」:待批准的用户看不到群、发不了消息,于是
【轮询延迟不再影响安全性】,事后补救那一整套(删消息/禁言/移除)全部不需要。

流程:chat_join_request → 私聊出一道加法选择题 → 答对 approve、连错 3 次 decline。

- 无状态:正确答案与已答错次数编码进 callback_data(实测最长 31 字节,上限 64),
  沿用本脚本「不引入任何持久化」的既有风格
- 只认本人作答,他人点按钮不放行
- 单条更新处理失败不中断整批,否则后续更新也确认不掉、下次全量重放
- allowed_updates 补 chat_join_request / callback_query
  ——未订阅的类型会被 Telegram 直接丢弃,不是排队等取
- 重复放行(作业被取消导致更新重放)时 Telegram 报错属正常,不当失败处理

可行性前提已查官方文档确认:ChatJoinRequest.user_chat_id 允许机器人在 24 小时内
私聊该用户(Bot API 6.5 初版写的是 5 分钟,后已放宽),远大于 cron 的 5~15 分钟
延迟,故本方案在 Actions 上成立,无需 webhook/服务器。

验证方式:用桩 fetch 驱动真实脚本跑通全流程——出题(4 选项恰 1 正确、答案与题面
一致)、答对 approve、答错换新题、错满 3 次 decline、他人代答被拒。

启用还需:群开「新成员需批准」+ 机器人有 can_invite_users 管理员权限(已写进 workflow 注释)。
2026-07-28 23:50:39 +08:00
..