简介

说明

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模块,并为报错消息加入自动或指定引用消息

架构

本bot由graia框架提供支持,采用MVC架构设计

  • graia-application-mirai:mirai的py接口支持
  • graia-broadcast:异步事件引擎
  • graia-saya:业务模块管理器
  • graia-scheduler:异步定时器
  • graia-template:消息链模板
    IMG_20210424_231318.jpg

计划实现的功能

以下功能未实现,开发完毕将会被移除
优先级为顺序

猛戳展开

  • ping机器人(发送Cirno@Cirno得到特定响应)
  • 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特定的人
注:以上指示符实际使用不需要包含!

帮助

获取机器人的帮助文档(本文档)
(无权限限制)
指令:

!<help|帮助>

-17277960b4b16622.png

查询系统状态

查询bot运行平台的CPU状态、RAM使用情况以及系统运行时间
(无权限限制)
指令:

!<系统状态|status>

-1ed99c68c0ba3947.png

截屏

截取bot运行os(Docker下新开的lxde界面)的桌面环境的整个屏幕,并作为图片发送
指令:

!截屏

IMG_20210829_001713.jpg

权限管理

配置各个功能对应群或好友的权限
该功能仅限主人或群主使用
指令:

!<权限管理|perm_mgr> [-l] [target] <func> <op_single>[op_type] [op_id]

-l:列出目标的权限明细
target:操作目标,好友为f{QQ号},群为g{群号},省略为当前会话群
func:对应操作功能
op_single:操作符号,+为添加,-为删除
op_type:操作类型,all为泛权限,w为白名单,b为黑名单,对于好友可省略
op_id:欲增删的群成员qq号,开关泛权限时可省略
186cef956dc8bffc.png

B站综合解析

用于解析聊天消息中关于B站的特定消息
可用于无需打开链接既可预览相应的内容,也可用于下载封面或头像
支持解析以下类型:

类型解析内容
b23短链接(小程序分享/客户端分享)进一步解析以下重定向的内容
av/bv号/视频链接/视频分享卡片标题、封面、UP主、TAG、合作成员、简介、互动数据等
用户空间链接/UID:xxx用户头像、昵称、等级、性别、粉丝数等
直播链接尚未完工
动态链接尚未完工
专栏链接/cv号尚未完工
音频链接/au号尚未完工
ep/ss/md号/番剧/影视链接尚未完工

指令:

!B站解析

无特定指令,机器人通过正则表达式自行判断类型
-47cbfaef34b524d1.png

Youtube解析

用于解析聊天消息中Youtube视频的链接
可用于无需打开链接既可预览相应的内容,也可用于下载封面或头像

指令:

无特定指令,机器人通过`正则表达式`自行判断类型

IMG_20210922_210403.png

一言

获取一条一言
接口由官方提供
指令:

!一言 [type]

type:指定获取类型,值为a-k,详见官方api文档
-31e4ca89b969a1be.png

疫情速报

快速查询实时新冠疫情数据
内容实时爬取自丁香医生
指令:

!疫情速报 [option] [国内|国际]

option:选项
-d, --detail:显示数值精确到个位(如“12000”否则精确为“1.20万”)
可选国内国际数据,不做指定默认国内数据
在早上时新增数据未被统计,则不会显示
-380ac5f347a14f7d.png

易姐语翻译

基于base16和AES的文本加密
程序将自动识别加密或解密内容
指令:

!易姐语翻译 <value>

value:明文或密文文本
335248f4c02d94c0.png

今日简报

获取《今日简报》图片版本
订阅后bot将会在每天9:31时自动向群内发送简报
现已应用易姐精心设计的主题蒙版
注:该功能仅限9:30-23:59可使用,且订阅功能仅可用于群聊
指令:

!今日简报 [sub|unsub]

sub:群内订阅
unsub:群内退订
-a0ad483ca064b20.png

saucenao搜图

使用saucenao检索图片
注:类型仅匹配了几个常用的
指令:

!搜图

-1c19897310f1c39e.png

藏头诗

生成藏头诗或藏尾诗,可选五言或七言,使用cts.chazhi.net的API
指令:

!藏<头|尾>诗 [-l 5|7] <value>

-l, --length:长度 五言或七言
value:内容
IMG_20210829_001649.jpg

截取头像

基于opencv的二次元图片或真实照片头像截取器
指令:

!截头像

-5e9dde2fc67b6197.png

东方角色检索

可查询《东方Project》中的任何官方角色的基本信息,或2min限制qq语音形式的角色歌
支持使用中文/英文/日文名以及简称或代号(eg:灵梦、莉莉白、uuz)
角色歌是Lo-Fi音质
注:只收录新作中的角色,现在整理进度为《永夜抄》前
指令:

!东方角色[歌] <target>

target:查询目标
当指令为"东方角色歌"时回复语音
58d6c56595053c4c.png

5000兆円

生成双行“5000兆円 欲しい!”风格文字图片
每行最大支持10字符
指令:

!5k <upper> <lower>

upper:第一行文字
lower:第二行文字
1197092a4eb613b1.png

缩写

从一段文本中检索并翻译缩写
API使用能不能好好说话?
指令:

!缩写 <text>

text:待检索的文本
-45ac4bf9f30f2325.png

化学方程式配平

基于算法的化学方程式自动配平
用a+b=ab表示等量关系,或用a;b;ab表示模糊关系
别名请用[xx]表达
电子请用<xe->表达
语法详情请看文档
指令:

!配平 <value>

value:待配平的表达式
-153281c099a57d61.png

NSFW图片识别

基于nsfwjs的NSFW图片识别器,使用Tensorflow模型进行识别
可识别出:自然 图画 绅士 性感 黄片这五种类型,后三者为NSFW,如果该类型的可能性<=10%将被隐藏
注:人工智障
指令:

!鉴黄

Screenshot_2021-09-22-22-30-37-131_com.tencent.mo.png

SSTV

将收到的图片或文字编码为SSTV(慢扫描电视)信号,并通过语音发送
注:由于silk编码的原因,播放效果很差,header都不能被识别,解调后更是糊成了一坨,tx.sb
支持以下制式(默认为MartinM1):
MartinM1,MartinM2,ScottieS1,ScottieS2,Robot36,PasokonP3,PasokonP5,PasokonP7,PD90,PD120,PD160,PD180,PD240,Robot8BW,Robot24BW
指令:

!SSTV [-m mode]

-m, --mode:模式
-2311328329604342.png

rua

生成对应头像的petpet gif动图
注:此功能暂时仅群聊可使用
指令:

!rua<@member>

member:at的群成员
1f21b5f3c2e19dd6.png

Pornhub

基于PIL的Porn hub LOGO风格文字效果生成器
左右各最大支持10字符
指令:

!PH <left> <right>

left:左边文字
right:右边文字
2f8ca2f158f1f01b.png

手机号归属地查询

通过手机号查询归属地、ISP、区号、邮编
只可查询11位的中国大陆手机号
接口由ip138提供
指令:

!手机号归属地 <phone>

phone:欲查询的目标手机号
-1f8b1348df58ec1b.png

身份证号解析

解析18位身份证号的信息(归属地、生日、性别等)
注:最后一位如果是‘X’请大写
指令:

!身份证号解析 <target>

option:选项
target:欲查询的目标身份证号
-3a47c47121f82917.png

XML反射

将文本格式的XML序列转化为XML消息类型,并发送
指令:

!XML

54670052648bbb88.png

qq绑定查询

查询qq绑定的手机号,或反查
(来自当年泄露的17G神秘txt)
同时也会查询该手机号的归属地
如同时查到多条记录,则只返回第一条
指令:

!Q绑查询 [option] <target>

option:选项
-r, --reserve:反查(qq号查手机)
target:欲查询的目标号码
757a7a5b462ec214.png

爬虫综合统计

爬虫数据库实时统计
目前支持的类型:B站答题B站tag
指令:

!爬虫统计 <target>

target:目标类型
-74c03c8619ca0b26.png

群成员变动

新群员进群时会@该群员,并发送欢迎消息
当有群员退群时,会向群内报告该群员的昵称及qq号
进群欢迎:
-775f1a5b26714dd.png
退群欢送(doge):
-6ce644e030cddf18.png