diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
index ef72e5d7a..9f76eca5e 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
@@ -37,10 +37,6 @@ internal abstract class QQAndroidBotBase constructor(
         return qqs.delegate.filteringGetOrAdd({ it.id == id }, { QQImpl(this as QQAndroidBot, coroutineContext, id) })
     }
 
-    fun getQQOrAdd(id: Long): QQ {
-        return qqs.delegate.filteringGetOrAdd({ it.id == id }, { QQImpl(this as QQAndroidBot, coroutineContext, id) })
-    }
-
     override fun QQ(id: Long): QQ {
         return QQImpl(this as QQAndroidBot, coroutineContext, id)
     }
diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
index 410129f5e..1110f75ee 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
@@ -115,7 +115,8 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
 
         //val msg = MessageSvc.PbGetMsg(bot.client, MsgSvc.SyncFlag.START, currentTimeSeconds).sendAndExpect<MessageSvc.PbGetMsg.Response>()
         //println(msg.contentToString())
-
+        bot.qqs.delegate.clear()
+        bot.groups.delegate.clear()
 
         val startTime = currentTimeMillis
         try {
@@ -472,12 +473,12 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
     /**
      * 发送一个包, 并挂起直到接收到指定的返回包或超时(3000ms)
      */
-    suspend fun <E : Packet> OutgoingPacket.sendAndExpect(timeoutMillis: Long = 3000, retry: Int = 1): E {
+    suspend fun <E : Packet> OutgoingPacket.sendAndExpect(timeoutMillis: Long = 3000, retry: Int = 0): E {
         require(timeoutMillis > 0) { "timeoutMillis must > 0" }
         require(retry >= 0) { "retry must >= 0" }
 
         var lastException: Exception? = null
-        repeat(retry + 1) {
+        if (retry == 0) {
             val handler = PacketListener(commandName = commandName, sequenceId = sequenceId)
             packetListeners.addLast(handler)
             try {
@@ -492,13 +493,33 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
                 } ?: net.mamoe.mirai.qqandroid.utils.inline {
                     error("timeout when receiving response of $commandName")
                 }
-            } catch (e: Exception) {
-                lastException = e
             } finally {
                 packetListeners.remove(handler)
             }
+        } else this.delegate.useBytes { data, length ->
+            repeat(retry + 1) {
+                val handler = PacketListener(commandName = commandName, sequenceId = sequenceId)
+                packetListeners.addLast(handler)
+                try {
+                    withContext(this@QQAndroidBotNetworkHandler.coroutineContext + CoroutineName("Packet sender")) {
+                        channel.send(data, 0, length)
+                    }
+                    bot.logger.info("Send: ${this.commandName}")
+                    return withTimeoutOrNull(timeoutMillis) {
+                        @Suppress("UNCHECKED_CAST")
+                        handler.await() as E
+                        // 不要 `withTimeout`. timeout 的异常会不知道去哪了.
+                    } ?: net.mamoe.mirai.qqandroid.utils.inline {
+                        error("timeout when receiving response of $commandName")
+                    }
+                } catch (e: Exception) {
+                    lastException = e
+                } finally {
+                    packetListeners.remove(handler)
+                }
+            }
+            throw lastException!!
         }
-        throw lastException!!
     }
 
     @PublishedApi