# qtool **Repository Path**: Tom2wang/qtool ## Basic Information - **Project Name**: qtool - **Description**: qq机器人,定时发送天气,笑话。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-11-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Q群信息维护平台 基于[酷Q](https://baike.baidu.com/item/%E9%85%B7Q%E6%9C%BA%E5%99%A8%E4%BA%BA/4111789?fr=aladdin)构建QQ机器人,它通过模拟手机QQ登录,获取QQ接收到的消息、事件,实现群管理、聊天、聊天内容分析、刷屏检测、违规检测信息等功能。 ## 名词解释 - 宿主QQ 被酷Q工具接管,在服务器上登录的QQ号(此QQ号在需要管理的群中,必须拥有管理员的权限)。 - 维护者QQ 维护者QQ属于本系统中,一个专属的角色,他拥有在QQ群中调用特定管理QQ群的一系列指令的调用权限,用以维护QQ群的运营。(它不需要在QQ群中拥有管理员的权限) ## 结构关系 1. 一个 酷Q 容器监控一个或者多个QQ号码(宿主QQ), 被监控的QQ群号需要拥有对监控需要QQ群的管理员权限。 2. 一个宿主QQ可以拥有多个QQ群的管理员权限。 3. 一个产品可以有多个QQ群,并且这些QQ可以分属不同的宿主QQ(但一般情况下尽量让它们归属于一个宿主QQ)。 4. 对于事件的处理规则可以直接配置在产品上,也可以配置到QQ群上面。 5. 一个QQ群可以有多个维护者(相当于本系统中QQ群中的管理员,但是维护者可以不拥有在QQ群中的管理员权限)。 ## 系统模块分析 ### 权限认证模块 分四个角色: 超级管理员,系统管理员,企业管理员,维护者 超级管理员 配置docker, 处理规则优先级 系统管理员 管理企业方面配置 企业管理员 负责产品,宿主QQ,监控策略方面配置 维护者 负责Q群维护工作不能登录该管理平台 ### 企业管理模块 企业负责宿主QQ管理,产品配置,Q群维护者管理 **同一企业宿主QQ只能挂载到一台主机上** ### 产品管理模块 配置宿主QQ 需要维护的QQ群 QQ群维护者 QQ群响应规则配置 ### 事件配置模块 根据酷Q的能力,现将事件分为三类,此三类事件可相互有交集。 + 酷Q所有的事件称为**触发事件** 1. 私聊消息(message.private) 根据私聊消息的来源,将私聊消息分为四类: - 好友私聊消息(friend) - 群成员私聊消息(group) - 讨论组成员私聊消息(dicusss) - 其他类型私聊消息(other) 2. 群消息(message.group) 群消息分为三种类型: - 正常消息(normal) - 匿名消息(anonymouse) - 系统提示消息, 比如 “管理员已禁止群内匿名聊天”(notice) 3. 讨论组消息(message.discuss) 4. 群文件上传通知(notice.group_upload) 有新的文件上传到群空间时触发此事件。 5. 群管理员变动通知(notice.group_admin) - 成员被设置为群管理员(set) - 群管理员被撤销(unset) 6. 群成员减少(notice.group_decrease) - 主动离群(leave) - 被清理出群(kick) - 宿主QQ被清理出群(kick_me) 7. 群成员增加(notice.group_increase) - 申请入群(approve) - 邀请入群(invite) 8. 添加好友成功后提示(notice.friend_add) **宿主QQ是否允许添加好友?** 按照本系统设计来讲,宿主QQ只是用来监控和处理接收到的事件。添加好友的意义有待讨论。 9. 加群请求(request.group) - 申请加群(add) - 被邀请加群(invite) 10. 加好友请求(friend) 加宿主QQ为好友的请求, 此类请求。(忽略?) 11. 心跳事件(meta_event.heartbeat) 主要用于检测宿主QQ是否在线问题,退出重连。(强制开启) + 酷Q所有的接口称为**主动事件** 系统可主动调用的事件称为 **主动事件** 本系统维护者可通过 **指令** 调用 **主动事件**, 以实现Q群维护工作。 1. 发送信息 - 发送私聊消息 - 发送群消息 - 发送讨论组消息 2. 群组踢人 3. 群组单人禁言 4. 群组匿名用户禁言 5. 群组全员禁言 6. 群组匿名开启关闭 7. 设置群名片(群备注) 8. 设置群组专属头衔 9. 获取陌生人信息 10. 获取群列表 11. 获取群成员信息 12. 获取群成员列表 + 对**触发事件**的响应称为**响应事件** 1. 发送消息 根据发送消息类型分为三个小类: - 普通消息(比如发送一些公告信息之类的消息) - @all 主动at群体成员 一些比较重要的消息 - @某人 群中单独at某人的消息,此类消息具有指向性 2. 禁言 禁止群中某人或者全体发言。 - 禁止某人发言(时长) - 群成员全体禁言(时长) - 群组匿名用户禁言(时长) 3. 踢出群 将群成员提出群,该群成员可再次申请加入本群。 4. 拉黑(并踢出群) 将群成员踢出群并且加入黑名单,该成员将无法申请进入该QQ群。 5. 关闭群匿名消息 关闭群匿名消息 6. 同意 同意加好友或者加群请求 7. 拒绝 拒绝加好友或者加群请求 + **触发事件**、**主动事件**、**响应事件** 统称为 **原事件** | 原事件 | 触发事件 | 主动事件 | 响应事件 | |----------------|:-------:|:--------:|:------:| | 发送消息 | 是 | 是 | 是 | | 群文件上传通知 | 是 | 否 | 否 | | 群管理员变动通知| 是 | 否 | 否 | | 群成员减少 | 是 | 否 | 否 | | 群成员增加 | 是 | 否 | 否 | | 添加好友提示 | 是 | 否 | 否 | | 加群请求 | 是 | 否 | 否 | | 加好友请求 | 是 | 否 | 否 | | 心跳事件 | 是 | 否 | 否 | | 群组踢人 | 否 | 是 | 是 | | 群组单人禁言 | 否 | 是 | 是 | | 群组匿名用户禁言| 否 | 是 | 是 | | 群组全员禁言 | 否 | 是 | 是 | | 群组匿名开启 | 否 | 是 | 是 | | 群组匿名关闭 | 否 | 是 | 是 | | 设置群名片 | 否 | 是 | 否 | | 设置群组专属头衔| 否 | 是 | 否 | | 获取陌生人信息 | 否 | 是 | 否 | | 获取群列表 | 否 | 是 | 否 | | 获取群成员信息 | 否 | 是 | 否 | | 获取群成员列表 | 否 | 是 | 否 | | 同意 | 否 | 否 | 是 | | 拒绝 | 否 | 否 | 是 | ### 事件处理流模块 根据QQ群配置规则生成,QQ群事件处理流,自动处理QQ群中意料中的事件。 - 酷Q 触发一个事件后,可能对应了一系列相应的操作,为了使操作单元化以便自由组合使用,就需要对每一个操作赋予一个优先级的值,用以排列操作的执行顺序。 - 每一个操作单元均可以中断事件处理流的执行。 - 每一个操作单元均可配置响应操作(提示,禁言,踢出群,拉黑等) #### 刷屏检测 在m秒内发言量超过n条,即视为存在刷屏行为。 #### 垃圾信息检测 垃圾信息监测是根据本系统用户设定的关键词进行过滤,当监测到垃圾信息,系统会根据用户配置的响应操作做出反馈 #### 文件检测 酷Q中仅提供了群文件上传事件,而为提供发送文件消息事件。若需要监控文件消息(语音、图片等),可以通过解析消息内容来实现。 #### 黑名单过滤 - 黑名单关联到产品和对应QQ群上面 - 黑名单来自被管理员提出群的QQ用户 - 若检测到黑名单中用户发言 可配置响应操作(不处理,禁言,踢出群) #### 指令集 指令系统让用户或者玩家通过QQ发送消息,以实现既定的操作(通用功能) 例如实现事件中:**主动事件**的相关指令以供**维护者**调用。 其他功能待定: 1. 发放游戏激活码 ### 信息统计模块 默认记录QQ群中用户产生的所有数据,供以后自定义查询功能使用。 ## 前端重构 重构前端使其与后端解耦,其实现仅依赖于接口的定义。方便后续其他人员介入开发。 大体思路: Vue + Vue-router + Vuex + Webpack + Mock.js 实现前端基于接口定义的闭环,不依赖于接口的实现进行开发。