Merge remote-tracking branch 'origin/master'

This commit is contained in:
Him188 2020-04-05 23:51:51 +08:00
commit eaa1e96ab5
4 changed files with 30 additions and 20 deletions

View File

@ -102,6 +102,9 @@ Demos: [mirai-demos](https://github.com/mamoe/mirai-demos)
[<img width="60px" height="60px" src="https://avatars0.githubusercontent.com/u/20042607?s=60&v=4" />](https://github.com/PragmaTwice) [<img width="60px" height="60px" src="https://avatars0.githubusercontent.com/u/20042607?s=60&v=4" />](https://github.com/PragmaTwice)
[<img width="60px" height="60px" src="https://avatars0.githubusercontent.com/u/25280943?s=60&v=4" />](https://github.com/HoshinoTented) [<img width="60px" height="60px" src="https://avatars0.githubusercontent.com/u/25280943?s=60&v=4" />](https://github.com/HoshinoTented)
[<img width="60px" height="60px" src="https://avatars3.githubusercontent.com/u/40517459?s=60&v=4" />](https://github.com/Cyenoch) [<img width="60px" height="60px" src="https://avatars3.githubusercontent.com/u/40517459?s=60&v=4" />](https://github.com/Cyenoch)
[<img width="60px" height="60px" src="https://avatars1.githubusercontent.com/u/31543961?s=60&v=4" />](https://github.com/Chenwe-i-lin)
[<img width="60px" height="60px" src="https://avatars1.githubusercontent.com/u/13938334?s=60&v=4" />](https://github.com/lengthmin)
## 鸣谢 ## 鸣谢

View File

@ -32,6 +32,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.TroopManagement
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.ImgStore 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.network.protocol.packet.chat.receive.MessageSvc
import net.mamoe.mirai.qqandroid.utils.estimateLength
import net.mamoe.mirai.qqandroid.utils.toIpV4AddressString import net.mamoe.mirai.qqandroid.utils.toIpV4AddressString
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
@ -286,8 +287,10 @@ internal class GroupImpl(
throw EventCancelledException("cancelled by GroupMessageSendEvent") throw EventCancelledException("cancelled by GroupMessageSendEvent")
} }
val length = event.message.toString().length val length = event.message.estimateLength(703) // 阈值为700左右限制到3的倍数
if (!(length <= 5000 && event.message.count { it is Image } <= 50)) { var imageCnt = 0 // 通过下方逻辑短路延迟计算
if (length > 5000 || event.message.count { it is Image }.apply { imageCnt = this } > 50) {
throw MessageTooLargeException( throw MessageTooLargeException(
this, this,
message, message,
@ -299,13 +302,8 @@ internal class GroupImpl(
) )
} }
val imageCount = event.message.count { it is Image } if (length > 702 || imageCnt > 2)
return bot.lowLevelSendLongGroupMessage(this.id, event.message)
if (length >= 800
|| imageCount >= 4
|| (event.message.any<QuoteReply>()
&& (imageCount != 0 || length > 100))
) return bot.lowLevelSendLongGroupMessage(this.id, event.message)
msg = event.message msg = event.message
} else msg = message.asMessageChain() } else msg = message.asMessageChain()

View File

@ -12,6 +12,7 @@
package net.mamoe.mirai.qqandroid.utils package net.mamoe.mirai.qqandroid.utils
import net.mamoe.mirai.message.data.*
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
@ -30,9 +31,15 @@ internal fun Int.toIpV4AddressString(): String {
} }
} }
/*
internal fun String.chineseLength(upTo: Int): Int { internal fun String.chineseLength(upTo: Int): Int {
return this.sumUpTo(upTo) { if (it in '\u0391'..'\uFFE5') 3 else 1 } return this.sumUpTo(upTo) {
when(it) {
in '\u0000'..'\u007F' -> 1
in '\u0080'..'\u07FF' -> 2
in '\u0800'..'\uFFFF' -> 3
else -> 4
}
}
} }
internal fun MessageChain.estimateLength(upTo: Int = Int.MAX_VALUE): Int = internal fun MessageChain.estimateLength(upTo: Int = Int.MAX_VALUE): Int =
@ -42,10 +49,8 @@ internal fun MessageChain.estimateLength(upTo: Int = Int.MAX_VALUE): Int =
internal fun SingleMessage.estimateLength(upTo: Int = Int.MAX_VALUE): Int { internal fun SingleMessage.estimateLength(upTo: Int = Int.MAX_VALUE): Int {
return when (this) { return when (this) {
is QuoteReply -> { is QuoteReply -> 444 // Magic number
700 is Image -> 260 // Magic number
}
// is Image -> 300
is PlainText -> stringValue.chineseLength(upTo) is PlainText -> stringValue.chineseLength(upTo)
is At -> display.chineseLength(upTo) is At -> display.chineseLength(upTo)
is AtAll -> display.chineseLength(upTo) is AtAll -> display.chineseLength(upTo)
@ -74,4 +79,3 @@ internal inline fun CharSequence.sumUpTo(upTo: Int, selector: (Char) -> Int): In
} }
return sum return sum
} }
*/

View File

@ -2,6 +2,7 @@
package net.mamoe.mirai.qqandroid.io.serialization package net.mamoe.mirai.qqandroid.io.serialization
/*
import kotlinx.io.core.buildPacket import kotlinx.io.core.buildPacket
import kotlinx.io.core.toByteArray import kotlinx.io.core.toByteArray
import kotlinx.io.core.writeFully import kotlinx.io.core.writeFully
@ -31,6 +32,7 @@ internal const val STRUCT_BEGIN: Byte = 10
internal const val STRUCT_END: Byte = 11 internal const val STRUCT_END: Byte = 11
internal const val ZERO_TYPE: Byte = 12 internal const val ZERO_TYPE: Byte = 12
*/
/* /*
* Copyright 2020 Mamoe Technologies and contributors. * Copyright 2020 Mamoe Technologies and contributors.
* *
@ -38,7 +40,8 @@ internal const val ZERO_TYPE: Byte = 12
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
* *
* https://github.com/mamoe/mirai/blob/master/LICENSE * https://github.com/mamoe/mirai/blob/master/LICENSE
*/ *//*
@Suppress("INVISIBLE_MEMBER") // bug @Suppress("INVISIBLE_MEMBER") // bug
internal class JceInputTest { internal class JceInputTest {
init { init {
@ -146,10 +149,12 @@ internal class JceInputTest {
assertEquals( assertEquals(
TestSerializableClassA( TestSerializableClassA(
/*mapOf( */
/*mapOf(
TestSerializableClassB(123, TestSerializableClassC(123123), 9) TestSerializableClassB(123, TestSerializableClassC(123123), 9)
to TestSerializableClassC(123123) to TestSerializableClassC(123123)
)*/ )*//*
"1" "1"
), ),
Jce.UTF_8.load(TestSerializableClassA.serializer(), input) Jce.UTF_8.load(TestSerializableClassA.serializer(), input)
@ -582,4 +587,4 @@ internal class JceInputTest {
assertEquals(123456.0, input.useHead { input.readJceDoubleValue(it) }) assertEquals(123456.0, input.useHead { input.readJceDoubleValue(it) })
assertEquals(true, input.useHead { input.readJceBooleanValue(it) }) assertEquals(true, input.useHead { input.readJceBooleanValue(it) })
} }
} }*/