支持在踢出群成员时选择是否拉黑 (#1457)

* 支持在踢出群成员时选择是否拉黑

* fix binary-compatibility for kick NormalMember

* change doc
This commit is contained in:
RainChan 2021-08-03 22:20:53 +08:00 committed by GitHub
parent 615092e80b
commit bd61c1e80d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 5 deletions

View File

@ -446,6 +446,8 @@ public abstract interface class net/mamoe/mirai/contact/NormalMember : net/mamoe
public fun isMuted ()Z public fun isMuted ()Z
public fun kick (Ljava/lang/String;)V public fun kick (Ljava/lang/String;)V
public abstract fun kick (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; 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 fun modifyAdmin (Z)V
public abstract fun modifyAdmin (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun modifyAdmin (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun nudge ()Lnet/mamoe/mirai/message/action/MemberNudge; public fun nudge ()Lnet/mamoe/mirai/message/action/MemberNudge;

View File

@ -446,6 +446,8 @@ public abstract interface class net/mamoe/mirai/contact/NormalMember : net/mamoe
public fun isMuted ()Z public fun isMuted ()Z
public fun kick (Ljava/lang/String;)V public fun kick (Ljava/lang/String;)V
public abstract fun kick (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; 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 fun modifyAdmin (Z)V
public abstract fun modifyAdmin (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun modifyAdmin (ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun nudge ()Lnet/mamoe/mirai/message/action/MemberNudge; public fun nudge ()Lnet/mamoe/mirai/message/action/MemberNudge;

View File

@ -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 成员被踢出事件. * @see MemberLeaveEvent.Kick 成员被踢出事件.
* @throws PermissionDeniedException 无权限修改时 * @throws PermissionDeniedException 无权限修改时
* *
*/ */
public suspend fun kick(message: String) public suspend fun kick(message: String)
/** /**
* 给予或移除群成员的管理员权限 * 给予或移除群成员的管理员权限
* *

View File

@ -21,8 +21,6 @@ import net.mamoe.mirai.contact.*
import net.mamoe.mirai.data.MemberInfo import net.mamoe.mirai.data.MemberInfo
import net.mamoe.mirai.event.broadcast import net.mamoe.mirai.event.broadcast
import net.mamoe.mirai.event.events.* 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.OnlineMessageSourceToTempImpl
import net.mamoe.mirai.internal.message.createMessageReceipt import net.mamoe.mirai.internal.message.createMessageReceipt
import net.mamoe.mirai.internal.network.protocol.packet.chat.TroopManagement import net.mamoe.mirai.internal.network.protocol.packet.chat.TroopManagement
@ -171,6 +169,10 @@ internal class NormalMemberImpl constructor(
} }
override suspend fun kick(message: String) { override suspend fun kick(message: String) {
kick(message, false)
}
override suspend fun kick(message: String, block: Boolean) {
checkBotPermissionHigherThanThis("kick") checkBotPermissionHigherThanThis("kick")
check(group.members[this.id] != null) { check(group.members[this.id] != null) {
"Member ${this.id} had already been kicked from group ${group.id}" "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( val response: TroopManagement.Kick.Response = TroopManagement.Kick(
client = bot.client, client = bot.client,
member = this@NormalMemberImpl, member = this@NormalMemberImpl,
message = message message = message,
ban = block
).sendAndExpect() ).sendAndExpect()
check(response.success) { "kick failed: ${response.ret}" } check(response.success) { "kick failed: ${response.ret}" }

View File

@ -192,7 +192,8 @@ internal class TroopManagement {
operator fun invoke( operator fun invoke(
client: QQAndroidClient, client: QQAndroidClient,
member: Member, member: Member,
message: String message: String,
ban: Boolean
) = buildOutgoingUniPacket(client) { ) = buildOutgoingUniPacket(client) {
writeProtoBuf( writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(), OidbSso.OIDBSSOPkg.serializer(),
@ -206,7 +207,7 @@ internal class TroopManagement {
Oidb0x8a0.KickMemberInfo( Oidb0x8a0.KickMemberInfo(
optUint32Operate = 5, optUint32Operate = 5,
optUint64MemberUin = member.id, optUint64MemberUin = member.id,
optUint32Flag = 0 optUint32Flag = if (ban) 1 else 0 //1为拉黑
) )
), ),
kickMsg = message.toByteArray() kickMsg = message.toByteArray()