Simplify MemberPermission comparing

This commit is contained in:
Him188 2020-05-03 22:25:57 +08:00
parent c2fa014c78
commit e5404b397b
4 changed files with 27 additions and 16 deletions

View File

@ -188,7 +188,7 @@ internal class QQAndroidBot constructor(
}
}
group.checkBotPermissionOperator()
group.checkBotPermission(MemberPermission.ADMINISTRATOR)
}
override suspend fun ignoreMemberJoinRequest(event: MemberJoinRequestEvent, blackList: Boolean) {
@ -369,7 +369,7 @@ internal abstract class QQAndroidBotBase constructor(
else -> error("stub")
}
if (this.id != source.fromId) {
group.checkBotPermissionOperator()
group.checkBotPermission(MemberPermission.ADMINISTRATOR)
}
MessageRecallEvent.GroupRecall(
this,

View File

@ -109,7 +109,8 @@ internal class GroupImpl(
override var name: String
get() = _name
set(newValue) {
checkBotPermissionOperator()
checkBotPermission(MemberPermission.ADMINISTRATOR)
if (_name != newValue) {
val oldValue = _name
_name = newValue
@ -131,7 +132,7 @@ internal class GroupImpl(
override var entranceAnnouncement: String
get() = _announcement
set(newValue) {
checkBotPermissionOperator()
checkBotPermission(MemberPermission.ADMINISTRATOR)
if (_announcement != newValue) {
val oldValue = _announcement
_announcement = newValue
@ -152,7 +153,7 @@ internal class GroupImpl(
override var isAllowMemberInvite: Boolean
get() = _allowMemberInvite
set(newValue) {
checkBotPermissionOperator()
checkBotPermission(MemberPermission.ADMINISTRATOR)
if (_allowMemberInvite != newValue) {
val oldValue = _allowMemberInvite
_allowMemberInvite = newValue
@ -186,7 +187,8 @@ internal class GroupImpl(
override var isConfessTalkEnabled: Boolean
get() = _confessTalk
set(newValue) {
checkBotPermissionOperator()
checkBotPermission(MemberPermission.ADMINISTRATOR)
if (_confessTalk != newValue) {
val oldValue = _confessTalk
_confessTalk = newValue
@ -207,7 +209,8 @@ internal class GroupImpl(
override var isMuteAll: Boolean
get() = _muteAll
set(newValue) {
checkBotPermissionOperator()
checkBotPermission(MemberPermission.ADMINISTRATOR)
if (_muteAll != newValue) {
val oldValue = _muteAll
_muteAll = newValue

View File

@ -105,7 +105,7 @@ internal class MemberImpl constructor(
get() = _nameCard
set(newValue) {
if (id != bot.id) {
group.checkBotPermissionOperator()
group.checkBotPermission(MemberPermission.ADMINISTRATOR)
}
if (_nameCard != newValue) {
val oldValue = _nameCard

View File

@ -7,17 +7,25 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("NOTHING_TO_INLINE")
@file:Suppress("NOTHING_TO_INLINE", "INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot
import net.mamoe.mirai.utils.SinceMirai
import kotlin.internal.InlineOnly
/**
* 群成员的权限.
*
* 可通过 [compareTo] 判断是否有更高的权限.
*
* @see isOwner 判断权限是否为群主
* @see isOperator 判断权限是否为管理员或群主
*
* @see Member.isOwner [Member] 的扩展函数, 判断此成员是否为群主
* @see Member.isOperator [Member] 的扩展函数, 判断此成员是否为管理员或群主
* @see Member.isAdministrator [Member] 的扩展函数, 判断此成员是否为管理员
*/
enum class MemberPermission : Comparable<MemberPermission> {
/**
@ -46,16 +54,19 @@ enum class MemberPermission : Comparable<MemberPermission> {
/**
* 判断权限是否为群主
*/
@InlineOnly
inline fun MemberPermission.isOwner(): Boolean = this == MemberPermission.OWNER
/**
* 判断权限是否为管理员
*/
@InlineOnly
inline fun MemberPermission.isAdministrator(): Boolean = this == MemberPermission.ADMINISTRATOR
/**
* 判断权限是否为管理员或群主
*/
@InlineOnly
inline fun MemberPermission.isOperator(): Boolean = isAdministrator() || isOwner()
@ -85,7 +96,7 @@ class PermissionDeniedException : IllegalStateException {
}
/**
* 要求 [Bot] 在这个群里的权限[required], 否则抛出异常 [PermissionDeniedException]
* 要求 [Bot] 在这个群里的权限至少[required], 否则抛出异常 [PermissionDeniedException]
*
* @throws PermissionDeniedException
*/
@ -95,7 +106,7 @@ inline fun Group.checkBotPermission(
"Permission denied: required $required, got actual $botPermission for $bot in group $id"
}
) {
if (botPermission != required) {
if (botPermission < required) {
throw PermissionDeniedException(lazyMessage())
}
}
@ -105,12 +116,9 @@ inline fun Group.checkBotPermission(
*
* @throws PermissionDeniedException
*/
@Deprecated("use checkBotPermission", ReplaceWith("checkBotPermission(MemberPermission.ADMINISTRATOR)"))
inline fun Group.checkBotPermissionOperator(
crossinline lazyMessage: () -> String = {
"Permission denied: required ${MemberPermission.ADMINISTRATOR} or ${MemberPermission.OWNER}, got actual $botPermission for $bot in group $id"
}
) {
if (!botPermission.isOperator()) {
throw PermissionDeniedException(lazyMessage())
}
}
) = checkBotPermission(MemberPermission.ADMINISTRATOR, lazyMessage)