AstrBot 的 GZCTF 管理与播报插件,支持比赛查询、排行榜、题目分页、公告发布,以及一血/二血/三血、提示更新、上题等播报能力。
- 兼容旧版和新版 GZCTF 登录。
- 如果平台未启用
ApiEncryption,插件会直接使用明文密码登录。 - 如果平台启用了
ApiEncryption,插件会自动读取/api/config中的apiPublicKey,再按 GZCTF 当前的加密方式登录。 - 如果平台验证码是
HashPow,插件会自动求解。 - 如果平台验证码是
Cloudflare Turnstile,机器人无法自动通过,这种情况下需要平台侧关闭登录验证码,或改用别的认证方式。
gzctf_url:GZCTF 平台地址,例如https://gzctf.example.comgzctf_admin_account:管理员账号gzctf_admin_password:管理员密码
monitor_game_list:监控比赛列表,支持逗号、分号、换行或 JSON 列表default_games_limit:比赛列表默认显示条数default_rank_top_n:排行榜默认 TopNdefault_challenges_limit:题目列表每页条数feed_default_limit:每场比赛单次检测最多处理多少条新 noticefeed_notice_types:播报类型过滤(FirstBlood/SecondBlood/ThirdBlood/NewHint/NewChallenge/Normal)
feed_enable_blood:一血/二血/三血播报开关feed_enable_new_hint:提示更新播报开关feed_enable_new_challenge:新题上线播报开关feed_enable_normal_notice:普通公告播报开关
feed_auto_broadcast_enabled:是否开启自动主动播报feed_auto_interval_seconds:自动检测间隔(秒)feed_auto_targets:固定推送目标(可选)feed_trigger_on_reload_enabled:插件重载后自动触发一次检测并尝试推送
feed_auto_targets 支持格式:
group:123456789:推送到群private:123456789:推送到私聊123456789:简写,默认按群处理- 多个目标可用逗号、分号或换行分隔
另外支持通过命令动态控制群聊播报:
/gzctf open:开启当前群聊的主动播报/gzctf close:关闭当前群聊的主动播报
cheat_auto_handle_enabled:是否开启自动处理作弊队伍cheat_auto_handle_status:自动处理动作,支持Suspended或Rejectedcheat_auto_broadcast_enabled:是否开启封禁结果播报cheat_auto_targets:封禁播报目标,格式与feed_auto_targets相同
说明:
- 自动封禁基于 GZCTF 比赛监控里的作弊信息接口。
- 当前会同时处理
submitTeam和ownedTeam,也就是“提交了别人 flag 的队伍”与“被盗 flag 的队伍”都会被自动处理。 - 封禁播报与普通主动播报完全分离,不复用
/gzctf open、/gzctf close、feed_auto_targets或普通播报开关。 - 如果只开启
cheat_auto_handle_enabled而不开启cheat_auto_broadcast_enabled,插件只会执行自动处理并写日志,不会额外推送消息。
- 自动主动播报会按 notice 逐条发送,一条播报对应一条消息。
- 手动执行
/gzctf feed时,仍会把本轮检测结果合并成一段文本返回,便于人工查看。 NewHint在新版 GZCTF 中通常只自带题目名,不直接带提示正文。- 插件会尝试通过管理接口补全最新提示正文;如果补不到,会退化为“提示已更新”,而不是显示错误占位内容。
require_admin_for_write:写操作(发布公告、解锁队伍、添加提示)仅管理员可用require_admin_for_sensitive_read:敏感读取(例如show_disabled=true)仅管理员可用
推荐使用指令组:
/gzctf
/gzctf help
/gzctf games [比赛关键词]
/gzctf rank <比赛关键词或ID> [topN]
/gzctf challenges [比赛关键词] [page] [show_disabled=true/false]
/gzctf feed
/gzctf open
/gzctf close
/gzctf unlock <队伍名或ID>
/gzctf addhint <比赛关键词> <题目关键词> <提示内容>
/gzctf notice <比赛关键词> <公告内容>
中文别名:
/gzctf 帮助
/gzctf 比赛 [比赛关键词]
/gzctf 排行 <比赛关键词或ID> [topN]
/gzctf 题目 [比赛关键词] [page] [show_disabled=true/false]
/gzctf 播报
/gzctf 开启
/gzctf 关闭
/gzctf 解锁 <队伍名或ID>
/gzctf 提示 <比赛关键词> <题目关键词> <提示内容>
/gzctf 公告 <比赛关键词> <公告内容>
兼容旧指令:
/gzctf_help
/gzctf_games [比赛关键词]
/gzctf_rank <比赛关键词或ID> [topN]
/gzctf_challenges [比赛关键词] [page] [show_disabled=true/false]
/gzctf_feed
/gzctf_open
/gzctf_close
/gzctf_unlock <队伍名或ID>
/gzctf_addhint <比赛关键词> <题目关键词> <提示内容>
/gzctf_notice <比赛关键词> <公告内容>
- notice 去重状态会持久化到本地,重启后不重复播报
- 每次只会把“本次实际发出”的 notice 标记为已播报
- 超出单次上限的剩余 notice 会保留到下次继续播报,避免漏播
- 开启自动主动播报后,不需要手动反复触发
/gzctf feed