跳到主要内容
版本:3.3.0

升级指南

对照表

此处会列举出 simbot2 版本中在 simbot3 中相似概念的功能对照表。 对照仅对于“概念”层面的对照,至于API层面,必然存在大量不兼容变更,请自行排查。

如果你有想要知道但是这里没有列举出来的对照,欢迎通过 prissues 进行反馈,非常感谢。

描述v2内容v3内容备注
事件总类型love.forte.simbot.api.message.events.MsgGetlove.forte.simbot.event.Event
监听函数定义注解love.forte.simboot.annotation.Listener仅存在于boot模块下。
事件监听注解love.forte.simbot.annotation.Listen
love.forte.simbot.annotation.Listens
love.forte.simboot.annotation.Listen
love.forte.simboot.annotation.Listens
仅存在于boot模块下,且不再强求此注解。
事件过滤注解love.forte.simbot.annotation.Filter
love.forte.simbot.annotation.Filters
love.forte.simboot.annotation.Filter
love.forte.simboot.annotation.Filters
仅存在于boot模块下。
监听函数love.forte.simbot.listener.ListenerFunctionlove.forte.simbot.event.EventListener
监听过滤器love.forte.simbot.filter.ListenerFilterlove.forte.simbot.event.EventFilter
监听拦截器love.forte.simbot.listener.ListenerInterceptorlove.forte.simbot.event.EventInterceptor
Botlove.forte.simbot.bot.Botlove.forte.simbot.Bot
Bot管理器love.forte.simbot.bot.BotManagerlove.forte.simbot.BotManager由 OriginBotManager 管理。
多组件love.forte.simbot.Component2.x对多组件协同的支持并不友好。
用户类型love.forte.simbot.api.message.containers.AccountInfolove.forte.simbot.definition.User
好友love.forte.simbot.api.message.results.FriendInfolove.forte.simbot.definition.Friend
群聊love.forte.simbot.api.message.containers.GroupInfolove.forte.simbot.definition.Group
群成员love.forte.simbot.api.message.results.GroupMemberInfolove.forte.simbot.definition.Member
频道love.forte.simbot.definition.Guildv2中,以群聊(group)模拟频道概念。
子频道love.forte.simbot.definition.Channel
消息体猫猫码字符串/猫猫码对象Message对象各类实现v3中Message具有序列化特性,猫猫码是否存在将不影响使用。
送信器love.forte.simbot.api.sender.MsgSenderv3中的api操作都会整合到 definition 中,不再有独立的“送信器”概念。
Getterlove.forte.simbot.api.sender.Getter
Setterlove.forte.simbot.api.sender.Setter
Senderlove.forte.simbot.api.sender.Sender
事件上下文love.forte.simbot.listener.ListenerContextlove.forte.simbot.event.EventProcessingContextv2不区分事件和函数上下文。
监听函数上下文love.forte.simbot.listener.ListenerContextlove.forte.simbot.event.EventListenerProcessingContext
瞬时作用域love.forte.simbot.listener.MapScopeContextlove.forte.simbot.event.ScopeContext
全局作用域love.forte.simbot.listener.MapScopeContextlove.forte.simbot.event.ScopeContext
持续会话作用域love.forte.simbot.listener.ContinuousSessionScopeContextlove.forte.simbot.event.ContinuousSessionContextv3中的 持续会话 在用法上与v2完全不同。
事件响应体love.forte.simbot.listener.ListenResultlove.forte.simbot.event.EventResult
事件响应处理器love.forte.simbot.processor.ListenResultProcessorv3的响应体处理可以直接借助拦截器实现。
日志APIslf4jslf4j这倒是没变化。
启动入口love.forte.simbot.core.SimbotApplove.forte.simbot.core.SimbotApp love.forte.simboot.SimbootAppv3的入口仅限于boot模块。
启动标记@love.forte.simbot.annotation.SimbotApplication@love.forte.simboot.core.SimbootApplication,或其他可选项v3的入口不仅限于提供“标记了注解的class对象”,而是提供了更多可选项。具体可提供的内容可以参考文档或文档注释。

部分功能对照

事件监听

信息

首先你需要明白,simbot2中的以注解形式进行事件监听的方式在simbot3中交由 boot 相关模块负责了, 也就是说如果你仅仅只是使用了 love.forte.simbot:simbot-core 之类的非 boot 相关的模块,那么是没有那些注解的。

下文所有示例代码中可能出现的 @Beans@Listener (simbot3的相关示例代码) 等注解均为 boot 模块下内容,core 模块无需也没有相关注解。 此处为了简化展示,大部分示例默认认为处于 boot 模块中。

让我们来看一下对照。首先,假如在simbot2中,你编写的内容如果是:

simbot2✌
@Beans
class MyListener {
@OnPrivate // @Listen(PrivateMsg::class)
suspend fun PrivateMsg.listen() {
// do...
}
}

那么在simbot3中其表现为(在boot相关模块下):

simbot3👌
@Beans
class MyListener {
@Listener
suspend fun FriendMessageEvent.listen() {
// do...
}
}

我们可以注意到如下变化:

  • 不再需要通过注解标记需要监听的类型了,而是仅需要一个标记注解 @Listener。simbot3中会根据你所需的类型自动判断这个监听函数的监听事件类型。假如标记为了监听函数(标记了 @Listener )的监听函数没有提供任何事件相关的类型,那么代表它监听所有事件。
  • Kotlin中,支持扫描顶层函数。(实验阶段)
  • 作为依赖注入功能的注解 @Beans名称 没有变(包路径有变化)。
  • 事件名称变了。

获取Bot

在simbot2中,你如果需要在非监听函数环境中使用bot或者需要botManager并寻找其他bot,那么你需要借助依赖注入功能:

simbot2✌
@Beans
class External {
@Depend
lateinit var botManager: BotManager

fun run() {
// use manager..
}

}

而在v3中,因为所有的 BotManager 都是由 OriginBotManager 进行管理的,因此你可以考虑直接使用 OriginBotManager

simbot3👌
fun useBotManager() {
OriginBotManager.forEach { manager ->
manager.all().forEach { bot ->
println("Bot: $bot")
}
}
}
注意

OriginBotManager 无关任何环境,属于 全局 性API。你应该谨慎考虑是否应该使用任何 全局 相关的API,并且这些API未来都有可能发生变更。

相关内容可参考 BOT管理器

实际上,OriginBotManager 并不是特别被建议使用。在 simbot3 中, 你可以通过 BotApplication 等多种方式来取代使用 OriginBotManager

从bot:

@Listener
suspend fun onEvent(event: FooEvent){
// 通过bot直接得到其所属的botManager
val botManager = event.bot.manager
val newBot = botManager.register(...)
newBot.start()
// ...
}

从application:

@Listener
suspend fun onEvent(context: EventProcessingContext, event: FooEvent){
context.application.botManagers.forEach { manager ->
if (...) {
val newBot = manager.register(...)
newBot.start()
// ...
}
}
}

消息对象

信息

更多请参考 消息概述