Skip to content

wuwu001/gzctf-AstrBot-QQ

Repository files navigation

astrbot_plugin_gzctf

AstrBot 的 GZCTF 管理与播报插件,支持比赛查询、排行榜、题目分页、公告发布,以及一血/二血/三血、提示更新、上题等播报能力。

兼容说明

  • 兼容旧版和新版 GZCTF 登录。
  • 如果平台未启用 ApiEncryption,插件会直接使用明文密码登录。
  • 如果平台启用了 ApiEncryption,插件会自动读取 /api/config 中的 apiPublicKey,再按 GZCTF 当前的加密方式登录。
  • 如果平台验证码是 HashPow,插件会自动求解。
  • 如果平台验证码是 Cloudflare Turnstile,机器人无法自动通过,这种情况下需要平台侧关闭登录验证码,或改用别的认证方式。

必填配置

  • gzctf_url:GZCTF 平台地址,例如 https://gzctf.example.com
  • gzctf_admin_account:管理员账号
  • gzctf_admin_password:管理员密码

常用配置

  • monitor_game_list:监控比赛列表,支持逗号、分号、换行或 JSON 列表
  • default_games_limit:比赛列表默认显示条数
  • default_rank_top_n:排行榜默认 TopN
  • default_challenges_limit:题目列表每页条数
  • feed_default_limit:每场比赛单次检测最多处理多少条新 notice
  • feed_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:自动处理动作,支持 SuspendedRejected
  • cheat_auto_broadcast_enabled:是否开启封禁结果播报
  • cheat_auto_targets:封禁播报目标,格式与 feed_auto_targets 相同

说明:

  • 自动封禁基于 GZCTF 比赛监控里的作弊信息接口。
  • 当前会同时处理 submitTeamownedTeam,也就是“提交了别人 flag 的队伍”与“被盗 flag 的队伍”都会被自动处理。
  • 封禁播报与普通主动播报完全分离,不复用 /gzctf open/gzctf closefeed_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

About

GZCTF对接的QQ AstrBot插件

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages

Generated from Soulter/helloworld