diff --git a/mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt b/mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
index c9936f510..fd14c7c7c 100644
--- a/mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
+++ b/mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
@@ -5,6 +5,7 @@ import android.net.wifi.WifiManager
 import android.os.Build
 import android.telephony.TelephonyManager
 import kotlinx.io.core.toByteArray
+import net.mamoe.mirai.utils.Context
 import net.mamoe.mirai.utils.localIpAddress
 import net.mamoe.mirai.utils.md5
 import java.io.File
diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt
index 149e1bf62..77017e058 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/data/proto/SyncCookie.kt
@@ -11,6 +11,6 @@ class SyncCookie(
     @SerialId(4) val unknown2: Long = 3497826378,
     @SerialId(5) val const1: Long = 1680172298,
     @SerialId(6) val const2: Long = 2424173273,
-    @SerialId(7) val unknown3: Long = 83,
+    @SerialId(7) val unknown3: Long = 0,
     @SerialId(8) val unknown4: Long = 0
 ) : ProtoBuf
\ No newline at end of file
diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt
index b34eaf445..5a9906d45 100644
--- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt
+++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt
@@ -27,7 +27,6 @@ import net.mamoe.mirai.qqandroid.utils.toRichTextElems
 import net.mamoe.mirai.utils.cryptor.contentToString
 import net.mamoe.mirai.utils.currentTimeSeconds
 import net.mamoe.mirai.utils.io.hexToBytes
-import net.mamoe.mirai.utils.io.toReadPacket
 import kotlin.math.absoluteValue
 import kotlin.random.Random
 
@@ -61,8 +60,8 @@ internal class MessageSvc {
             client: QQAndroidClient,
             msgTime: Long //PbPushMsg.msg.msgHead.msgTime
         ): OutgoingPacket = buildOutgoingUniPacket(
-            client,
-            extraData = EXTRA_DATA.toReadPacket()
+            client//,
+            //  extraData = EXTRA_DATA.toReadPacket()
         ) {
             writeProtoBuf(
                 MsgSvc.PbGetMsgReq.serializer(),
diff --git a/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPC.kt b/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPC.kt
index b8060c3ff..c24a4d49f 100644
--- a/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPC.kt
+++ b/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPC.kt
@@ -24,4 +24,10 @@ object TIMPC : BotFactory {
      * 使用指定的 [配置][configuration] 构造 [Bot] 实例
      */
     fun Bot(qq: Long, password: String, configuration: BotConfiguration = BotConfiguration.Default): Bot = TIMPCBot(BotAccount(qq, password), configuration)
-}
\ No newline at end of file
+}
+
+/**
+ * 使用指定的 [配置][configuration] 构造 [Bot] 实例
+ */
+inline fun TIMPC.Bot(qq: Long, password: String, configuration: (BotConfiguration.() -> Unit)): Bot =
+    this.Bot(qq, password, BotConfiguration().apply(configuration))
\ No newline at end of file
diff --git a/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/TIMPCBotNetworkHandler.kt b/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/TIMPCBotNetworkHandler.kt
index c4ec231f1..933e96dd1 100644
--- a/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/TIMPCBotNetworkHandler.kt
+++ b/mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/TIMPCBotNetworkHandler.kt
@@ -91,7 +91,7 @@ internal class TIMPCBotNetworkHandler internal constructor(coroutineContext: Cor
         heartbeatJob?.join()
     }
 
-    override fun dispose(cause: Throwable?) {
+    override fun close(cause: Throwable?) {
         super.close(cause)
 
         this.heartbeatJob?.cancel(CancellationException("handler closed"))
@@ -312,6 +312,7 @@ internal class TIMPCBotNetworkHandler internal constructor(coroutineContext: Cor
                 else -> error("No decrypter is found")
             } as? D ?: error("Internal error: could not cast decrypter which is found for factory to class Decrypter")
 
+        @UseExperimental(MiraiInternalAPI::class)
         suspend fun onPacketReceived(packet: Any) {//complex function, but it doesn't matter
             when (packet) {
                 is TouchPacket.TouchResponse.OK -> {
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/BotFactoryJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/BotFactoryJvm.kt
index 4796b2278..588ee8ea1 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/BotFactoryJvm.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/BotFactoryJvm.kt
@@ -4,6 +4,7 @@ package net.mamoe.mirai
 
 import net.mamoe.mirai.utils.BotConfiguration
 import net.mamoe.mirai.utils.Context
+import net.mamoe.mirai.utils.ContextImpl
 
 // Do not use ServiceLoader. Probably not working on MPP
 @PublishedApi
@@ -41,4 +42,17 @@ fun Bot(context: Context, qq: Long, password: String, configuration: BotConfigur
  * 加载现有协议的 [BotFactory], 并使用指定的 [配置][configuration] 构造 [Bot] 实例
  */
 inline fun Bot(context: Context, qq: Long, password: String, configuration: (BotConfiguration.() -> Unit)): Bot =
-    factory.Bot(context, qq, password, configuration)
\ No newline at end of file
+    factory.Bot(context, qq, password, configuration)
+
+
+/**
+ * 加载现有协议的 [BotFactory], 并使用指定的 [配置][configuration] 构造 [Bot] 实例
+ */
+fun Bot(qq: Long, password: String, configuration: BotConfiguration = BotConfiguration.Default): Bot =
+    factory.Bot(ContextImpl(), qq, password, configuration)
+
+/**
+ * 加载现有协议的 [BotFactory], 并使用指定的 [配置][configuration] 构造 [Bot] 实例
+ */
+inline fun Bot(qq: Long, password: String, configuration: (BotConfiguration.() -> Unit)): Bot =
+    factory.Bot(ContextImpl(), qq, password, configuration)
\ No newline at end of file
diff --git a/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt b/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt
index e1f898ce4..c86a43c3e 100644
--- a/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt
+++ b/mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt
@@ -17,6 +17,7 @@ import net.mamoe.mirai.message.data.ImageId
 import net.mamoe.mirai.message.data.PlainText
 import net.mamoe.mirai.message.data.firstOrNull
 import net.mamoe.mirai.message.sendAsImageTo
+import net.mamoe.mirai.timpc.Bot
 import net.mamoe.mirai.timpc.TIMPC
 import net.mamoe.mirai.utils.suspendToExternalImage
 import java.io.File
@@ -39,10 +40,8 @@ private fun readTestAccount(): BotAccount? {
 @Suppress("UNUSED_VARIABLE")
 suspend fun main() {
     val bot = TIMPC.Bot( // JVM 下也可以不写 `TIMPC.` 引用顶层函数
-        readTestAccount() ?: BotAccount(//填写你的账号
-            id = 1994701121,
-            passwordPlainText = "123456"
-        )
+        1994701121,
+        "123456"
     ) {
         // 覆盖默认的配置
         randomDeviceName = false
@@ -134,6 +133,7 @@ fun Bot.messageDSL() {
             reply(message)
         }
 
+        listener.complete() // 停止监听
 
         // 自定义的 filter, filter 中 it 为转为 String 的消息.
         // 也可以用任何能在处理时使用的变量, 如 subject, sender, message
diff --git a/mirai-demos/mirai-demo-android/src/main/kotlin/net/mamoe/mirai/demo/MiraiService.kt b/mirai-demos/mirai-demo-android/src/main/kotlin/net/mamoe/mirai/demo/MiraiService.kt
index 1492693fe..1297be2f9 100644
--- a/mirai-demos/mirai-demo-android/src/main/kotlin/net/mamoe/mirai/demo/MiraiService.kt
+++ b/mirai-demos/mirai-demo-android/src/main/kotlin/net/mamoe/mirai/demo/MiraiService.kt
@@ -14,6 +14,7 @@ import kotlinx.io.core.IoBuffer
 import kotlinx.io.core.readBytes
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.event.subscribeMessages
+import net.mamoe.mirai.timpc.Bot
 import net.mamoe.mirai.timpc.TIMPC
 import net.mamoe.mirai.utils.LoginFailedException
 import net.mamoe.mirai.utils.LoginSolver
diff --git a/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt b/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
index 98cf4a85a..06455d10f 100644
--- a/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
+++ b/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
@@ -8,7 +8,6 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 import net.mamoe.mirai.Bot
-import net.mamoe.mirai.BotAccount
 import net.mamoe.mirai.alsoLogin
 import net.mamoe.mirai.contact.MemberPermission
 import net.mamoe.mirai.event.Subscribable
@@ -23,32 +22,18 @@ import net.mamoe.mirai.message.data.Image
 import net.mamoe.mirai.message.data.buildXMLMessage
 import net.mamoe.mirai.message.data.getValue
 import net.mamoe.mirai.message.sendAsImageTo
+import net.mamoe.mirai.utils.ContextImpl
 import java.io.File
 import java.util.*
 import javax.swing.filechooser.FileSystemView
 import kotlin.random.Random
 
-private fun readTestAccount(): BotAccount? {
-    val file = File("testAccount.txt")
-    if (!file.exists() || !file.canRead()) {
-        return null
-    }
-
-    val lines = file.readLines()
-    return try {
-        BotAccount(lines[0].toLong(), lines[1])
-    } catch (e: Throwable) {
-        null
-    }
-}
-
 @Suppress("UNUSED_VARIABLE")
 suspend fun main() {
     val bot = Bot(
-        readTestAccount() ?: BotAccount(
-            id = 913366033,
-            passwordPlainText = "a18260132383"
-        )
+        ContextImpl(),
+        913366033,
+        "a18260132383"
     ) {
         // override config here.
     }.alsoLogin()