跳到主要内容
版本:3.3.0

Spring Boot

simbot3 提供了 starter 来支持快速与SpringBoot相结合。

使用

首先引入依赖,如果你使用了 simbot-coresimboot-core替换即可, starter 中包含了对 simbot-core 的引用。

<dependency>
<groupId>love.forte.simbot.boot</groupId>
<artifactId>simboot-core-spring-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>

然后书写一个标准的 Spring Boot 应用入口,并添加启动注解 @EnableSimbot:

example/Main.kt
@EnableSimbot // 👈
@SpringBootApplication
open class Main

fun main(args: Array<String>) {
runApplication<Main>(*args)
}

配置

starter 中提供了一些可用的 Spring Boot 配置项:

application.yml
simbot:
# 是否在bot注册完成后自动启动他们。
# 默认为 true
auto-start-bots: true

# 自定义配置bot资源文件的扫描路径。
# 默认为 'classpath:simbot-bots/*.bot*'
bot-configuration-resources:
- 'classpath:simbot-bots/*.bot*'

# 如果需要,此处配置扫描顶层函数形式的 Binder Factory。
# 默认不扫描
# top-level-binder-scan-package:
# - 'example.binder.foo'
# - 'example.binder.bar'

# 如果需要,此处配置扫描顶层函数形式的监听函数。
# 默认不扫描
# top-level-listener-scan-package:
# - 'example.listener.foo'
# - 'example.listener.bar'

BOT配置

通常情况下 bot 信息的配置也是通过配置文件完成的。 以上述配置或默认配置为例,bot 配置文件应当在资源目录中的 simbot-bots/*.bot* 下。

以 IDEA 中 Gradle 项目结构为例:

simply-robot
└─ src
└─ main
├─ java
├─ kotlin
└─ resources
└─ simbot-bots
├─ xxx.bot.json <-- 你的bot配置文件,可以是多个
└─ yyy.bot.json <-- 你的bot配置文件,可以是多个

不同的组件所需要的配置文件内容是不同的,这里给出各组件针对配置文件的说明:

组件相关文档链接
QQ频道组件手册:BOT配置文件
KOOK组件手册:BOT配置文件
mirai组件手册:BOT配置文件

事件监听

在 boot 模块或本章所述的 starter 模块下,在一个被 Spring 所管理的 bean 中使用 @Listener 注解来监听一个事件,例如:

MyListener.kt
@Component
class MyListener {
@Listener
suspend fun onEvent(event: FriendMessageEvent) {
// 处理事件...
}
}
更详细

有关注解事件监听的更多信息可参考文档章节 事件监听 中有关 注解监听 的相关内容。

实用类型

在使用 starter 时,会有一些可能对你有用的类型被注入到依赖中:

  • love.forte.simbot.application.Application
  • love.forte.simbot.event.application.Application.Environment (衍生自 Application )
  • love.forte.simbot.event.EventListenerManager (衍生自 Application )
  • love.forte.simbot.application.BotManagers (衍生自 Application ) 你可以配合这些类型来实现一些比较特殊的功能,例如获取当前所有的bot、动态注册bot、动态注册监听函数等。

以**"动态注册bot"**为例:

RegisterSomeBot.kt
@Component
open class RegisterSomeBot(
val application: Application
// 此示例场景下也可以直接用 BotManagers
) : CommandLineRunner {
override fun run(vararg args: String?) {
val bot = application.botManagers.register(...)
bot?.start() // nullable

// 或者精准的时候某个具体的组件的BOT管理器
val bot2 = application.botManagers
.filterIsInstance<MiraiBotManager>()
.first()
.register(...)

bot2.start()
}
}