diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt index f11edde32..ef579bcaf 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt @@ -24,6 +24,7 @@ import net.mamoe.mirai.qqandroid.event.ForceOfflineEvent import net.mamoe.mirai.qqandroid.event.PacketReceivedEvent import net.mamoe.mirai.qqandroid.network.protocol.data.proto.MsgSvc import net.mamoe.mirai.qqandroid.network.protocol.packet.* +import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList import net.mamoe.mirai.qqandroid.network.protocol.packet.login.LoginPacket @@ -266,6 +267,15 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler return list } + suspend fun mute(member: Member, time: Int) { + bot.logger.info("mute..") + val data = TroopManagement.Mute( + client = bot.client, + member = member, + timeInSecond = time + ).sendAndExpect() + } + /** * 缓存超时处理的 [Job]. 超时后将清空缓存, 以免阻碍后续包的处理 */ diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt index 80b449f3e..21cf187bc 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/TroopManagement.kt @@ -1,18 +1,63 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat -import kotlinx.io.core.ByteReadPacket +import kotlinx.io.core.* +import net.mamoe.mirai.contact.Member +import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot +import net.mamoe.mirai.qqandroid.io.serialization.writeProtoBuf +import net.mamoe.mirai.qqandroid.network.QQAndroidClient +import net.mamoe.mirai.qqandroid.network.protocol.data.proto.OidbSso +import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket 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.io.debugPrintThis +import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement.Mute as Mute internal class TroopManagement { - internal object Mute : OutgoingPacketFactory("OidbSvc.0x570_8") { - override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): LoginPacket.LoginPacketResponse { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + internal object Mute : OutgoingPacketFactory("OidbSvc.0x570_8") { + override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Mute.Response { + this.debugPrintThis() + return Response() } + + operator fun invoke( + client: QQAndroidClient, + member: Member, + timeInSecond: Int + ): OutgoingPacket { + return buildOutgoingUniPacket(client) { + writeProtoBuf( + OidbSso.OIDBSSOPkg.serializer(), + OidbSso.OIDBSSOPkg( + command = 1392, + serviceType = 8, + result = 0, + bodybuffer = buildPacket { + writeInt(member.group.id.toInt())//id or UIN? + writeByte(32) + writeShort(1) + writeInt(member.id.toInt()) + writeInt(timeInSecond) + }.readBytes() + ) + ) + } + } + + fun unmute( + client: QQAndroidClient, + member: Member + ): OutgoingPacket { + return invoke(client, member, 0) + } + + + internal class Response() : Packet } + internal object MuteAll : OutgoingPacketFactory("OidbSvc.0x89a_0") { override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): LoginPacket.LoginPacketResponse { TODO("not implemented") //To change body of created functions use File | Settings | File Templates.