Commit 45d5131e authored by Him188's avatar Him188

Unified exception throw

parent f989cd93
...@@ -227,9 +227,9 @@ internal class MemberImpl( ...@@ -227,9 +227,9 @@ internal class MemberImpl(
override val bot: QQAndroidBot get() = qq.bot override val bot: QQAndroidBot get() = qq.bot
override suspend fun mute(durationSeconds: Int): Boolean { override suspend fun mute(durationSeconds: Int) {
if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) { if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) {
return false throw PermissionDeniedException()
} }
bot.network.run { bot.network.run {
...@@ -243,12 +243,11 @@ internal class MemberImpl( ...@@ -243,12 +243,11 @@ internal class MemberImpl(
@Suppress("RemoveRedundantQualifierName") // or unresolved reference @Suppress("RemoveRedundantQualifierName") // or unresolved reference
net.mamoe.mirai.event.events.MemberMuteEvent(this@MemberImpl, durationSeconds, null).broadcast() net.mamoe.mirai.event.events.MemberMuteEvent(this@MemberImpl, durationSeconds, null).broadcast()
return true
} }
override suspend fun unmute(): Boolean { override suspend fun unmute() {
if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) { if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) {
return false throw PermissionDeniedException()
} }
bot.network.run { bot.network.run {
...@@ -262,16 +261,15 @@ internal class MemberImpl( ...@@ -262,16 +261,15 @@ internal class MemberImpl(
@Suppress("RemoveRedundantQualifierName") // or unresolved reference @Suppress("RemoveRedundantQualifierName") // or unresolved reference
net.mamoe.mirai.event.events.MemberUnmuteEvent(this@MemberImpl, null).broadcast() net.mamoe.mirai.event.events.MemberUnmuteEvent(this@MemberImpl, null).broadcast()
return true
} }
override suspend fun kick(message: String): Boolean { override suspend fun kick(message: String) {
if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) { if (group.botPermission != MemberPermission.OWNER && (!group.botPermission.isOperator() || this.isOperator())) {
return false throw PermissionDeniedException()
} }
bot.network.run { bot.network.run {
return TroopManagement.Kick( TroopManagement.Kick(
client = bot.client, client = bot.client,
member = this@MemberImpl, member = this@MemberImpl,
message = message message = message
......
...@@ -16,6 +16,7 @@ import net.mamoe.mirai.data.MemberInfo ...@@ -16,6 +16,7 @@ import net.mamoe.mirai.data.MemberInfo
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.utils.MiraiExperimentalAPI import net.mamoe.mirai.utils.MiraiExperimentalAPI
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
import kotlin.jvm.JvmStatic
/** /**
* 群. 在 QQ Android 中叫做 "Troop" * 群. 在 QQ Android 中叫做 "Troop"
...@@ -145,6 +146,7 @@ interface Group : Contact, CoroutineScope { ...@@ -145,6 +146,7 @@ interface Group : Contact, CoroutineScope {
/** /**
* by @kar98k * by @kar98k
*/ */
@JvmStatic
fun calculateGroupUinByGroupCode(groupCode: Long): Long { fun calculateGroupUinByGroupCode(groupCode: Long): Long {
var left: Long = groupCode / 1000000L var left: Long = groupCode / 1000000L
...@@ -161,6 +163,7 @@ interface Group : Contact, CoroutineScope { ...@@ -161,6 +163,7 @@ interface Group : Contact, CoroutineScope {
return left * 1000000L + groupCode % 1000000L return left * 1000000L + groupCode % 1000000L
} }
@JvmStatic
fun calculateGroupCodeByGroupUin(groupUin: Long): Long { fun calculateGroupCodeByGroupUin(groupUin: Long): Long {
var left: Long = groupUin / 1000000L var left: Long = groupUin / 1000000L
......
...@@ -35,20 +35,22 @@ interface Member : QQ, Contact { ...@@ -35,20 +35,22 @@ interface Member : QQ, Contact {
/** /**
* 群名片. 可能为空. 修改时将会触发事件 * 群名片. 可能为空. 修改时将会触发事件
* *
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException] * 在修改时将会异步上传至服务器.
* *
* @see [groupCardOrNick] 获取非空群名片或昵称 * @see [groupCardOrNick] 获取非空群名片或昵称
* *
* @see MemberCardChangeEvent 群名片被管理员, 自己或 [Bot] 改动事件 * @see MemberCardChangeEvent 群名片被管理员, 自己或 [Bot] 改动事件
* @throws PermissionDeniedException 无权限修改时
*/ */
var nameCard: String var nameCard: String
/** /**
* 群头衔 * 群头衔
* *
* 在修改时将会异步上传至服务器. 无权限修改时将会抛出异常 [PermissionDeniedException] * 在修改时将会异步上传至服务器.
* *
* @see MemberSpecialTitleChangeEvent 群名片被管理员, 自己或 [Bot] 改动事件 * @see MemberSpecialTitleChangeEvent 群名片被管理员, 自己或 [Bot] 改动事件
* @throws PermissionDeniedException 无权限修改时
*/ */
var specialTitle: String var specialTitle: String
...@@ -63,22 +65,25 @@ interface Member : QQ, Contact { ...@@ -63,22 +65,25 @@ interface Member : QQ, Contact {
* @see Int.daysToSeconds * @see Int.daysToSeconds
* *
* @see MemberMuteEvent 成员被禁言事件 * @see MemberMuteEvent 成员被禁言事件
* @throws PermissionDeniedException 无权限修改时
*/ */
suspend fun mute(durationSeconds: Int): Boolean suspend fun mute(durationSeconds: Int)
/** /**
* 解除禁言. 机器人无权限时返回 `false`. * 解除禁言.
* *
* @see MemberUnmuteEvent 成员被取消禁言事件. * @see MemberUnmuteEvent 成员被取消禁言事件.
* @throws PermissionDeniedException 无权限修改时
*/ */
suspend fun unmute(): Boolean suspend fun unmute()
/** /**
* 踢出该成员. 机器人无权限时返回 `false`. * 踢出该成员.
* *
* @see MemberLeaveEvent.Kick 成员被踢出事件. * @see MemberLeaveEvent.Kick 成员被踢出事件.
* @throws PermissionDeniedException 无权限修改时
*/ */
suspend fun kick(message: String = ""): Boolean suspend fun kick(message: String = "")
/** /**
* 当且仅当 `[other] is [Member] && [other].id == this.id && [other].group == this.group` 时为 true * 当且仅当 `[other] is [Member] && [other].id == this.id && [other].group == this.group` 时为 true
...@@ -94,10 +99,10 @@ interface Member : QQ, Contact { ...@@ -94,10 +99,10 @@ interface Member : QQ, Contact {
val Member.groupCardOrNick: String get() = this.nameCard.takeIf { it.isNotEmpty() } ?: this.nick val Member.groupCardOrNick: String get() = this.nameCard.takeIf { it.isNotEmpty() } ?: this.nick
@ExperimentalTime @ExperimentalTime
suspend inline fun Member.mute(duration: Duration): Boolean { suspend inline fun Member.mute(duration: Duration) {
require(duration.inDays <= 30) { "duration must be at most 1 month" } require(duration.inDays <= 30) { "duration must be at most 1 month" }
require(duration.inSeconds > 0) { "duration must be greater than 0 second" } require(duration.inSeconds > 0) { "duration must be greater than 0 second" }
return this.mute(duration.inSeconds.toInt()) this.mute(duration.inSeconds.toInt())
} }
suspend inline fun Member.mute(durationSeconds: Long) = this.mute(durationSeconds.toInt()) suspend inline fun Member.mute(durationSeconds: Long) = this.mute(durationSeconds.toInt())
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment