使用ROneBot框架开发一个机器人,

AI智能摘要
ROneBot是一款基于Kotlin协程的异步机器人开发框架,旨在简化OneBot协议的应用开发。该框架内置指令管理器,支持指令别名功能,提供全异步操作避免阻塞,并实现了大部分API与消息解析功能。开发者可通过创建客户端或服务端连接OneBot实现,利用消息链构造器快速组装消息。当前版本1.5.9要求JDK11及以上环境,仅支持单一工作模式且需适配支持数组消息的OneBot11实现。项目已应用于示例机器人FancyBot,包含20余条命令,代码仓库公开供学习参考。
— AI 生成的文章内容摘要

概述

ROneBot框架是我本人开发的全异步框架(基于Kotlin Coroutines), 目的是为了简化使用OneBot协议开发机器人的步骤,不用重复造轮子,和本项目类似的项目应该就是NoneBot框架但是NB是python的框架, 我没有发现在JVM平台上的onebot开发框架所以就自己写了一个框架。

框架实现了以下功能:

  1. 内置指令管理器
  2. 全异步操作,一个指令需要长时间操作不会阻塞别的指令正常执行
  3. 实现了绝大部分的api
  4. 实现了绝大部分的输入消息解析
  5. 消息链构造
  6. 支持使用接收到的消息并发送出去

先决条件

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.所有资源仅限于参考和学习,版权归原作者所有。

LInux软件学习技术

MinIO:小型的s3协议解决方案

2024-7-26 21:52:37

Kotlin

使用Kotlin和MCProtocolLib写一个MC假人压测程序

2024-10-21 11:32:08

21 条回复 A文章作者 M管理员
  1. 遗忘棱镜

    FancyBot看着不错,但配置项能不能出个详细说明啊,文档太简略了hhh

  2. 中元纸船

    我新手一个,照着文档配了半天maven仓库还是403,是我姿势不对?

  3. 时光慢递

    蹲个后续更新,现在api支持度到哪一步了?

    • 窗边读书

      想问下性能测试数据有吗?对比过其他框架没

  4. 读书笔记

    为啥不直接贡献给mirai-plugins呢,单独搞个框架维护成本不小吧?

  5. 铁匠娘子红娘

    createClient和createServer不能共存有点坑啊,我这边需求就是双模式

  6. 血染衣

    前几天刚用Kotlin写了个bot,要是早看到你这个就省事了

  7. 狮子荣耀

    求问支持Mirai吗?想用在现有的QQ机器人项目里

  8. 漆匠冯

    这个框架挺有想法的,JVM生态确实缺这玩意👍

    • 暗影行径

      Maven仓库403可能是网络问题,换个镜像试试

    • 白骨琵琶

      感觉配置步骤写得挺清楚的,跟着来一遍就行

    • RustyBulwark

      这个指令管理器设计得不错,比手写解析方便多了

    • 蛟龙翻江

      之前用过NoneBot,JVM平台确实需要这样的框架

    • 瓷匠何

      Kotlin协程用起来确实爽,异步处理很丝滑

    • 哒啦哒

      文档里那个114514是什么鬼啊笑死

    • 肉桂卷

      断线重连功能很实用,之前自己写老是出问题

  9. 小满1221

    你的**和你的文章一样短,是吧


  10. Warning: Attempt to read property "user_id" on null in /www/wwwroot/studio/wp-content/themes/b2/Modules/Common/Comment.php on line 250
  11. 说的有道理


  12. Warning: Attempt to read property "user_id" on null in /www/wwwroot/studio/wp-content/themes/b2/Modules/Common/Comment.php on line 250
  13. 感觉还行

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索