mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-01 12:00:34 +08:00
GetGroupOperationInfo
This commit is contained in:
parent
ff1c075f24
commit
6f67edfdfa
@ -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
|
||||
|
@ -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> {
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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")
|
||||
)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user