mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-12 14:00:12 +08:00
Minimize permission check procedure
This commit is contained in:
parent
a150af2e3e
commit
6a09aff16d
@ -144,10 +144,7 @@ internal class MemberImpl constructor(
|
|||||||
|
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
override suspend fun mute(durationSeconds: Int) {
|
override suspend fun mute(durationSeconds: Int) {
|
||||||
if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) {
|
checkBotPermissionHigherThanThis()
|
||||||
throw PermissionDeniedException()
|
|
||||||
}
|
|
||||||
|
|
||||||
bot.network.run {
|
bot.network.run {
|
||||||
TroopManagement.Mute(
|
TroopManagement.Mute(
|
||||||
client = bot.client,
|
client = bot.client,
|
||||||
@ -161,12 +158,18 @@ internal class MemberImpl constructor(
|
|||||||
net.mamoe.mirai.event.events.MemberMuteEvent(this@MemberImpl, durationSeconds, null).broadcast()
|
net.mamoe.mirai.event.events.MemberMuteEvent(this@MemberImpl, durationSeconds, null).broadcast()
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmSynthetic
|
private fun checkBotPermissionHigherThanThis(){
|
||||||
override suspend fun unmute() {
|
check(group.botPermission > this.permission) {
|
||||||
if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) {
|
throw PermissionDeniedException(
|
||||||
throw PermissionDeniedException()
|
"`kick` operation requires bot to have a higher permission than the target member, " +
|
||||||
|
"but bot's is ${group.botPermission}, target's is ${this.permission}"
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JvmSynthetic
|
||||||
|
override suspend fun unmute() {
|
||||||
|
checkBotPermissionHigherThanThis()
|
||||||
bot.network.run {
|
bot.network.run {
|
||||||
TroopManagement.Mute(
|
TroopManagement.Mute(
|
||||||
client = bot.client,
|
client = bot.client,
|
||||||
@ -182,20 +185,19 @@ internal class MemberImpl constructor(
|
|||||||
|
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
override suspend fun kick(message: String) {
|
override suspend fun kick(message: String) {
|
||||||
if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) {
|
checkBotPermissionHigherThanThis()
|
||||||
throw PermissionDeniedException()
|
|
||||||
}
|
|
||||||
|
|
||||||
bot.network.run {
|
bot.network.run {
|
||||||
TroopManagement.Kick(
|
val response: TroopManagement.Kick.Response = TroopManagement.Kick(
|
||||||
client = bot.client,
|
client = bot.client,
|
||||||
member = this@MemberImpl,
|
member = this@MemberImpl,
|
||||||
message = message
|
message = message
|
||||||
).sendAndExpect<TroopManagement.Kick.Response>().success.also {
|
).sendAndExpect()
|
||||||
|
|
||||||
|
check(response.success) { "kick failed: $message" }
|
||||||
|
|
||||||
MemberLeaveEvent.Kick(this@MemberImpl, null).broadcast()
|
MemberLeaveEvent.Kick(this@MemberImpl, null).broadcast()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
var result = bot.hashCode()
|
var result = bot.hashCode()
|
||||||
|
@ -16,9 +16,9 @@ import kotlinx.io.core.toByteArray
|
|||||||
import net.mamoe.mirai.LowLevelAPI
|
import net.mamoe.mirai.LowLevelAPI
|
||||||
import net.mamoe.mirai.contact.Group
|
import net.mamoe.mirai.contact.Group
|
||||||
import net.mamoe.mirai.contact.Member
|
import net.mamoe.mirai.contact.Member
|
||||||
import net.mamoe.mirai.qqandroid.network.Packet
|
|
||||||
import net.mamoe.mirai.qqandroid.QQAndroidBot
|
import net.mamoe.mirai.qqandroid.QQAndroidBot
|
||||||
import net.mamoe.mirai.qqandroid.io.serialization.*
|
import net.mamoe.mirai.qqandroid.io.serialization.*
|
||||||
|
import net.mamoe.mirai.qqandroid.network.Packet
|
||||||
import net.mamoe.mirai.qqandroid.network.QQAndroidClient
|
import net.mamoe.mirai.qqandroid.network.QQAndroidClient
|
||||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.ModifyGroupCardReq
|
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.ModifyGroupCardReq
|
||||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.RequestPacket
|
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.RequestPacket
|
||||||
@ -136,7 +136,10 @@ internal class TroopManagement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): GroupInfoImpl {
|
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): GroupInfoImpl {
|
||||||
with(this.readBytes().loadAs(OidbSso.OIDBSSOPkg.serializer()).bodybuffer.loadAs(Oidb0x88d.RspBody.serializer()).stzrspgroupinfo!![0].stgroupinfo!!) {
|
with(
|
||||||
|
this.readBytes()
|
||||||
|
.loadAs(OidbSso.OIDBSSOPkg.serializer()).bodybuffer.loadAs(Oidb0x88d.RspBody.serializer()).stzrspgroupinfo!![0].stgroupinfo!!
|
||||||
|
) {
|
||||||
return GroupInfoImpl(this)
|
return GroupInfoImpl(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,21 +147,23 @@ internal class TroopManagement {
|
|||||||
|
|
||||||
internal object Kick : OutgoingPacketFactory<Kick.Response>("OidbSvc.0x8a0_0") {
|
internal object Kick : OutgoingPacketFactory<Kick.Response>("OidbSvc.0x8a0_0") {
|
||||||
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
|
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
|
||||||
return Response(this.readBytes().loadAs(OidbSso.OIDBSSOPkg.serializer()).bodybuffer.loadAs(Oidb0x8a0.RspBody.serializer()).msgKickResult!![0].optUint32Result == 1)
|
return Response(
|
||||||
|
this.readBytes()
|
||||||
|
.loadAs(OidbSso.OIDBSSOPkg.serializer()).bodybuffer.loadAs(Oidb0x8a0.RspBody.serializer()).msgKickResult!![0].optUint32Result == 1
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
class Response(
|
class Response(
|
||||||
val success: Boolean
|
val success: Boolean
|
||||||
) : Packet {
|
) : Packet {
|
||||||
override fun toString(): String = "Response(Kick Member)"
|
override fun toString(): String = "TroopManagement.Kick.Response($success)"
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun invoke(
|
operator fun invoke(
|
||||||
client: QQAndroidClient,
|
client: QQAndroidClient,
|
||||||
member: Member,
|
member: Member,
|
||||||
message: String
|
message: String
|
||||||
): OutgoingPacket {
|
): OutgoingPacket = buildOutgoingUniPacket(client) {
|
||||||
return buildOutgoingUniPacket(client) {
|
|
||||||
writeProtoBuf(
|
writeProtoBuf(
|
||||||
OidbSso.OIDBSSOPkg.serializer(),
|
OidbSso.OIDBSSOPkg.serializer(),
|
||||||
OidbSso.OIDBSSOPkg(
|
OidbSso.OIDBSSOPkg(
|
||||||
@ -179,8 +184,6 @@ internal class TroopManagement {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user