From bd61c1e80dde97e28c2c5bb2544c4a1f522e048b Mon Sep 17 00:00:00 2001 From: RainChan Date: Tue, 3 Aug 2021 22:20:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9C=A8=E8=B8=A2=E5=87=BA?= =?UTF-8?q?=E7=BE=A4=E6=88=90=E5=91=98=E6=97=B6=E9=80=89=E6=8B=A9=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=8B=89=E9=BB=91=20(#1457)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 支持在踢出群成员时选择是否拉黑 * fix binary-compatibility for kick NormalMember * change doc --- .../api/binary-compatibility-validator-android.api | 2 ++ .../api/binary-compatibility-validator.api | 2 ++ .../src/commonMain/kotlin/contact/NormalMember.kt | 14 ++++++++++++++ .../commonMain/kotlin/contact/NormalMemberImpl.kt | 9 ++++++--- .../protocol/packet/chat/TroopManagement.kt | 5 +++-- 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api b/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api index 9ff8da052..8620dec12 100644 --- a/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api +++ b/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api @@ -446,6 +446,8 @@ public abstract interface class net/mamoe/mirai/contact/NormalMember : net/mamoe public fun isMuted ()Z public fun kick (Ljava/lang/String;)V public abstract fun kick (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun kick (Ljava/lang/String;Z)V + public abstract fun kick (Ljava/lang/String;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun modifyAdmin (Z)V public abstract fun modifyAdmin (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun nudge ()Lnet/mamoe/mirai/message/action/MemberNudge; diff --git a/binary-compatibility-validator/api/binary-compatibility-validator.api b/binary-compatibility-validator/api/binary-compatibility-validator.api index 91afbb3d4..e5fbd30b1 100644 --- a/binary-compatibility-validator/api/binary-compatibility-validator.api +++ b/binary-compatibility-validator/api/binary-compatibility-validator.api @@ -446,6 +446,8 @@ public abstract interface class net/mamoe/mirai/contact/NormalMember : net/mamoe public fun isMuted ()Z public fun kick (Ljava/lang/String;)V public abstract fun kick (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun kick (Ljava/lang/String;Z)V + public abstract fun kick (Ljava/lang/String;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun modifyAdmin (Z)V public abstract fun modifyAdmin (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun nudge ()Lnet/mamoe/mirai/message/action/MemberNudge; diff --git a/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt b/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt index a80028f8a..a60e79d5e 100644 --- a/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt +++ b/mirai-core-api/src/commonMain/kotlin/contact/NormalMember.kt @@ -105,12 +105,26 @@ public interface NormalMember : Member { * * 管理员可踢出成员, 群主可踢出管理员和群员. * + * @param block 为 `true` 时拉黑成员 + * + * @see MemberLeaveEvent.Kick 成员被踢出事件. + * @throws PermissionDeniedException 无权限修改时 + * + */ + public suspend fun kick(message: String, block: Boolean) + + /** + * 踢出该成员, 默认不拉黑 + * + * 管理员可踢出成员, 群主可踢出管理员和群员. + * * @see MemberLeaveEvent.Kick 成员被踢出事件. * @throws PermissionDeniedException 无权限修改时 * */ public suspend fun kick(message: String) + /** * 给予或移除群成员的管理员权限。 * diff --git a/mirai-core/src/commonMain/kotlin/contact/NormalMemberImpl.kt b/mirai-core/src/commonMain/kotlin/contact/NormalMemberImpl.kt index e1e926055..bfab6397f 100644 --- a/mirai-core/src/commonMain/kotlin/contact/NormalMemberImpl.kt +++ b/mirai-core/src/commonMain/kotlin/contact/NormalMemberImpl.kt @@ -21,8 +21,6 @@ import net.mamoe.mirai.contact.* import net.mamoe.mirai.data.MemberInfo import net.mamoe.mirai.event.broadcast import net.mamoe.mirai.event.events.* -import net.mamoe.mirai.internal.message.OnlineMessageSourceToGroupImpl -import net.mamoe.mirai.internal.message.OnlineMessageSourceToStrangerImpl import net.mamoe.mirai.internal.message.OnlineMessageSourceToTempImpl import net.mamoe.mirai.internal.message.createMessageReceipt import net.mamoe.mirai.internal.network.protocol.packet.chat.TroopManagement @@ -171,6 +169,10 @@ internal class NormalMemberImpl constructor( } override suspend fun kick(message: String) { + kick(message, false) + } + + override suspend fun kick(message: String, block: Boolean) { checkBotPermissionHigherThanThis("kick") check(group.members[this.id] != null) { "Member ${this.id} had already been kicked from group ${group.id}" @@ -179,7 +181,8 @@ internal class NormalMemberImpl constructor( val response: TroopManagement.Kick.Response = TroopManagement.Kick( client = bot.client, member = this@NormalMemberImpl, - message = message + message = message, + ban = block ).sendAndExpect() check(response.success) { "kick failed: ${response.ret}" } diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt index 88f9a7ac3..fac63c318 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt +++ b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt @@ -192,7 +192,8 @@ internal class TroopManagement { operator fun invoke( client: QQAndroidClient, member: Member, - message: String + message: String, + ban: Boolean ) = buildOutgoingUniPacket(client) { writeProtoBuf( OidbSso.OIDBSSOPkg.serializer(), @@ -206,7 +207,7 @@ internal class TroopManagement { Oidb0x8a0.KickMemberInfo( optUint32Operate = 5, optUint64MemberUin = member.id, - optUint32Flag = 0 + optUint32Flag = if (ban) 1 else 0 //1为拉黑 ) ), kickMsg = message.toByteArray()