之前文章里 CTFd 机器人是用爬虫脚本跟 go-cqhttp 结合实现的,爬虫爬取 CTFd 的 api 中的新增解题记录,然后访问 go-cqhttp 的服务发送消息,有个问题是爬虫经常挂掉,不太稳定。
在 CTFdapiv1challenges.py 的 ChallengeAttempt 类中,有一处是根据 chalenges 插件返回的正确与否,选择是否向数据库写入 solves 的记录,在这里直接加一句访问机器人服务的请求就行了,类似这样,别忘了在上面 import 一下 requests
但是每个人或者每次修改机器人服务地址以及自定义语句的时候都得修改源码重启服务不太优雅,可以在后台留一个配置页面,直接在后台设置相关的参数。这些东西可以在 config 数据表里面存放,用 get_config 函数取就行,config 这个表就是留了一些平台配置相关的信息
机器人服务需要有以下几个参数:
机器人服务url,字段:boturl
发送的消息,字段:bottext
是否启用机器人,字段:bot
在 CTFdviews.py 里面找个位置,在平台初始化时创建这几个字段,这样以来数据库里面就有了 bot 相关的记录了,如果是已经初始化了,直接在数据库添加这三个字段就行了
然后对后台前端代码进行修改,通过新增一个 bot.html 来新增一个配置页面,首先是 CTFdthemesadmintemplatesconfig.html 中需要增加一个选项
下面也要对应 include 进来
bot.html 放在 configs 文件夹下面,路径为:
CTFdthemesadmintemplatesconfigsbot.html
代码如下:
<div role="tabpanel" class="tab-pane config-section active" id="bots">
<form method="POST" autocomplete="off" class="w-100">
<div class="form-group">
<label for="bot-url">
机器人地址<br>
<small class="form-text text-muted">
地址中带好参数名只留消息内容供平台拼接
</small>
<small class="form-text text-muted">
例如:http://127.0.0.1:5700/send_group_msg?group_id=xxxxxx&message=
</small>
</label>
<input class="form-control" id='bot-url' name='boturl' type='text'>
</div>
<div class="form-group">
<label for="bot-text">
消息内容<br>
<small class="form-text text-muted">
格式:恭喜%s做出题目%s,默认第一个参数为用户名,第二个参数为题目名称
</small>
</label>
<input class="form-control" id='bot-text' name='bottext' type='text'>
</div>
<div class="form-group">
<label for="botof">
是否开启机器人
</label>
<div>
<select class="form-control custom-select" id="botof" name="bot">
<option value=0>
关闭
</option>
<option value=1>
开启
</option>
</select>
</div>
</div>
<button type="submit" class="btn btn-md btn-primary float-right">更新</button>
</form>
</div>
后台页面就可以对他们进行设置啦
原文始发于微信公众号(陈冠男的游戏人生):给CTFd加个机器人配置接口
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论