Skip to content

Commit 40fe1d1

Browse files
authored
Merge pull request #55 from simple-robot/dev/resource-use-config
OneBot配置中支持配置默认的 ImageAdditional 属性
2 parents 9aed81c + cb6b1a4 commit 40fe1d1

File tree

16 files changed

+277
-76
lines changed

16 files changed

+277
-76
lines changed
Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# Bot配置文件
22

3-
<warning>TODO</warning>
4-
53
Bot配置文件通常情况下是配合Spring Boot starter的时候用的。
64

75
当使用Spring Boot starter时,
@@ -19,33 +17,45 @@ Bot配置文件通常情况下是配合Spring Boot starter的时候用的。
1917

2018
```json
2119
{
22-
// 固定值
23-
"component": "simbot.onebot11",
24-
"authorization": {
25-
// 唯一ID,作为组件内 Bot 的 id,用于组件内去重。可以随便编,但建议是bot的qq号
26-
"botUniqueId": "123456",
27-
// api地址,是个http/https服务器的路径,默认localhost:3000
28-
"apiServerHost": "http://localhost:3000",
29-
// 订阅事件的服务器地址,是个ws/wss路径,默认localhost:3001
30-
"eventServerHost":"ws://localhost:3001",
31-
// 配置的 token,可以是null
32-
"accessToken": null
33-
},
34-
// 额外的可选配置
35-
// config本身以及其内的各项属性绝大多数都可省略或null
36-
"config": {
37-
// API请求中的超时请求配置。整数数字,单位毫秒,默认为 `null`。
38-
"apiHttpRequestTimeoutMillis": null,
39-
// API请求中的超时请求配置。整数数字,单位毫秒,默认为 `null`。
40-
"apiHttpConnectTimeoutMillis": null,
41-
// API请求中的超时请求配置。整数数字,单位毫秒,默认为 `null`。
42-
"apiHttpSocketTimeoutMillis": null,
43-
// 每次尝试连接到 ws 服务时的最大重试次数,大于等于0的整数,默认为 2147483647
44-
"wsConnectMaxRetryTimes": null,
45-
// 每次尝试连接到 ws 服务时,如果需要重新尝试,则每次尝试之间的等待时长
46-
// 整数数字,单位毫秒,默认为 3500
47-
"wsConnectRetryDelayMillis": null,
48-
}
20+
// 固定值
21+
"component": "simbot.onebot11",
22+
"authorization": {
23+
// 唯一ID,作为组件内 Bot 的 id,用于组件内去重。可以随便编,但建议是bot的qq号
24+
"botUniqueId": "123456",
25+
// api地址,是个http/https服务器的路径,默认localhost:3000
26+
"apiServerHost": "http://localhost:3000",
27+
// 订阅事件的服务器地址,是个ws/wss路径,默认localhost:3001
28+
"eventServerHost": "ws://localhost:3001",
29+
// 配置的 token,可以是null
30+
"accessToken": null
31+
},
32+
// 额外的可选配置
33+
// config本身以及其内的各项属性绝大多数都可省略或null
34+
"config": {
35+
// API请求中的超时请求配置。整数数字,单位毫秒,默认为 `null`。
36+
"apiHttpRequestTimeoutMillis": null,
37+
// API请求中的超时请求配置。整数数字,单位毫秒,默认为 `null`。
38+
"apiHttpConnectTimeoutMillis": null,
39+
// API请求中的超时请求配置。整数数字,单位毫秒,默认为 `null`。
40+
"apiHttpSocketTimeoutMillis": null,
41+
// 每次尝试连接到 ws 服务时的最大重试次数,大于等于0的整数,默认为 2147483647
42+
"wsConnectMaxRetryTimes": null,
43+
// 每次尝试连接到 ws 服务时,如果需要重新尝试,则每次尝试之间的等待时长
44+
// 整数数字,单位毫秒,默认为 3500
45+
"wsConnectRetryDelayMillis": null,
46+
// 当使用非 [OneBotImage] 类型作为图片资源发送消息时,
47+
// 默认根据 [Resource] 得到一个可能存在的 [OneBotImage.AdditionalParams]。
48+
// 注意!这无法影响直接使用 [OneBotImage] 的情况。
49+
// defaultImageAdditionalParams 默认为 `null`。
50+
"defaultImageAdditionalParams": {
51+
// default: null
52+
"localFileToBase64": null,
53+
"type": null,
54+
"cache": null,
55+
"proxy": null,
56+
"timeout": null
57+
}
58+
}
4959
}
5060
```
5161

@@ -66,3 +76,6 @@ Bot配置文件通常情况下是配合Spring Boot starter的时候用的。
6676
</tab>
6777
</tabs>
6878

79+
## 属性说明
80+
81+
<warning>TODO</warning>

buildSrc/src/main/kotlin/P.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ object P {
4141
override val homepage: String get() = HOMEPAGE
4242

4343

44-
private val baseVersion = v(0, 7, 0)
44+
private val baseVersion = v(0, 8, 0)
4545

4646
val snapshotVersion = baseVersion - Version.SNAPSHOT
4747
override val version = if (isSnapshot()) snapshotVersion else baseVersion

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/OneBot11Usage.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,12 @@ private class OneBot11UsageBuilderImpl : OneBot11UsageBuilder {
120120
* @throws [NoSuchElementException] if no such element is found.
121121
*/
122122
@OptIn(ExperimentalContracts::class)
123-
public inline fun Application.oneBot11Bots(block: OneBotBotManager.() -> Unit) {
123+
public inline fun <T> Application.oneBot11Bots(block: OneBotBotManager.() -> T): T {
124124
contract {
125125
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
126126
}
127127

128-
botManagers.firstOneBotBotManager().block()
128+
return botManagers.firstOneBotBotManager().block()
129129
}
130130

131131
/**

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/actor/internal/OneBotFriendImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ import love.forte.simbot.component.onebot.v11.core.api.SendLikeApi
2626
import love.forte.simbot.component.onebot.v11.core.bot.internal.OneBotBotImpl
2727
import love.forte.simbot.component.onebot.v11.core.bot.requestDataBy
2828
import love.forte.simbot.component.onebot.v11.core.internal.message.toReceipt
29+
import love.forte.simbot.component.onebot.v11.core.utils.resolveToOneBotSegmentList
2930
import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateMsgApi
3031
import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateTextMsgApi
3132
import love.forte.simbot.component.onebot.v11.event.message.RawPrivateMessageEvent
3233
import love.forte.simbot.component.onebot.v11.message.OneBotMessageContent
3334
import love.forte.simbot.component.onebot.v11.message.OneBotMessageReceipt
34-
import love.forte.simbot.component.onebot.v11.message.resolveToOneBotSegmentList
3535
import love.forte.simbot.message.Message
3636
import love.forte.simbot.message.MessageContent
3737
import kotlin.coroutines.CoroutineContext
@@ -60,7 +60,7 @@ internal abstract class OneBotFriendImpl : OneBotFriend {
6060
override suspend fun send(message: Message): OneBotMessageReceipt {
6161
return sendPrivateMsgApi(
6262
target = id,
63-
message = message.resolveToOneBotSegmentList()
63+
message = message.resolveToOneBotSegmentList(bot)
6464
).requestDataBy(bot).toReceipt(bot)
6565
}
6666

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/actor/internal/OneBotGroupImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ import love.forte.simbot.component.onebot.v11.core.bot.internal.OneBotBotImpl
3030
import love.forte.simbot.component.onebot.v11.core.bot.requestDataBy
3131
import love.forte.simbot.component.onebot.v11.core.bot.requestResultBy
3232
import love.forte.simbot.component.onebot.v11.core.internal.message.toReceipt
33+
import love.forte.simbot.component.onebot.v11.core.utils.resolveToOneBotSegmentList
3334
import love.forte.simbot.component.onebot.v11.core.utils.sendGroupMsgApi
3435
import love.forte.simbot.component.onebot.v11.core.utils.sendGroupTextMsgApi
3536
import love.forte.simbot.component.onebot.v11.message.OneBotMessageContent
3637
import love.forte.simbot.component.onebot.v11.message.OneBotMessageReceipt
37-
import love.forte.simbot.component.onebot.v11.message.resolveToOneBotSegmentList
3838
import love.forte.simbot.message.Message
3939
import love.forte.simbot.message.MessageContent
4040
import kotlin.concurrent.Volatile
@@ -104,7 +104,7 @@ internal abstract class OneBotGroupImpl(
104104
override suspend fun send(message: Message): OneBotMessageReceipt {
105105
return sendGroupMsgApi(
106106
target = id,
107-
message = message.resolveToOneBotSegmentList()
107+
message = message.resolveToOneBotSegmentList(bot)
108108
).requestDataBy(bot).toReceipt(bot)
109109
}
110110

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/actor/internal/OneBotMemberImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ import love.forte.simbot.component.onebot.v11.core.api.*
2929
import love.forte.simbot.component.onebot.v11.core.bot.internal.OneBotBotImpl
3030
import love.forte.simbot.component.onebot.v11.core.bot.requestDataBy
3131
import love.forte.simbot.component.onebot.v11.core.internal.message.toReceipt
32+
import love.forte.simbot.component.onebot.v11.core.utils.resolveToOneBotSegmentList
3233
import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateMsgApi
3334
import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateTextMsgApi
3435
import love.forte.simbot.component.onebot.v11.event.message.RawGroupMessageEvent
3536
import love.forte.simbot.component.onebot.v11.event.message.RawPrivateMessageEvent
3637
import love.forte.simbot.component.onebot.v11.message.OneBotMessageContent
3738
import love.forte.simbot.component.onebot.v11.message.OneBotMessageReceipt
38-
import love.forte.simbot.component.onebot.v11.message.resolveToOneBotSegmentList
3939
import love.forte.simbot.message.Message
4040
import love.forte.simbot.message.MessageContent
4141
import kotlin.concurrent.Volatile
@@ -82,7 +82,7 @@ internal abstract class OneBotMemberImpl(
8282
override suspend fun send(message: Message): OneBotMessageReceipt {
8383
return sendPrivateMsgApi(
8484
target = id,
85-
message = message.resolveToOneBotSegmentList()
85+
message = message.resolveToOneBotSegmentList(bot)
8686
).requestDataBy(bot).toReceipt(bot)
8787
}
8888

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/bot/OneBotBotConfiguration.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ import kotlinx.serialization.modules.SerializersModule
2525
import kotlinx.serialization.modules.overwriteWith
2626
import love.forte.simbot.common.function.ConfigurerFunction
2727
import love.forte.simbot.common.function.invokeBy
28+
import love.forte.simbot.component.onebot.common.annotations.ExperimentalOneBotAPI
29+
import love.forte.simbot.component.onebot.v11.message.segment.OneBotImage
30+
import love.forte.simbot.resource.Resource
2831
import kotlin.coroutines.CoroutineContext
2932
import kotlin.coroutines.EmptyCoroutineContext
3033

@@ -174,4 +177,27 @@ public class OneBotBotConfiguration {
174177
*/
175178
public var wsConnectRetryDelayMillis: Long = 3500L
176179

180+
/**
181+
* 当使用非 [OneBotImage] 类型作为图片资源发送消息时,
182+
* 默认根据 [Resource] 得到一个可能存在的 [OneBotImage.AdditionalParams]。
183+
* 注意!这无法影响直接使用 [OneBotImage] 的情况。
184+
*/
185+
@ExperimentalOneBotAPI
186+
public var defaultImageAdditionalParamsProvider: ((Resource) -> OneBotImage.AdditionalParams?)? = null
187+
188+
/**
189+
* 配置 [defaultImageAdditionalParamsProvider]
190+
*/
191+
@ExperimentalOneBotAPI
192+
public fun defaultImageAdditionalParamsProvider(block: ((Resource) -> OneBotImage.AdditionalParams?)?) {
193+
defaultImageAdditionalParamsProvider = block
194+
}
195+
196+
/**
197+
* 配置 [defaultImageAdditionalParamsProvider]
198+
*/
199+
@ExperimentalOneBotAPI
200+
public fun defaultImageAdditionalParams(params: OneBotImage.AdditionalParams?) {
201+
defaultImageAdditionalParamsProvider = { params }
202+
}
177203
}

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/bot/OneBotBotSerializableConfiguration.kt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import kotlinx.serialization.Serializable
2323
import love.forte.simbot.bot.SerializableBotConfiguration
2424
import love.forte.simbot.component.onebot.common.annotations.InternalOneBotAPI
2525
import love.forte.simbot.component.onebot.v11.core.component.OneBot11Component
26+
import love.forte.simbot.component.onebot.v11.message.segment.OneBotImage
2627

2728

2829
/**
@@ -69,9 +70,32 @@ public data class OneBotBotSerializableConfiguration(
6970
/**
7071
* @see OneBotBotConfiguration.wsConnectRetryDelayMillis
7172
*/
72-
val wsConnectRetryDelayMillis: Long? = null
73+
val wsConnectRetryDelayMillis: Long? = null,
74+
75+
/**
76+
* @see OneBotBotConfiguration.defaultImageAdditionalParams
77+
*/
78+
val defaultImageAdditionalParams: AdditionalParams? = null,
7379
)
7480

81+
@Serializable
82+
public data class AdditionalParams(
83+
val localFileToBase64: Boolean = false,
84+
val type: String? = null,
85+
val cache: Boolean? = null,
86+
val proxy: Boolean? = null,
87+
val timeout: Int? = null,
88+
) {
89+
internal fun resolve(): OneBotImage.AdditionalParams =
90+
OneBotImage.AdditionalParams().apply {
91+
localFileToBase64 = this@AdditionalParams.localFileToBase64
92+
type = this@AdditionalParams.type
93+
cache = this@AdditionalParams.cache
94+
proxy = this@AdditionalParams.proxy
95+
timeout = this@AdditionalParams.timeout
96+
}
97+
}
98+
7599
public fun toConfiguration(): OneBotBotConfiguration =
76100
OneBotBotConfiguration().also { conf ->
77101
conf.botUniqueId = authorization.botUniqueId
@@ -85,6 +109,7 @@ public data class OneBotBotSerializableConfiguration(
85109
apiHttpSocketTimeoutMillis?.also { conf.apiHttpSocketTimeoutMillis = it }
86110
wsConnectMaxRetryTimes?.also { conf.wsConnectMaxRetryTimes = it }
87111
wsConnectRetryDelayMillis?.also { conf.wsConnectRetryDelayMillis = it }
112+
defaultImageAdditionalParams?.also { conf.defaultImageAdditionalParams(it.resolve()) }
88113
}
89114
}
90115
}

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/event/internal/message/OneBotGroupMessageEventImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ import love.forte.simbot.component.onebot.v11.core.event.message.OneBotNormalGro
3131
import love.forte.simbot.component.onebot.v11.core.event.message.OneBotNoticeGroupMessageEvent
3232
import love.forte.simbot.component.onebot.v11.core.internal.message.OneBotMessageContentImpl
3333
import love.forte.simbot.component.onebot.v11.core.internal.message.toReceipt
34+
import love.forte.simbot.component.onebot.v11.core.utils.resolveToOneBotSegmentList
3435
import love.forte.simbot.component.onebot.v11.core.utils.sendGroupMsgApi
3536
import love.forte.simbot.component.onebot.v11.core.utils.sendGroupTextMsgApi
3637
import love.forte.simbot.component.onebot.v11.event.message.RawGroupMessageEvent
3738
import love.forte.simbot.component.onebot.v11.message.OneBotMessageContent
3839
import love.forte.simbot.component.onebot.v11.message.OneBotMessageReceipt
39-
import love.forte.simbot.component.onebot.v11.message.resolveToOneBotSegmentList
4040
import love.forte.simbot.message.Message
4141
import love.forte.simbot.message.MessageContent
4242

@@ -87,7 +87,7 @@ internal abstract class OneBotGroupMessageEventImpl(
8787
override suspend fun reply(message: Message): OneBotMessageReceipt {
8888
return sendGroupMsgApi(
8989
target = sourceEvent.groupId,
90-
message = message.resolveToOneBotSegmentList(),
90+
message = message.resolveToOneBotSegmentList(bot),
9191
reply = sourceEvent.messageId
9292
).requestDataBy(bot).toReceipt(bot)
9393
}

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/event/internal/message/OneBotPrivateMessageEventImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ import love.forte.simbot.component.onebot.v11.core.event.message.OneBotGroupPriv
3232
import love.forte.simbot.component.onebot.v11.core.event.message.OneBotPrivateMessageEvent
3333
import love.forte.simbot.component.onebot.v11.core.internal.message.OneBotMessageContentImpl
3434
import love.forte.simbot.component.onebot.v11.core.internal.message.toReceipt
35+
import love.forte.simbot.component.onebot.v11.core.utils.resolveToOneBotSegmentList
3536
import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateMsgApi
3637
import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateTextMsgApi
3738
import love.forte.simbot.component.onebot.v11.event.message.RawPrivateMessageEvent
3839
import love.forte.simbot.component.onebot.v11.message.OneBotMessageContent
3940
import love.forte.simbot.component.onebot.v11.message.OneBotMessageReceipt
40-
import love.forte.simbot.component.onebot.v11.message.resolveToOneBotSegmentList
4141
import love.forte.simbot.message.Message
4242
import love.forte.simbot.message.MessageContent
4343

@@ -81,7 +81,7 @@ internal abstract class OneBotPrivateMessageEventImpl(
8181
override suspend fun reply(message: Message): OneBotMessageReceipt {
8282
return sendPrivateMsgApi(
8383
target = sourceEvent.userId,
84-
message = message.resolveToOneBotSegmentList()
84+
message = message.resolveToOneBotSegmentList(bot)
8585
).requestDataBy(bot).toReceipt(bot)
8686
}
8787
}

0 commit comments

Comments
 (0)