diff --git a/mirai-core/src/commonMain/kotlin/message/protocol/impl/GeneralMessageSenderProtocol.kt b/mirai-core/src/commonMain/kotlin/message/protocol/impl/GeneralMessageSenderProtocol.kt index 7a4439d24..628e8122c 100644 --- a/mirai-core/src/commonMain/kotlin/message/protocol/impl/GeneralMessageSenderProtocol.kt +++ b/mirai-core/src/commonMain/kotlin/message/protocol/impl/GeneralMessageSenderProtocol.kt @@ -17,6 +17,7 @@ import net.mamoe.mirai.internal.message.protocol.MessageProtocol import net.mamoe.mirai.internal.message.protocol.ProcessorCollector import net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessagePipelineContext import net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessagePipelineContext.Companion.CONTACT +import net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessagePipelineContext.Companion.ORIGINAL_MESSAGE import net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessagePipelineContext.Companion.PROTOCOL_STRATEGY import net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessagePipelineContext.Companion.STEP import net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessageSender @@ -68,10 +69,11 @@ internal class GeneralMessageSenderProtocol : MessageProtocol(PRIORITY_GENERAL_S contact: Contact, packets: List ) = packets.forEach { packet -> - val originalMessage = attributes[OutgoingMessagePipelineContext.ORIGINAL_MESSAGE] + val originalMessage = attributes[ORIGINAL_MESSAGE] + val protocolStrategy = attributes[PROTOCOL_STRATEGY] val finalMessage = currentMessageChain - val resp = bot.network.sendAndExpect(packet) as MessageSvcPbSendMsg.Response + val resp = protocolStrategy.sendPacket(bot, packet) as MessageSvcPbSendMsg.Response if (resp is MessageSvcPbSendMsg.Response.MessageTooLarge) { val next = step.nextStepOrNull() ?: throw MessageTooLargeException( diff --git a/mirai-core/src/commonMain/kotlin/message/protocol/outgoing/MessageProtocolStrategy.kt b/mirai-core/src/commonMain/kotlin/message/protocol/outgoing/MessageProtocolStrategy.kt index 1e5c5fe57..6025e06a8 100644 --- a/mirai-core/src/commonMain/kotlin/message/protocol/outgoing/MessageProtocolStrategy.kt +++ b/mirai-core/src/commonMain/kotlin/message/protocol/outgoing/MessageProtocolStrategy.kt @@ -14,9 +14,11 @@ import kotlinx.coroutines.withTimeoutOrNull import net.mamoe.mirai.event.EventPriority import net.mamoe.mirai.event.GlobalEventChannel import net.mamoe.mirai.event.nextEvent +import net.mamoe.mirai.internal.AbstractBot import net.mamoe.mirai.internal.contact.* import net.mamoe.mirai.internal.message.source.OnlineMessageSourceToFriendImpl import net.mamoe.mirai.internal.message.source.OnlineMessageSourceToGroupImpl +import net.mamoe.mirai.internal.network.Packet import net.mamoe.mirai.internal.network.QQAndroidClient import net.mamoe.mirai.internal.network.component.ComponentKey import net.mamoe.mirai.internal.network.components.ClockHolder.Companion.clock @@ -27,7 +29,10 @@ import net.mamoe.mirai.internal.network.protocol.packet.chat.receive.* import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.OnlineMessageSource -internal sealed interface MessageProtocolStrategy { +internal interface MessageProtocolStrategy { + suspend fun sendPacket(bot: AbstractBot, packet: OutgoingPacket): Packet? { + return bot.network.sendAndExpect(packet) + } suspend fun createPacketsForGeneralMessage( client: QQAndroidClient,