Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
56840643
Commit
56840643
authored
Nov 11, 2019
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
AddContact preview
parent
14152815
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
241 additions
and
59 deletions
+241
-59
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
+102
-11
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt
.../src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt
+0
-4
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/BotSession.kt
...c/commonMain/kotlin/net.mamoe.mirai/network/BotSession.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/Packet.kt
...lin/net.mamoe.mirai/network/protocol/tim/packet/Packet.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/PacketId.kt
...n/net.mamoe.mirai/network/protocol/tim/packet/PacketId.kt
+4
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/AddContact.kt
...oe.mirai/network/protocol/tim/packet/action/AddContact.kt
+109
-39
mirai-debug/src/main/kotlin/PacketDebuger.kt
mirai-debug/src/main/kotlin/PacketDebuger.kt
+0
-3
mirai-debug/src/main/kotlin/test/ProfileTest.kt
mirai-debug/src/main/kotlin/test/ProfileTest.kt
+24
-0
No files found.
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
View file @
56840643
...
@@ -12,6 +12,7 @@ import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler
...
@@ -12,6 +12,7 @@ import net.mamoe.mirai.network.protocol.tim.TIMBotNetworkHandler
import
net.mamoe.mirai.network.protocol.tim.packet.action.AddFriendPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.AddFriendPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendPacket
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendResponse
import
net.mamoe.mirai.network.protocol.tim.packet.action.CanAddFriendResponse
import
net.mamoe.mirai.network.protocol.tim.packet.action.RequestFriendAdditionKeyPacket
import
net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult
import
net.mamoe.mirai.network.protocol.tim.packet.login.LoginResult
import
net.mamoe.mirai.network.sessionKey
import
net.mamoe.mirai.network.sessionKey
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.BotConfiguration
...
@@ -162,10 +163,8 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) {
...
@@ -162,10 +163,8 @@ class Bot(val account: BotAccount, val logger: MiraiLogger) {
@Suppress
(
"ClassName"
)
@Suppress
(
"ClassName"
)
sealed
class
AddFriendResult
{
sealed
class
AddFriendResult
{
open
class
SUCCESS
internal
constructor
()
:
AddFriendResult
()
{
abstract
class
DONE
internal
constructor
()
:
AddFriendResult
()
{
companion
object
:
SUCCESS
()
override
fun
toString
():
String
=
"AddFriendResult(Done)"
override
fun
toString
():
String
=
"AddFriendResult(Success)"
}
}
/**
/**
...
@@ -178,27 +177,119 @@ sealed class AddFriendResult {
...
@@ -178,27 +177,119 @@ sealed class AddFriendResult {
/**
/**
* 这个人已经是好友
* 这个人已经是好友
*/
*/
object
ALREADY_ADDED
:
SUCCESS
()
{
object
ALREADY_ADDED
:
DONE
()
{
override
fun
toString
():
String
=
"AddFriendResult(AlreadyAdded)"
override
fun
toString
():
String
=
"AddFriendResult(AlreadyAdded)"
}
}
/**
* 等待对方同意
*/
object
WAITING_FOR_APPROVE
:
DONE
()
{
override
fun
toString
():
String
=
"AddFriendResult(WaitingForApprove)"
}
/**
* 成功添加 (只在对方设置为允许任何人直接添加为好友时才会获得这个结果)
*/
object
ADDED
:
DONE
()
{
override
fun
toString
():
String
=
"AddFriendResult(Added)"
}
}
}
/*
// TODO: 2019/11/11 其中一个是对方已同意添加好友的包
Mirai 22:04:48 : Packet received: UnknownEventPacket(id=00 BC, identity=(2092749761->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 01 00 00 0F 00 00 00 00 00 00 00 00 01 03 EB 00 02 0A 00
Mirai 22:04:48 : Packet received: UnknownEventPacket(id=00 D6, identity=(2092749761->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 00 BC 01 00 00 00 00 02 00 00
*/
/**
/**
* 添加一个好友
* 添加一个好友
*
*
* @param lazyMessage 若需要验证请求时的验证消息.
* @param lazyMessage 若需要验证请求时的验证消息.
*/
*/
suspend
fun
ContactSystem
.
addFriend
(
id
:
UInt
,
lazyMessage
:
()
->
String
=
{
""
}):
AddFriendResult
=
bot
.
withSession
{
suspend
fun
ContactSystem
.
addFriend
(
id
:
UInt
,
lazyMessage
:
()
->
String
=
{
""
}
,
lazyRemark
:
()
->
String
=
{
""
}
):
AddFriendResult
=
bot
.
withSession
{
when
(
CanAddFriendPacket
(
bot
.
qqAccount
,
id
,
bot
.
sessionKey
).
sendAndExpect
<
CanAddFriendResponse
>().
await
())
{
when
(
CanAddFriendPacket
(
bot
.
qqAccount
,
id
,
bot
.
sessionKey
).
sendAndExpect
<
CanAddFriendResponse
>().
await
())
{
is
CanAddFriendResponse
.
AlreadyAdded
->
AddFriendResult
.
ALREADY_ADDED
is
CanAddFriendResponse
.
AlreadyAdded
->
AddFriendResult
.
ALREADY_ADDED
is
CanAddFriendResponse
.
Rejected
->
AddFriendResult
.
REJECTED
is
CanAddFriendResponse
.
Rejected
->
AddFriendResult
.
REJECTED
is
CanAddFriendResponse
.
RequireVerification
->
{
TODO
()
is
CanAddFriendResponse
.
ReadyToAdd
,
is
CanAddFriendResponse
.
RequireVerification
->
{
val
key
=
RequestFriendAdditionKeyPacket
(
bot
.
qqAccount
,
id
,
sessionKey
).
sendAndExpect
<
RequestFriendAdditionKeyPacket
.
Response
>().
await
().
key
AddFriendPacket
(
bot
.
qqAccount
,
id
,
sessionKey
,
lazyMessage
(),
lazyRemark
(),
key
).
sendAndExpect
<
AddFriendPacket
.
Response
>().
await
()
return
AddFriendResult
.
WAITING_FOR_APPROVE
}
}
is
CanAddFriendResponse
.
ReadyToAdd
->
{
//这个做的是需要验证消息的情况, 不确定 ReadyToAdd 的是啥
AddFriendPacket
(
bot
.
qqAccount
,
id
,
bot
.
sessionKey
).
sendAndExpect
<
AddFriendPacket
.
AddFriendResponse
>().
await
()
// 似乎 RequireVerification 和 ReadyToAdd 判断错了. 需要重新检查一下
// TODO: 2019/11/11 需要验证问题的情况
/*is CanAddFriendResponse.ReadyToAdd -> {
// TODO: 2019/11/11 这不需要验证信息的情况
//AddFriendPacket(bot.qqAccount, id, bot.sessionKey, ).sendAndExpect<AddFriendPacket.Response>().await()
TODO()
TODO()
}
}
*/
}
}
}
}
/*
1494695429 同意好友请求后收到以下包:
Mirai 22:11:14 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 06 00 00 00 08 08 02 1A 02 08 44 2A 06 08 83 D8 A5 EE 05
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=02 02, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 02 00 00
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=00 D6, identity=(1494695429->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 00 BC 01 00 00 00 00 02 00 00
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=00 BC, identity=(1494695429->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 01 00 00 0F 00 00 00 00 00 00 00 00 01 03 EB 00 02 0A 00
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
//�9����同意你的加好友请求"him188的小dick(
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 07 00 00 00 3B 08 02 1A 03 08 E2 01 0A 39 08 01 10 85 FC DC C8 05 1A 1B E5 90 8C E6 84 8F E4 BD A0 E7 9A 84 E5 8A A0 E5 A5 BD E5 8F 8B E8 AF B7 E6 B1 82 22 10 68 69 6D 31 38 38 E7 9A 84 E5 B0 8F 64 69 63 6B 28 01
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 06 00 00 00 08 08 02 1A 02 08 44 2A 06 08 B7 D8 A5 EE 05
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 06 00 00 00 04 08 02 1A 02 08 23 1A 02 08 00
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 07 00 00 00 0C 08 02 1A 03 08 E2 01 0A 0A 08 00 10 DD F1 92 B7 07 1A 00
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 06 00 00 00 18 08 02 1A 02 08 44 1A 0E 08 DD F1 92 B7 07 10 B7 D8 A5 EE 05 18 01 2A 06 08 B7 D8 A5 EE 05
Mirai 22:12:06 : Packet received: UnknownEventPacket(id=02 10, identity=(1494695429->1994701021))
//来自QQ号查找:BJR
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 06 00 00 00 31 08 02 1A 02 08 23 12 2F 08 DD F1 92 B7 07 10 85 FC DC C8 05 18 03 20 82 D8 A5 EE 05 2A 11 E6 9D A5 E8 87 AA 51 51 E5 8F B7 E6 9F A5 E6 89 BE 3A 00 42 00 4A 00 52 00
Mirai 22:12:07 : Packet received: UnknownPacket(01 2D)
body=01 01 00 00 00 01 59 17 3E 05 00 00 00
Mirai 22:12:07 : UnknownPacket(01 2D) = 71 B9 C2 FD 11 79 A3 CC FB 30 BF C6 5E 3B 18 87 A7 1C 52 BF 7F B4 61 42 BF C6 5E 3B 18 87 A7 1C 52 BF 7F B4 61 42 8A CB 49 F4 72 98 29 55 F8 04 FB 38 F5 87 65 98 9D D0 F0 F4 3A EC 12 02 43 F5 39 BF 40 2E 4F 0B 37 29 C6 DB A7 3B FC C7 FB 90 CF 6F 15 D3 34 75 EE 2A 4C 36 E4 39 F2 D1 4B 87 82 37 16 A3 84 E8 D8 2D 19 F3 A8 20 6E 66 C7 22 16 A3 84 E8 D8 2D 19 F3 A8 20 6E 66 C7 22 6D 2A F0 DA A1 E2 C1 54 29 E2 C5 A1 26 11 CA FC 4A E9 EA 32 95 78 41 31 9E 78 04 A8 B6 7C 0E E7 2B 32 87 E3 0A 84 67 F4 83 3F 53 C8 B1 BE EE 07 02 10 97 67 AF 0C DF 2B 20 AC E0 7E 42 7B 98 01 CB CE B8 13 52 8B 34 9A 4D A0 14 BA 6E 88 0E 2F F9 06 B5 1E 4A 00 D7 0E 0A 58 75 7D 39 2E B1 38 A0 4A 13 1C 3E 71 8C 78 CA F7 39 2E B1 38 A0 4A 13 1C 3E 71 8C 78 CA F7 46 06 FA F4 99 D8 52 A1 D7 70 12 40 1B 61 82 3D 8D F6 96 F1 C5 DB 1C E3 F8 9D DD 8A 2C 2C F5 62 EC BF FD C1 F0 77 58 0B FD 29 DE 23 D0 AF CD 46 90 A2 A1 D4 50 6D B2 52 D4 4A 2A EF 7D 4E 6E F8 63 41 BE D8 5F A1 A9 43 BF BC E1 54 C0 A0 33 CD 1B C6 84 2E 72 31 F7 E2 A7 91 3C DB 2D FD A7 84 CA 87 A2 3C 64 A4 04 82 4B 88 74 74 43 45 E1 48 FA BB 15 A6 D5 82 3F FF 2A BA C8 AF F8 E1 77 15 0D 5C 84 EB 40 C7 1E 52 16 CB EB 75 04 54 17 95 09 BF FD CA E8 C7 D1 93 F8 83 6B 50 26 A8 E6 23 00 AA EB 75 56 2D 24 62 CC 79 4E AA 92 B6 F6 CA BA 57 05 57 B3 53 32 60 4B 3B 20 D0 F6 57 31 52 49 EC B0 0B C0 97 D6 39 AC 16 F6 57 31 52 49 EC B0 0B C0 97 D6 39 AC 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2092749761 同意后收到以下几个包
Mirai 22:04:40 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 06 00 00 00 08 08 02 1A 02 08 44 2A 06 08 F9 D4 A5 EE 05
Mirai 22:04:45 : Packet received: UnknownEventPacket(id=02 10, identity=(1040400290->1994701021))
//5�������%�ԥ� (2对方正在输入...(
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 07 00 00 00 35 08 02 1A 03 08 95 02 08 A2 FF 8C F0 03 10 DD F1 92 B7 07 1A 25 08 00 10 05 18 FE D4 A5 EE 05 20 01 28 08 32 15 E5 AF B9 E6 96 B9 E6 AD A3 E5 9C A8 E8 BE 93 E5 85 A5 2E 2E 2E 28 01
Mirai 22:04:45 : Packet received: FriendConversationInitialize(qq=1040400290)
Mirai 22:04:48 : Packet received: UnknownEventPacket(id=00 BC, identity=(2092749761->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 01 00 00 0F 00 00 00 00 00 00 00 00 01 03 EB 00 02 0A 00
Mirai 22:04:48 : Packet received: UnknownEventPacket(id=00 D6, identity=(2092749761->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 00 BC 01 00 00 00 00 02 00 00
Mirai 22:04:48 : Packet received: UnknownEventPacket(id=02 02, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 02 00 00
Mirai 22:04:48 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
//:�8����同意你的加好友请求"him188的老公(
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 07 00 00 00 3A 08 02 1A 03 08 E2 01 0A 38 08 01 10 C1 A7 F3 E5 07 1A 1B E5 90 8C E6 84 8F E4 BD A0 E7 9A 84 E5 8A A0 E5 A5 BD E5 8F 8B E8 AF B7 E6 B1 82 22 0F 68 69 6D 31 38 38 E7 9A 84 E8 80 81 E5 85 AC 28 01
Mirai 22:04:48 : Packet received: UnknownEventPacket(id=02 10, identity=(1994701021->1994701021))
= 00 00 00 08 00 0A 00 04 01 00 00 00 00 00 00 06 00 00 00 08 08 02 1A 02 08 44 2A 06 08 81 D5 A5 EE 05
Mirai 22:04:48 : Packet received: UnknownPacket(01 2D)
body=01 01 00 00 00 01 7C BC D3 C1 00 00 00
Mirai 22:04:48 : UnknownPacket(01 2D) = 66 B9 2C A3 EA 31 AD 5B E4 52 37 25 3B 21 A9 FF EE 2E 80 AF 6F 9B C0 A7 37 25 3B 21 A9 FF EE 2E 80 AF 6F 9B C0 A7 6D FF BF 73 37 8A 34 4C D1 DF D3 ED 93 DA B3 32 AC 4D 11 D7 68 F0 93 A3 F5 BE 93 DA B3 32 AC 4D 11 D7 68 F0 93 A3 F5 BE CC 5F 8A DC 52 D7 2E 39 F6 D0 A6 FE E2 FE A9 1D C1 5E AC 2A 02 46 A0 90 23 6E 10 A6 48 B0 04 BC 06 F8 AF 42 87 DA 69 42 55 AA 48 B0 04 BC 06 F8 AF 42 87 DA 69 42 55 AA 29 3B C5 0C 5B 43 EE FA 30 EA 81 86 F3 8D FB 41 EA A3 23 59 27 49 03 B6 34 5C 4A CA DE 8E 3C 02 36 5F 48 C7 14 73 E4 D4 D8 C3 81 80 FC 49 9B 3C CC 4D D8 E9 07 84 56 40 F9 7E 80 D8 11 60 B1 FF F0 0E 5D 6E 4B 45 41 B4 81 54 EB B9 EE 98 D2 29 F3 05 BD 96 D3 E4 A6 42 98 CD C4 D1 5F 10 DE 62 EB E5 D3 E4 A6 42 98 CD C4 D1 5F 10 DE 62 EB E5 25 61 AA 54 A1 BE 14 78 F9 AC 2B F1 43 0B B5 51 2D 15 AA DE 97 B8 CC A3 2A 9B 8B AB 37 7C 45 57 D6 B9 BF 6C 4B 7B 66 AD 89 EB 90 42 0F 5F 63 A7 CC 06 4D 08 E0 5C 5D E3 9A AF 0D 19 C7 78 B5 30 6C 9D E2 A4 CA 3A DD 64 FC 78 A8 E1 59 1F 67 97 C6 B2 0B 73 EB 9A 2D 75 07 7E CE 82 3B EC CF 3A 9F 98 4F C0 BA 98 69 D7 65 87 EA 53 90 18 01 BD 8B AB EB 40 74 9C 03 C4 92 3B 9A F5 3A DD 51 84 EF 72 48 71 DC B4 AA D5 95 AB BC 4B 97 70 4D FD EE DE 37 BD 33 0C DF 64 C5 55 2E ED A6 98 6A 88 28 8B F3 24 8D 73 00 DE 9E FC 78 15 4A AC E2 3F AD 93 4C 2F 88 48 34 DA F3 F7 FC B7 E7 39 F6 33 3E 5C 88 48 34 DA F3 F7 FC B7 E7 39 F6 33 3E 5C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*/
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt
View file @
56840643
...
@@ -147,10 +147,6 @@ open class QQ internal constructor(bot: Bot, id: UInt) : Contact(bot, id) {
...
@@ -147,10 +147,6 @@ open class QQ internal constructor(bot: Bot, id: UInt) : Contact(bot, id) {
}
}
}
}
suspend
fun
QQ
.
addAsFriend
()
{
}
override
fun
toString
():
String
{
override
fun
toString
():
String
{
return
"QQ(${this.id})"
return
"QQ(${this.id})"
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/BotSession.kt
View file @
56840643
...
@@ -102,7 +102,7 @@ class BotSession(
...
@@ -102,7 +102,7 @@ class BotSession(
/**
/**
* 发送一个数据包, 并期待接受一个特定的 [ServerPacket][P].
* 发送一个数据包, 并期待接受一个特定的 [ServerPacket][P].
*
您
将能从本函数的返回值 [CompletableDeferred] 接收到所期待的 [P]
* 将能从本函数的返回值 [CompletableDeferred] 接收到所期待的 [P]
*/
*/
suspend
inline
fun
<
reified
P
:
Packet
>
OutgoingPacket
.
sendAndExpect
(
checkSequence
:
Boolean
=
true
):
CompletableDeferred
<
P
>
=
suspend
inline
fun
<
reified
P
:
Packet
>
OutgoingPacket
.
sendAndExpect
(
checkSequence
:
Boolean
=
true
):
CompletableDeferred
<
P
>
=
sendAndExpect
<
P
,
P
>(
checkSequence
)
{
it
}
sendAndExpect
<
P
,
P
>(
checkSequence
)
{
it
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/Packet.kt
View file @
56840643
...
@@ -23,4 +23,4 @@ class UnknownPacket(val id: PacketId, val body: ByteReadPacket) : Packet {
...
@@ -23,4 +23,4 @@ class UnknownPacket(val id: PacketId, val body: ByteReadPacket) : Packet {
*/
*/
object
NoPacket
:
Packet
{
object
NoPacket
:
Packet
{
override
fun
toString
():
String
=
"NoPacket"
override
fun
toString
():
String
=
"NoPacket"
}
}
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/PacketId.kt
View file @
56840643
...
@@ -72,11 +72,15 @@ enum class KnownPacketId(override inline val value: UShort, override inline val
...
@@ -72,11 +72,15 @@ enum class KnownPacketId(override inline val value: UShort, override inline val
inline
SEND_GROUP_MESSAGE
(
0
x0002u
,
SendGroupMessagePacket
),
inline
SEND_GROUP_MESSAGE
(
0
x0002u
,
SendGroupMessagePacket
),
inline
SEND_FRIEND_MESSAGE
(
0
x00CDu
,
SendFriendMessagePacket
),
inline
SEND_FRIEND_MESSAGE
(
0
x00CDu
,
SendFriendMessagePacket
),
inline
CAN_ADD_FRIEND
(
0
x00A7u
,
CanAddFriendPacket
),
inline
CAN_ADD_FRIEND
(
0
x00A7u
,
CanAddFriendPacket
),
inline
ADD_FRIEND
(
0
x00A8u
,
AddFriendPacket
),
inline
REQUEST_FRIEND_ADDITION_KEY
(
0
x00AEu
,
RequestFriendAdditionKeyPacket
),
inline
GROUP_IMAGE_ID
(
0
x0388u
,
GroupImageIdRequestPacket
),
inline
GROUP_IMAGE_ID
(
0
x0388u
,
GroupImageIdRequestPacket
),
inline
FRIEND_IMAGE_ID
(
0
x0352u
,
FriendImageIdRequestPacket
),
inline
FRIEND_IMAGE_ID
(
0
x0352u
,
FriendImageIdRequestPacket
),
inline
REQUEST_PROFILE_AVATAR
(
0
x0031u
,
RequestProfileAvatarPacket
),
inline
REQUEST_PROFILE_AVATAR
(
0
x0031u
,
RequestProfileAvatarPacket
),
inline
REQUEST_PROFILE_DETAILS
(
0
x003Cu
,
RequestProfileDetailsPacket
),
inline
REQUEST_PROFILE_DETAILS
(
0
x003Cu
,
RequestProfileDetailsPacket
),
inline
QUERY_PREVIOUS_NAME
(
0
x01BCu
,
QueryPreviousNamePacket
),
// @Suppress("DEPRECATION")
// @Suppress("DEPRECATION")
// inline SUBMIT_IMAGE_FILE_NAME(0x01BDu, SubmitImageFilenamePacket),
// inline SUBMIT_IMAGE_FILE_NAME(0x01BDu, SubmitImageFilenamePacket),
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/action/AddContact.kt
View file @
56840643
...
@@ -2,28 +2,14 @@
...
@@ -2,28 +2,14 @@
package
net.mamoe.mirai.network.protocol.tim.packet.action
package
net.mamoe.mirai.network.protocol.tim.packet.action
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.*
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.readUByte
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.TIMProtocol
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.network.protocol.tim.packet.*
import
net.mamoe.mirai.network.protocol.tim.packet.event.EventPacket
import
net.mamoe.mirai.network.protocol.tim.packet.event.EventPacket
import
net.mamoe.mirai.utils.io.*
import
net.mamoe.mirai.utils.io.*
// 01BC 曾用名查询. 查到的是这个人的
// 发送 00 00
// 3E 03 3F A2 //bot
// 59 17 3E 05 //目标
//
// 接受: 00 00 00 03
// [00 00 00 0C] E6 A5 BC E4 B8 8A E5 B0 8F E7 99 BD
// [00 00 00 10] 68 69 6D 31 38 38 E7 9A 84 E5 B0 8F 64 69 63 6B
// [00 00 00 0F] E4 B8 B6 E6 9A 97 E8 A3 94 E5 89 91 E9 AD 94
/**
/**
* 查询某人与机器人账号有关的曾用名 (备注).
* 查询某人与机器人账号有关的曾用名 (备注).
*
*
...
@@ -31,8 +17,9 @@ import net.mamoe.mirai.utils.io.*
...
@@ -31,8 +17,9 @@ import net.mamoe.mirai.utils.io.*
* - 昵称
* - 昵称
* - 共同群内的群名片
* - 共同群内的群名片
*/
*/
@PacketVersion
(
date
=
"2019.11.02"
,
timVersion
=
"2.3.2.21173"
)
@AnnotatedId
(
KnownPacketId
.
QUERY_PREVIOUS_NAME
)
object
QueryPreviousNamePacket
:
SessionPacketFactory
<
QueryPreviousNameResponse
>()
{
@PacketVersion
(
date
=
"2019.11.11"
,
timVersion
=
"2.3.2.21173"
)
object
QueryPreviousNamePacket
:
SessionPacketFactory
<
PreviousNameList
>()
{
operator
fun
invoke
(
operator
fun
invoke
(
bot
:
UInt
,
bot
:
UInt
,
sessionKey
:
SessionKey
,
sessionKey
:
SessionKey
,
...
@@ -43,17 +30,29 @@ object QueryPreviousNamePacket : SessionPacketFactory<QueryPreviousNameResponse>
...
@@ -43,17 +30,29 @@ object QueryPreviousNamePacket : SessionPacketFactory<QueryPreviousNameResponse>
writeQQ
(
target
)
writeQQ
(
target
)
}
}
override
suspend
fun
ByteReadPacket
.
decode
(
id
:
PacketId
,
sequenceId
:
UShort
,
handler
:
BotNetworkHandler
<
*
>):
QueryPreviousNameResponse
=
// 01BC 曾用名查询. 查到的是这个人的
QueryPreviousNameResponse
().
apply
{
// 发送 00 00
names
=
Array
(
readUInt
().
toInt
())
{
// 3E 03 3F A2 //bot
// 59 17 3E 05 //目标
//
// 接受: 00 00 00 03
// [00 00 00 0C] E6 A5 BC E4 B8 8A E5 B0 8F E7 99 BD
// [00 00 00 10] 68 69 6D 31 38 38 E7 9A 84 E5 B0 8F 64 69 63 6B
// [00 00 00 0F] E4 B8 B6 E6 9A 97 E8 A3 94 E5 89 91 E9 AD 94
override
suspend
fun
ByteReadPacket
.
decode
(
id
:
PacketId
,
sequenceId
:
UShort
,
handler
:
BotNetworkHandler
<
*
>):
PreviousNameList
=
PreviousNameList
(
ArrayList
<
String
>(
readUInt
().
toInt
()).
apply
{
repeat
(
size
)
{
discardExact
(
2
)
discardExact
(
2
)
readUShortLVString
(
)
add
(
readUShortLVString
()
)
}
}
}
}
)
}
}
class
QueryPreviousNameResponse
:
Packet
{
class
PreviousNameList
(
lateinit
var
names
:
Array
<
String
>
list
:
List
<
String
>
)
:
Packet
,
List
<
String
>
by
list
{
override
fun
toString
():
String
=
this
.
joinToString
(
prefix
=
"PreviousNameList("
,
postfix
=
")"
,
separator
=
", "
)
}
}
// 需要验证消息
// 需要验证消息
...
@@ -89,6 +88,7 @@ enum class AddFriendResult {
...
@@ -89,6 +88,7 @@ enum class AddFriendResult {
* @author Him188moe
* @author Him188moe
*/
*/
@AnnotatedId
(
KnownPacketId
.
CAN_ADD_FRIEND
)
@AnnotatedId
(
KnownPacketId
.
CAN_ADD_FRIEND
)
@PacketVersion
(
date
=
"2019.11.11"
,
timVersion
=
"2.3.2.21173"
)
object
CanAddFriendPacket
:
SessionPacketFactory
<
CanAddFriendResponse
>()
{
object
CanAddFriendPacket
:
SessionPacketFactory
<
CanAddFriendResponse
>()
{
operator
fun
invoke
(
operator
fun
invoke
(
bot
:
UInt
,
bot
:
UInt
,
...
@@ -104,6 +104,7 @@ object CanAddFriendPacket : SessionPacketFactory<CanAddFriendResponse>() {
...
@@ -104,6 +104,7 @@ object CanAddFriendPacket : SessionPacketFactory<CanAddFriendResponse>() {
}
}
val
qq
:
QQ
=
readUInt
().
qq
()
val
qq
:
QQ
=
readUInt
().
qq
()
discardExact
(
0
)
return
when
(
val
state
=
readUByte
().
toUInt
())
{
return
when
(
val
state
=
readUByte
().
toUInt
())
{
//09 4E A4 B1 00 03
//09 4E A4 B1 00 03
...
@@ -152,34 +153,103 @@ sealed class CanAddFriendResponse : EventPacket {
...
@@ -152,34 +153,103 @@ sealed class CanAddFriendResponse : EventPacket {
)
:
CanAddFriendResponse
()
)
:
CanAddFriendResponse
()
}
}
/*
包ID 0115, 在点击提交好友申请时
发出 03 5D 12 93 30
接受 03 00 00 00 00 01 30 5D 12 93 30 00 14 00 00 00 00 10 30 36 35 39 E4 B8 80 E7 BE 8E E5 A4 A9 E9 9D 99 02 0A 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 1E
*/
inline
class
FriendAdditionKey
(
val
value
:
IoBuffer
)
/**
/**
* 请求
添加好友
* 请求
一个 32 位 Key, 在添加好友时发出
*/
*/
@AnnotatedId
(
KnownPacketId
.
CAN_ADD_FRIEND
)
@AnnotatedId
(
KnownPacketId
.
REQUEST_FRIEND_ADDITION_KEY
)
object
AddFriendPacket
:
SessionPacketFactory
<
AddFriendPacket
.
AddFriendResponse
>()
{
@PacketVersion
(
date
=
"2019.11.11"
,
timVersion
=
"2.3.2.21173"
)
object
RequestFriendAdditionKeyPacket
:
SessionPacketFactory
<
RequestFriendAdditionKeyPacket
.
Response
>()
{
operator
fun
invoke
(
operator
fun
invoke
(
bot
:
UInt
,
bot
:
UInt
,
qq
:
UInt
,
qq
:
UInt
,
sessionKey
:
SessionKey
sessionKey
:
SessionKey
):
OutgoingPacket
=
buildOutgoingPacket
{
)
=
buildSessionPacket
(
bot
,
sessionKey
)
{
writeQQ
(
bot
)
//01 00 01 02 B3 74 F6
writeHex
(
TIMProtocol
.
fixVer2
)
writeHex
(
"01 00 01"
)
encryptAndWrite
(
sessionKey
)
{
writeQQ
(
qq
)
writeHex
(
"01 00 01"
)
writeQQ
(
qq
)
}
}
}
override
suspend
fun
BotNetworkHandler
<*>.
handlePacket
(
packet
:
AddFriendResponse
)
{
override
suspend
fun
ByteReadPacket
.
decode
(
id
:
PacketId
,
sequenceId
:
UShort
,
handler
:
BotNetworkHandler
<
*
>):
Response
{
//01 00 01 00 00 20 01 C2 76 47 98 38 A1 FF AB 64 04 A9 81 1F CC 2B 2B A6 29 FC 97 80 A6 90 2D 26 C8 37 EE 1D 8A FA
discardExact
(
4
)
return
Response
(
FriendAdditionKey
(
readIoBuffer
(
readUShort
().
toInt
())))
}
}
data class
Response
(
val
key
:
FriendAdditionKey
)
:
Packet
}
/**
* 请求添加好友
*/
@AnnotatedId
(
KnownPacketId
.
ADD_FRIEND
)
@PacketVersion
(
date
=
"2019.11.11"
,
timVersion
=
"2.3.2.21173"
)
object
AddFriendPacket
:
SessionPacketFactory
<
AddFriendPacket
.
Response
>()
{
operator
fun
invoke
(
bot
:
UInt
,
qq
:
UInt
,
sessionKey
:
SessionKey
,
/**
* 验证消息
*/
message
:
String
,
/**
* 备注名
*/
remark
:
String
,
key
:
FriendAdditionKey
):
OutgoingPacket
=
buildSessionPacket
(
bot
,
sessionKey
)
{
//02 5D 12 93 30
// 00
// 00 [00 20] 3C 00 0C 44 17 C2 15 99 F9 94 96 DC 1C D5 E3 45 41 4B DB C5 B6 B6 52 85 14 D5 89 D2 06 72 BC C3
// 01 [00 1E] E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A
// 00 2A 00 01 00 01 00 00 00 1B E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A 00 05 00 00 00 00 01 00
class
AddFriendResponse
:
Packet
//02 02 B3 74 F6
// 00 00
// [00 20] 06 51 61 A0 CE 33 FE 3E B1 32 41 AF 9A F0 EB FD 16 D5 3A 71 89 3A A4 5C 00 0F C4 57 31 A3 35 76
// 01 00 00 00 0F 00 01 00 01 00 00 00 00 00 05 00 00 00 00 01 00
//02 02 B3 74 F6
// 00
// 00 [00 20] 01 C2 76 47 98 38 A1 FF AB 64 04 A9 81 1F CC 2B 2B A6 29 FC 97 80 A6 90 2D 26 C8 37 EE 1D 8A FA
// 01 [00 00]
// 00 0F 00 01 00 01 00 00 00 00 00 05 00 00 00 00 01 00
writeUByte
(
0
x02u
)
writeQQ
(
qq
)
writeByte
(
0
)
writeByte
(
0
);
writeShort
(
key
.
value
.
readRemaining
.
toShort
());
writeFully
(
key
.
value
)
writeByte
(
1
);
writeShortLVString
(
message
)
writeShortLVPacket
{
//00 01 00 01 00 00 00 1B E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A E5 95 8A 00 05 00 00 00 00 01
//00 01 00 01 00 00 00 00 00 05 00 00 00 00 01
writeHex
(
"00 01 00 01 00 00"
)
// TODO: 2019/11/11 这里面或者下面那个hex可能包含分组信息. 这两次测试都是用的默认分组即我的好友
writeShortLVString
(
remark
)
writeHex
(
"00 05 00 00 00 00 01"
)
}
writeByte
(
0
)
// write
}
object
Response
:
Packet
{
override
fun
toString
():
String
=
"AddFriendPacket.Response"
}
override
suspend
fun
ByteReadPacket
.
decode
(
id
:
PacketId
,
sequenceId
:
UShort
,
handler
:
BotNetworkHandler
<
*
>):
AddFriendResponse
{
override
suspend
fun
ByteReadPacket
.
decode
(
id
:
PacketId
,
sequenceId
:
UShort
,
handler
:
BotNetworkHandler
<
*
>):
Response
{
TODO
()
//02 02 B3 74 F6 00 //02 B3 74 F6 是QQ号
return
Response
}
}
}
}
mirai-debug/src/main/kotlin/PacketDebuger.kt
View file @
56840643
...
@@ -32,9 +32,6 @@ import kotlin.concurrent.thread
...
@@ -32,9 +32,6 @@ import kotlin.concurrent.thread
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.io.use
import
kotlin.io.use
/**
* 需使用 32 位 JDK
*/
fun
main
()
{
fun
main
()
{
/*
/*
check(System.getProperty("os.arch") == "x86") { "Jpcap can only work with x86 JDK" }
check(System.getProperty("os.arch") == "x86") { "Jpcap can only work with x86 JDK" }
...
...
mirai-debug/src/main/kotlin/test/ProfileTest.kt
0 → 100644
View file @
56840643
package
test
import
net.mamoe.mirai.utils.io.hexToBytes
import
net.mamoe.mirai.utils.io.read
import
net.mamoe.mirai.utils.io.readTLVMap
import
net.mamoe.mirai.utils.io.toUHexString
@ExperimentalStdlibApi
@Suppress
(
"EXPERIMENTAL_API_USAGE"
)
fun
main
()
{
val
newMap
=
"4E 22 00 03 E5 AE 89 4E 25 00 06 35 31 31 34 39 35 4E 26 00 01 2D 4E 27 00 01 2D 4E 29 00 01 02 4E 2A 00 06 56 69 76 69 61 6E 4E 2B 00 10 31 35 36 31 34 38 39 31 33 40 71 71 2E 63 6F 6D 4E 2D 00 1D 68 74 74 70 3A 2F 2F 31 35 36 31 34 38 39 31 33 2E 71 7A 6F 6E 65 2E 71 71 2E 63 6F 6D 4E 2E 00 02 33 00 4E 2F 00 04 33 33 39 00 4E 30 00 01 2D 4E 31 00 01 00 4E 33 00 2D E6 88 91 E7 95 99 E9 95 BF E7 9A 84 E5 A4 B4 E5 8F 91 EF BC 8C E6 98 AF E4 BD A0 E9 94 99 E8 BF 87 E7 9A 84 E5 B9 B4 E5 8D 8E 2E 2E 2E 4E 35 00 18 E5 B9 BF E4 B8 9C E6 8A 80 E6 9C AF E5 B8 88 E8 8C 83 E5 AD A6 E9 99 A2 4E 36 00 01 0A 4E 37 00 01 03 4E 38 00 01 01 4E 3F 00 04 07 C2 0B 02 4E 40 00 0C 00 00 00 31 00 00 34 34 00 00 00 33 4E 41 00 02 00 00 4E 42 00 02 00 00 4E 43 00 02 00 00 4E 45 00 01 21 4E 49 00 04 00 00 00 00 4E 4B 00 04 00 00 00 00 4E 4F 00 01 00 4E 54 00 00 4E 5B 00 00 52 0B 00 04 13 88 02 02 52 0F 00 14 00 00 00 00 00 00 00 00 12 05 10 58 89 10 00 00 00 00 00 00 5D C2 00 0C 00 00 00 31 00 00 34 34 00 00 31 34 5D C8 00 1E E7 B4 A2 E5 B0 BC EF BC 88 E4 B8 AD E5 9B BD EF BC 89 E6 9C 89 E9 99 90 E5 85 AC E5 8F B8 65 97 00 01 11 69 9D 00 04 00 00 00 00 69 A9 00 00 9D A5 00 02 00 00 A4 91 00 02 00 00 A4 93 00 02 00 00 A4 94 00 02 00 00 A4 9C 00 02 00 00 A4 B5 00 02 00 00"
.
hexToBytes
().
read
{
readTLVMap
(
tagSize
=
2
,
expectingEOF
=
true
)
}
newMap
.
forEach
{
(
key
,
value
)
->
if
(!(
value
.
isEmpty
()
||
value
.
all
{
it
.
toInt
()
==
0
}))
{
println
(
key
.
toUShort
().
toUHexString
()
+
"="
+
value
.
decodeToString
())
}
}
return
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment