@@ -27,7 +27,6 @@ import love.forte.simbot.telegram.api.TelegramApi
27
27
import love.forte.simbot.telegram.api.message.*
28
28
import love.forte.simbot.telegram.type.ChatId
29
29
import love.forte.simbot.telegram.type.MessageId
30
- import kotlin.jvm.JvmInline
31
30
import kotlin.jvm.JvmName
32
31
import love.forte.simbot.telegram.type.Message as StdlibMessage
33
32
@@ -74,10 +73,18 @@ internal suspend inline fun TelegramBotImpl.send(
74
73
return send(messageContent.messages, chatId) { builderFactory() }
75
74
}
76
75
77
- internal suspend fun TelegramBotImpl.send (
76
+ internal fun TelegramBotImpl.toReceipt (chatId : Long , result : Any ): TelegramSingleMessageReceipt {
77
+ return when (result) {
78
+ is StdlibMessage -> result.toTelegramMessageReceipt(this )
79
+ is MessageId -> result.toTelegramMessageReceipt(this , chatId)
80
+ else -> error(" Unexpected result type: $result " )
81
+ }
82
+ }
83
+
84
+ internal suspend inline fun TelegramBotImpl.send (
78
85
message : Message ,
79
86
chatId : Long ,
80
- builderFactory : BuilderFactory = DefaultBuilderFactory
87
+ crossinline builderFactory : BuilderFactory = { SendMessageApi .builder() }
81
88
): TelegramMessageReceipt {
82
89
val cid = ChatId (chatId)
83
90
val (funcList, marks) = message.resolve(cid) {
@@ -88,21 +95,13 @@ internal suspend fun TelegramBotImpl.send(
88
95
}
89
96
}
90
97
91
- fun toReceipt (result : Any ): TelegramSingleMessageReceipt {
92
- return when (result) {
93
- is StdlibMessage -> result.toTelegramMessageReceipt(this )
94
- is MessageId -> result.toTelegramMessageReceipt(this , chatId)
95
- else -> error(" Unexpected result type: $result " )
96
- }
97
- }
98
-
99
98
when {
100
99
funcList.isEmpty() -> error(" Nothing to send, the message element list is empty." )
101
100
funcList.size == 1 -> {
102
101
val result = funcList.first()(marks).requestDataBy(this )
103
102
return when (result) {
104
- is StdlibMessage -> toReceipt(result)
105
- is MessageId -> toReceipt(result)
103
+ is StdlibMessage -> toReceipt(chatId, result)
104
+ is MessageId -> toReceipt(chatId, result)
106
105
else -> error(" Unexpected result type: $result " )
107
106
}
108
107
}
@@ -163,13 +162,13 @@ internal data class ResolveResult(
163
162
val marks : SendingMarks
164
163
)
165
164
166
- internal suspend fun Message.resolve (
165
+ internal suspend inline fun Message.resolve (
167
166
chatId : ChatId ,
168
- builderFactory : BuilderFactory = DefaultBuilderFactory
167
+ crossinline builderFactory : BuilderFactory = { SendMessageApi .builder() }
169
168
): ResolveResult {
170
169
return when (val m = this ) {
171
170
is Message .Element -> {
172
- val context = SendingMessageResolverContext ( builderFactory)
171
+ val context = SendingMessageResolverContext { builderFactory() }
173
172
for (resolver in sendingResolvers) {
174
173
resolver.resolve(chatId, 0 , m, this , context)
175
174
}
@@ -183,7 +182,7 @@ internal suspend fun Message.resolve(
183
182
return ResolveResult (emptyList(), SendingMarks (0 ))
184
183
}
185
184
186
- val context = SendingMessageResolverContext ( builderFactory)
185
+ val context = SendingMessageResolverContext { builderFactory() }
187
186
m.forEachIndexed { index, element ->
188
187
for (resolver in sendingResolvers) {
189
188
resolver.resolve(chatId, index, element, this , context)
@@ -215,22 +214,8 @@ private val sendingResolvers = listOf(
215
214
216
215
internal typealias BuilderFactory = () -> SendMessageApi .Builder
217
216
218
- internal val DefaultBuilderFactory : BuilderFactory = { SendMessageApi .builder() }
219
-
220
217
internal typealias SendingMessageResolvedFunction = (SendingMarks ) -> TelegramApi <* > // * 只能是 Message 或 MessageId
221
218
222
- private const val PROTECT_CONTENT_MARK = 1 shl 0
223
- private const val DISABLE_NOTIFICATION_MARK = 1 shl 1
224
-
225
-
226
- @JvmInline
227
- internal value class SendingMarks (internal val value : Int ) {
228
- val isProtectContent: Boolean
229
- get() = value and PROTECT_CONTENT_MARK != 0
230
- val isDisableNotification: Boolean
231
- get() = value and DISABLE_NOTIFICATION_MARK != 0
232
- }
233
-
234
219
internal class SendingMessageResolverContext (
235
220
private val builderFactory : BuilderFactory ,
236
221
) {
0 commit comments