Commit 0c6e0936 authored by Him188's avatar Him188

Rename protocol.tim to protocol.timpc

parent 20f52987
...@@ -8,7 +8,7 @@ import kotlinx.io.core.use ...@@ -8,7 +8,7 @@ import kotlinx.io.core.use
import kotlinx.io.streams.inputStream import kotlinx.io.streams.inputStream
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.message.Image import net.mamoe.mirai.message.Image
import net.mamoe.mirai.network.protocol.tim.packet.SessionKey import net.mamoe.mirai.network.protocol.timpc.packet.SessionKey
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import java.io.InputStream import java.io.InputStream
......
package net.mamoe.mirai.network.protocol.tim package net.mamoe.mirai.network.protocol.timpc
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher
......
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
......
...@@ -3,12 +3,16 @@ package net.mamoe.mirai.utils ...@@ -3,12 +3,16 @@ package net.mamoe.mirai.utils
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO import io.ktor.client.engine.cio.CIO
import io.ktor.util.KtorExperimentalAPI import io.ktor.util.KtorExperimentalAPI
import kotlinx.io.core.IoBuffer
import kotlinx.io.core.readBytes
import java.io.ByteArrayOutputStream
import java.io.DataInput import java.io.DataInput
import java.io.EOFException import java.io.EOFException
import java.io.InputStream import java.io.InputStream
import java.net.InetAddress import java.net.InetAddress
import java.security.MessageDigest import java.security.MessageDigest
import java.util.zip.CRC32 import java.util.zip.CRC32
import java.util.zip.Inflater
/** /**
...@@ -75,3 +79,16 @@ actual fun crc32(key: ByteArray): Int = CRC32().apply { update(key) }.value.toIn ...@@ -75,3 +79,16 @@ actual fun crc32(key: ByteArray): Int = CRC32().apply { update(key) }.value.toIn
* hostname 解析 ipv4 * hostname 解析 ipv4
*/ */
actual fun solveIpAddress(hostname: String): String = InetAddress.getByName(hostname).hostAddress actual fun solveIpAddress(hostname: String): String = InetAddress.getByName(hostname).hostAddress
actual fun ByteArray.unzip(): ByteArray {
val inflater = Inflater()
inflater.reset()
val output = ByteArrayOutputStream()
inflater.setInput(this)
val buffer = ByteArray(128)
while (!inflater.finished()) {
output.write(buffer, 0, inflater.inflate(buffer))
}
inflater.end()
return output.toByteArray()
}
\ No newline at end of file
...@@ -7,7 +7,7 @@ import kotlinx.coroutines.Deferred ...@@ -7,7 +7,7 @@ import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import net.mamoe.mirai.contact.* import net.mamoe.mirai.contact.*
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
import net.mamoe.mirai.utils.BotConfiguration import net.mamoe.mirai.utils.BotConfiguration
import net.mamoe.mirai.utils.GroupNotFoundException import net.mamoe.mirai.utils.GroupNotFoundException
import net.mamoe.mirai.utils.MiraiLogger import net.mamoe.mirai.utils.MiraiLogger
......
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
package net.mamoe.mirai package net.mamoe.mirai
import net.mamoe.mirai.network.protocol.tim.packet.action.AddFriendPacket import net.mamoe.mirai.network.protocol.timpc.packet.action.AddFriendPacket
import net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendPacket import net.mamoe.mirai.network.protocol.timpc.packet.action.CanAddFriendPacket
import net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendResponse import net.mamoe.mirai.network.protocol.timpc.packet.action.CanAddFriendResponse
import net.mamoe.mirai.network.protocol.tim.packet.action.RequestFriendAdditionKeyPacket import net.mamoe.mirai.network.protocol.timpc.packet.action.RequestFriendAdditionKeyPacket
import net.mamoe.mirai.network.sessionKey import net.mamoe.mirai.network.sessionKey
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
......
...@@ -7,10 +7,10 @@ package net.mamoe.mirai ...@@ -7,10 +7,10 @@ package net.mamoe.mirai
import net.mamoe.mirai.contact.* import net.mamoe.mirai.contact.*
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler import net.mamoe.mirai.network.protocol.timpc.TIMBotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket import net.mamoe.mirai.network.protocol.timpc.packet.OutgoingPacket
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
import net.mamoe.mirai.network.protocol.tim.packet.login.requireSuccess import net.mamoe.mirai.network.protocol.timpc.packet.login.requireSuccess
import net.mamoe.mirai.utils.BotConfiguration import net.mamoe.mirai.utils.BotConfiguration
import net.mamoe.mirai.utils.internal.PositiveNumbers import net.mamoe.mirai.utils.internal.PositiveNumbers
import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail
......
...@@ -7,13 +7,13 @@ import net.mamoe.mirai.contact.* ...@@ -7,13 +7,13 @@ import net.mamoe.mirai.contact.*
import net.mamoe.mirai.contact.internal.Group import net.mamoe.mirai.contact.internal.Group
import net.mamoe.mirai.contact.internal.QQ import net.mamoe.mirai.contact.internal.QQ
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler import net.mamoe.mirai.network.protocol.timpc.TIMBotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.KnownPacketId import net.mamoe.mirai.network.protocol.timpc.packet.KnownPacketId
import net.mamoe.mirai.network.protocol.tim.packet.action.GroupNotFound import net.mamoe.mirai.network.protocol.timpc.packet.action.GroupNotFound
import net.mamoe.mirai.network.protocol.tim.packet.action.GroupPacket import net.mamoe.mirai.network.protocol.timpc.packet.action.GroupPacket
import net.mamoe.mirai.network.protocol.tim.packet.action.RawGroupInfo import net.mamoe.mirai.network.protocol.timpc.packet.action.RawGroupInfo
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
import net.mamoe.mirai.network.protocol.tim.packet.login.isSuccess import net.mamoe.mirai.network.protocol.timpc.packet.login.isSuccess
import net.mamoe.mirai.network.qqAccount import net.mamoe.mirai.network.qqAccount
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
import net.mamoe.mirai.utils.internal.PositiveNumbers import net.mamoe.mirai.utils.internal.PositiveNumbers
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
package net.mamoe.mirai.contact package net.mamoe.mirai.contact
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import net.mamoe.mirai.network.protocol.tim.packet.action.GroupInfo import net.mamoe.mirai.network.protocol.timpc.packet.action.GroupInfo
import net.mamoe.mirai.network.protocol.tim.packet.action.QuitGroupResponse import net.mamoe.mirai.network.protocol.timpc.packet.action.QuitGroupResponse
import net.mamoe.mirai.utils.MiraiExperimentalAPI import net.mamoe.mirai.utils.MiraiExperimentalAPI
import net.mamoe.mirai.utils.internal.PositiveNumbers import net.mamoe.mirai.utils.internal.PositiveNumbers
import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail
......
...@@ -6,9 +6,9 @@ import kotlinx.coroutines.CoroutineScope ...@@ -6,9 +6,9 @@ import kotlinx.coroutines.CoroutineScope
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.data.Profile import net.mamoe.mirai.contact.data.Profile
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.packet.action.AvatarLink import net.mamoe.mirai.network.protocol.timpc.packet.action.AvatarLink
import net.mamoe.mirai.network.protocol.tim.packet.action.FriendNameRemark import net.mamoe.mirai.network.protocol.timpc.packet.action.FriendNameRemark
import net.mamoe.mirai.network.protocol.tim.packet.action.PreviousNameList import net.mamoe.mirai.network.protocol.timpc.packet.action.PreviousNameList
import net.mamoe.mirai.utils.MiraiExperimentalAPI import net.mamoe.mirai.utils.MiraiExperimentalAPI
/** /**
......
...@@ -10,9 +10,9 @@ import net.mamoe.mirai.contact.* ...@@ -10,9 +10,9 @@ import net.mamoe.mirai.contact.*
import net.mamoe.mirai.contact.data.Profile import net.mamoe.mirai.contact.data.Profile
import net.mamoe.mirai.event.subscribeAlways import net.mamoe.mirai.event.subscribeAlways
import net.mamoe.mirai.message.MessageChain import net.mamoe.mirai.message.MessageChain
import net.mamoe.mirai.network.protocol.tim.packet.action.* import net.mamoe.mirai.network.protocol.timpc.packet.action.*
import net.mamoe.mirai.network.protocol.tim.packet.event.MemberJoinEventPacket import net.mamoe.mirai.network.protocol.timpc.packet.event.MemberJoinEventPacket
import net.mamoe.mirai.network.protocol.tim.packet.event.MemberQuitEvent import net.mamoe.mirai.network.protocol.timpc.packet.event.MemberQuitEvent
import net.mamoe.mirai.network.qqAccount import net.mamoe.mirai.network.qqAccount
import net.mamoe.mirai.network.sessionKey import net.mamoe.mirai.network.sessionKey
import net.mamoe.mirai.qqAccount import net.mamoe.mirai.qqAccount
......
...@@ -8,9 +8,9 @@ import net.mamoe.mirai.contact.isOperator ...@@ -8,9 +8,9 @@ import net.mamoe.mirai.contact.isOperator
import net.mamoe.mirai.contact.isOwner import net.mamoe.mirai.contact.isOwner
import net.mamoe.mirai.message.Message import net.mamoe.mirai.message.Message
import net.mamoe.mirai.message.any import net.mamoe.mirai.message.any
import net.mamoe.mirai.network.protocol.tim.packet.event.FriendMessage import net.mamoe.mirai.network.protocol.timpc.packet.event.FriendMessage
import net.mamoe.mirai.network.protocol.tim.packet.event.GroupMessage import net.mamoe.mirai.network.protocol.timpc.packet.event.GroupMessage
import net.mamoe.mirai.network.protocol.tim.packet.event.MessagePacket import net.mamoe.mirai.network.protocol.timpc.packet.event.MessagePacket
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
......
...@@ -2,8 +2,8 @@ package net.mamoe.mirai.event.events ...@@ -2,8 +2,8 @@ package net.mamoe.mirai.event.events
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.event.Cancellable import net.mamoe.mirai.event.Cancellable
import net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket import net.mamoe.mirai.network.protocol.timpc.packet.OutgoingPacket
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
/* Abstract */ /* Abstract */
......
...@@ -4,7 +4,7 @@ package net.mamoe.mirai.message ...@@ -4,7 +4,7 @@ package net.mamoe.mirai.message
import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.sendMessage import net.mamoe.mirai.contact.sendMessage
import net.mamoe.mirai.network.protocol.tim.packet.action.FriendImagePacket import net.mamoe.mirai.network.protocol.timpc.packet.action.FriendImagePacket
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
......
...@@ -16,6 +16,7 @@ enum class MessageType(val value: UByte) { ...@@ -16,6 +16,7 @@ enum class MessageType(val value: UByte) {
* [ImageId.value] 长度为 37 的图片 * [ImageId.value] 长度为 37 的图片
*/ */
IMAGE_37(0x06u), IMAGE_37(0x06u),
XML(0x19u)
; ;
......
...@@ -5,6 +5,7 @@ package net.mamoe.mirai.message.internal ...@@ -5,6 +5,7 @@ package net.mamoe.mirai.message.internal
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.message.* import net.mamoe.mirai.message.*
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
import net.mamoe.mirai.utils.unzip
internal fun IoBuffer.parseMessageFace(): Face { internal fun IoBuffer.parseMessageFace(): Face {
//00 01 AF 0B 00 08 00 01 00 04 52 CC F5 D0 FF 00 02 14 F0 //00 01 AF 0B 00 08 00 01 00 04 52 CC F5 D0 FF 00 02 14 F0
...@@ -53,6 +54,40 @@ internal fun IoBuffer.parseMessageImage0x06(): Image { ...@@ -53,6 +54,40 @@ internal fun IoBuffer.parseMessageImage0x06(): Image {
//return Image("{${readString(length)}}.$suffix") //return Image("{${readString(length)}}.$suffix")
} }
internal fun IoBuffer.parseMessageXML(): XMLMessage {
discardExact(1)
discardExact(readUShort())
discardExact(1)
/*
网易云音乐分享
19
[01 BB]
01
[01 B8] 9A 03 B4 03 0A B1 03 01 78 9C 6D 51 CB 8A 14 31 14 FD 95 21 2B 85 A6 AA D2 F5 EA 34 88 B8 92 41 DD F9 58 88 34 31 95 2A E3 74 25 21 8F 19 A6 87 DE 54 83 C8 AC 1C 74 E1 6E 36 EE 86 01 C1 8D D3 20 7E 4C B5 0E FE 85 37 D5 4E 83 28 59 84 7B EE C9 B9 E7 9E 9C 20 AA 35 9A 22 A6 DA C8 71 C9 B8 74 91 75 C6 33 D7 DA 06 8D 00 97 B5 68 D0 F4 04 51 EF 94 15 0B 8E A6 D0 E6 D0 71 A2 85 02 E7 65 91 25 05 C1 78 84 6A 65 8E A8 A9 6E 18 4E 1D 70 09 DA A4 CE D3 62 5C BE 24 78 4C 38 AD 6B 56 67 39 CB 26 39 A1 09 61 A4 A4 30 C6 1D 6B D0 42 52 99 96 CE D1 72 84 2A 6E 19 00 BF CE BF 6C AE DE 01 A1 E5 8E 06 17 AD B7 82 0D 76 60 BE 0A EA D0 A4 B2 32 4A 54 33 7D D0 CC 24 0D AE 06 54 EB D9 56 17 0F 85 00 63 38 49 32 92 27 93 7C 37 E1 81 58 78 49 F7 EE ED C7 9B AF 97 D7 1F 3E F7 AB 4F 7D 77 D5 77 DF FB EE 02 44 5E FB 56 3F 31 73 20 BE 72 4E 4F E3 78 30 10 E1 22 8D 20 B2 D8 2A D9 C4 38 9D A4 24 4B 49 3A 8E EF 7A CB 8D A8 EE A4 E3 2C 29 8B 34 29 83 F5 F0 E2 2F 0D 6F E6 11 93 71 4E 26 CF 16 4F 1F 03 45 1B 7E 28 F8 D1 BF 8C E3 E6 7E FA B0 05 86 55 DE 30 FE C8 36 FB B0 05 4A 76 C8 4C B0 9B 14 FE 00 7E 98 14 32 A5 F0 6F E8 FA DB D9 CF 8F EF 37 EB B3 5D 94 4E B8 79 88 A8 EF 2E FB 6E DD AF 4E FB D5 F9 DE 2D A6 0E B9 B9 8D 96 CB E0 46 B5 DA 01 E3 F9 8F B7 6F 36 EB 8B 17 FF 65 8E 10 5C C1 4B 14 0E 0E F5 76 85 ED 17 2D 7F 03 2B B9 D5 0A
01
[00 8B]
01
[00 88] 5B E5 88 86 E4 BA AB 5D E3 82 AD E3 82 BA E3 83 8A E3 83 9F 20 28 63 6F 76 65 72 29 0A 4B 69 7A 75 6E 61 20 41 49 2F E4 B8 AD E7 94 B0 E3 83 A4 E3 82 B9 E3 82 BF E3 82 AB 0A 68 74 74 70 3A 2F 2F 6D 75 73 69 63 2E 31 36 33 2E 63 6F 6D 2F 73 6F 6E 67 2F 31 33 38 33 39 34 33 39 33 32 2F 3F 75 73 65 72 69 64 3D 33 32 34 30 37 36 33 30 37 0A E6 9D A5 E8 87 AA 3A 20 E7 BD 91 E6 98 93 E4 BA 91 E9 9F B3 E4 B9 90
19
[00 41]
01
[00 3E] AA 02 3B 08 00 50 03 60 00 68 00 88 01 00 9A 01 2D 08 09 20 CB 50 78 00 A0 01 81 DC 01 C8 01 00 F0 01 00 F8 01 00 90 02 00 98 03 00 A0 03 20 B0 03 00 C0 03 00 D0 03 00 E8 03 00 90 04 00
0E
[00 0E]
01
[00 04] 00 00 00 09
0A
[00 04] 00 00 00 00
12
[00 25]
05 00 04 00 00 00 03 08 00 04 00 00 00 04 01 00
[09] 48 69 6D 31 38 38 6D 6F 65
03 00 01 01 04 00 04 00 00 00 08
*/
return XMLMessage(readBytes().unzip().encodeToString())
}
//00 1B filenameLength //00 1B filenameLength
// 43 37 46 29 5F 34 32 34 4E 33 55 37 7B 4C 47 36 7D 4F 25 5A 51 58 51 2E 6A 70 67 get suffix // 43 37 46 29 5F 34 32 34 4E 33 55 37 7B 4C 47 36 7D 4F 25 5A 51 58 51 2E 6A 70 67 get suffix
...@@ -147,23 +182,7 @@ internal fun ByteReadPacket.readMessage(): Message? { ...@@ -147,23 +182,7 @@ internal fun ByteReadPacket.readMessage(): Message? {
* *
* 19 00 42 01 00 3F AA 02 3C 08 00 50 03 60 00 68 00 88 01 00 9A 01 2E 08 09 20 BF 50 78 00 A0 01 81 DC 01 C8 01 00 F0 01 00 F8 01 00 90 02 00 98 03 00 A0 03 20 B0 03 00 C0 03 00 D0 03 00 E8 03 00 90 04 80 0B 0E 00 0E 01 00 04 00 00 00 09 0A 00 04 00 00 00 00 12 00 25 05 00 04 00 00 00 01 08 00 04 00 00 00 01 01 00 09 48 69 6D 31 38 38 6D 6F 65 03 00 01 04 04 00 04 00 00 00 10 * 19 00 42 01 00 3F AA 02 3C 08 00 50 03 60 00 68 00 88 01 00 9A 01 2E 08 09 20 BF 50 78 00 A0 01 81 DC 01 C8 01 00 F0 01 00 F8 01 00 90 02 00 98 03 00 A0 03 20 B0 03 00 C0 03 00 D0 03 00 E8 03 00 90 04 80 0B 0E 00 0E 01 00 04 00 00 00 09 0A 00 04 00 00 00 00 12 00 25 05 00 04 00 00 00 01 08 00 04 00 00 00 01 01 00 09 48 69 6D 31 38 38 6D 6F 65 03 00 01 04 04 00 04 00 00 00 10
*/ */
0x14 -> sectionData.parseMessageXML()
0x14 -> {//长文本的后一部分? 总长度 0x0175=373, body长度=0x016B=363
//14 01 75 01 01 6B 01 78 9C CD 92 4D 4F C2 30 18 C7 EF 7E 8A A6 1E C9 64 83 B1 CD A4 1B E1 4D 19 8A C6 20 11 BC 98 39 3A A8 EE C5 74 1D 20 37 6E 46 0F C6 83 37 8D 31 D1 83 89 51 4F DE F8 38 4C 3E 86 1D 62 3C 7A D4 7F 93 26 7D DA 7F 9F A7 BF A7 28 3F F4 5C D0 C7 34 24 81 AF 43 69 45 84 00 FB 76 D0 21 7E 57 87 11 73 04 0D E6 8D 25 C0 85 BC B0 0B 0E 29 C1 8E 0E 57 FE B9 20 F0 0E 1C E2 E2 2D CB C3 3A D4 A4 D5 72 A9 58 58 13 24 AD A4 0A B2 22 E5 84 42 59 91 85 9C 52 C8 2A 62 46 14 65 59 FD 76 34 C8 88 3B 38 05 CB 66 73 24 7D 82 07 F5 C8 65 A4 1E 76 21 70 5C 8B 73 C9 42 10 62 DA 27 36 36 CB 7C 95 4B CC 14 87 A4 A3 C3 AA B4 CE 82 63 B5 46 54 8D A4 EC F6 20 F4 68 D8 21 C5 ED 7D B5 B9 A1 0D 46 4D 33 E5 8F 86 47 AD DA 6E 73 2F D3 3B 91 2B 55 53 A9 6C B6 76 AC 96 DD 20 38 DB 36 21 30 00 22 0C 7B C0 B5 4E 83 88 F1 9E 40 1E 61 84 B9 D8 00 7F CD F5 37 01 94 5E 54 0A 50 8F 1A 28 CD A7 45 F1 C0 0E DC 80 EA 70 59 13 93 C1 1F 15 DF 3D 7E DC 5C 48 F1 ED FD 6C F2 3C BD BC 8A DF CF E2 F1 2B F8 B9 03 A5 13 10 06 0A 83 88 DA 18 F8 F3 66 CE C6 E7 D3 87 A7 D9 CB DB 74 72 0D 79 86 AF CD E4 30 FF 9F C6 27 23 A2 C1 36 02 00 04 00 00 00 23 0E 00 07 01 00 04 00 00 00 09
discardExact(1)
val value = readUShortLVByteArray()
println(value.size)
println("0x14的未知压缩的data=" + value.toUHexString())
//todo 未知压缩算法
return PlainText("")
//后面似乎还有一节?
//discardExact(7)//02 00 04 00 00 00 23
//return PlainText(value.toUHexString())
}
0x0E -> { 0x0E -> {
null null
...@@ -180,7 +199,7 @@ internal fun ByteReadPacket.readMessage(): Message? { ...@@ -180,7 +199,7 @@ internal fun ByteReadPacket.readMessage(): Message? {
} }
} }
fun ByteReadPacket.readMessageChain(): MessageChain { internal fun ByteReadPacket.readMessageChain(): MessageChain {
val chain = MessageChain() val chain = MessageChain()
do { do {
if (this.remaining == 0L) { if (this.remaining == 0L) {
...@@ -190,10 +209,18 @@ fun ByteReadPacket.readMessageChain(): MessageChain { ...@@ -190,10 +209,18 @@ fun ByteReadPacket.readMessageChain(): MessageChain {
return chain return chain
} }
fun MessageChain.toPacket(): ByteReadPacket = buildPacket { internal fun MessageChain.toPacket(): ByteReadPacket = buildPacket {
this@toPacket.forEach { message -> this@toPacket.forEach { message ->
writePacket(with(message) { writePacket(with(message) {
when (this) { when (this) {
is XMLMessage -> buildPacket {
writeUByte(MessageType.XML.value)
writeShortLVPacket {
writeByte(0x01)
//writeUByte()
}
}
is Face -> buildPacket { is Face -> buildPacket {
writeUByte(MessageType.FACE.value) writeUByte(MessageType.FACE.value)
......
...@@ -4,13 +4,13 @@ import kotlinx.coroutines.CancellationException ...@@ -4,13 +4,13 @@ import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CompletableJob import kotlinx.coroutines.CompletableJob
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.protocol.tim.handler.DataPacketSocketAdapter import net.mamoe.mirai.network.protocol.timpc.handler.DataPacketSocketAdapter
import net.mamoe.mirai.network.protocol.tim.handler.TemporaryPacketHandler import net.mamoe.mirai.network.protocol.timpc.handler.TemporaryPacketHandler
import net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket import net.mamoe.mirai.network.protocol.timpc.packet.OutgoingPacket
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
import net.mamoe.mirai.network.protocol.tim.packet.login.HeartbeatPacket import net.mamoe.mirai.network.protocol.timpc.packet.login.HeartbeatPacket
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.RequestSKeyPacket
import net.mamoe.mirai.network.protocol.tim.packet.login.RequestSKeyPacket import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.io.PlatformDatagramChannel import net.mamoe.mirai.utils.io.PlatformDatagramChannel
......
...@@ -12,13 +12,13 @@ import net.mamoe.mirai.contact.QQ ...@@ -12,13 +12,13 @@ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.message.Image import net.mamoe.mirai.message.Image
import net.mamoe.mirai.message.ImageId0x03 import net.mamoe.mirai.message.ImageId0x03
import net.mamoe.mirai.message.ImageId0x06 import net.mamoe.mirai.message.ImageId0x06
import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler import net.mamoe.mirai.network.protocol.timpc.TIMBotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.handler.DataPacketSocketAdapter import net.mamoe.mirai.network.protocol.timpc.handler.DataPacketSocketAdapter
import net.mamoe.mirai.network.protocol.tim.handler.TemporaryPacketHandler import net.mamoe.mirai.network.protocol.timpc.handler.TemporaryPacketHandler
import net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket import net.mamoe.mirai.network.protocol.timpc.packet.OutgoingPacket
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
import net.mamoe.mirai.network.protocol.tim.packet.SessionKey import net.mamoe.mirai.network.protocol.timpc.packet.SessionKey
import net.mamoe.mirai.network.protocol.tim.packet.action.* import net.mamoe.mirai.network.protocol.timpc.packet.action.*
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.assertUnreachable import net.mamoe.mirai.utils.assertUnreachable
import net.mamoe.mirai.utils.getGTK import net.mamoe.mirai.utils.getGTK
...@@ -120,7 +120,7 @@ abstract class BotSessionBase internal constructor( ...@@ -120,7 +120,7 @@ abstract class BotSessionBase internal constructor(
* } * }
* } * }
* ``` * ```
* @sample net.mamoe.mirai.network.protocol.tim.packet.action.uploadImage * @sample net.mamoe.mirai.network.protocol.timpc.packet.action.uploadImage
* *
* @param checkSequence 是否筛选 `sequenceId`, 即是否筛选发出的包对应的返回包. * @param checkSequence 是否筛选 `sequenceId`, 即是否筛选发出的包对应的返回包.
* @param P 期待的包 * @param P 期待的包
...@@ -191,8 +191,8 @@ internal inline val Bot.sessionKey: SessionKey get() = this.session.sessionKey ...@@ -191,8 +191,8 @@ internal inline val Bot.sessionKey: SessionKey get() = this.session.sessionKey
internal suspend inline fun BotSession.sendPacket(packet: OutgoingPacket) = this.bot.sendPacket(packet) internal suspend inline fun BotSession.sendPacket(packet: OutgoingPacket) = this.bot.sendPacket(packet)
suspend inline fun BotSession.getQQ(@PositiveNumbers number: Long): QQ = this.bot.getQQ(number) inline fun BotSession.getQQ(@PositiveNumbers number: Long): QQ = this.bot.getQQ(number)
suspend inline fun BotSession.getQQ(number: UInt): QQ = this.bot.getQQ(number) inline fun BotSession.getQQ(number: UInt): QQ = this.bot.getQQ(number)
suspend inline fun BotSession.getGroup(id: UInt): Group = this.bot.getGroup(id) suspend inline fun BotSession.getGroup(id: UInt): Group = this.bot.getGroup(id)
suspend inline fun BotSession.getGroup(@PositiveNumbers id: Long): Group = this.bot.getGroup(id) suspend inline fun BotSession.getGroup(@PositiveNumbers id: Long): Group = this.bot.getGroup(id)
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim package net.mamoe.mirai.network.protocol.timpc
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
...@@ -15,10 +15,10 @@ import net.mamoe.mirai.event.events.PacketSentEvent ...@@ -15,10 +15,10 @@ import net.mamoe.mirai.event.events.PacketSentEvent
import net.mamoe.mirai.event.events.ServerPacketReceivedEvent import net.mamoe.mirai.event.events.ServerPacketReceivedEvent
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.handler.DataPacketSocketAdapter import net.mamoe.mirai.network.protocol.timpc.handler.DataPacketSocketAdapter
import net.mamoe.mirai.network.protocol.tim.handler.TemporaryPacketHandler import net.mamoe.mirai.network.protocol.timpc.handler.TemporaryPacketHandler
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.network.protocol.tim.packet.login.* import net.mamoe.mirai.network.protocol.timpc.packet.login.*
import net.mamoe.mirai.qqAccount import net.mamoe.mirai.qqAccount
import net.mamoe.mirai.utils.OnlineStatus import net.mamoe.mirai.utils.OnlineStatus
import net.mamoe.mirai.utils.currentBotConfiguration import net.mamoe.mirai.utils.currentBotConfiguration
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim package net.mamoe.mirai.network.protocol.timpc
import net.mamoe.mirai.utils.io.hexToBytes import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.solveIpAddress import net.mamoe.mirai.utils.solveIpAddress
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.handler package net.mamoe.mirai.network.protocol.timpc.handler
import kotlinx.io.core.Closeable import kotlinx.io.core.Closeable
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.event.events.ServerPacketReceivedEvent import net.mamoe.mirai.event.events.ServerPacketReceivedEvent
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler import net.mamoe.mirai.network.protocol.timpc.TIMBotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket import net.mamoe.mirai.network.protocol.timpc.packet.OutgoingPacket
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.io.PlatformDatagramChannel import net.mamoe.mirai.utils.io.PlatformDatagramChannel
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.handler package net.mamoe.mirai.network.protocol.timpc.handler
import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.packet.OutgoingPacket import net.mamoe.mirai.network.protocol.timpc.packet.OutgoingPacket
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
import net.mamoe.mirai.network.sendPacket import net.mamoe.mirai.network.sendPacket
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.reflect.KClass import kotlin.reflect.KClass
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "unused") @file:Suppress("EXPERIMENTAL_API_USAGE", "unused")
package net.mamoe.mirai.network.protocol.tim.packet package net.mamoe.mirai.network.protocol.timpc.packet
/** /**
* 包的最后一次修改时间, 和分析时使用的 TIM 版本 * 包的最后一次修改时间, 和分析时使用的 TIM 版本
......
package net.mamoe.mirai.network.protocol.tim.packet package net.mamoe.mirai.network.protocol.timpc.packet
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.IoBuffer import kotlinx.io.core.IoBuffer
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "unused", "MemberVisibilityCanBePrivate") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "unused", "MemberVisibilityCanBePrivate")
package net.mamoe.mirai.network.protocol.tim.packet package net.mamoe.mirai.network.protocol.timpc.packet
import kotlinx.io.core.* import kotlinx.io.core.*
import kotlinx.serialization.SerializationStrategy import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.protobuf.ProtoBuf import kotlinx.serialization.protobuf.ProtoBuf
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.utils.io.encryptAndWrite import net.mamoe.mirai.utils.io.encryptAndWrite
import net.mamoe.mirai.utils.io.hexToBytes import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.writeQQ import net.mamoe.mirai.utils.io.writeQQ
......
package net.mamoe.mirai.network.protocol.tim.packet package net.mamoe.mirai.network.protocol.timpc.packet
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.readBytes import kotlinx.io.core.readBytes
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet package net.mamoe.mirai.network.protocol.timpc.packet
import kotlinx.atomicfu.atomic import kotlinx.atomicfu.atomic
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet package net.mamoe.mirai.network.protocol.timpc.packet
import net.mamoe.mirai.network.protocol.tim.packet.action.* import net.mamoe.mirai.network.protocol.timpc.packet.action.*
import net.mamoe.mirai.network.protocol.tim.packet.event.EventPacketFactory import net.mamoe.mirai.network.protocol.timpc.packet.event.EventPacketFactory
import net.mamoe.mirai.network.protocol.tim.packet.event.FriendOnlineStatusChangedPacket import net.mamoe.mirai.network.protocol.timpc.packet.event.FriendOnlineStatusChangedPacket
import net.mamoe.mirai.network.protocol.tim.packet.login.* import net.mamoe.mirai.network.protocol.timpc.packet.login.*
import net.mamoe.mirai.utils.io.toUHexString import net.mamoe.mirai.utils.io.toUHexString
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.network.protocol.tim.packet.event.EventPacket import net.mamoe.mirai.network.protocol.timpc.packet.event.EventPacket
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
import net.mamoe.mirai.withSession import net.mamoe.mirai.withSession
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.charsets.Charsets import kotlinx.io.charsets.Charsets
import kotlinx.io.core.* import kotlinx.io.core.*
...@@ -9,9 +9,9 @@ import net.mamoe.mirai.message.ImageId ...@@ -9,9 +9,9 @@ import net.mamoe.mirai.message.ImageId
import net.mamoe.mirai.message.ImageId0x06 import net.mamoe.mirai.message.ImageId0x06
import net.mamoe.mirai.message.requireLength import net.mamoe.mirai.message.requireLength
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.network.protocol.tim.packet.event.EventPacket import net.mamoe.mirai.network.protocol.timpc.packet.event.EventPacket
import net.mamoe.mirai.network.qqAccount import net.mamoe.mirai.network.qqAccount
import net.mamoe.mirai.qqAccount import net.mamoe.mirai.qqAccount
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
import net.mamoe.mirai.network.protocol.tim.packet.PacketId import net.mamoe.mirai.network.protocol.timpc.packet.PacketId
import net.mamoe.mirai.network.protocol.tim.packet.SessionPacketFactory import net.mamoe.mirai.network.protocol.timpc.packet.SessionPacketFactory
// 0001 // 0001
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.writeFully import kotlinx.io.core.writeFully
import kotlinx.io.core.writeUByte import kotlinx.io.core.writeUByte
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.encryptAndWrite import net.mamoe.mirai.utils.io.encryptAndWrite
import net.mamoe.mirai.utils.io.writeQQ import net.mamoe.mirai.utils.io.writeQQ
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "RUNTIME_ANNOTATION_NOT_SUPPORTED") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "RUNTIME_ANNOTATION_NOT_SUPPORTED")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
...@@ -14,8 +14,8 @@ import net.mamoe.mirai.message.ImageId ...@@ -14,8 +14,8 @@ import net.mamoe.mirai.message.ImageId
import net.mamoe.mirai.message.ImageId0x03 import net.mamoe.mirai.message.ImageId0x03
import net.mamoe.mirai.message.requireLength import net.mamoe.mirai.message.requireLength
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.network.protocol.tim.packet.event.EventPacket import net.mamoe.mirai.network.protocol.timpc.packet.event.EventPacket
import net.mamoe.mirai.qqAccount import net.mamoe.mirai.qqAccount
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
import net.mamoe.mirai.utils.Http import net.mamoe.mirai.utils.Http
...@@ -113,6 +113,28 @@ internal object GroupImagePacket : SessionPacketFactory<GroupImageResponse>() { ...@@ -113,6 +113,28 @@ internal object GroupImagePacket : SessionPacketFactory<GroupImageResponse>() {
@SerialId(2) val unknown4: Byte = 1, @SerialId(2) val unknown4: Byte = 1,
@SerialId(3) var body: Body @SerialId(3) var body: Body
) { ) {
/*
"uint64_group_code"
"uint64_dst_uin"
"uint64_fileid"
"bytes_file_md5"
"uint32_url_flag"
"uint32_url_type"
"uint32_req_term"
"uint32_req_platform_type"
"uint32_inner_ip"
"uint32_bu_type"
"bytes_build_ver"
"uint64_file_id"
"uint64_file_size"
"uint32_original_pic"
"uint32_retry_req"
"uint32_file_height"
"uint32_file_width"
"uint32_pic_type"
"uint32_pic_up_timestamp"
"uint32_req_transfer_type"
*/
@Serializable @Serializable
internal class Body( internal class Body(
@SerialId(1) val group: Int, @SerialId(1) val group: Int,
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.contact.* import net.mamoe.mirai.contact.*
...@@ -8,8 +8,8 @@ import net.mamoe.mirai.contact.internal.Member ...@@ -8,8 +8,8 @@ import net.mamoe.mirai.contact.internal.Member
import net.mamoe.mirai.message.MessageChain import net.mamoe.mirai.message.MessageChain
import net.mamoe.mirai.message.internal.toPacket import net.mamoe.mirai.message.internal.toPacket
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.LockFreeLinkedList import net.mamoe.mirai.utils.LockFreeLinkedList
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.request.post import io.ktor.client.request.post
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "unused", "NO_REFLECTION_IN_CLASS_PATH") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "unused", "NO_REFLECTION_IN_CLASS_PATH")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import io.ktor.client.request.get import io.ktor.client.request.get
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import io.ktor.util.date.GMTDate import io.ktor.util.date.GMTDate
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.contact.data.Gender import net.mamoe.mirai.contact.data.Gender
import net.mamoe.mirai.contact.data.Profile import net.mamoe.mirai.contact.data.Profile
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
inline class AvatarLink(val value: String) : Packet inline class AvatarLink(val value: String) : Packet
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.readUShortLVString import net.mamoe.mirai.utils.io.readUShortLVString
import net.mamoe.mirai.utils.io.writeQQ import net.mamoe.mirai.utils.io.writeQQ
import net.mamoe.mirai.utils.io.writeZero import net.mamoe.mirai.utils.io.writeZero
......
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.writeZero import net.mamoe.mirai.utils.io.writeZero
class FriendList : Packet class FriendList : Packet
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.action package net.mamoe.mirai.network.protocol.timpc.packet.action
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.message.MessageChain import net.mamoe.mirai.message.MessageChain
import net.mamoe.mirai.message.internal.toPacket import net.mamoe.mirai.message.internal.toPacket
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
import net.mamoe.mirai.utils.md5 import net.mamoe.mirai.utils.md5
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
import net.mamoe.mirai.network.protocol.tim.packet.PacketVersion import net.mamoe.mirai.network.protocol.timpc.packet.PacketVersion
import net.mamoe.mirai.utils.io.readBoolean import net.mamoe.mirai.utils.io.readBoolean
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
......
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import net.mamoe.mirai.event.Subscribable import net.mamoe.mirai.event.Subscribable
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
/** /**
* 事件包. 可被监听. * 事件包. 可被监听.
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler import net.mamoe.mirai.network.protocol.timpc.TIMBotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.network.sessionKey import net.mamoe.mirai.network.sessionKey
import net.mamoe.mirai.qqAccount import net.mamoe.mirai.qqAccount
import net.mamoe.mirai.utils.io.readIoBuffer import net.mamoe.mirai.utils.io.readIoBuffer
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import kotlinx.io.core.readUInt import kotlinx.io.core.readUInt
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.network.protocol.tim.packet.PacketVersion import net.mamoe.mirai.network.protocol.timpc.packet.PacketVersion
import net.mamoe.mirai.network.protocol.tim.packet.action.AddFriendPacket import net.mamoe.mirai.network.protocol.timpc.packet.action.AddFriendPacket
import net.mamoe.mirai.network.qqAccount import net.mamoe.mirai.network.qqAccount
import net.mamoe.mirai.utils.io.readUShortLVString import net.mamoe.mirai.utils.io.readUShortLVString
import net.mamoe.mirai.withSession import net.mamoe.mirai.withSession
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import kotlinx.io.core.readUInt import kotlinx.io.core.readUInt
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.protocol.tim.packet.PacketVersion import net.mamoe.mirai.network.protocol.timpc.packet.PacketVersion
data class FriendConversationInitialize( data class FriendConversationInitialize(
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "JoinDeclarationAndAssignment") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "JoinDeclarationAndAssignment")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
...@@ -8,9 +8,9 @@ import kotlinx.io.core.readUByte ...@@ -8,9 +8,9 @@ import kotlinx.io.core.readUByte
import kotlinx.io.core.readUInt import kotlinx.io.core.readUInt
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.KnownPacketId import net.mamoe.mirai.network.protocol.timpc.packet.KnownPacketId
import net.mamoe.mirai.network.protocol.tim.packet.PacketId import net.mamoe.mirai.network.protocol.timpc.packet.PacketId
import net.mamoe.mirai.network.protocol.tim.packet.SessionPacketFactory import net.mamoe.mirai.network.protocol.timpc.packet.SessionPacketFactory
import net.mamoe.mirai.utils.OnlineStatus import net.mamoe.mirai.utils.OnlineStatus
data class FriendStatusChanged( data class FriendStatusChanged(
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.protocol.tim.packet.PacketVersion import net.mamoe.mirai.network.protocol.timpc.packet.PacketVersion
import net.mamoe.mirai.utils.io.debugPrint import net.mamoe.mirai.utils.io.debugPrint
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "unused", "MemberVisibilityCanBePrivate") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "unused", "MemberVisibilityCanBePrivate")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.readUInt import kotlinx.io.core.readUInt
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.readUByte import kotlinx.io.core.readUByte
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "MemberVisibilityCanBePrivate") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "MemberVisibilityCanBePrivate")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import kotlinx.io.core.readUInt import kotlinx.io.core.readUInt
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.protocol.tim.packet.Packet import net.mamoe.mirai.network.protocol.timpc.packet.Packet
import net.mamoe.mirai.network.protocol.tim.packet.PacketVersion import net.mamoe.mirai.network.protocol.timpc.packet.PacketVersion
data class MemberPermissionChangePacket( data class MemberPermissionChangePacket(
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.String import kotlinx.io.core.String
...@@ -13,8 +13,8 @@ import net.mamoe.mirai.event.events.BotEvent ...@@ -13,8 +13,8 @@ import net.mamoe.mirai.event.events.BotEvent
import net.mamoe.mirai.getGroup import net.mamoe.mirai.getGroup
import net.mamoe.mirai.message.* import net.mamoe.mirai.message.*
import net.mamoe.mirai.message.internal.readMessageChain import net.mamoe.mirai.message.internal.readMessageChain
import net.mamoe.mirai.network.protocol.tim.packet.PacketVersion import net.mamoe.mirai.network.protocol.timpc.packet.PacketVersion
import net.mamoe.mirai.network.protocol.tim.packet.action.ImageLink import net.mamoe.mirai.network.protocol.timpc.packet.action.ImageLink
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail
import net.mamoe.mirai.utils.io.printTLVMap import net.mamoe.mirai.utils.io.printTLVMap
......
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
//来自 Android 给我的电脑发消息, ID 0211, 内容 "你好" //来自 Android 给我的电脑发消息, ID 0211, 内容 "你好"
//00 00 00 20 00 05 00 02 00 01 00 06 00 04 00 01 01 01 00 09 00 06 03 E9 20 02 EB 94 00 0A 00 04 01 00 00 00 00 00 00 54 00 00 00 3E 08 12 1A 16 08 07 10 91 04 18 DD F1 92 B7 07 20 83 76 38 DD F1 92 B7 07 50 04 42 21 08 DD F1 92 B7 07 10 DD F1 92 B7 07 18 01 20 07 40 DC 85 96 EE 05 48 DC 85 96 EE 05 50 FA AF FD 18 52 15 0A 06 08 01 10 00 50 01 1A 0B 08 E9 07 10 94 D7 8B 80 02 50 02 08 04 12 1D 08 E9 07 10 94 D7 8B 80 02 18 01 20 01 28 DD F1 92 B7 07 30 DD F1 92 B7 07 48 02 50 01 32 1B 08 80 80 B8 AE B5 02 10 01 18 00 20 01 2A 0C 0A 0A 08 01 12 06 E4 BD A0 E5 A5 BD //00 00 00 20 00 05 00 02 00 01 00 06 00 04 00 01 01 01 00 09 00 06 03 E9 20 02 EB 94 00 0A 00 04 01 00 00 00 00 00 00 54 00 00 00 3E 08 12 1A 16 08 07 10 91 04 18 DD F1 92 B7 07 20 83 76 38 DD F1 92 B7 07 50 04 42 21 08 DD F1 92 B7 07 10 DD F1 92 B7 07 18 01 20 07 40 DC 85 96 EE 05 48 DC 85 96 EE 05 50 FA AF FD 18 52 15 0A 06 08 01 10 00 50 01 1A 0B 08 E9 07 10 94 D7 8B 80 02 50 02 08 04 12 1D 08 E9 07 10 94 D7 8B 80 02 18 01 20 01 28 DD F1 92 B7 07 30 DD F1 92 B7 07 48 02 50 01 32 1B 08 80 80 B8 AE B5 02 10 01 18 00 20 01 2A 0C 0A 0A 08 01 12 06 E4 BD A0 E5 A5 BD
\ No newline at end of file
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.readBytes import kotlinx.io.core.readBytes
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "unused", "FunctionName") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS", "unused", "FunctionName")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
internal object CaptchaKey : DecrypterByteArray, DecrypterType<CaptchaKey> { internal object CaptchaKey : DecrypterByteArray, DecrypterType<CaptchaKey> {
......
@file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS") @file:Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.writeFully import kotlinx.io.core.writeFully
import kotlinx.io.core.writeUByte import kotlinx.io.core.writeUByte
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.OnlineStatus import net.mamoe.mirai.utils.OnlineStatus
import net.mamoe.mirai.utils.io.encryptAndWrite import net.mamoe.mirai.utils.io.encryptAndWrite
import net.mamoe.mirai.utils.io.writeHex import net.mamoe.mirai.utils.io.writeHex
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.writeFully import kotlinx.io.core.writeFully
import net.mamoe.mirai.event.Subscribable import net.mamoe.mirai.event.Subscribable
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.encryptAndWrite import net.mamoe.mirai.utils.io.encryptAndWrite
import net.mamoe.mirai.utils.io.writeHex import net.mamoe.mirai.utils.io.writeHex
import net.mamoe.mirai.utils.io.writeQQ import net.mamoe.mirai.utils.io.writeQQ
......
@file:Suppress("unused") @file:Suppress("unused")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult.SUCCESS import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult.SUCCESS
import net.mamoe.mirai.utils.BotConfiguration import net.mamoe.mirai.utils.BotConfiguration
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.contact.data.Gender import net.mamoe.mirai.contact.data.Gender
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.MiraiLogger import net.mamoe.mirai.utils.MiraiLogger
import net.mamoe.mirai.utils.decryptBy import net.mamoe.mirai.utils.decryptBy
import net.mamoe.mirai.utils.encryptBy import net.mamoe.mirai.utils.encryptBy
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "FunctionName") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "FunctionName")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import kotlinx.io.core.writeFully import kotlinx.io.core.writeFully
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.network.qqAccount import net.mamoe.mirai.network.qqAccount
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
import net.mamoe.mirai.withSession import net.mamoe.mirai.withSession
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import kotlinx.io.core.* import kotlinx.io.core.*
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
import net.mamoe.mirai.utils.localIpAddress import net.mamoe.mirai.utils.localIpAddress
......
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE")
package net.mamoe.mirai.network.protocol.tim.packet.login package net.mamoe.mirai.network.protocol.timpc.packet.login
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import kotlinx.io.core.readBytes import kotlinx.io.core.readBytes
import kotlinx.io.core.writeFully import kotlinx.io.core.writeFully
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
internal object TouchKey : DecrypterByteArray, DecrypterType<TouchKey> { internal object TouchKey : DecrypterByteArray, DecrypterType<TouchKey> {
......
...@@ -2,7 +2,7 @@ package net.mamoe.mirai.utils ...@@ -2,7 +2,7 @@ package net.mamoe.mirai.utils
import kotlinx.io.core.IoBuffer import kotlinx.io.core.IoBuffer
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.protocol.tim.packet.login.TouchPacket.TouchResponse import net.mamoe.mirai.network.protocol.timpc.packet.login.TouchPacket.TouchResponse
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.coroutineContext import kotlin.coroutines.coroutineContext
import kotlin.jvm.JvmStatic import kotlin.jvm.JvmStatic
......
...@@ -8,7 +8,7 @@ import net.mamoe.mirai.contact.Contact ...@@ -8,7 +8,7 @@ import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.message.* import net.mamoe.mirai.message.*
import net.mamoe.mirai.network.protocol.tim.packet.action.uploadImage import net.mamoe.mirai.network.protocol.timpc.packet.action.uploadImage
import net.mamoe.mirai.utils.io.toUHexString import net.mamoe.mirai.utils.io.toUHexString
@Suppress("FunctionName") @Suppress("FunctionName")
......
...@@ -8,7 +8,7 @@ import kotlin.jvm.JvmStatic ...@@ -8,7 +8,7 @@ import kotlin.jvm.JvmStatic
* QQ 在线状态 * QQ 在线状态
* *
* @author Him188moe * @author Him188moe
* @see net.mamoe.mirai.network.protocol.tim.packet.login.ChangeOnlineStatusPacket * @see net.mamoe.mirai.network.protocol.timpc.packet.login.ChangeOnlineStatusPacket
*/ */
inline class OnlineStatus( inline class OnlineStatus(
inline val id: UByte inline val id: UByte
......
...@@ -4,6 +4,7 @@ package net.mamoe.mirai.utils ...@@ -4,6 +4,7 @@ package net.mamoe.mirai.utils
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.util.date.GMTDate import io.ktor.util.date.GMTDate
import kotlinx.io.core.IoBuffer
/** /**
* 时间戳 * 时间戳
...@@ -21,6 +22,8 @@ expect val deviceName: String ...@@ -21,6 +22,8 @@ expect val deviceName: String
*/ */
expect fun crc32(key: ByteArray): Int expect fun crc32(key: ByteArray): Int
expect fun ByteArray.unzip(): ByteArray
/** /**
* MD5 算法 * MD5 算法
* *
......
...@@ -3,8 +3,8 @@ package net.mamoe.mirai.utils ...@@ -3,8 +3,8 @@ package net.mamoe.mirai.utils
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.IoBuffer import kotlinx.io.core.IoBuffer
import kotlinx.io.pool.useInstance import kotlinx.io.pool.useInstance
import net.mamoe.mirai.network.protocol.tim.packet.Decrypter import net.mamoe.mirai.network.protocol.timpc.packet.Decrypter
import net.mamoe.mirai.network.protocol.tim.packet.DecrypterByteArray import net.mamoe.mirai.network.protocol.timpc.packet.DecrypterByteArray
import net.mamoe.mirai.utils.io.ByteArrayPool import net.mamoe.mirai.utils.io.ByteArrayPool
import net.mamoe.mirai.utils.io.toByteArray import net.mamoe.mirai.utils.io.toByteArray
import net.mamoe.mirai.utils.io.toUHexString import net.mamoe.mirai.utils.io.toUHexString
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
package net.mamoe.mirai.utils.internal package net.mamoe.mirai.utils.internal
import kotlinx.io.core.toByteArray import kotlinx.io.core.toByteArray
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.io.hexToBytes import net.mamoe.mirai.utils.io.hexToBytes
import net.mamoe.mirai.utils.io.read import net.mamoe.mirai.utils.io.read
......
...@@ -8,9 +8,9 @@ import kotlinx.serialization.SerializationStrategy ...@@ -8,9 +8,9 @@ import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.protobuf.ProtoBuf import kotlinx.serialization.protobuf.ProtoBuf
import net.mamoe.mirai.contact.GroupId import net.mamoe.mirai.contact.GroupId
import net.mamoe.mirai.contact.GroupInternalId import net.mamoe.mirai.contact.GroupInternalId
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.packet.DecrypterByteArray import net.mamoe.mirai.network.protocol.timpc.packet.DecrypterByteArray
import net.mamoe.mirai.network.protocol.tim.packet.login.PrivateKey import net.mamoe.mirai.network.protocol.timpc.packet.login.PrivateKey
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
import net.mamoe.mirai.utils.internal.coerceAtMostOrFail import net.mamoe.mirai.utils.internal.coerceAtMostOrFail
import kotlin.random.Random import kotlin.random.Random
......
...@@ -6,7 +6,7 @@ import kotlinx.coroutines.Dispatchers ...@@ -6,7 +6,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlinx.io.core.Input import kotlinx.io.core.Input
import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.network.protocol.tim.packet.action.OverFileSizeMaxException import net.mamoe.mirai.network.protocol.timpc.packet.action.OverFileSizeMaxException
import net.mamoe.mirai.utils.sendTo import net.mamoe.mirai.utils.sendTo
import net.mamoe.mirai.utils.toExternalImage import net.mamoe.mirai.utils.toExternalImage
import net.mamoe.mirai.utils.upload import net.mamoe.mirai.utils.upload
......
...@@ -10,7 +10,7 @@ import kotlinx.io.streams.asOutput ...@@ -10,7 +10,7 @@ import kotlinx.io.streams.asOutput
import kotlinx.io.streams.inputStream import kotlinx.io.streams.inputStream
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.message.Image import net.mamoe.mirai.message.Image
import net.mamoe.mirai.network.protocol.tim.packet.SessionKey import net.mamoe.mirai.network.protocol.timpc.packet.SessionKey
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.toExternalImage import net.mamoe.mirai.utils.toExternalImage
......
package net.mamoe.mirai.network.protocol.tim package net.mamoe.mirai.network.protocol.timpc
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher
......
@file:Suppress("unused") @file:Suppress("unused")
package net.mamoe.mirai.network.protocol.tim.packet.event package net.mamoe.mirai.network.protocol.timpc.packet.event
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
......
...@@ -4,17 +4,17 @@ package net.mamoe.mirai.utils ...@@ -4,17 +4,17 @@ package net.mamoe.mirai.utils
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO import io.ktor.client.engine.cio.CIO
import kotlinx.io.core.IoBuffer
import kotlinx.io.core.Output import kotlinx.io.core.Output
import kotlinx.io.core.copyTo import kotlinx.io.core.copyTo
import kotlinx.io.core.readBytes
import kotlinx.io.streams.asInput import kotlinx.io.streams.asInput
import kotlinx.io.streams.asOutput import kotlinx.io.streams.asOutput
import java.io.DataInput import java.io.*
import java.io.EOFException
import java.io.InputStream
import java.io.OutputStream
import java.net.InetAddress import java.net.InetAddress
import java.security.MessageDigest import java.security.MessageDigest
import java.util.zip.CRC32 import java.util.zip.CRC32
import java.util.zip.Inflater
actual val deviceName: String = InetAddress.getLocalHost().hostName actual val deviceName: String = InetAddress.getLocalHost().hostName
...@@ -55,3 +55,17 @@ actual fun solveIpAddress(hostname: String): String = InetAddress.getByName(host ...@@ -55,3 +55,17 @@ actual fun solveIpAddress(hostname: String): String = InetAddress.getByName(host
actual fun localIpAddress(): String = InetAddress.getLocalHost().hostAddress actual fun localIpAddress(): String = InetAddress.getLocalHost().hostAddress
actual val Http: HttpClient get() = HttpClient(CIO) actual val Http: HttpClient get() = HttpClient(CIO)
actual fun ByteArray.unzip(): ByteArray {
val inflater = Inflater()
inflater.reset()
val input = this
val output = ByteArrayOutputStream()
inflater.setInput(input)
val buffer = ByteArray(128)
while (!inflater.finished()) {
output.write(buffer, 0, inflater.inflate(buffer))
}
inflater.end()
return output.toByteArray()
}
\ No newline at end of file
...@@ -8,7 +8,7 @@ import kotlinx.coroutines.runBlocking ...@@ -8,7 +8,7 @@ import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.login import net.mamoe.mirai.login
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
import java.util.* import java.util.*
/** /**
......
...@@ -16,14 +16,14 @@ import mirai.test.packetdebugger.PacketDebugger.sessionKey ...@@ -16,14 +16,14 @@ import mirai.test.packetdebugger.PacketDebugger.sessionKey
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.TIMProtocol import net.mamoe.mirai.network.protocol.timpc.TIMProtocol
import net.mamoe.mirai.network.protocol.tim.handler.DataPacketSocketAdapter import net.mamoe.mirai.network.protocol.timpc.handler.DataPacketSocketAdapter
import net.mamoe.mirai.network.protocol.tim.packet.* import net.mamoe.mirai.network.protocol.timpc.packet.*
import net.mamoe.mirai.network.protocol.tim.packet.event.IgnoredEventPacket import net.mamoe.mirai.network.protocol.timpc.packet.event.IgnoredEventPacket
import net.mamoe.mirai.network.protocol.tim.packet.login.CaptchaKey import net.mamoe.mirai.network.protocol.timpc.packet.login.CaptchaKey
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
import net.mamoe.mirai.network.protocol.tim.packet.login.ShareKey import net.mamoe.mirai.network.protocol.timpc.packet.login.ShareKey
import net.mamoe.mirai.network.protocol.tim.packet.login.TouchKey import net.mamoe.mirai.network.protocol.timpc.packet.login.TouchKey
import net.mamoe.mirai.utils.DecryptionFailedException import net.mamoe.mirai.utils.DecryptionFailedException
import net.mamoe.mirai.utils.decryptBy import net.mamoe.mirai.utils.decryptBy
import net.mamoe.mirai.utils.io.* import net.mamoe.mirai.utils.io.*
......
...@@ -3,9 +3,9 @@ package mirai.test.packetdebugger ...@@ -3,9 +3,9 @@ package mirai.test.packetdebugger
import kotlinx.io.core.ByteReadPacket import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.discardExact import kotlinx.io.core.discardExact
import kotlinx.io.core.readUShort import kotlinx.io.core.readUShort
import net.mamoe.mirai.network.protocol.tim.packet.PacketId import net.mamoe.mirai.network.protocol.timpc.packet.PacketId
import net.mamoe.mirai.network.protocol.tim.packet.login.CaptchaPacket import net.mamoe.mirai.network.protocol.timpc.packet.login.CaptchaPacket
import net.mamoe.mirai.network.protocol.tim.packet.matchPacketId import net.mamoe.mirai.network.protocol.timpc.packet.matchPacketId
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
......
package test package test
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
@Suppress("RedundantSuspendModifier") @Suppress("RedundantSuspendModifier")
suspend fun suspendPrintln(arg: String) = println(arg) suspend fun suspendPrintln(arg: String) = println(arg)
......
...@@ -11,9 +11,9 @@ import net.mamoe.mirai.contact.QQ ...@@ -11,9 +11,9 @@ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.contact.sendMessage import net.mamoe.mirai.contact.sendMessage
import net.mamoe.mirai.event.* import net.mamoe.mirai.event.*
import net.mamoe.mirai.message.* import net.mamoe.mirai.message.*
import net.mamoe.mirai.network.protocol.tim.packet.action.uploadImage import net.mamoe.mirai.network.protocol.timpc.packet.action.uploadImage
import net.mamoe.mirai.network.protocol.tim.packet.event.FriendMessage import net.mamoe.mirai.network.protocol.timpc.packet.event.FriendMessage
import net.mamoe.mirai.network.protocol.tim.packet.event.GroupMessage import net.mamoe.mirai.network.protocol.timpc.packet.event.GroupMessage
import net.mamoe.mirai.utils.suspendToExternalImage import net.mamoe.mirai.utils.suspendToExternalImage
import java.io.File import java.io.File
......
...@@ -17,8 +17,8 @@ import net.mamoe.mirai.contact.sendMessage ...@@ -17,8 +17,8 @@ import net.mamoe.mirai.contact.sendMessage
import net.mamoe.mirai.event.subscribeMessages import net.mamoe.mirai.event.subscribeMessages
import net.mamoe.mirai.login import net.mamoe.mirai.login
import net.mamoe.mirai.message.Image import net.mamoe.mirai.message.Image
import net.mamoe.mirai.network.protocol.tim.packet.event.GroupMessage import net.mamoe.mirai.network.protocol.timpc.packet.event.GroupMessage
import net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult import net.mamoe.mirai.network.protocol.timpc.packet.login.LoginResult
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
class MiraiService : Service() { class MiraiService : Service() {
......
...@@ -7,19 +7,16 @@ import kotlinx.coroutines.GlobalScope ...@@ -7,19 +7,16 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import net.mamoe.mirai.Bot import net.mamoe.mirai.*
import net.mamoe.mirai.BotAccount
import net.mamoe.mirai.addFriend
import net.mamoe.mirai.alsoLogin
import net.mamoe.mirai.contact.MemberPermission import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.event.Subscribable import net.mamoe.mirai.event.Subscribable
import net.mamoe.mirai.event.subscribeAlways import net.mamoe.mirai.event.subscribeAlways
import net.mamoe.mirai.event.subscribeGroupMessages import net.mamoe.mirai.event.subscribeGroupMessages
import net.mamoe.mirai.event.subscribeMessages import net.mamoe.mirai.event.subscribeMessages
import net.mamoe.mirai.message.* import net.mamoe.mirai.message.*
import net.mamoe.mirai.network.protocol.tim.packet.event.FriendMessage import net.mamoe.mirai.network.protocol.timpc.packet.event.FriendMessage
import net.mamoe.mirai.network.protocol.tim.packet.event.GroupMessage import net.mamoe.mirai.network.protocol.timpc.packet.event.GroupMessage
import net.mamoe.mirai.network.protocol.tim.packet.event.ReceiveFriendAddRequestEvent import net.mamoe.mirai.network.protocol.timpc.packet.event.ReceiveFriendAddRequestEvent
import java.io.File import java.io.File
import java.util.* import java.util.*
import javax.swing.filechooser.FileSystemView import javax.swing.filechooser.FileSystemView
...@@ -94,6 +91,12 @@ suspend fun main() { ...@@ -94,6 +91,12 @@ suspend fun main() {
sender sender
}.queryProfile().toString().reply() }.queryProfile().toString().reply()
} }
"grouplist" reply {
//"https://ssl.ptlogin2.qq.com/jump?pt_clientver=5509&pt_src=1&keyindex=9&clientuin=" + bot.qqAccount + "&clientkey=" + com.tick_tock.pctim.utils.Util.byte2HexString(
// user.txprotocol.serviceTicketHttp
//).replace(" ", "").toString() + "&u1=http%3A%2F%2Fqun.qq.com%2Fmember.html%23gid%3D168209441"
}
"xml" reply { "xml" reply {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment