Skip to content
This repository was archived by the owner on Apr 12, 2026. It is now read-only.

Latest commit

 

History

146 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

有些人真的是恬不知耻,开源给你用了还要被骂,爱咋咋地吧,后续更新将不再公开

icon

CheckIn

简单易用的入群测试系统

Static Badge Static Badge

简介

CheckIn 是一个Web入群测试系统,用于为需要入群门槛的群聊提供入群测试,以保证群内成员的水平合格。


功能

  • 记录
    • 答题记录

将会记录每一次的答题情况

可查看

  • QQ号码 由答题者输入,不会被校验是否存在及是否为所有者本人
  • 头像 根据QQ号获取
  • 生成时间
  • 过期时间
  • 提交时间
  • 抽取到的题目
  • 提交的数据
  • 分数
  • 结果
    • 请求记录

将记录每一个请求

可查看

  • Request headers
  • Request attributes
  • Response headers
  • SessionID
  • IP地址 支持IPV4和IPV6
  • 潜在的异常信息和堆栈
  • 自定义首页及结果内容

支持Markdown

  • 分区题库

简单易用,功能强大

支持自定义题目内容限制(字数、图片、选项等)

题目内容支持Markdown

支持单个拖拽、批量操作

题目分区为多对多关系

目前提供选择题、题组。

未来计划加入

  • 填空题
  • 动态生成试题

根据用户选择分区、必选分区(可配置选择范围)动态生成试题

可配置抽取策略以及补全策略

可配置必选分区、可选分区

可配置某些分区的特殊限制

可配置用户注册策略

  • 自动校验

根据答题者的答案自动校验,无需人工干预,可自定义任意多个等级配置不同返回信息。

可配置评分方式

  • 多用户和权限控制

支持多用户,可自由添加和删除用户。供群友共同贡献题库

可通过用户组控制用户权限

包括但不限于

  • 删改自己或他人的题目
  • 添加分区
  • 修改设置
  • 用户管理
  • QBot API

可使用QBot接入RestAPI以实现自动进群审核


特色

  • 动态生成答题,隐藏题目id,防止刷题,爆破题库
  • 分区答题,自由度高
  • 多用户支持,权限控制细化,更改冲突提醒,共建题库
  • 多分数级别支持,划分层次
  • 设置多样,后台管理页面配置简易,可自定义程度高
  • 后台管理页面通信采用 WebSocket ,实时数据更新
  • 响应式前端设计,适配各种尺寸的设备

截图

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png 11.png 12.png 13.png 14.png 15.png 16.png 17.png 18.png 19.png 20.png 21.png 22.png 23.png 24.png 25.png


技术栈

  • SpringBoot 和 Spring系列框架等 后端
  • VUE 等 前端

试运行 ( DEMO )

无需任何操作,直接使用如下命令运行

java -jar checkIn-x.x.x.jar

预期行为:将会在内存中创建临时数据库,关闭服务器后销毁

若需体验常规存储模式(文件模式)请参考下文搭建教程中的更换数据库步骤

可在下方 Api 及端点处找到管理入口

初始用户 super admin 或 10000

密码 114514


搭建教程

  1. 连接MYSQL并创建check_in数据库
  2. 在jar包所在位置下创建application.properties并填入以下内容

由于添加了 demo 支持,需要手动指定数据库提供方及url

spring.datasource.url=jdbc:mysql://localhost:3306/check_in?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=[your username]
spring.datasource.password=[your password]

如何更换 数据库名 或 数据库服务器

更改application.properties中的

spring.datasource.url

eg.

spring.datasource.url=jdbc:mysql://localhost:3306/checkIn?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai

内嵌支持的数据库

MySQL

spring.datasource.url=jdbc:mysql://localhost:3306/check_in?characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false

H2Database (文件模式)

spring.datasource.url=jdbc:h2:file:./check_in;MODE=MySQL
spring.datasource.username=root
spring.datasource.password=root

  1. 运行jar包,将会自动生成数据库及初始数据

需要Java21

注意:此时需要命令行主目录在jar包所在目录下

以cmd为例,若jar包在C:\checkIn\checkIn-x.x.x.jar下,则需要在cmd中输入

cd C:\checkIn\

或者参考网上其他修改springboot properties配置目录的方法

java -jar checkIn-x.x.x.jar

初始用户 super admin

密码 114514

API及端点

  • 答题 8080:/checkIn/exam/
  • 管理 8080:/checkIn/manage/ 8080:/checkIn/login/
  • QBot API 8080:/checkIn/api/qualify/

QBot API POST

Headers

Token: 在高级设置中生成的json web token

Body

{
    "qq": 123456789
}

response

失败示例(用户未答题)
{
    "result": "examData not found",
    "type": "error"
}
成功示例1(答题通过)
{
    "examData": {
        "id": "4fb9ec45-bffa-402e-92ff-078b993eb303",
        "qqNumber": 10001,
        "questionAmount": 10,
        "status": "SUBMITTED",
        "examResult": {
            "qq": 10001,
            "score": 100.0,
            "correctCount": 10,
            "halfCorrectCount": 0,
            "wrongCount": 0,
            "questionCount": 10,
            "message": "[markdown text1]",
            "level": "通过",
            "levelId": "6aa0dad5-10c5-4d50-9d03-bff7ff669e02",
            "colorHex": "#67C23A",
            "examDataId": "4fb9ec45-bffa-402e-92ff-078b993eb303",
            "showCreatingAccountGuide": false,
            "signUpCompletingType": null
        },
        "generateTime": "2025-02-11 23:03:45",
        "submitTime": "2025-02-11 23:03:58",
        "expireTime": "2025-02-18 23:03:45"
    },
    "level": "通过",
    "levelId": "6aa0dad5-10c5-4d50-9d03-bff7ff669e02",
    "type": "success"
}
成功示例2(答题未通过)
{
   "examData": {
       "id": "9e2b4566-33c5-4279-9b76-0140926f5cab",
       "qqNumber": 10002,
       "questionAmount": 10,
       "status": "SUBMITTED",
       "examResult": {
           "qq": 10002,
           "score": 0.0,
           "correctCount": 0,
           "halfCorrectCount": 0,
           "wrongCount": 10,
           "questionCount": 10,
           "message": "[markdown text2]",
           "level": "未通过",
           "levelId": "3325af76-e7e4-4c8f-a981-8f4c35e8261b",
           "colorHex": "#F56C6C",
           "examDataId": "9e2b4566-33c5-4279-9b76-0140926f5cab",
           "showCreatingAccountGuide": false,
           "signUpCompletingType": null
       },
       "generateTime": "2025-02-11 23:05:54",
       "submitTime": "2025-02-11 23:06:03",
       "expireTime": "2025-02-18 23:05:54"
   },
   "level": "未通过",
   "levelId": "3325af76-e7e4-4c8f-a981-8f4c35e8261b",
   "type": "success"
}

部分字段说明

  • type: "success"|"error"

对于成功获取到记录时

部分由于内部数据结构而在某些情况下值相同的字段

  • examData.qqNumber, examData.examResult.qq: 均为 QQ 号,在获取未完成的测试记录时 examData.examResult.qq 为 -1
  • examData.questionAmount, examData.examResult.questionCount: 均为抽取题目数量,在获取未完成的测试记录时 examData.examResult.questionCount 为 -1
  • examData.id, examData.result.examDataId: 均为答题记录的内部 id, 在获取未完成的测试记录时 examData.result.examDataId 为 null
  • level, examData.result.level: 均与评级设置中的不同等级名称对应,在获取未完成的测试记录时为 null
  • levelId, examData.result.levelId: 均与评级设置中的不同等级 id 对应,机器人判断应优先使用该字段,在获取未完成的测试记录时为 null

一些枚举类字段

  • examData.status: "ONGOING"(进行中) | "SUBMITTED"(已提交) | "MANUAL_INVALIDED"(已手动无效) | "EXPIRED"(已过期(7d)) | "SIGN_UP_COMPLETED(已注册完成,需在评级设置中设置注册方式)"
  • examData.examResult.signUpCompletingType: "USER_EXISTS"(用户已存在) | "INCOMPLETED"(未完成) | "INSPECT_REQUIRED"(需通过Qualify API审查,但 Qualify API 被调用时状态变更为 COMPLETED,因此一般无法出现) | "COMPLETED(完成)"

如何修改默认的8080端口

在application.properties中添加

server.port=[your port]

About

简单易用的入群测试系统

Resources

Stars

29 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages