Commit 58908d60 authored by Him188's avatar Him188

Merge remote-tracking branch 'origin/dev' into dev

parents d0377a36 c95306c1
...@@ -173,10 +173,11 @@ internal class NewContact { ...@@ -173,10 +173,11 @@ internal class NewContact {
} }
2 -> { // 被邀请入群, 自动同意, 不需处理 2 -> { // 被邀请入群, 自动同意, 不需处理
val group = bot.getNewGroup(groupCode) ?: return null // val group = bot.getNewGroup(groupCode) ?: return null
val invitor = group[actionUin] // val invitor = group[actionUin]
//
BotJoinGroupEvent.Invite(invitor) // BotJoinGroupEvent.Invite(invitor)
null
} }
3 -> { // 已被请他管理员处理 3 -> { // 已被请他管理员处理
null null
......
...@@ -44,11 +44,11 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.buildOutgoingUniPacket ...@@ -44,11 +44,11 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.buildOutgoingUniPacket
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.toByteArray import net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
import net.mamoe.mirai.qqandroid.utils.io.serialization.writeProtoBuf import net.mamoe.mirai.qqandroid.utils.io.serialization.writeProtoBuf
import net.mamoe.mirai.qqandroid.utils.read import net.mamoe.mirai.qqandroid.utils.read
import net.mamoe.mirai.qqandroid.utils.toInt
import net.mamoe.mirai.qqandroid.utils.toUHexString import net.mamoe.mirai.qqandroid.utils.toUHexString
import net.mamoe.mirai.utils.currentTimeSeconds import net.mamoe.mirai.utils.currentTimeSeconds
import net.mamoe.mirai.utils.debug import net.mamoe.mirai.utils.debug
...@@ -147,21 +147,33 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re ...@@ -147,21 +147,33 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
} // 删除消息 } // 删除消息
.mapNotNull<MsgComm.Msg, Packet> { msg -> .mapNotNull<MsgComm.Msg, Packet> { msg ->
suspend fun createGroupForBot(groupUin: Long): Group? {
val group = bot.getGroupByUinOrNull(groupUin)
if (group != null) {
return null
}
return bot.getNewGroup(Group.calculateGroupCodeByGroupUin(groupUin))?.apply {
bot.groups.delegate.addLast(this)
}
}
when (msg.msgHead.msgType) { when (msg.msgHead.msgType) {
33 -> bot.groupListModifyLock.withLock { // 邀请入群 33 -> bot.groupListModifyLock.withLock {
val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
if (msg.msgHead.authUin == bot.id) { if (msg.msgHead.authUin == bot.id) {
if (group != null) { // 邀请入群
return@mapNotNull null return@mapNotNull createGroupForBot(msg.msgHead.fromUin)?.let {
// package: 27 0B 60 E7 01 CA CC 69 8B 83 44 71 47 90 06 B9 DC C0 ED D4 B1 00 30 33 44 30 42 38 46 30 39 37 32 38 35 43 34 31 38 30 33 36 41 34 36 31 36 31 35 32 37 38 46 46 43 30 41 38 30 36 30 36 45 38 31 43 39 41 34 38 37
// package: groupUin + 01 CA CC 69 8B 83 + invitorUin + length(06) + string + magicKey
val invitorUin = msg.msgBody.msgContent.sliceArray(10..13).toInt().toLong()
BotJoinGroupEvent.Invite(it[invitorUin])
} }
// 新群 } else {
val newGroup = bot.getNewGroup(Group.calculateGroupCodeByGroupUin(msg.msgHead.fromUin)) // 成员申请入群
val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
?: return@mapNotNull null ?: return@mapNotNull null
bot.groups.delegate.addLast(newGroup)
return@mapNotNull BotJoinGroupEvent.Active(newGroup)
} else {
group ?: return@mapNotNull null
// 主动入群, 直接加入: msgContent=27 0B 60 E7 01 76 E4 B8 DD 82 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 42 39 41 30 33 45 38 34 30 39 34 42 46 30 45 32 45 38 42 31 43 43 41 34 32 42 38 42 44 42 35 34 44 42 31 44 32 32 30 46 30 38 39 46 46 35 41 38 // 主动入群, 直接加入: msgContent=27 0B 60 E7 01 76 E4 B8 DD 82 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 42 39 41 30 33 45 38 34 30 39 34 42 46 30 45 32 45 38 42 31 43 43 41 34 32 42 38 42 44 42 35 34 44 42 31 44 32 32 30 46 30 38 39 46 46 35 41 38
// 主动直接加入 27 0B 60 E7 01 76 E4 B8 DD 82 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 33 30 45 38 42 31 33 46 41 41 31 33 46 38 31 35 34 41 38 33 32 37 31 43 34 34 38 35 33 35 46 45 31 38 32 43 39 42 43 46 46 32 44 39 39 46 41 37 // 主动直接加入 27 0B 60 E7 01 76 E4 B8 DD 82 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 33 30 45 38 42 31 33 46 41 41 31 33 46 38 31 35 34 41 38 33 32 37 31 43 34 34 38 35 33 35 46 45 31 38 32 43 39 42 43 46 46 32 44 39 39 46 41 37
...@@ -192,19 +204,23 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re ...@@ -192,19 +204,23 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
return@mapNotNull null return@mapNotNull null
} }
38 -> bot.groupListModifyLock.withLock { // 建群
return@mapNotNull createGroupForBot(msg.msgHead.fromUin)
?.let { BotJoinGroupEvent.Active(it) }
}
85 -> bot.groupListModifyLock.withLock { // 其他客户端入群 85 -> bot.groupListModifyLock.withLock { // 其他客户端入群
val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
if (msg.msgHead.toUin == bot.id && group == null) {
val newGroup = bot.getNewGroup(Group.calculateGroupCodeByGroupUin(msg.msgHead.fromUin)) // msg.msgHead.authUin: 处理人
?: return@mapNotNull null
bot.groups.delegate.addLast(newGroup) return@mapNotNull if (msg.msgHead.toUin == bot.id) {
return@mapNotNull BotJoinGroupEvent.Active(newGroup) createGroupForBot(msg.msgHead.fromUin)
?.let { BotJoinGroupEvent.Active(it) }
} else { } else {
// unknown null
return@mapNotNull null
} }
} }
/* /*
34 -> { // 主动入群 34 -> { // 主动入群
......
...@@ -21,6 +21,7 @@ import kotlinx.io.core.discardExact ...@@ -21,6 +21,7 @@ import kotlinx.io.core.discardExact
import kotlinx.io.core.readBytes import kotlinx.io.core.readBytes
import kotlinx.io.core.readUInt import kotlinx.io.core.readUInt
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoId
import net.mamoe.mirai.JavaFriendlyAPI import net.mamoe.mirai.JavaFriendlyAPI
import net.mamoe.mirai.data.FriendInfo import net.mamoe.mirai.data.FriendInfo
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
...@@ -353,6 +354,47 @@ internal inline fun lambda528(crossinline block: MsgType0x210.(QQAndroidBot) -> ...@@ -353,6 +354,47 @@ internal inline fun lambda528(crossinline block: MsgType0x210.(QQAndroidBot) ->
*/ */
internal object Transformers528 : Map<Long, Lambda528> by mapOf( internal object Transformers528 : Map<Long, Lambda528> by mapOf(
0x8AL to lambda528 { bot ->
@Serializable
data class Sub8AInner(
@ProtoId(1) val fromUin: Long,
@ProtoId(2) val botUin: Long,
@ProtoId(3) val srcId: Int,
@ProtoId(4) val srcInternalId: Int,
@ProtoId(5) val time: Int,
@ProtoId(6) val random: Int, // 同srcInternalId
@ProtoId(7) val flag1: Boolean, // true
@ProtoId(8) val flag2: Boolean, // false
@ProtoId(9) val flag3: Boolean, // false
@ProtoId(12) val flag4: Boolean // true
) : ProtoBuf
@Serializable
data class Sub8A(
@ProtoId(1) val inner: Sub8AInner,
@ProtoId(2) val v2: Boolean, // true
@ProtoId(3) val v3: Boolean, // true
@ProtoId(4) val v4: Boolean, // false
@ProtoId(5) val v5: ByteArray? = null // struct{ boolean(1), boolean(2) }
) : ProtoBuf
val sub8A = vProtobuf.loadAs(Sub8A.serializer()).inner
if (sub8A.botUin == bot.id) {
return@lambda528 sequenceOf(
MessageRecallEvent.FriendRecall(
bot = bot,
messageId = sub8A.srcId,
messageInternalId = sub8A.srcInternalId,
messageTime = sub8A.time,
operator = sub8A.fromUin
)
)
}
return@lambda528 emptySequence()
},
// Network(1994701021) 16:03:54 : unknown group 528 type 0x0000000000000026, data: 08 01 12 40 0A 06 08 F4 EF BB 8F 04 10 E7 C1 AD B8 02 18 01 22 2C 10 01 1A 1A 18 B4 DC F8 9B 0C 20 E7 C1 AD B8 02 28 06 30 02 A2 01 04 08 93 D6 03 A8 01 08 20 00 28 00 32 08 18 01 20 FE AF AF F5 05 28 00 // Network(1994701021) 16:03:54 : unknown group 528 type 0x0000000000000026, data: 08 01 12 40 0A 06 08 F4 EF BB 8F 04 10 E7 C1 AD B8 02 18 01 22 2C 10 01 1A 1A 18 B4 DC F8 9B 0C 20 E7 C1 AD B8 02 28 06 30 02 A2 01 04 08 93 D6 03 A8 01 08 20 00 28 00 32 08 18 01 20 FE AF AF F5 05 28 00
// VIP 进群提示 // VIP 进群提示
0x26L to ignoredLambda528, 0x26L to ignoredLambda528,
...@@ -456,23 +498,23 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf( ...@@ -456,23 +498,23 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
var85.troopface = var3; var85.troopface = var3;
var85.hasSetNewTroopHead = true; var85.hasSetNewTroopHead = true;
*/ */
bot.logger.debug( // bot.logger.debug(
contextualBugReportException( // contextualBugReportException(
"解析 Transformers528 0x27L ModGroupProfile 群头像修改", // "解析 Transformers528 0x27L ModGroupProfile 群头像修改",
forDebug = "this=${this._miraiContentToString()}" // forDebug = "this=${this._miraiContentToString()}"
) // )
) // )
null null
} }
3 -> { // troop.credit.data 3 -> { // troop.credit.data
// top_package/akkz.java:3475 // top_package/akkz.java:3475
// top_package/akkz.java:3498 // top_package/akkz.java:3498
bot.logger.debug( // bot.logger.debug(
contextualBugReportException( // contextualBugReportException(
"解析 Transformers528 0x27L ModGroupProfile 群 troop.credit.data", // "解析 Transformers528 0x27L ModGroupProfile 群 troop.credit.data",
forDebug = "this=${this._miraiContentToString()}" // forDebug = "this=${this._miraiContentToString()}"
) // )
) // )
null null
} }
......
...@@ -296,14 +296,14 @@ sealed class MessageRecallEvent : BotEvent, AbstractEvent() { ...@@ -296,14 +296,14 @@ sealed class MessageRecallEvent : BotEvent, AbstractEvent() {
/** /**
* 好友消息撤回事件, 暂不支持. * 好友消息撤回事件, 暂不支持.
*/ // TODO: 2020/4/22 支持好友消息撤回事件的解析和主动广播 */
data class FriendRecall internal constructor( data class FriendRecall internal constructor(
override val bot: Bot, override val bot: Bot,
override val messageId: Int, override val messageId: Int,
override val messageInternalId: Int, override val messageInternalId: Int,
override val messageTime: Int, override val messageTime: Int,
/** /**
* 撤回操作人, 可能为 [Bot.id] 或好友的 [User.id] * 撤回操作人, 好友的 [User.id]
*/ */
val operator: Long val operator: Long
) : MessageRecallEvent(), Packet { ) : MessageRecallEvent(), Packet {
......
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