概述
ROneBot框架是我本人开发的全异步框架(基于Kotlin Coroutines), 目的是为了简化使用OneBot协议开发机器人的步骤,不用重复造轮子,和本项目类似的项目应该就是NoneBot框架但是NB是python的框架, 我没有发现在JVM平台上的onebot开发框架所以就自己写了一个框架。
框架实现了以下功能:
- 内置指令管理器
- 全异步操作,一个指令需要长时间操作不会阻塞别的指令正常执行
- 实现了绝大部分的api
- 实现了绝大部分的输入消息解析
- 消息链构造
- 支持使用接收到的消息并发送出去
先决条件
1. JDK版本最低为11
2. 使用一个现代化的IDE例如IDEA
3. 本文使用的ROB的版本是1.5.9
引入依赖
repositories {
mavenCentral()
maven("https://repo.rtast.cn/api/v4/projects/33/packages/maven") // 我的maven仓库地址
}
dependencies {
implementation("cn.rtast:ROneBot:1.5.9") // 按需替换成最新版本
}
最小实例
fun main() {
// 这里创建了一个匿名类来简化流程并且创建了一个ws客户端来连接到OneBot实现, 当然你也可以创建一个服务端来让OneBot实现连接
// 客户端自带断线重连
ROneBotFactory.createClient("ws://127.0.0.1:6666", "1145141919810", object : OBMessage {
override suspend fun onGroupMessage(websocket: WebSocket, message: GroupMessage, json: String) {
println(message.rawMessage)
}
})
}
创建指令
ROB内置了一个指令管理器并且支持指令别名即多个指令名对应一个指令
创建一个Echo指令
class EchoCommand : BaseCommand() {
override val commandNames = listOf("/echo", "/eeecho") // 指令别名
override suspend fun executeGroup(listener: OBMessage, message: GroupMessage, args: List<String>) {
listener.sendGroupMessage(message.groupId, args.joinToString(" "))
}
}
// 继承OBMessage然后实现对应的事件
class FancyBot : OBMessage {
override suspend fun onGroupMessage(ws: WebSocket, message: GroupMessage, json: String) {
val sender = message.sender.nickname
val senderId = message.sender.userId
val msg = message.rawMessage
val groupId = message.groupId
println("$sender($senderId: $groupId): $msg")
}
}
val commands = listOf(EchoCommand())
suspend fun main() {
val fancyBot = FancyBot() // 替换了匿名类
val accessToken = "114514"
val listeningGroups = listOf(114514L, 1919810L)
val rob =ROneBotFactory.createClient("ws://127.0.0.1:3001", accessToken, fancyBot)
val commandManager = rob.commandManager
commands.forEach { commandManager.register(it) } // 注册指令
rob.addListeningGroups(*listeningGroups.toLongArray()) // 设置监听的群聊, 如果不加上这一行表示全部群聊事件都监听
}
消息链构造器
ROB提供了一个MessageChain对象来快捷的构建一个消息链而不需要手动的写CQ码以下为使用示例
val msgChain = MessageChain.Builder()
.addAt(message.sender.userId)
.addText(message.rawMessage)
.addNewLine(3) // repeat 3 times: append 3 \n to end
.build()
this.sendGroupMessage(message.groupId, msgChain)
注意事项
ROB框架暂时只支持同一个程序创建一种工作方式即只能使用createClient或者createServer其中一个方式创建实例,如果强行创建两种方式会导致消息不会正常收发
ROB仅适配了提供数组消息的OneBot11实现,如果没有提供数组消息则会导致错误抛出
结尾
我本人用ROB框架开发了一个示例机器人完全开箱即用,只需要配置几个配置选项,FancyBot已经有了20多条命令
FancyBot地址: https://repo.rtast.cn/RTAkland/fancybot
ROneBot地址: https://repo.rtast.cn/RTAkland/ronebot
如果你想学习Kotlin或者OOP那么ROB是个不错的选择
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:xiaoman1221@yhdzz.cn,工作室将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有。
你的**和你的文章一样短,是吧