mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-09 01:32:27 +08:00
Simplify MemberPermission comparing
This commit is contained in:
parent
c2fa014c78
commit
e5404b397b
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
Loading…
Reference in New Issue
Block a user