快速开始
基础信息
提示
- 本文档默认您了解并熟悉
Java/Kotlin
基本语法以及SpringBoot
开发体系 - QQ 群:
174706945
注意
v2
版本开始仅支持JDK 17+
与SpringBoot 3.0.0+
- 客户端需要支持
websocket reverse
即反向websocket
连接 - 支持
Onebot V11
标准及go-cqhttp
拓展
项目创建
依赖引入
注意
引入依赖时请替换版本 latest
为 Maven Central
实际的最新版本
Maven
xml
<dependency>
<groupId>com.mikuac</groupId>
<artifactId>shiro</artifactId>
<version>latest</version>
</dependency>
Gradle Kotlin DSL
kotlin
implementation("com.mikuac:shiro:latest")
Gradle Groovy DSL
groovy
implementation 'com.mikuac:shiro:latest'
连接配置
SpringBoot
项目默认的配置文件路径应为 resources/application.prorperties
,推荐变更为 yaml
格式的配置文件,以提供一个较为良好的编写与阅读体验
yaml
# 该配置为反向连接示例
server:
port: 5555
shiro:
ws:
server:
enable: true
url: "/ws/shiro"
yaml
# 该配置为正向连接示例
shiro:
ws:
client:
enable: true
url: "ws://websocket_server:port"
实例端配置
提示
实例端配置文件使用 go-cqhttp
为例,配置反向 websocket
连接服务端
yaml
# 连接服务列表
servers:
# 反向WS设置
- ws-reverse:
# 反向WS Universal 地址
# 注意 设置了此项地址后下面两项将会被忽略
universal: ws://127.0.0.1:5555/ws/shiro
# 反向WS API 地址
api: ws://your_websocket_api.server
# 反向WS Event 地址
event: ws://your_websocket_event.server
# 重连间隔 单位毫秒
reconnect-interval: 3000
middlewares:
<<: *default # 引用默认中间件
第一个插件
注解事件
java
@Shiro
@Component
public class ExamplePlugin {
// 更多用法详见 @MessageHandlerFilter 注解源码
// 当机器人收到的私聊消息消息符合 cmd 值 "hi" 时,这个方法会被调用。
@PrivateMessageHandler
@MessageHandlerFilter(cmd = "hi")
public void fun1(Bot bot, PrivateMessageEvent event, Matcher matcher) {
// 构建消息
String sendMsg = MsgUtils.builder().face(66).text("Hello, this is shiro demo.").build();
// 发送私聊消息
bot.sendPrivateMsg(event.getUserId(), sendMsg, false);
}
// 如果 at 参数设定为 AtEnum.NEED 则只有 at 了机器人的消息会被响应
@GroupMessageHandler
@MessageHandlerFilter(at = AtEnum.NEED)
public void fun2(GroupMessageEvent event) {
// 以注解方式调用可以根据自己的需要来为方法设定参数
// 例如群组消息可以传递 GroupMessageEvent, Bot, Matcher 多余的参数会被设定为 null
System.out.println(event.getMessage());
}
// 同时监听群组及私聊消息 并根据消息类型(私聊,群聊)回复
@AnyMessageHandler
@MessageHandlerFilter(cmd = "say hello")
public void fun3(Bot bot, AnyMessageEvent event) {
bot.sendMsg(event, "hello", false);
}
}
重写事件
提示
- 注解方式编写的插件无需在插件列表(plugin-list)定义
- 服务端配置文件
resources/application.yaml
追加如下内容 - 插件列表为顺序执行,如果前一个插件返回了
MESSAGE_BLOCK
将不会执行后续插件
yaml
shiro:
plugin-list:
- com.example.bot.plugins.ExamplePlugin
java
@Component
public class ExamplePlugin extends BotPlugin {
@Override
public int onPrivateMessage(Bot bot, PrivateMessageEvent event) {
if ("hi".equals(event.getMessage())) {
// 构建消息
String sendMsg = MsgUtils.builder()
.face(66)
.text("hello, this is shiro example plugin.")
.build();
// 发送私聊消息
bot.sendPrivateMsg(event.getUserId(), sendMsg, false);
}
// 返回 MESSAGE_IGNORE 执行 plugin-list 下一个插件,返回 MESSAGE_BLOCK 则不执行下一个插件
return MESSAGE_IGNORE;
}
@Override
public int onGroupMessage(Bot bot, GroupMessageEvent event) {
if ("hi".equals(event.getMessage())) {
// 构建消息
String sendMsg = MsgUtils.builder()
.at(event.getUserId())
.face(66)
.text("hello, this is shiro example plugin.")
.build();
// 发送群消息
bot.sendGroupMsg(event.getGroupId(), sendMsg, false);
}
// 返回 MESSAGE_IGNORE 执行 plugin-list 下一个插件,返回 MESSAGE_BLOCK 则不执行下一个插件
return MESSAGE_IGNORE;
}
}