mirror of
https://github.com/Gloridust/WechatOnCloud.git
synced 2026-08-30 18:21:27 -07:00
群里广告号变多。原思路是「进群后删广告 + 提示 + 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 注释)。