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
8c81ae26
Commit
8c81ae26
authored
Jan 26, 2020
by
Him188
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
bc19e9eb
767b945a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
26 deletions
+46
-26
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
...moe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
+27
-25
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt
...ai/qqandroid/network/protocol/packet/login/LoginPacket.kt
+19
-1
No files found.
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
View file @
8c81ae26
...
...
@@ -14,6 +14,7 @@ import net.mamoe.mirai.qqandroid.event.PacketReceivedEvent
import
net.mamoe.mirai.qqandroid.network.protocol.packet.KnownPacketFactories
import
net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket.LoginPacketResponse.*
import
net.mamoe.mirai.qqandroid.network.protocol.packet.login.StatSvc
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.io.*
...
...
@@ -32,36 +33,37 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
launch
(
CoroutineName
(
"Incoming Packet Receiver"
))
{
processReceive
()
}
bot
.
logger
.
info
(
"Trying login"
)
when
(
val
response
:
LoginPacket
.
LoginPacketResponse
=
LoginPacket
.
SubCommand9
(
bot
.
client
).
sendAndExpect
())
{
is
UnsafeLogin
->
{
bot
.
logger
.
info
(
"Login unsuccessful, device auth is needed"
)
bot
.
logger
.
info
(
"登陆失败, 原因为非常用设备登陆"
)
bot
.
logger
.
info
(
"Open the following URL in QQ browser and complete the verification"
)
bot
.
logger
.
info
(
"将下面这个链接在QQ浏览器中打开并完成认证后尝试再次登陆"
)
bot
.
logger
.
info
(
response
.
url
)
return
}
var
response
:
LoginPacket
.
LoginPacketResponse
=
LoginPacket
.
SubCommand9
(
bot
.
client
).
sendAndExpect
()
captcha
@
while
(
true
)
{
when
(
response
)
{
is
LoginPacket
.
LoginPacketResponse
.
Captcha
->
when
(
response
)
{
is
LoginPacket
.
LoginPacketResponse
.
Captcha
.
Picture
->
{
bot
.
logger
.
info
(
"需要图片验证码"
)
var
result
=
bot
.
configuration
.
captchaSolver
.
invoke
(
bot
,
response
.
data
)
if
(
result
===
null
||
result
.
length
!=
4
)
{
//refresh captcha
@Suppress
(
"SpellCheckingInspection"
)
result
=
"ABCD"
}
bot
.
logger
.
info
(
"提交验证码"
)
response
=
LoginPacket
.
SubCommand2
(
bot
.
client
,
response
.
sign
,
result
).
sendAndExpect
()
// goto outer when
}
is
LoginPacket
.
LoginPacketResponse
.
Captcha
.
Slider
->
{
error
(
"需要滑动验证码"
)
is
Captcha
->
when
(
response
)
{
is
Captcha
.
Picture
->
{
bot
.
logger
.
info
(
"需要图片验证码"
)
var
result
=
bot
.
configuration
.
captchaSolver
.
invoke
(
bot
,
response
.
data
)
if
(
result
===
null
||
result
.
length
!=
4
)
{
//refresh captcha
result
=
"ABCD"
}
bot
.
logger
.
info
(
"提交验证码"
)
val
captchaResponse
:
LoginPacket
.
LoginPacketResponse
=
LoginPacket
.
SubCommand2
(
bot
.
client
,
response
.
sign
,
result
).
sendAndExpect
()
}
is
Captcha
.
Slider
->
{
bot
.
logger
.
info
(
"需要滑动验证码"
)
}
}
is
LoginPacket
.
LoginPacketResponse
.
Error
->
error
(
response
.
toString
())
is
Error
->
error
(
response
.
toString
())
is
LoginPacket
.
LoginPacketResponse
.
Success
->
{
bot
.
logger
.
info
(
"Login successful"
)
break
@
captcha
}
is
Success
->
{
bot
.
logger
.
info
(
"Login successful"
)
}
}
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt
View file @
8c81ae26
...
...
@@ -112,7 +112,7 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
isGuidFromFileNull
=
false
,
isGuidAvailable
=
true
,
isGuidChanged
=
false
,
guidFlag
=
guidFlag
(
GuidSource
.
FROM_STORAGE
,
MacOrAndroidIdChangeFlag
.
NoChange
),
guidFlag
=
guidFlag
(
GuidSource
.
FROM_STORAGE
,
MacOrAndroidIdChangeFlag
(
0
)
),
buildModel
=
client
.
device
.
model
,
guid
=
client
.
device
.
guid
,
buildBrand
=
client
.
device
.
brand
,
...
...
@@ -222,6 +222,10 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
}
}
}
class
UnsafeLogin
(
val
url
:
String
)
:
LoginPacketResponse
()
class
DeviceLockLogin
()
:
LoginPacketResponse
()
}
@InternalAPI
...
...
@@ -246,10 +250,24 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
0
->
onLoginSuccess
(
tlvMap
,
bot
)
1
,
15
->
onErrorMessage
(
tlvMap
)
2
->
onSolveLoginCaptcha
(
tlvMap
,
bot
)
-
96
->
onUnsafeDeviceLogin
(
tlvMap
,
bot
)
-
52
->
onDeviceLockLogin
(
tlvMap
,
bot
)
else
->
error
(
"unknown login result type: $type"
)
}
}
private
fun
onDeviceLockLogin
(
tlvMap
:
Map
<
Int
,
ByteArray
>,
bot
:
QQAndroidBot
):
LoginPacketResponse
.
DeviceLockLogin
{
println
(
tlvMap
[
0
x104
]
!!
.
toUHexString
())
println
(
tlvMap
[
0
x402
]
!!
.
toUHexString
())
println
(
tlvMap
[
0
x403
]
!!
.
toUHexString
())
return
LoginPacketResponse
.
DeviceLockLogin
();
}
private
fun
onUnsafeDeviceLogin
(
tlvMap
:
Map
<
Int
,
ByteArray
>,
bot
:
QQAndroidBot
):
LoginPacketResponse
.
UnsafeLogin
{
return
LoginPacketResponse
.
UnsafeLogin
(
tlvMap
[
0
x204
]
!!
.
toReadPacket
().
readRemainingBytes
().
encodeToString
())
}
private
fun
onErrorMessage
(
tlvMap
:
Map
<
Int
,
ByteArray
>):
LoginPacketResponse
.
Error
{
return
tlvMap
[
0
x146
]
?.
toReadPacket
()
?.
run
{
readShort
()
// ver
...
...
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