一个基于miari的qq聊天机器人
Polaris是Alice的重构改进版,扩展了原有功能,预留了不少位置
项目的名字来源于我的游戏ID
同时打算以这个项目作为我的毕业设计,所以决定叫Polaris
项目会持续更新直到我毕业(还剩一年)
一切开发旨在学习,请勿用于非法用途
- Polaris项目只是单纯的想分享出来,所以完全免费,也不接受任何捐赠
- 不支持也不建议用Polaris项目来盈利
- Polaris基于mirai
- 响应取消禁言
- 加入欢迎
- 群发言管理,违规时撤回禁言
- 戳一戳响应
- 触发回复
- 触发回复,可发送本地图片音频,api返回的图片和音频
- 音乐分享
- 百度图片搜索
- 百度翻译
- 天气查询
- 微博热榜
- 签到
- edge浏览器页面抓取为图片发送
- 自定义插件
- 还在持续更新中,计划
- 添加数据库
- 添加权限系统
- 添加ui
- 编译安卓版
- 添加问答模型
- 添加一个词袋模型
- 邮箱 Yuki7017@outlook.com
- B站 Aki-Polaris的个人空间_哔哩哔哩_bilibili
- Gitee October.Wr (october_Wr) - Gitee.com
- 开黑啦 https://kaihei.co/OM6Efk
- windows7以上
- jdk14 (发行版内置)
- edge及对应SeleniumDriver
├─.mvn
│ └─wrapper
│ maven-wrapper.jar
│ maven-wrapper.properties
│
├─Plugin
│ └─ChatModel
│ │ .keep
│ │ Chat.py
│ │ hook-ctypes.macholib.py
│ │ ModelSet.json
│ │ PluginSet.json
│ │ PythonExample.py
│ │ 打包指令.txt
│ │
│ ├─data
│ │ ├─model
│ │ │ │ .keep
│ │ │ │
│ │ │ └─model_epoch40_50w
│ │ │ config.json
│ │ │ ReadMe.txt
│ │ │
│ │ └─voc
│ │ vocab.txt
│ │ vocab2.txt
│ │
│ └─__pycache__
│ Chat.cpython-37.pyc
│
├─PluginExample
│ └─python
│ PluginSet.json
│ PythonExample.py
│
├─README
│ image-20220529111717577.png
│ image-20220529111932636.png
│ image-20220529112053321.png
│ image-20220529112135525.png
│
├─src
│ ├─main
│ │ ├─java
│ │ │ ├─META-INF
│ │ │ │ MANIFEST.MF
│ │ │ │
│ │ │ └─yuki
│ │ │ └─mirai
│ │ │ └─demo
│ │ │ │ DemoApplication.java
│ │ │ │ HandlerSetter.java
│ │ │ │ RunVariable.java
│ │ │ │ Set.java
│ │ │ │ WebSocketConfig.java
│ │ │ │ WebSocketServer.java
│ │ │ │
│ │ │ ├─function
│ │ │ │ │ Function.java
│ │ │ │ │ FunctionLoader.java
│ │ │ │ │ FunctionManager.java
│ │ │ │ │ function包说明.md
│ │ │ │ │
│ │ │ │ └─impl
│ │ │ │ BaiduImageSearchImpl.java
│ │ │ │ BaiduTranslateImpl.java
│ │ │ │ BrowserCrawlingImpl.java
│ │ │ │ GetWeatherImpl.java
│ │ │ │ MusicShareImpl.java
│ │ │ │ SignInImpl.java
│ │ │ │ SpecificReplyImpl.java
│ │ │ │ WeiboTop10Impl.java
│ │ │ │
│ │ │ ├─handlers
│ │ │ │ FriendInputStatusChangedEventHandler.java
│ │ │ │ MemberJoinEventHandler.java
│ │ │ │ MemberLeaveEventHandler.java
│ │ │ │ MemberMuteEventHandler.java
│ │ │ │ MemberPermissionChangeEventHandler.java
│ │ │ │ MemberSpecialTitleChangeEventHandler.java
│ │ │ │ MemberUnmuteEventHandler.java
│ │ │ │ MessageEventHandler.java
│ │ │ │ NudgeEventHandler.java
│ │ │ │ WhenCalledEventHandler.java
│ │ │ │
│ │ │ ├─pojo
│ │ │ │ │ OneMessageEvent.java
│ │ │ │ │ OriginMessage.java
│ │ │ │ │
│ │ │ │ ├─plugin
│ │ │ │ │ PluginInfo.java
│ │ │ │ │ PluginMessage.java
│ │ │ │ │
│ │ │ │ └─set
│ │ │ │ │ Bot.java
│ │ │ │ │ Config.java
│ │ │ │ │ ConfigVariable.java
│ │ │ │ │ FunctionSet.java
│ │ │ │ │
│ │ │ │ └─function
│ │ │ │ BaiduImageSearch.java
│ │ │ │ BaiduTranslate.java
│ │ │ │ BrowserCrawling.java
│ │ │ │ MusicShare.java
│ │ │ │ SignIn.java
│ │ │ │ SpecificReply.java
│ │ │ │ WeatherInfo.java
│ │ │ │ WeiboTop10.java
│ │ │ │
│ │ │ └─utils
│ │ │ CharacterUtil.java
│ │ │ DownloadMusicList.java
│ │ │ FileLoader.java
│ │ │ Http2Api.java
│ │ │ HttpGet.java
│ │ │ MD5.java
│ │ │ MessageBuilder.java
│ │ │ MessageSender.java
│ │ │ TransApi.java
│ │ │
│ │ └─resources
│ │ │ application.yml
│ │ │
│ │ ├─static
│ │ └─templates
│ └─test
│ └─java
│ └─yuki
│ └─mirai
│ └─demo
│ SeleniumTest.java
│
├─tools
│ └─data
│ cityData.txt
│ MusicData.txt
│
└─work
│ DeviceInfo.json
│
├─TalkData
│ BanWords.txt
│ SpecificReply.txt
│ SpecificReplyLocal.txt
│ SpecificReplyNetwork.txt
│
├─tempDownload
└─usingFile
├─file
├─ghs
│ 1579876690539.jpg
│ 1579876699468.jpg
│ 1579876701174.jpg
│ 1579876703731.jpg
│ 1579876707581.jpg
│ 1579876713633.jpg
│
├─video
│
└─voice
asd.mp3
baba.mp3
dsa.mp3
sad.mp3
zxc.mp3
- Password
- Admin
- ApplyGroup
-
bot的qq号最好有在bot部署的系统中用qq或者tim登录一段时间
-
最好不要开设备保护,安全保护之类的
-
yml格式问题
-
各设置项解释配置文件里有
-
最好不要用文本文档打开,容易看不清
-
所有的路径要么绝对路径要么相对路径
- 相对路径不要 \ 开头
- 路径参考配置文件
打开edge浏览器
在地址栏输入,查看浏览器版本
edge://settings/help
然后打开这个网址 Microsoft Edge 驱动程序
下载自己对应的版本
下载完为一个压缩包
将压缩包内的msedgedriver.exe解压出来
编辑config.yml配置,指定驱动位置
建议放在C:\Program Files (x86)\Microsoft\Edge\Application\内
完成
理论上来说
凡是发一个关键词触发bot发送图片文字语音
都可以用固定回复实现,不管是网上的还是本地的
前提api没有什么奇奇怪怪的验证之类的
三个固定回复没有不同,只是为的清楚分了三种
可以只编写一个
格式
[触发词1][触发词2][触发词3]...->[][][]或者文本
->为分隔符
消息以t&或者T&开头回自动翻译为中文
发送CommandSet中的关键词会分享歌单中的音乐
发送ChangePlaylist关键词会更新
发送CommandSet中的关键词会启动浏览器
自动搜索指定的图片返回百科 可能来源 相似图
发送CommandSet中的关键词会启动浏览器
自动查询天气返回结果
发送CommandSet中的关键词会启动浏览器
自动查询微博热榜前15
SignIn 签到词
ToSignInSay 对签到成功的人说
DidISignIn 查询自己是否签到
DidHeSignIn 名字+[DidHeSignIn]查询别人是否签到
CommandSet 重置,清空
根据指定的地址抓取页面元素
UrlList 页面的链接
XpathList 元素的xpath地址
TriggerWordList 触发词
UrlList XpathList TriggerWordList 内容顺序必须一一对应
这种指令是我定义的一种在bot内通用的发送消息的格式
是为了简化操作和扩展可自定义的范围
一条指令只能发送一条消息,但是可以通过&&或者||拼接起来
来达成发送复合消息的效果
&& 表示且 第一优先级
|| 表示或 第二优先级
当没有文本不是指令时会发送文本
[文件所在文件夹][文件名|随机][如果是图片可选是否为闪照][可选是否自动撤回]
[path][fileName|random]
[path][fileName|random][IsFlashImage][recall]
[path][fileName|random]
[path][fileName|random][recall]
例子
随机发送:[F:\IDEA\QQBot-Mirai\work\usingFile\ghs][random]
带自动撤回的:[F:\IDEA\QQBot-Mirai\work\usingFile\ghs][random][recall]
发送闪照:[F:\IDEA\QQBot-Mirai\work\usingFile\ghs][random][IsFlashImage]
发送指定:[F:\IDEA\QQBot-Mirai\work\usingFile\ghs][weigong-001.jpg]
因为涉及到返回数据的解析,所以复杂一点
[请求方法][类型][url][额外参数]
[GET|POST][txt][url][可选参数正则表达式用于提取]
[GET|POST][image][url]
如下json
提取其中的文本和图片
# {
# 'code': 0,
# 'msg': '',
# 'info':
# {
# 'pid': '82584014',
# 'uid': '1670478',
# 'title': '銀髪悪魔っ娘②',
# }
# 'author': 'ろむむ/8月末納期お仕事募集中',
# 'r18': 'false',
# 'width': '799',
# 'height': '765',
# 'tags': '['オリジナル','原创','悪魔っ娘','恶魔娘','ASMR','悪魔','恶魔','銀髪','银发','仰臥','仰卧','サキュバスproject','ルナ','Luna','はいてない','真空' ]',
# 'url': 'https://pximg.lolicon.run/img-original/img/2020/06/27/01/21/50/82584014_p0.jpg'
# }
[GET|POST][json][url][pid*txt&uid*txt&title*txt&url*image]
key-key-key...*type[txt|voice|image]
例子
文本:[GET][txt][https://api.ixiaowai.cn/ylapi/index.php]
#带正则提取的
文本-正则:[GET][txt][https://api.ixiaowai.cn/ylapi/index.php][\b[a-z]{3}\b]
图片:[GET][image][https://api.ixiaowai.cn/api/api.php]
json:pid&&uid&&title&&[GET][json][https://gurepu.lolicon.run/api/pixiv/setu.php][pid*txt&uid*txt&title*txt&url*image]
插件是websocket客户端
连接的url为ws_url+插件名称+插件id
{
'time':long,
'messageType':'msg',
'message':[
{
'type': 'MessageSource',
'kind': 'GROUP',
'botId': 2762018040,
'ids': [39954],
'internalIds': [377228493],
'time': 1653757967,
'fromId': 815049548,
'targetId': 817581299,
'originalMessage': [
{
'type': 'PlainText',
'content': '1'
}
]
}
]
}
{
'time':long, # 必须为收到消息的time 不然发不出去
'messageType':'command|code', # command指令消息 code mirai code 二选一必填
'message': str
}
基于GPT2中文闲聊模型实现的一个闲聊ai
因为训练语料来源微博贴吧所以会有一点点暴躁