GetGroupOperationInfo

This commit is contained in:
jiahua.liu 2020-02-05 21:31:22 +08:00
parent ff1c075f24
commit 6f67edfdfa
5 changed files with 46 additions and 23 deletions

View File

@ -1,6 +1,5 @@
package net.mamoe.mirai.qqandroid
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import net.mamoe.mirai.contact.*
import net.mamoe.mirai.data.FriendNameRemark
@ -134,7 +133,7 @@ internal class GroupImpl(
if (this.botPermission != MemberPermission.MEMBER && oldValue != newValue) {
this.bot.launch {
bot.network.run {
TroopManagement.updateGroupInfo.name(
TroopManagement.GroupOperation.name(
client = bot.client,
groupCode = id,
newName = newValue
@ -148,7 +147,7 @@ internal class GroupImpl(
if (this.botPermission != MemberPermission.MEMBER && oldValue != newValue) {
this.bot.launch {
bot.network.run {
TroopManagement.updateGroupInfo.memo(
TroopManagement.GroupOperation.memo(
client = bot.client,
groupCode = id,
newMemo = newValue
@ -163,7 +162,7 @@ internal class GroupImpl(
if (this.botPermission != MemberPermission.MEMBER && oldValue != newValue) {
this.bot.launch {
bot.network.run {
TroopManagement.updateGroupInfo.allowMemberInvite(
TroopManagement.GroupOperation.allowMemberInvite(
client = bot.client,
groupCode = id,
switch = newValue
@ -185,7 +184,7 @@ internal class GroupImpl(
if (this.botPermission != MemberPermission.MEMBER && oldValue != newValue) {
this.bot.launch {
bot.network.run {
TroopManagement.updateGroupInfo.confessTalk(
TroopManagement.GroupOperation.confessTalk(
client = bot.client,
groupCode = id,
switch = newValue
@ -200,7 +199,7 @@ internal class GroupImpl(
if (this.botPermission != MemberPermission.MEMBER && oldValue != newValue) {
this.bot.launch {
bot.network.run {
TroopManagement.updateGroupInfo.muteAll(
TroopManagement.GroupOperation.muteAll(
client = bot.client,
groupCode = id,
switch = newValue

View File

@ -161,6 +161,20 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
val toGet: MutableMap<GroupImpl, ContactList<Member>> = mutableMapOf()
troopData.groups.forEach {
val contactList = ContactList(LockFreeLinkedList<Member>())
val groupInfoResponse = try {
TroopManagement.GetGroupOperationInfo(
client = bot.client,
groupCode = it.groupCode
).sendAndExpect<TroopManagement.GetGroupOperationInfo.Response>()
} catch (e: Exception) {
bot.logger.info("获取" + it.groupCode + "的群设置失败")
TroopManagement.GetGroupOperationInfo.Response(
allowAnonymousChat = false,
allowMemberInvite = false,
autoApprove = false,
confessTalk = false
)
}
val group =
GroupImpl(
bot = bot,
@ -169,11 +183,11 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
uin = it.groupUin,
initName = it.groupName,
initAnnouncement = it.groupMemo,
initAllowMemberInvite = false,
initConfessTalk = false,
initMuteAll = false,
initAutoApprove = false,
initAnonymousChat = false,
initAllowMemberInvite = groupInfoResponse.allowMemberInvite,
initConfessTalk = groupInfoResponse.confessTalk,
initMuteAll = false,//todo
initAutoApprove = groupInfoResponse.autoApprove,
initAnonymousChat = groupInfoResponse.allowAnonymousChat,
members = contactList
)
group.owner =
@ -244,10 +258,10 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
}
suspend fun getGroupInfo(uin: Long) {
val data = TroopManagement.getGroupInfo(
val data = TroopManagement.GetGroupOperationInfo(
client = bot.client,
groupCode = uin
).sendAndExpect<TroopManagement.getGroupInfo.Response>(timeoutMillis = 3000)
).sendAndExpect<TroopManagement.GetGroupOperationInfo.Response>(timeoutMillis = 3000)
}
suspend fun getTroopMemberList(group: GroupImpl, list: ContactList<Member>, owner: Long): ContactList<Member> {

View File

@ -127,8 +127,8 @@ internal object KnownPacketFactories {
LongConn.OffPicDown,
TroopManagement.EditNametag,
TroopManagement.Mute,
TroopManagement.updateGroupInfo,
TroopManagement.getGroupInfo
TroopManagement.GroupOperation,
TroopManagement.GetGroupOperationInfo
)
object IncomingFactories : List<IncomingPacketFactory<*>> by mutableListOf(

View File

@ -6,6 +6,7 @@ import kotlinx.io.core.readBytes
import kotlinx.io.core.toByteArray
import net.mamoe.mirai.data.Packet
import net.mamoe.mirai.qqandroid.QQAndroidBot
import net.mamoe.mirai.qqandroid.io.serialization.loadAs
import net.mamoe.mirai.qqandroid.io.serialization.toByteArray
import net.mamoe.mirai.qqandroid.io.serialization.writeProtoBuf
import net.mamoe.mirai.qqandroid.network.QQAndroidClient
@ -18,7 +19,6 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.qqandroid.network.protocol.packet.buildOutgoingUniPacket
import net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket
import net.mamoe.mirai.utils.daysToSeconds
import net.mamoe.mirai.utils.io.debugPrintThis
internal object TroopManagement {
@ -58,9 +58,13 @@ internal object TroopManagement {
}
internal object getGroupInfo : OutgoingPacketFactory<getGroupInfo.Response>("OidbSvc.0x88d_7") {
class Response() : Packet
internal object GetGroupOperationInfo : OutgoingPacketFactory<GetGroupOperationInfo.Response>("OidbSvc.0x88d_7") {
class Response(
val allowAnonymousChat: Boolean,
val allowMemberInvite: Boolean,
val autoApprove: Boolean,
val confessTalk: Boolean
) : Packet
operator fun invoke(
client: QQAndroidClient,
@ -104,12 +108,18 @@ internal object TroopManagement {
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
debugPrintThis()
return Response()
with(this.readBytes().loadAs(OidbSso.OIDBSSOPkg.serializer()).bodybuffer.loadAs(Oidb0x88d.RspBody.serializer()).stzrspgroupinfo!![0].stgroupinfo!!) {
return Response(
allowMemberInvite = (this.groupFlagExt?.and(0x000000c0) != 0),
allowAnonymousChat = (this.groupFlagExt?.and(0x40000000) == 0),
autoApprove = (this.groupFlagext3?.and(0x00100000) == 0),
confessTalk = (this.groupFlagext3?.and(0x00002000) == 0)
)
}
}
}
internal object updateGroupInfo : OutgoingPacketFactory<updateGroupInfo.Response>("OidbSvc.0x89a_0") {
internal object GroupOperation : OutgoingPacketFactory<GroupOperation.Response>("OidbSvc.0x89a_0") {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
return Response
}

View File

@ -6,7 +6,7 @@ import java.io.File
fun main() {
println(
File("""/Users/jiahua.liu/Desktop/QQAndroid-F/app/src/main/java/tencent/im/oidb/cmd0x88d/""")
File("""/Users/jiahua.liu/Desktop/QQAndroid-F/app/src/main/java/tencent/im/oidb/""")
.generateUnarrangedClasses().toMutableList().arrangeClasses().joinToString("\n\n")
)
}