From 595c9480a693602d232b6d7cdb6e81e4b2eea4c8 Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Sun, 29 Nov 2020 18:00:48 +0800 Subject: [PATCH] Check Command.owner, #216 --- .../mirai-console/src/command/AbstractCommand.kt | 2 ++ backend/mirai-console/src/command/Command.kt | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/backend/mirai-console/src/command/AbstractCommand.kt b/backend/mirai-console/src/command/AbstractCommand.kt index c9048e221..bb5163bc9 100644 --- a/backend/mirai-console/src/command/AbstractCommand.kt +++ b/backend/mirai-console/src/command/AbstractCommand.kt @@ -37,6 +37,8 @@ public abstract class AbstractCommand init { Command.checkCommandName(primaryName) + @Suppress("LeakingThis") + Command.checkCommandOwner(this) secondaryNames.forEach(Command.Companion::checkCommandName) } diff --git a/backend/mirai-console/src/command/Command.kt b/backend/mirai-console/src/command/Command.kt index 675481731..532e9b048 100644 --- a/backend/mirai-console/src/command/Command.kt +++ b/backend/mirai-console/src/command/Command.kt @@ -117,5 +117,19 @@ public interface Command { name.contains('.') -> throw IllegalArgumentException("'.' is forbidden in command name.") } } + + /** + * 检查指令 [owner] 的合法性, 在非法时抛出 [IllegalArgumentException] + */ + @JvmStatic + @Throws(IllegalArgumentException::class) + public fun checkCommandOwner(command: Command) { + val owner = command.owner + if (owner is ConsoleCommandOwner) { + if (command.javaClass.enclosingClass != BuiltInCommands::class.java) { + throw IllegalArgumentException("ConsoleCommandOwner is not allowed") + } + } + } } }