Misc improvements

This commit is contained in:
Him188 2020-05-14 16:58:16 +08:00
parent 50332baad5
commit 707e6a9da7
2 changed files with 20 additions and 19 deletions

View File

@ -121,12 +121,12 @@ object ExistBotArgParser : CommandArgParser<Bot>() {
val uin = try { val uin = try {
raw.toLong() raw.toLong()
} catch (e: Exception) { } catch (e: Exception) {
error("无法识别QQ UIN$raw") illegalArgument("无法识别QQ UIN$raw")
} }
return try { return try {
Bot.getInstance(uin) Bot.getInstance(uin)
} catch (e: NoSuchElementException) { } catch (e: NoSuchElementException) {
error("无法找到Bot $uin") illegalArgument("无法找到Bot $uin")
} }
} }
} }
@ -137,11 +137,10 @@ object ExistFriendArgParser : CommandArgParser<Friend>() {
//~ = self //~ = self
override fun parse(raw: String, sender: CommandSender): Friend { override fun parse(raw: String, sender: CommandSender): Friend {
if (raw == "~") { if (raw == "~") {
if (sender !is BotAware) { if (sender !is BotAwareCommandSender) {
illegalArgument("无法解析~作为默认") illegalArgument("无法解析~作为默认")
} }
val targetID = when (sender) { val targetID = when (sender) {
is MemberCommandSender -> sender.realSender.id
is UserCommandSender -> sender.user.id is UserCommandSender -> sender.user.id
else -> illegalArgument("无法解析~作为默认") else -> illegalArgument("无法解析~作为默认")
} }
@ -151,13 +150,13 @@ object ExistFriendArgParser : CommandArgParser<Friend>() {
illegalArgument("无法解析~作为默认") illegalArgument("无法解析~作为默认")
} }
} }
if (sender is BotAware) { if (sender is BotAwareCommandSender) {
return try { return try {
sender.bot.friends[raw.toLong()] sender.bot.friends[raw.toLong()]
} catch (e: NoSuchElementException) { } catch (e: NoSuchElementException) {
error("无法找到" + raw + "这个好友") illegalArgument("无法找到" + raw + "这个好友")
} catch (e: NumberFormatException) { } catch (e: NumberFormatException) {
error("无法解析$raw") illegalArgument("无法解析$raw")
} }
} else { } else {
raw.split(".").let { args -> raw.split(".").let { args ->
@ -178,9 +177,9 @@ object ExistFriendArgParser : CommandArgParser<Friend>() {
override fun parse(raw: SingleMessage, sender: CommandSender): Friend { override fun parse(raw: SingleMessage, sender: CommandSender): Friend {
if (raw is At) { if (raw is At) {
assert(sender is MemberCommandSender) assert(sender is MemberCommandSender)
return (sender as BotAware).bot.friends.getOrNull(raw.target) ?: illegalArgument("At的对象非Bot好友") return (sender as BotAwareCommandSender).bot.friends.getOrNull(raw.target) ?: illegalArgument("At的对象非Bot好友")
} else { } else {
error("无法解析 $raw 为好友") illegalArgument("无法解析 $raw 为好友")
} }
} }
} }
@ -189,32 +188,32 @@ object ExistGroupArgParser : CommandArgParser<Group>() {
override fun parse(raw: String, sender: CommandSender): Group { override fun parse(raw: String, sender: CommandSender): Group {
//by default //by default
if ((raw == "" || raw == "~") && sender is MemberCommandSender) { if ((raw == "" || raw == "~") && sender is MemberCommandSender) {
return sender.user as Group return sender.group
} }
//from bot to group //from bot to group
if (sender is BotAware) { if (sender is BotAwareCommandSender) {
val code = try { val code = try {
raw.toLong() raw.toLong()
} catch (e: NoSuchElementException) { } catch (e: NoSuchElementException) {
error("无法识别Group Code$raw") illegalArgument("无法识别Group Code$raw")
} }
return try { return try {
sender.bot.getGroup(code) sender.bot.getGroup(code)
} catch (e: NoSuchElementException) { } catch (e: NoSuchElementException) {
error("无法找到Group " + code + " from Bot " + sender.bot.id) illegalArgument("无法找到Group " + code + " from Bot " + sender.bot.id)
} }
} }
//from console/other //from console/other
return with(raw.split(".")) { return with(raw.split(".")) {
if (this.size != 2) { if (this.size != 2) {
error("请使用BotQQ号.群号 来表示Bot的一个群") illegalArgument("请使用BotQQ号.群号 来表示Bot的一个群")
} }
try { try {
Bot.getInstance(this[0].toLong()).getGroup(this[1].toLong()) Bot.getInstance(this[0].toLong()).getGroup(this[1].toLong())
} catch (e: NoSuchElementException) { } catch (e: NoSuchElementException) {
error("无法找到" + this[0] + "" + this[1] + "") illegalArgument("无法找到" + this[0] + "" + this[1] + "")
} catch (e: NumberFormatException) { } catch (e: NumberFormatException) {
error("无法识别群号或机器人UIN") illegalArgument("无法识别群号或机器人UIN")
} }
} }
} }
@ -226,7 +225,7 @@ object ExistMemberArgParser : CommandArgParser<Member>() {
//群内: Q号 //群内: Q号
//群内: 名片 //群内: 名片
override fun parse(raw: String, sender: CommandSender): Member { override fun parse(raw: String, sender: CommandSender): Member {
if (sender !is BotAware) { if (sender !is BotAwareCommandSender) {
with(raw.split(".")) { with(raw.split(".")) {
checkArgument(this.size >= 3) { checkArgument(this.size >= 3) {
"无法识别Member, 请使用Bot.Group.Member[QQ/名片]的格式" "无法识别Member, 请使用Bot.Group.Member[QQ/名片]的格式"
@ -256,7 +255,7 @@ object ExistMemberArgParser : CommandArgParser<Member>() {
} else { } else {
val bot = sender.bot val bot = sender.bot
if (sender is MemberCommandSender) { if (sender is MemberCommandSender) {
val group = sender.user as Group val group = sender.group
return try { return try {
group.members[raw.toLong()] group.members[raw.toLong()]
} catch (ignored: Exception) { } catch (ignored: Exception) {
@ -289,7 +288,7 @@ object ExistMemberArgParser : CommandArgParser<Member>() {
override fun parse(raw: SingleMessage, sender: CommandSender): Member { override fun parse(raw: SingleMessage, sender: CommandSender): Member {
return if (raw is At) { return if (raw is At) {
checkArgument(sender is MemberCommandSender) checkArgument(sender is MemberCommandSender)
(sender.user as Group).members[raw.target] (sender.group).members[raw.target]
} else { } else {
illegalArgument("无法识别Member" + raw.content) illegalArgument("无法识别Member" + raw.content)
} }

View File

@ -13,6 +13,7 @@ package net.mamoe.mirai.console.command
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.console.command.CommandParserContext.ParserPair import net.mamoe.mirai.console.command.CommandParserContext.ParserPair
import net.mamoe.mirai.contact.Friend
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 kotlin.internal.LowPriorityInOverloadResolution import kotlin.internal.LowPriorityInOverloadResolution
@ -50,6 +51,7 @@ interface CommandParserContext {
Member::class with ExistMemberArgParser Member::class with ExistMemberArgParser
Group::class with ExistGroupArgParser Group::class with ExistGroupArgParser
Bot::class with ExistBotArgParser Bot::class with ExistBotArgParser
Friend::class with ExistFriendArgParser
}) })
object Empty : CommandParserContext by CustomCommandParserContext(listOf()) object Empty : CommandParserContext by CustomCommandParserContext(listOf())