Commit 22b26933 authored by Him188's avatar Him188

Merge remote-tracking branch 'origin/master'

parents 67d3309a 69827701
...@@ -135,6 +135,7 @@ internal object KnownPacketFactories { ...@@ -135,6 +135,7 @@ internal object KnownPacketFactories {
MessageSvc.PbGetMsg, MessageSvc.PbGetMsg,
MessageSvc.PushForceOffline, MessageSvc.PushForceOffline,
MessageSvc.PbSendMsg, MessageSvc.PbSendMsg,
MessageSvc.Del,
FriendList.GetFriendGroupList, FriendList.GetFriendGroupList,
FriendList.GetTroopListSimplify, FriendList.GetTroopListSimplify,
FriendList.GetTroopMemberList, FriendList.GetTroopMemberList,
...@@ -152,7 +153,6 @@ internal object KnownPacketFactories { ...@@ -152,7 +153,6 @@ internal object KnownPacketFactories {
MultiMsg.ApplyUp, MultiMsg.ApplyUp,
NewContact.SystemMsgNewFriend, NewContact.SystemMsgNewFriend,
NewContact.SystemMsgNewGroup, NewContact.SystemMsgNewGroup,
NewContact.Del,
ProfileService.GroupMngReq ProfileService.GroupMngReq
) )
......
...@@ -186,28 +186,4 @@ internal class NewContact { ...@@ -186,28 +186,4 @@ internal class NewContact {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot) = null override suspend fun ByteReadPacket.decode(bot: QQAndroidBot) = null
} }
} }
internal object Del : OutgoingPacketFactory<Nothing?>("MessageSvc.PbDeleteMsg") {
internal operator fun invoke(client: QQAndroidClient, header: MsgComm.MsgHead) = buildOutgoingUniPacket(client) {
writeProtoBuf(
MsgSvc.PbDeleteMsgReq.serializer(),
MsgSvc.PbDeleteMsgReq(
msgItems = listOf(
MsgSvc.PbDeleteMsgReq.MsgItem(
fromUin = header.fromUin,
toUin = header.toUin,
// 群为84、好友为187。但是群通过其他方法删除,测试通过187也能删除群消息。
msgType = 187,
msgSeq = header.msgSeq,
msgUid = header.msgUid
)
)
)
)
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot) = null
}
} }
...@@ -50,6 +50,7 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.* ...@@ -50,6 +50,7 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.*
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.GroupInfoImpl import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.GroupInfoImpl
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.NewContact import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.NewContact
import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList
import net.mamoe.mirai.qqandroid.utils._miraiContentToString
import net.mamoe.mirai.qqandroid.utils.io.serialization.readProtoBuf import net.mamoe.mirai.qqandroid.utils.io.serialization.readProtoBuf
import net.mamoe.mirai.qqandroid.utils.io.serialization.readUniPacket import net.mamoe.mirai.qqandroid.utils.io.serialization.readUniPacket
import net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray import net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
...@@ -206,8 +207,15 @@ internal class MessageSvc { ...@@ -206,8 +207,15 @@ internal class MessageSvc {
.filterNot { it.msg == null } .filterNot { it.msg == null }
.flatMapConcat { it.msg!!.asFlow() } .flatMapConcat { it.msg!!.asFlow() }
.mapNotNull<MsgComm.Msg, Packet> { msg -> .mapNotNull<MsgComm.Msg, Packet> { msg ->
// 删除消息
bot.network.run {
Del(bot.client, msg.msgHead).sendWithoutExpect()
}
when (msg.msgHead.msgType) { when (msg.msgHead.msgType) {
33 -> { // 邀请入群 33 -> { // 邀请入群
val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin) val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
if (msg.msgHead.authUin == bot.id) { if (msg.msgHead.authUin == bot.id) {
if (group != null) { if (group != null) {
...@@ -224,11 +232,25 @@ internal class MessageSvc { ...@@ -224,11 +232,25 @@ internal class MessageSvc {
if (group.members.contains(msg.msgHead.authUin)) { if (group.members.contains(msg.msgHead.authUin)) {
return@mapNotNull null return@mapNotNull null
} }
return@mapNotNull MemberJoinEvent.Invite(group.newMember(msg.getNewMemberInfo()) return@mapNotNull MemberJoinEvent.Invite(group.newMember(msg.getNewMemberInfo())
.also { group.members.delegate.addLast(it) }) .also { group.members.delegate.addLast(it) })
} }
} }
34 -> { // 主动入群
// 27 0B 60 E7 01 44 71 47 90 03 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 36 42 35 35 46 45 32 45 35 36 43 45 45 44 30 38 30 35 31 41 35 42 37 36 39 35 34 45 30 46 43 43 36 36 45 44 43 46 45 43 42 39 33 41 41 44 32 32
val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
group ?: return@mapNotNull null
if (group.members.contains(msg.msgHead.authUin)) {
return@mapNotNull null
}
return@mapNotNull MemberJoinEvent.Active(group.newMember(msg.getNewMemberInfo())
.also { group.members.delegate.addLast(it) })
}
166 -> { 166 -> {
if (msg.msgHead.fromUin == bot.id) { if (msg.msgHead.fromUin == bot.id) {
loop@ while (true) { loop@ while (true) {
val instance = bot.client.getFriendSeq() val instance = bot.client.getFriendSeq()
...@@ -288,32 +310,15 @@ internal class MessageSvc { ...@@ -288,32 +310,15 @@ internal class MessageSvc {
84 -> { // 请求入群验证 84 -> { // 请求入群验证
bot.network.run { bot.network.run {
NewContact.SystemMsgNewGroup(bot.client).sendWithoutExpect() NewContact.SystemMsgNewGroup(bot.client).sendWithoutExpect()
// 处理后要向服务器提交已阅,否则登陆时会重复收到事件
NewContact.Del(bot.client, msg.msgHead).sendWithoutExpect()
} }
return@mapNotNull null return@mapNotNull null
} }
187 -> { // 请求加好友验证 187 -> { // 请求加好友验证
bot.network.run { bot.network.run {
NewContact.SystemMsgNewFriend(bot.client).sendWithoutExpect() NewContact.SystemMsgNewFriend(bot.client).sendWithoutExpect()
// 处理后要向服务器提交已阅,否则登陆时会重复收到事件
NewContact.Del(bot.client, msg.msgHead).sendWithoutExpect()
} }
return@mapNotNull null return@mapNotNull null
} }
34 -> { // 主动入群
// 27 0B 60 E7 01 44 71 47 90 03 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 36 42 35 35 46 45 32 45 35 36 43 45 45 44 30 38 30 35 31 41 35 42 37 36 39 35 34 45 30 46 43 43 36 36 45 44 43 46 45 43 42 39 33 41 41 44 32 32
val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
group ?: return@mapNotNull null
if (group.members.contains(msg.msgHead.authUin)) {
return@mapNotNull null
}
return@mapNotNull MemberJoinEvent.Active(group.newMember(msg.getNewMemberInfo())
.also { group.members.delegate.addLast(it) })
}
// 732: 27 0B 60 E7 0C 01 3E 03 3F A2 5E 90 60 E2 00 01 44 71 47 90 00 00 02 58 // 732: 27 0B 60 E7 0C 01 3E 03 3F A2 5E 90 60 E2 00 01 44 71 47 90 00 00 02 58
else -> { else -> {
bot.network.logger.debug { "unknown PbGetMsg type ${msg.msgHead.msgType}" } bot.network.logger.debug { "unknown PbGetMsg type ${msg.msgHead.msgType}" }
...@@ -538,5 +543,29 @@ internal class MessageSvc { ...@@ -538,5 +543,29 @@ internal class MessageSvc {
} }
} }
} }
internal object Del : OutgoingPacketFactory<Nothing?>("MessageSvc.PbDeleteMsg") {
internal operator fun invoke(client: QQAndroidClient, header: MsgComm.MsgHead) = buildOutgoingUniPacket(client) {
writeProtoBuf(
MsgSvc.PbDeleteMsgReq.serializer(),
MsgSvc.PbDeleteMsgReq(
msgItems = listOf(
MsgSvc.PbDeleteMsgReq.MsgItem(
fromUin = header.fromUin,
toUin = header.toUin,
// 群为84、好友为187。但是群通过其他方法删除,测试通过187也能删除群消息。
msgType = 187,
msgSeq = header.msgSeq,
msgUid = header.msgUid
)
)
)
)
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot) = null
}
} }
...@@ -37,26 +37,26 @@ class DefaultLoginSolver( ...@@ -37,26 +37,26 @@ class DefaultLoginSolver(
val input: suspend () -> String, val input: suspend () -> String,
val overrideLogger: MiraiLogger? = null val overrideLogger: MiraiLogger? = null
) : LoginSolver() { ) : LoginSolver() {
private val degelate: LoginSolver private val delegate: LoginSolver
init { init {
if (Desktop.isDesktopSupported()) { if (Desktop.isDesktopSupported()) {
degelate = SwingSolver delegate = SwingSolver
} else { } else {
degelate = DefaultLoginSolverImpl(input, overrideLogger) delegate = DefaultLoginSolverImpl(input, overrideLogger)
} }
} }
override suspend fun onSolvePicCaptcha(bot: Bot, data: ByteArray): String? { override suspend fun onSolvePicCaptcha(bot: Bot, data: ByteArray): String? {
return degelate.onSolvePicCaptcha(bot, data) return delegate.onSolvePicCaptcha(bot, data)
} }
override suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String? { override suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String? {
return degelate.onSolveSliderCaptcha(bot, url) return delegate.onSolveSliderCaptcha(bot, url)
} }
override suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String? { override suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String? {
return degelate.onSolveUnsafeDeviceLoginVerify(bot, url) return delegate.onSolveUnsafeDeviceLoginVerify(bot, url)
} }
} }
......
...@@ -44,7 +44,9 @@ object SwingSolver : LoginSolver() { ...@@ -44,7 +44,9 @@ object SwingSolver : LoginSolver() {
需要进行账户安全认证<br> 需要进行账户安全认证<br>
该账户有[设备锁]/[不常用登录地点]/[不常用设备登录]的问题<br> 该账户有[设备锁]/[不常用登录地点]/[不常用设备登录]的问题<br>
完成以下账号认证即可成功登录|理论本认证在mirai每个账户中最多出现1次<br> 完成以下账号认证即可成功登录|理论本认证在mirai每个账户中最多出现1次<br>
完成后请关闭该窗口 请将该链接在QQ浏览器中打开并完成认证<br>
成功后请关闭该窗口<br>
这步操作将在后续的版本中优化
""".trimIndent() """.trimIndent()
).last() ).last()
JTextField(url).append() JTextField(url).append()
......
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