Skip to content

基于Mirai 使用 java开发的 bot框架,在消息事件下封装了指令/权限指令 方便调用,内置公主连接/公主连结工会战功能(公会战改版后不再适用),接入chat-gpt

License

Notifications You must be signed in to change notification settings

WhiteMagic2014/WMagicBotR

Repository files navigation

WMagicBotR

WMagicBot

原本是一个自己玩的小项目,整合了spring + PicqBotX 框架(基于酷q)的qq机器人,现在由于酷q不可用,已经凉了谨此纪念...

WMagicBotR

本人pcr玩家,原本工会战管理使用yobot ,但是由于cq的突然离开,原来的yobot突然不可用( 所以本项目pcr相关功能参考了yobot,现在yobot应该也有基于Mirai的实现),有些不知所措。 所幸遇到了Mirai,看着已经凉凉的 WMagicBot 就想干脆自己用Mirai写一个pcr公会战管理bot

于是乎 WMagicBotR 基于 Mirai 框架重生 集成spring + mybatis + sqlite

  • 不用额外配置购买数据库 数据迁移方便(复制数据库文件)
  • 部署方便 jar包 直接运行, 只要有java环境就可以
  • 指令系统 与 权限指令系统(面向开发)

当收到消息a 执行x,收到消息b 执行y,哎 收到c也要执行x? 不想写ifelse? 指令系统很好的解决这个问题,封装了指令对象 以及权限指令对象, 支持别名,更多请查看源码

项目环境

开发环境

本项目开发环境,可以视情况提升

  • jdk 1.8.0_121
  • maven 3.5.3
  • idea 2022.3.3 (低版本可能会出现部分包爆红的问题,不影响使用,看起来会不太舒服)

运行环境

  • 无特殊要求 有较新的jre环境即可

说明书

准备

  1. 在编译完的jar包(后期也会提供编译好的jar包)同目录下,创建 WMagicBotR.properties 文件,模板可以在本仓库中找到,按照提示配置登录账号
  2. 如果启用pcr jjc查询功能,建议直接将本项目下的 nicknames.txt 放到 与jar包同目录下,在第一次启动时如果该文件不存在,则会自动下载,但是考虑到国内访问git下载有时候网络会有问题,所以建议直接手动放置

启动

小白版,大佬请选择性查看

  1. cd 到本项目jar 目录下
  2. java -jar magicBotR.jar 运行项目
  3. 有时候你会看到一个 验证码,输入验证码 后回车 (有时候需要 有时候没有这一步)
  4. 接着会看到这个,qq需要做一个新设备登录验证 v1
  5. 将这个url 复制出来,在浏览器里打开,选择手机qq扫码认证 v2
  6. 扫码认证解锁(记得解锁后在扫码的手机上把这个qq退出登录,否者服务器上会登录不上) v3
  7. 3-6 操作结束后,在shell中回车(只有第一次启动会有3-6步骤) 继续运行直到成功启动 v4

小白继续看,大佬跳过,到这里其实已经算启动成功,但是直接关闭会导致进程结束

  • 在当前shell下 按ctrl + z ,暂停本线程
  • jobs 查看当前被暂停的进程号, 一般来说就是1
  • bg 1 让这个进程在后台运行

到这里真的好了,这是第一次运行的情况,由于需要交互验证登录,所以不能直接后台运行,但是如果已经有了deviceInfo.json设备信息可以直接后台运行

  • nohup java -jar magicBotR.jar &

在本项目 正常启动后 该目录下应该会有6个文件:

  1. 本项目jar包
  2. device.json + cache文件夹 : 用于记录bot设备信息的文件(Mirai 其实是虚拟了一个设备登录qq,这个文件就是虚拟设备的设备信息,如果迁移服务器带着这个文件走,还是会视作同一个设备登录)
  3. botData.db : sqlite数据库文件,如果服务器要迁移,你需要带走的数据就在botData.db里面,可以用Navicat直接打开
  4. nicknames.txt : pcr jjc 查询功能的角色昵称 和角色Id 对照表
  5. WMagicBotR.properties : 项目配置文件
  6. logs文件夹 : 日志文件

公告

注意 pcr公会战规则变化后,公会战管理功能不再适用

计划任务

接下来计划做的任务 先立下flag 有空不忙的时候来回收

计划 进度
重构 动态组件(command 注册为switch command完成) 已完成
重构 command 加载注册机制 已完成
jjc查询 图像合成后 返回 已完成
pcr公会战查刀数据格式优化 已完成
定时消息,延时消息,广播消息 已完成
pcr公会战挂树 倒计时提醒(延时消息) 已完成
查刀页面样式优化 已完成
接入chat-gpt 已完成
自然语言指令 已完成 设计 Function注解 结合openai的函数调用 实现自然语言指令
pcr公会战适配新版本 有想法,但是没动力
接入微信bot 搁置中已放弃,没找到稳定更新的微信bot java开源框架
根据提供的训练集问答 已完成

更新记录

本项目不稳定更新中(有空的时候会更新)

v1.9.0

  • 升级 qsign 版本为 1.2.1-beta-dev-d62ddce (1.3.0 遇到了一点问题升不上去....)
  • 升级了magic-gpt-plus的版本为1.3.3 (使用gpt更加丝滑)
  • 为ai交谈新增 Function 接口,使用了 openai的函数调用,可以使用自然语言触发指令 (很久之前的flag终于回收了)

v1.8.0

  • mirai core 升级为 2.16.0
  • 不再使用 fix-protocol-version + magic-signer-guide ,改为使用内置的qsign 且用且珍惜
  • 不再需要额外部署第三方签名服务,也不需要 KFCFactory.json 文件,相应的,需要将本项目中的txlib文件夹完整的放置于jar包同目录下
  • 记得删除原来的 device.json 和 cache文件夹

v1.7.2

  • 启动时优化,显示当前bot版本

v1.7.1

v1.7.0

由于现在风控越来越严重,mirai开放了对接第三方签名服务的接口,这里使用了magic-signer-guide

务必请自己部署以保障安全性
$ docker pull kiliokuara/vivo50:latest
$ docker run -d --restart=always \
  -e SERVER_IDENTITY_KEY=vivo50 \
  -e AUTH_KEY=kfc \
  -e PORT=8888 \
  -p 8888:8888 \
  --log-opt mode=non-blocking --log-opt max-buffer-size=4m \
  -v /home/vivo50/serverData:/app/serverData \
  -v /home/vivo50/testbot:/app/testbot \
  --name vivo50 \
  kiliokuara/vivo50
  • KFCFactory.json 中的配置请按照上面的配置酌情修改
  • 记得删除原来的 device.json 和 cache文件夹

v1.6.2

  • 功能没什么更新,升级了gpt-magic-plus的版本为1.1.1,一些相关的方法使用变了

v1.6.1

  • 功能没什么更新,升级了gpt-magic-plus的版本为1.0.5,GptMessage 被移除了,现在统一使用gpt-magic中的 ChatMessage

v1.6.0

  • gpt聊天新增stream模式,可以有效减少由于生成返回时间过长导致的超时问题
  • 配置文件中 ChatGPT.chat.stream 默认关闭

v1.5.4

  • 封装gpt相关业务代码为gpt-magic-plus
  • 部分gpt业务代码优化

v1.5.3

  • 优化gpt相关服务,现在可以配置一个代理服务地址来解决部分地区无法访问的问题

v1.5.2

  • 优化备忘指令,调整指令域 群 -> 不限

v1.5.1

  • 修复xmla命令并发高的情况下,question embeddings 会被覆盖的bug

v1.5.0

  • 现在可以自己提供文本向量集合,让gpt根据提供的向量集合回答问题
  • 数据文件命名 embeddings.json,放置在jar包同目录下,具体的格式可以参考demo
  • embeddings 使用openai的CreateEmbeddingsRequest计算。可以使用我封装的gpt-magic 来方便的调用相关api,觉得好用的话请star一下给我一些支持哦
  • 新增的指令请详见指令book
  • 降级mirai版本为2.14.0, 配合对应的fix-protocol-version 解决部分登录问题(每个人bot风控情况可能不同,你也可以使用2.15m1的mirai 配合对应的fix-protocol,主要目标是解决问题就行)

v1.4.1

  • 备忘功能新增v2版本

v1.4.0

  • 备忘功能现在会落盘至sqlite,重启后不会再丢失备忘了
  • 修复在bot成功login之前,MagicMsgSender无法正确获取bot创建任务的bug

v1.3.4

  • 升级gpt-magic版本至1.3.2
  • 优化gpt聊天,当接口调用失败会有返回信息,而非无返回

v1.3.3

  • Simulator中优化启动逻辑。将jjc初始化放到相关service中。
  • 优化部分异常处理

v1.3.2

  • 升级mirai版本为 2.15.0-M1 ( 原本用较低版本的idea开发。升级到2.13的时候会出现大部分包找不到依赖的问题,升级了idea的版本就没事了...吓的我一直不敢升mirai版本,以为很多方法都废弃了..)
  • 默认存储的设备文件名变更 deviceInfo.json —>device.json

v1.3.1

  • 调整gpt指令域, 群->不限

2023年03月10日 v1.3.0

  • 接入gpt,需要在配置文件中增加相关配置,详见 WMagicBotR_sample.properties
  • xml 指令进行对话
  • xmlset 指令进行性格设定
  • xmlclear 指令清除相关上下文

v6

2023年03月08日

  • 更新 mirai 版本,使用 mirai-core-all 2.11.1,(在不用对代码大动刀的情况下解决版本号过低的问题)
  • 对于无法登录的情况,目前腾讯经常风控,造成qq号无法登录的情况。下面给出一个可用解决方案: 使用mirai-console 加载临时修复插件 fix-protocol-version 后,使用mirai-console登录账号,将生成的cache 文件夹复制到项目中,更多详见无法登录的临时处理方案
  • 登录协议默认使用android_pad(具体请根据使用mirai-console登录时选择的协议,自行变更)

2023年02月10日

  • 优化续战码查询功能,更友好的展示
  • 接入ChatGPT(内测中)

2023年02月01日

  • 新增火焰纹章engage 续战码共享功能,详见指令book (老任啥时候把随机续战修复啊 ,目前游戏内的续战功能已经可以正常使用)

2022年07月19日

  • 新增"鸡汤","动态" 功能,类似上面的"夸我"
  • 考虑再三还是没有把嘴臭模式做进去,容易被封号....

2022年07月18日

  • 新增夸夸功能
  • "夸我" 可以获得一句彩虹屁
  • "开启夸夸模式" 后,bot会随机在用户发言后进行彩虹屁夸赞
  • 使用"关闭夸夸模式"关闭

2022年07月01日

  • 新增图片混沌加密功能

2022年06月08日

这个项目很久没有更新,最近想在用一下,发现太久没更新没法登录了...

  • 更新 mirai 版本,使用 mirai-core-all 2.8.2
  • 登录协议使用ipad
  • 新的登录方式 v5
  • ps:我用的是ios 和 safari 连调获取ticket的方式, 如果在过程中发现 safari无法取得ios上联调的数据信息,可以下载使用 Safari Technology Preview 来代替safari
  • 版本号更新至1.2.0
  • 目前仅恢复登录和一些基本功能,由于mirai版本升级,有些方法调用变更,部分功能可能会失效,发现了会修复...

2021年05月13日

  • 前一段时间太忙了,没精力来做bot的优化
  • 备忘功能新增一种模式

2021年01月27日

  • nickname源文件格式变更 ,兼容新的csv格式nickname文件
  • 新增指令 重载nickname 适合手动修改nickname文件后刷新缓存
  • 本次更新后可以使用新的 nickname文件
  • 备忘功能实装 详见指令book

2021年01月07日

忙里偷闲更新一下

  • 重构MagicTask,使用函数式接口,调用的时候更舒服一些
  • 新增备忘功能(内测中)

2020年12月03日

  • 最近工作比较忙,更新的速度变慢了,这几天由于产品需求一直没有确定下来,所以有时间摸个鱼
  • 更新1.1.0版本,新增货币系统雏形,为以后可能摸鱼做的小游戏做准备

2020年11月05日

  • 重构command加载注册机制
  • 现在无需使用 @Component + @Autowired 在CommandsConfig中单独注册指令,直接在使用command上使用 @Command注解,即可完成指令的注册
  • 版本号更新为 1.0.0

2020年11月04日

  • 新增pcrdfans code查询,详见指令book

2020年10月29日

  • jjc查询缓存策略优化
  • 查刀页面样式初步优化
  • 指令对应变更,jjc查询->图形版查询,jjc文字->文字版查询
  • jjc查询图形版优化返回

2020年10月27日

  • 查刀页面完成(样式没有优化)
  • mirai-core 版本升级至1.3.2

2020年10月26日

  • 挂树(30分钟)@提醒
  • 新增ResultModel,作为web封装
  • 查刀后台数据初步规范化
  • 配置文件模板新增 site.url,用以配置 访问web服务所用的 url (域名/ip) 详见配置文件模板

2020年09月30日

  • 新增 MagicTask 任务,对 TimerTask 进行了一次封装,可以在 MagicTaskObserver 中监控到所有 定时/延时 任务,可随时快速取消任务
  • 使用 MagicTask 重新实现了 定时消息,延时消息

2020年09月29日

  • 重构了bot实例化方式
  • 定时消息,延时消息,广播消息 工具完成

2020年09月24日

  • 重构动态组件。
  • 现在可在command指令上 使用注解@Switch 自动注册为动态组件。动态组件可在bot不停机情况下,随时开启或关闭
  • 一组相同业务下的指令可在其共同父类上使用 @Switch 注册为一个系列的指令,开关状态共享
  • 可在 WMagicBotR.properties 中自定义默认组件开关状态
  • 私聊bot [开关],可以看到目前所有支持的动态组件,以及其开启状态
  • 由于动态组件功能重构,修改 指令book 动态组件部分。
  • 由于动态组件功能重构,修改 配置文件模板

2020年09月18日

  • 修复plan计划表 计数bug

2020年09月16日

  • 优化测试查
  • 测试查 指令域变更为 任何

2020年09月09日

  • 新增群欢迎事件
  • 目前偶发 无法获取入群事件

2020年09月04日

  • 优化某些指令
  • 新增指令book
  • 新增help指令

2020年09月01日

  • 自定义实现了mirai的log,将其重定向至spring 的 slf4j
  • 将net log输出至logs文件夹
  • 增加web全局异常捕获(bot层的异常mirai会捕获记录)
  • mirai 版本升级至1.2.2

2020年08月29日

  • 新增测试版jjc查询 [测试查] 直接返回角色头像,但是由于没有用cdn(没钱+懒),后台id2image,再发送qq消息,一个字 慢!后期在考虑怎么优化把
  • 启用这个功能需要 角色id-头像 对照表,直接clone这个项目 到jar包目录下即可,具体对应规则看源码

2020年08月27日

  • 添加 pcr jjc查询功能,感谢pcrdfans的光佬无偿提供的查询接口
  • 项目文件下的 nicknames.txt 为jjc查询时所用的昵称对照表,正常启动会自动去 pcr-nickname 获取,但是考虑到国内下载github 源文件可能会下载不到,所以可以自己下载后放项目jar相同path下

2020年08月25日

  • 最初版本提交 包含 bot框架本体
  • 一些bot的小功能,roll点,抽签,加密等
  • pcr工会战管理功能(类似yobot,详细的说明后期有在补充)

开源协议

本项目基于 Mirai

  • 本项目使用与Mirai相同协议 (AGPLv3 with Mamoe Exceptions) 开源
  • 本项目的所有衍生项目 必须使用相同协议 (AGPLv3 with Mamoe Exceptions) 开源
  • 本软件禁止用于一切商业活动
  • 本软件禁止收费传递, 或在传递时不提供源代码

感谢

特别感谢

感谢JetBrains 为开源项目提供免费的 IntelliJ IDEA 等 IDE 的授权

About

基于Mirai 使用 java开发的 bot框架,在消息事件下封装了指令/权限指令 方便调用,内置公主连接/公主连结工会战功能(公会战改版后不再适用),接入chat-gpt

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages