@@ -27,16 +27,21 @@ import love.forte.simbot.component.onebot.v11.core.actor.OneBotMemberRole
2727import love.forte.simbot.component.onebot.v11.core.actor.OneBotStranger
2828import love.forte.simbot.component.onebot.v11.core.api.*
2929import love.forte.simbot.component.onebot.v11.core.bot.internal.OneBotBotImpl
30+ import love.forte.simbot.component.onebot.v11.core.event.internal.messageinteraction.OneBotMemberPostSendEventImpl
31+ import love.forte.simbot.component.onebot.v11.core.event.internal.messageinteraction.OneBotMemberPreSendEventImpl
32+ import love.forte.simbot.component.onebot.v11.core.event.messageinteraction.OneBotSegmentsInteractionMessage
33+ import love.forte.simbot.component.onebot.v11.core.event.messageinteraction.segmentsOrNull
34+ import love.forte.simbot.component.onebot.v11.core.event.messageinteraction.toOneBotSegmentsInteractionMessage
3035import love.forte.simbot.component.onebot.v11.core.internal.message.toReceipt
31- import love.forte.simbot.component.onebot.v11.core.utils.resolveToOneBotSegmentList
32- import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateMsgApi
33- import love.forte.simbot.component.onebot.v11.core.utils.sendPrivateTextMsgApi
36+ import love.forte.simbot.component.onebot.v11.core.utils.*
3437import love.forte.simbot.component.onebot.v11.event.message.RawGroupMessageEvent
3538import love.forte.simbot.component.onebot.v11.event.message.RawPrivateMessageEvent
36- import love.forte.simbot.component.onebot.v11.message.OneBotMessageContent
3739import love.forte.simbot.component.onebot.v11.message.OneBotMessageReceipt
40+ import love.forte.simbot.component.onebot.v11.message.segment.OneBotMessageSegment
41+ import love.forte.simbot.event.InteractionMessage
3842import love.forte.simbot.message.Message
3943import love.forte.simbot.message.MessageContent
44+ import love.forte.simbot.message.PlainText
4045import kotlin.concurrent.Volatile
4146import kotlin.coroutines.CoroutineContext
4247import kotlin.jvm.JvmInline
@@ -61,34 +66,87 @@ internal abstract class OneBotMemberImpl(
6166 override var nick: String? = initialNick
6267
6368 override suspend fun send (text : String ): OneBotMessageReceipt {
69+ val interactionMessage = OneBotSegmentsInteractionMessage (text = text)
70+ return interceptionAndSend(interactionMessage)
71+ }
72+
73+ override suspend fun send (messageContent : MessageContent ): OneBotMessageReceipt {
74+ val interactionMessage = OneBotSegmentsInteractionMessage (content = messageContent)
75+ return interceptionAndSend(interactionMessage)
76+ }
77+
78+ override suspend fun send (message : Message ): OneBotMessageReceipt {
79+ val interactionMessage = OneBotSegmentsInteractionMessage (message = message, bot = bot)
80+ return interceptionAndSend(interactionMessage)
81+ }
82+
83+ private suspend fun interceptionAndSend (
84+ interactionMessage : OneBotSegmentsInteractionMessage
85+ ): OneBotMessageReceipt {
86+ val event = OneBotMemberPreSendEventImpl (
87+ this ,
88+ bot,
89+ interactionMessage
90+ )
91+
92+ val currentMessage = bot.emitMessagePreSendEventAndUseCurrentMessage(event)
93+ val segments = currentMessage.segmentsOrNull
94+ if (segments != null ) {
95+ return sendSegments(segments).toReceipt(bot).alsoPostSend(currentMessage)
96+ }
97+
98+ return sendByInteractionMessage(currentMessage).toReceipt(bot).alsoPostSend(currentMessage)
99+ }
100+
101+ /* *
102+ * 解析一个 [InteractionMessage] 为一个 [OneBotMessageSegment] 的列表并发送。
103+ * 始终认为 `segments` 为 `null`。
104+ */
105+ private suspend fun sendByInteractionMessage (interactionMessage : InteractionMessage ): SendMsgResult {
106+ return resolveInteractionMessage(
107+ interactionMessage = interactionMessage,
108+ onSegments = { sendSegments(it) },
109+ onMessage = { sendMessage(it) },
110+ onText = { sendText(it) },
111+ )
112+ }
113+
114+ private suspend fun sendText (text : String ): SendMsgResult {
64115 return bot.executeData(
65116 sendPrivateTextMsgApi(
66117 target = id,
67118 text = text,
68119 )
69- ).toReceipt(bot)
120+ )
70121 }
71122
72- override suspend fun send (messageContent : MessageContent ): OneBotMessageReceipt {
73- if (messageContent is OneBotMessageContent ) {
74- return bot.executeData(
75- sendPrivateMsgApi(
76- target = id,
77- message = messageContent.sourceSegments,
78- )
79- ).toReceipt(bot)
123+ private suspend fun sendMessage (message : Message ): SendMsgResult {
124+ return when (message) {
125+ is PlainText -> sendText(message.text)
126+ else -> sendSegments(message.resolveToOneBotSegmentList(bot))
80127 }
81-
82- return send(messageContent.messages)
83128 }
84129
85- override suspend fun send ( message : Message ): OneBotMessageReceipt {
130+ private suspend fun sendSegments ( segments : List < OneBotMessageSegment > ): SendMsgResult {
86131 return bot.executeData(
87132 sendPrivateMsgApi(
88133 target = id,
89- message = message.resolveToOneBotSegmentList(bot)
134+ message = segments,
90135 )
91- ).toReceipt(bot)
136+ )
137+ }
138+
139+ private fun OneBotMessageReceipt.alsoPostSend (
140+ interactionMessage : InteractionMessage
141+ ): OneBotMessageReceipt = apply {
142+ val event = OneBotMemberPostSendEventImpl (
143+ content = this @OneBotMemberImpl,
144+ bot = bot,
145+ receipt = this ,
146+ message = interactionMessage.toOneBotSegmentsInteractionMessage()
147+ )
148+
149+ bot.pushEventAndLaunch(event)
92150 }
93151
94152 override suspend fun delete (vararg options : DeleteOption ) {
0 commit comments