mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-23 22:00:10 +08:00
Fix image uploading; fix #944
This commit is contained in:
parent
280e0655f1
commit
918007df9b
@ -18,12 +18,14 @@ import net.mamoe.mirai.event.events.*
|
||||
import net.mamoe.mirai.internal.message.OfflineFriendImage
|
||||
import net.mamoe.mirai.internal.message.contextualBugReportException
|
||||
import net.mamoe.mirai.internal.message.getImageType
|
||||
import net.mamoe.mirai.internal.network.BdhSession
|
||||
import net.mamoe.mirai.internal.network.highway.ChannelKind
|
||||
import net.mamoe.mirai.internal.network.highway.Highway
|
||||
import net.mamoe.mirai.internal.network.highway.ResourceKind.PRIVATE_IMAGE
|
||||
import net.mamoe.mirai.internal.network.highway.postImage
|
||||
import net.mamoe.mirai.internal.network.highway.tryServers
|
||||
import net.mamoe.mirai.internal.network.protocol.data.proto.Cmd0x352
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.EMPTY_BYTE_ARRAY
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.chat.image.ImgStore
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.chat.image.LongConn
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.sendAndExpect
|
||||
@ -133,7 +135,14 @@ internal abstract class AbstractUser(
|
||||
resource = resource,
|
||||
kind = PRIVATE_IMAGE,
|
||||
commandId = 2,
|
||||
initialTicket = response.uKey
|
||||
initialTicket = response.uKey,
|
||||
fallbackSession = {
|
||||
BdhSession(
|
||||
EMPTY_BYTE_ARRAY, EMPTY_BYTE_ARRAY,
|
||||
ssoAddresses = response.uploadIpList.zip(response.uploadPortList)
|
||||
.toMutableSet(),
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -21,11 +21,13 @@ import net.mamoe.mirai.event.broadcast
|
||||
import net.mamoe.mirai.event.events.*
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.message.*
|
||||
import net.mamoe.mirai.internal.network.BdhSession
|
||||
import net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler
|
||||
import net.mamoe.mirai.internal.network.highway.*
|
||||
import net.mamoe.mirai.internal.network.highway.ResourceKind.GROUP_IMAGE
|
||||
import net.mamoe.mirai.internal.network.highway.ResourceKind.GROUP_VOICE
|
||||
import net.mamoe.mirai.internal.network.protocol.data.proto.Cmd0x388
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.EMPTY_BYTE_ARRAY
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.chat.TroopEssenceMsgManager
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.chat.image.ImgStore
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.chat.voice.PttStore
|
||||
@ -166,7 +168,14 @@ internal class GroupImpl(
|
||||
resource = resource,
|
||||
kind = GROUP_IMAGE,
|
||||
commandId = 2,
|
||||
initialTicket = response.uKey
|
||||
initialTicket = response.uKey,
|
||||
noBdhAwait = true,
|
||||
fallbackSession = {
|
||||
BdhSession(
|
||||
EMPTY_BYTE_ARRAY, EMPTY_BYTE_ARRAY,
|
||||
ssoAddresses = response.uploadIpList.zip(response.uploadPortList).toMutableSet(),
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
return OfflineGroupImage(imageId = resource.calculateResourceId())
|
||||
|
@ -21,6 +21,7 @@ import kotlinx.io.core.buildPacket
|
||||
import kotlinx.io.core.discardExact
|
||||
import kotlinx.io.core.writeFully
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.network.BdhSession
|
||||
import net.mamoe.mirai.internal.network.QQAndroidClient
|
||||
import net.mamoe.mirai.internal.network.protocol.data.proto.CSDataHighwayHead
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.EMPTY_BYTE_ARRAY
|
||||
@ -52,8 +53,15 @@ internal object Highway {
|
||||
encrypt: Boolean = false,
|
||||
initialTicket: ByteArray? = null,
|
||||
tryOnce: Boolean = false,
|
||||
noBdhAwait: Boolean = false,
|
||||
fallbackSession: (Throwable) -> BdhSession = { throw IllegalStateException("Failed to get bdh session", it) }
|
||||
): BdhUploadResponse {
|
||||
val bdhSession = bot.client.bdhSession.await() // no need to care about timeout. proceed by bot init
|
||||
val bdhSession = kotlin.runCatching {
|
||||
val deferred = bot.client.bdhSession
|
||||
// no need to care about timeout. proceed by bot init
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
if (noBdhAwait) deferred.getCompleted() else deferred.await()
|
||||
}.getOrElse(fallbackSession)
|
||||
|
||||
return tryServers(
|
||||
bot = bot,
|
||||
|
Loading…
Reference in New Issue
Block a user