支持在踢出群成员时选择是否拉黑 (#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 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;

View File

@ -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;

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 成员被踢出事件.
* @throws PermissionDeniedException 无权限修改时
*
*/
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.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}" }

View File

@ -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()