使用 SpringBoot
通过core模块配合 simbot starter 在 Spring Boot 中轻松使用。
前提准备
首先你应当准备至少一个可用的 QQ频道机器人。
项目构建
首先准备一个SpringBoot项目。可以考虑前往 start.spring.io 或借助IDE等工具。
然后再额外添加我们需要的依赖:
// simbot core starter
implementation("love.forte.simbot.boot:simboot-core-spring-boot-starter:3.3.0") // 版本请参考下文的参考链接
// QQ频道组件
implementation("love.forte.simbot.component:simbot-component-qq-guild-core:3.2.0.0") // 或参考下文的参考链接
// simbot core starter
implementation 'love.forte.simbot.boot:simboot-core-spring-boot-starter:3.3.0' // 版本请参考下文的参考链接
// QQ频道组件
implementation 'love.forte.simbot.component:simbot-component-qq-guild-core:3.2.0.0' // 或参考下文的参考链接
<!-- simbot core starter -->
<dependency>
<groupId>love.forte.simbot.boot</groupId>
<artifactId>simboot-core-spring-boot-starter</artifactId>
<version>\${SIMBOT_VERSION}</version><!-- 版本请参考下文的参考链接 -->
</dependency>
<!-- QQ频道组件 -->
<dependency>
<groupId>love.forte.simbot.component</groupId>
<artifactId>simbot-component-qq-guild-core</artifactId>
<version>3.2.0.0</version><!-- 或参考下文的参考链接 -->
</dependency>
BOT配置
接下来,在项目资源文件目录下的 simbot-bots
文件夹中创建一个用于配置bot的配置文件 xxx.bot.json
( 文件名随意,扩展名应为 .bot
或 .bot.json
) , 而配置文件的内容则参考章节 BOT配置文件。
${PROJECT_SRC}/main/resources/simbot-bots/xxx.bot.json
启动类
像每一个 Spring Boot 应用一样,你需要一个启动类,并通过标注 @EnableSimbot
来启用 simbot
:
@EnableSimbot
@SpringBootApplication
class App
fun main(vararg args: String) {
runApplication<App>(args = args)
}
@EnableSimbot
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
监听事件
接下来就是逻辑代码所在的地方了,编写一个监听函数并监听一个事件。
此处我们监听 ChannelMessageEvent
,也就是 子频道的消息事件。
假设:要求bot必须被AT ,并且说一句 你好
,此时bot会引用用户发送的消息并回复 你也好!
,类似于:
用户:
@BOT 你好
BOT:
> 用户: @BOT 你好
你也好!
import love.forte.simboot.annotation.ContentTrim
import love.forte.simboot.annotation.Filter
import love.forte.simboot.annotation.Listener
import love.forte.simbot.event.ChannelMessageEvent
@Component
class ExampleListener {
@Listener
@Filter(value = "你好", targets = Filter.Targets(atBot = true))
@ContentTrim // 当匹配被at时,将'at'这个特殊消息移除后,剩余的文本消息大概率存在前后空格,通过此注解在匹配的时候忽略前后空格
suspend fun onChannelMessage(event: ChannelMessageEvent) { // 将要监听的事件类型放在参数里,即代表监听此类型的消息
event.reply("你也好!")
}
}
import love.forte.simboot.annotation.ContentTrim
import love.forte.simboot.annotation.Filter
import love.forte.simboot.annotation.Listener
import love.forte.simbot.event.ChannelMessageEvent
@Component
public class ExampleListener {
@Listener
@Filter(value = "你好", targets = @Filter.Targets(atBot = true))
@ContentTrim // 当匹配被at时,将'at'这个特殊消息移除后,剩余的文本消息大概率存在前后空格,通过此注解在匹配的时候忽略前后空格
public void onChannelMessage(ChannelMessageEvent event) { // 将要监听的事件类型放在参数里,即代表监听此类型的消息
// Java中的阻塞式API
event.replyBlocking("你也好!");
}
}
import love.forte.simboot.annotation.ContentTrim
import love.forte.simboot.annotation.Filter
import love.forte.simboot.annotation.Listener
import love.forte.simbot.event.ChannelMessageEvent
@Component
public class ExampleListener {
@Listener
@Filter(value = "你好", targets = @Filter.Targets(atBot = true))
@ContentTrim // 当匹配被at时,将'at'这个特殊消息移除后,剩余的文本消息大概率存在前后空格,通过此注解在匹配的时候忽略前后空格
public CompletableFuture<?> onChannelMessage(ChannelMessageEvent event) { // 将要监听的事件类型放在参数里,即代表监听此类型的消息
// 将 CompletableFuture 作为返回值,simbot会以非阻塞的形式处理它
return event.replyAsync("你也好!");
}
}
import love.forte.simboot.annotation.ContentTrim
import love.forte.simboot.annotation.Filter
import love.forte.simboot.annotation.Listener
import love.forte.simbot.event.ChannelMessageEvent
@Component
public class ExampleListener {
@Listener
@Filter(value = "你好", targets = @Filter.Targets(atBot = true))
@ContentTrim // 当匹配被at时,将'at'这个特殊消息移除后,剩余的文本消息大概率存在前后空格,通过此注解在匹配的时候忽略前后空格
public Mono<?> onChannelMessage(ChannelMessageEvent event) { // 将要监听的事件类型放在参数里,即代表监听此类型的消息
// 将 Mono 等响应式类型作为返回值,simbot会以非阻塞的形式处理它
return Mono.fromCompletionStage(event.replyAsync("你也好!"));
}
}
启动
接下来,启动程序并在你的沙箱频道中@它试试看吧。
当然,如果遇到了预期外的问题也不要慌,积极反馈问题才能使我们变得更好,可以前往 Issues 反馈问题、 社区 提出疑问。
Last modified: 15 July 2024