简介
说明
Cirno(琪露诺)是由社会易姐QwQ
开发的qq机器人。这是一个事件响应型机器人,可响应群聊消息、好友私信消息,由mirai强力驱动,自动化消息处理部分由python语言完成,
目前整个系统部署在docker上。
声明:本qq bot不是产品
,本qq bot的开发及使用旨在学习相关技术和方便群友
关于名字
本项目名以及图标来自东方Project中的角色琪露诺(Cirno)
更新日志
猛戳展开
2021-03-12 开始搭建主服务
2021-03-13 完成事件响应网关和权限管理器
2021-03-13 业务模块:帮助
、一言
、疫情速报
、归属地查询
、Q绑查询
、答题统计
完成
2021-03-14 业务模块桌面截图
完成
2021-03-15 业务模块系统状态
完成
2021-03-19 群事件处理及qq群成员变动广播完成
2021-03-22 业务模块易姐语翻译
完成
2021-03-28 业务模块b23短链解析
、B站视频解析
完成
2021-04-10 业务模块身份证号解析
完成
2021-04-13 统一异常抛出系统与报错系统完成,答题统计
模块升级为爬虫综合统计
2021-04-14 统一消息发送和处理机制
2021-04-18 改用bcc截获并作为消息反馈bot内部事件的异常抛出
2021-04-19 使用graia-saya
大规模重构各个模块和模块管理机制,即同时废除事件响应网关
和路由式的事件处理机制
2021-04-23 整体程序使用aio套件,并采用mysql连接池,权限管理器
重构为独立的设置管理器
,添加业务模块今日简报
2021-04-24 为易姐语翻译
添加自动识别加密及解密功能
2021-04-25 添加业务模块5000兆円
2021-04-29 添加业务模块东方角色及角色歌查询
,并建立相关数据库和收集相关资源
2021-05-02 添加业务模块缩写
、rua
2021-05-06 添加业务模块Pornhub
2021-05-12 添加业务模块化学方程式配平
2021-05-17 添加业务模块SSTV
(虽然效果很差...)
2021-05-20 添加基于mysql的群消息及群聊图片实时记录功能
2021-05-21 添加业务模块XML反射
2021-07-18 添加业务模块saucenao搜图
2021-07-21 添加业务模块头像截取
2021-07-21 全部指令添加!
前导符
2021-07-28 添加业务模块藏头诗
2021-08-28 修改截屏
模块为“VNC远程截屏”
2021-08-30 修改东方角色数据库
为mysql
2021-09-17 添加业务插件NSFW图片识别
2021-09-21 优化bot引用回复消息
2021-09-21 添加业务插件Youtube解析
2021-10-09 模块帮助信息修改为用“!help xxx”统一处理,同时废除--help参数
2021-10-10 将自定义抛出报错与异常上报
独立为一个saya模块,并为报错消息加入自动或指定引用消息
2021-10-13 添加业务插件亲亲
2021-10-18 添加业务插件节日提醒
2021-10-25 升级业务模块身份证号解析
为身份证号解析与生成
2021-10-25 更换参数解析器为argparse
2021-10-26 将设置管理器
改为模块及设置管理器
并重建权限数据库,以权限等级和功能禁用列表控制,并使用dao和api层
2021-10-28 添加业务插件ping
2021-10-29 添加禁言上报、加群、踢出上报
2021-10-31 添加业务插件复读姬
2021-11-19 升级mah版本为v2.x,更新框架为graia-Ariadne
架构
本bot由graia框架提供支持,采用MVC架构设计
graia-ariadne
:Graia for mah2框架graia-broadcast
:异步事件引擎graia-saya
:业务模块管理器graia-scheduler
:异步定时器graia-template
:消息链模板
计划实现的功能
以下功能未实现,开发完毕将会被移除
优先级为顺序猛戳展开
- Latex渲染
- 动态模块管理器
- 瑟图(目前计划图源为K站以及P站)
- niconico视频解析、B站轻视频解析、B站直播解析、B站专栏解析
- Pixiv综合解析
- 增加消息响应风控系统
- ip归属地查询
- 型近汉字转写(基于unvcode)
- 姓名判断性别概率(基于ngender)
- 群聊词云图生成(基于jieba与wordcloud)
- 二维码生成(图案 背景 样式自定义)
- B站追番&UP主更新订阅(指令增删)
- B站答题查询(题图url或关键字)
- B站直播订阅广播
- 早安晚安
- 网易云id解析
- qq音乐/网易云解析真实mp3地址(B站api)
- B站应援团消息同步推送
- 知乎热榜(排版为图片)
功能
bot的功能分为响应、定时、广播等
指令格式:[ ]
为可选参数,< >
为必选参数,|
为或逻辑,@
为在群内at特定的人
注:以上指示符实际使用不需要包含!
基础类
ping
功能:ping机器人,机器人响应,即随机返回提示语或Cirno的表情图一张
权限级别:0
对应模块:ping.py
技术栈:XML、graia-broadcast
参数:无
备注:也可响应“戳一戳”事件,返回对应的提示
指令:
<Cirno|cirno|琪露诺|@Cirno>
帮助
功能:获取机器人的帮助文档(本文档),或获取对应模块的帮助信息
权限级别:0
对应模块:bot_help.py
技术栈:XML、graia-broadcast
参数:
module:模块名
备注:无
指令:
!<help|帮助> [module]
查询系统状态
功能:查询bot运行平台的框架版本、CPU状态、RAM使用情况以及系统运行时间
权限级别:0
对应模块:bot_status.py
技术栈:psutil
参数:无
备注:无
指令:
!status
截屏
功能:截取bot运行os(Docker下新开的lxde界面)的桌面环境的整个屏幕,并作为图片发送
权限级别:1
对应模块:screen_shot.py
技术栈:vncdotool、scrot
参数:无
备注:无
指令:
!截屏
模块与设置管理器
功能:配置群或用户的权限及设置、设置bot基本参数、管理模块
权限级别:仅主人可用
对应模块:MM
技术栈:MySQL、graia-broadcast、graia-saya
参数:无
备注:无
尚未完工
异常报错器
功能:为其他模块提供统一报错服务,并可以报未知异常以及禁言异常
权限级别:无
对应模块:bot_catch_and_report.py
技术栈:graia-broadcast、traceback
参数:无
备注:错误类型有以下几种:
错误类型 | 解释 |
---|---|
无权限 | 用户请求的功能被禁用或等级不足 |
命令错误 | 机器人在解析请求指令时出错 |
拉取错误 | 机器人在获取外部资源时出错 |
解析错误 | 机器人在解析内部或外部数据时出错 |
运行出错 | 机器人在处理数据时出错 |
指令超时 | 异步等待的下一条消息未在指定时间内收到 |
发送超长 | 机器人欲发送的消息超出qq限制 |
机器人被禁言 | 机器人所在的群将机器人账号禁言,而机器人试图发送消息 |
未知异常 | 任何未被catch的异常类型 |
解析类
B站综合解析
功能:用于解析聊天消息中关于B站的特定消息,
可用于无需打开链接既可预览相应的内容,也可用于下载封面或头像
权限级别:1
对应模块:parse_bilibili
技术栈:bilibiliAPI、gRPC、pydantic
参数:无
备注:支持解析以下类型:
类型 | 解析内容 |
---|---|
b23短链接(小程序分享/客户端分享) | 进一步解析以下重定向的内容 |
av/bv号/视频链接/视频分享卡片 | 标题、封面、UP主、TAG、合作成员、简介、互动数据等 |
用户空间链接/UID:xxx | 用户头像、昵称、等级、性别、粉丝数等 |
无特定指令,机器人通过正则表达式
自行判断类型
Youtube解析
功能:用于解析聊天消息中Youtube视频的链接
权限级别:1
对应模块:parse_youtube.py
技术栈:YoutubeAPI、SSR
参数:无
备注:无
无特定指令,机器人通过正则表达式
自行判断类型
查询类
一言
功能:获取一条一言
权限级别:1
对应模块:hitokoto.py
技术栈:无
参数:
type:欲获取的一言类型
备注:使用官方API
有如下类型可用:动画、漫画、游戏、文学、原创、网络、其他、影视、诗词、网易云、哲学
指令:
!一言 [type]
疫情速报
功能:快速查询实时新冠疫情数据
权限级别:1
对应模块:ncov_num.py
技术栈:lxml
参数:
-d,--detail:是否展示为精确到个位的数据(如“12000”否则精确为“1.2万”)
categorie:可选查询国内或国际数据,如不做指定则默认国内
备注:内容实时爬取自丁香医生
在早上时新增数据未被统计。则不会显示
指令:
!疫情速报 [-d] [国内|国际]
缩写
功能:从一段文本中检索并翻译缩写
权限级别:1
对应模块:abbr.py
技术栈:无
参数:
target:检索目标文本
备注:API使用能不能好好说话?
指令:
!缩写 <target>
归属地查询
功能:查询手机号或ip的归属地
权限级别:1
对应模块:query_location.py
技术栈:无
参数:
target:查询目标
备注:接口由ip138提供
指令:
!<手机号|ip>归属地 <target>
phone:欲查询的目标手机号
东方角色检索
功能:查询《东方Project》中官方角色的基本信息
权限级别:1
对应模块:touhou_avatar
技术栈:MySQL
参数:
target:查询目标,支持使用中文/英文/日文名以及简称或代号(eg:灵梦、莉莉白、uuz)
备注:
只收录新作中的角色,现在整理进度为《永夜抄》前
当指令为"东方角色歌"时回复2min限制qq语音形式的角色歌(Lo-Fi音质)
指令:
!东方角色[歌] <target>
身份证号解析
功能:解析18位中华人民共和国公民身份证号的信息(归属地、生日、性别等)
权限级别:1
对应模块:ident_code
技术栈:sqlite、易姐自己写的ident_util
参数:
target:解析目标
备注:最后一位如果是‘X’请大写
指令:
!身份证号 <target>
藏头诗
功能:生成五言或七言藏头/藏尾诗
权限级别:1
对应模块:cts.py
技术栈:无
参数:
-l, --length :生成长度 可选5或7
target:生成目标
备注:使用cts.chazhi.net的API
指令:
!藏<头|尾>诗 [-l 5|7] <target>
saucenao搜图
功能:使用saucenao以图搜图
权限级别:1
对应模块:search_img
技术栈:pydantic
参数:图片
备注:类型仅匹配了几个常用的
指令:
!搜图 [图片]
NSFW图片识别
功能:基于Tensorflow的NSFW图片识别器
权限级别:1
对应模块:nsfw_detecter.py
技术栈:nsfwjs
参数:图片
备注:
可识别出:自然
图画
绅士
性感
黄片
这五种类型,后三者为NSFW,如果该类型的可能性<=10%将被隐藏
使用模型进行识别,人工智障属于是了
指令:
!鉴黄
爬虫综合统计
功能:统计该服务器上运行的爬虫的数据库
权限级别:2
对应模块:爬虫数据库实时统计
技术栈:MySQL
参数:
type:目标类型
备注:目前支持的类型:bili-exam
、bili-tag
指令:
!爬虫统计 <type>
订阅与推送类
今日简报
功能:获取《今日简报》图片版本,订阅后bot将会在每天9:00时自动向群内发送简报,现已应用易姐精心设计的主题蒙版
权限级别:1
对应模块:daily_news.py
技术栈:PIL
参数:
sub:群内订阅
unsub:群内退订
备注:该功能仅限9:00-23:59可使用,且订阅功能仅可用于群聊
指令:
!今日简报 [sub|unsub]
群成员变动提醒
功能:在群成员发生变动时,做出相应的提醒
权限级别:1
对应模块:notice.py
技术栈:graia-broadcast、MySQL
参数:无
备注:无
新群员进群时会@该群员,并发送欢迎消息
当有群员退群时,会向群内报告该群员的昵称及qq号
进群欢迎:
退群欢送(doge):
生成与处理类
易姐语翻译
功能:基于base16和AES的文本加密
权限级别:1
对应模块:AneE_crypt.py
技术栈:AES、base16
参数:
value:明文或密文文本
备注:程序将自动识别加密或解密内容
指令:
!易姐语翻译 <value>
截取头像
功能:截取图片中的头像
权限级别:1
对应模块:face_cuter
技术栈:OpenCV、PIL
参数:图片
备注:可截取二次元图片或真实照片中的头像
指令:
!截头像 [图片]
5000兆円
功能:生成双行“5000兆円 欲しい!”风格文字图片
权限级别:1
对应模块:5k.py
技术栈:node.js
参数:
upper:第一行文字
lower:第二行文字
备注:每行最大支持20字符
指令:
!5k <upper> <lower>
Pornhub
功能:生成Porn hub LOGO风格文字效果
权限级别:1
对应模块:PH
技术栈:PIL
参数:
left:左边文字
right:右边文字
备注:每行最大支持10字符
指令:
!PH <left> <right>
rua
功能:生成对应头像的petpet gif动图
权限级别:1
对应模块:rua
技术栈:PIL、moviepy
参数:
member:需要生成的目标用户,可at或@+用户id
备注:可同时生成1-9个目标头像
指令:
!rua <@member> [@member....]
亲亲
功能:生成对应两个用户头像互相亲亲的gif
权限级别:1
对应模块:kisskiss
技术栈:PIL、moviepy
参数:
operator:要亲亲的目标用户,可at或@+用户id
target:被亲亲的目标用户,可at或@+用户id
备注:如果为同一用户,会收到来自bot的特殊问候
指令:
!rua <@operator> <@target>
化学方程式配平
功能:基于算法的化学方程式自动配平
权限级别:1
对应模块:BCE.py
技术栈:BCE
参数:
target:待配平的表达式
备注:
用a+b=ab表示等量关系,或用a;b;ab表示模糊关系
别名请用[xx]表达
电子请用
语法详情请看文档
指令:
!配平 <target>
SSTV
功能:SSTV(慢扫描电视)信号调制器,即将收到的图片或文字编码为,并通过语音发送
权限级别:1
对应模块:SSTV.py
技术栈:pySSTV
参数:
-m, --mode:模式
备注:由于silk编码的原因,播放效果很差,header都不能被识别,解调后更是糊成了一坨,tx.sb
支持以下制式(默认为MartinM1):
MartinM1,MartinM2,ScottieS1,ScottieS2,Robot36,PasokonP3,PasokonP5,PasokonP7,PD90,PD120,PD160,PD180,PD240,Robot8BW,Robot24BW
指令:
!SSTV [-m mode]
XML反射
功能:将文本格式的XML序列反射为XML消息类型
权限级别:2
对应模块:XML.py
技术栈:无
参数:
content:XML内容
备注:XML内容也可以进行中断下一条发送
指令:
!XML [content]