|
|
@@ -30,8 +30,7 @@ import net.mamoe.mirai.qqandroid.network.highway.HighwayHelper
|
|
|
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
|
|
|
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.ImgStore
|
|
|
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc
|
|
|
-import net.mamoe.mirai.qqandroid.utils.chineseLength
|
|
|
-import net.mamoe.mirai.qqandroid.utils.sumUpTo
|
|
|
+import net.mamoe.mirai.qqandroid.utils.estimateLength
|
|
|
import net.mamoe.mirai.qqandroid.utils.toIpV4AddressString
|
|
|
import net.mamoe.mirai.utils.*
|
|
|
import kotlin.contracts.ExperimentalContracts
|
|
|
@@ -277,30 +276,30 @@ internal class GroupImpl(
|
|
|
@JvmSynthetic
|
|
|
override suspend fun sendMessage(message: Message): MessageReceipt<Group> {
|
|
|
check(!isBotMuted) { "bot is muted. Remaining seconds=$botMuteRemaining" }
|
|
|
- val event = GroupMessageSendEvent(this, message.asMessageChain()).broadcast()
|
|
|
- if (event.isCancelled) {
|
|
|
- throw EventCancelledException("cancelled by GroupMessageSendEvent")
|
|
|
- }
|
|
|
+
|
|
|
+ val msg: MessageChain
|
|
|
|
|
|
if (message !is LongMessage) {
|
|
|
- if (event.message.sumUpTo(800) { it, upTo ->
|
|
|
- when (it) {
|
|
|
- is QuoteReply -> 700
|
|
|
- is Image -> 300
|
|
|
- is PlainText -> it.stringValue.chineseLength(upTo)
|
|
|
- else -> it.toString().length
|
|
|
- }
|
|
|
- } >= 800) {
|
|
|
- return bot._lowLevelSendLongGroupMessage(this.id, message)
|
|
|
+ val event = GroupMessageSendEvent(this, message.asMessageChain()).broadcast()
|
|
|
+ if (event.isCancelled) {
|
|
|
+ throw EventCancelledException("cancelled by GroupMessageSendEvent")
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ val length = event.message.estimateLength(4501)
|
|
|
+ check(length <= 4500 && event.message.count { it is Image } <= 50) { "message is too large. Allow up to 4500 chars or 50 images" }
|
|
|
+ if (length >= 800) {
|
|
|
+ return bot._lowLevelSendLongGroupMessage(this.id, event.message)
|
|
|
+ }
|
|
|
+
|
|
|
+ msg = event.message
|
|
|
+ } else msg = message.asMessageChain()
|
|
|
|
|
|
lateinit var source: MessageSourceFromSendGroup
|
|
|
bot.network.run {
|
|
|
val response: MessageSvc.PbSendMsg.Response = MessageSvc.PbSendMsg.ToGroup(
|
|
|
bot.client,
|
|
|
id,
|
|
|
- event.message
|
|
|
+ msg
|
|
|
) {
|
|
|
source = it
|
|
|
source.startWaitingSequenceId(this)
|