Support inferring single Bot instance, close #125

This commit is contained in:
Him188 2020-08-29 14:46:26 +08:00
parent aa5b625680
commit 234eeb7540

View File

@ -107,13 +107,6 @@ public object ExistingBotArgumentParser : InternalCommandArgumentParserExtension
/** /**
* 解析任意一个存在的好友. * 解析任意一个存在的好友.
*
* 支持的输入:
* - `botId.friendId`
* - `botId.friendNick` (模糊搜索, 寻找最优匹配)
* - `~` (指代指令调用人自己作为好友. 仅聊天环境下)
*
* 当只登录了一个 [Bot] , 无需上述 `botId` 参数即可
*/ */
public object ExistingFriendArgumentParser : InternalCommandArgumentParserExtensions<Friend> { public object ExistingFriendArgumentParser : InternalCommandArgumentParserExtensions<Friend> {
private val syntax = """ private val syntax = """
@ -121,7 +114,7 @@ public object ExistingFriendArgumentParser : InternalCommandArgumentParserExtens
- `botId.friendNick` (模糊搜索, 寻找最优匹配) - `botId.friendNick` (模糊搜索, 寻找最优匹配)
- `~` (指代指令调用人自己作为好友. 仅聊天环境下) - `~` (指代指令调用人自己作为好友. 仅聊天环境下)
当只登录了一个 [Bot] , 无需上述 `botId` 参数 当只登录了一个 [Bot] , `botId` 参数省略
""".trimIndent() """.trimIndent()
public override fun parse(raw: String, sender: CommandSender): Friend { public override fun parse(raw: String, sender: CommandSender): Friend {
@ -153,18 +146,12 @@ public object ExistingFriendArgumentParser : InternalCommandArgumentParserExtens
/** /**
* 解析任意一个存在的群. * 解析任意一个存在的群.
*
* 支持的输入:
* - `botId.groupId`
* - `~` (指代指令调用人自己所在群. 仅群聊天环境下)
*
* 当只登录了一个 [Bot] , 无需上述 `botId` 参数即可
*/ */
public object ExistingGroupArgumentParser : InternalCommandArgumentParserExtensions<Group> { public object ExistingGroupArgumentParser : InternalCommandArgumentParserExtensions<Group> {
private val syntax = """ private val syntax = """
- `botId.groupId` - `botId.groupId`
- `~` (指代指令调用人自己所在群. 仅群聊天环境下) - `~` (指代指令调用人自己所在群. 仅群聊天环境下)
当只登录了一个 [Bot] , 无需上述 `botId` 参数 当只登录了一个 [Bot] , `botId` 参数可省略
""".trimIndent() """.trimIndent()
public override fun parse(raw: String, sender: CommandSender): Group { public override fun parse(raw: String, sender: CommandSender): Group {
@ -189,13 +176,14 @@ public object ExistingGroupArgumentParser : InternalCommandArgumentParserExtensi
public object ExistingUserArgumentParser : InternalCommandArgumentParserExtensions<User> { public object ExistingUserArgumentParser : InternalCommandArgumentParserExtensions<User> {
private val syntax: String = """ private val syntax: String = """
- `botId.group.memberId` - `botId.groupId.memberId`
- `botId.group.memberCard` (模糊搜索, 寻找最优匹配) - `botId.groupId.memberCard` (模糊搜索, 寻找最优匹配)
- `~` (指代指令调用人自己. 仅聊天环境下) - `~` (指代指令调用人自己. 仅聊天环境下)
- `$` (随机成员. 仅聊天环境下) - `groupId.$` (随机成员. 仅聊天环境下)
- `botId.friendId - `botId.friendId
当只登录了一个 [Bot] , 无需上述 `botId` 参数即可 当处于一个群内时, `botId` `groupId` 参数都可省略
当只登录了一个 [Bot] , `botId` 参数可省略
""".trimIndent() """.trimIndent()
override fun parse(raw: String, sender: CommandSender): User { override fun parse(raw: String, sender: CommandSender): User {
@ -221,14 +209,6 @@ public object ExistingUserArgumentParser : InternalCommandArgumentParserExtensio
illegalArgument("无法推断目标好友或群员. \n$syntax") illegalArgument("无法推断目标好友或群员. \n$syntax")
} }
} }
if (Bot.botInstancesSequence.count() == 1) {
kotlin.runCatching {
}.getOrElse {
illegalArgument("无法推断目标好友或群员. \n$syntax")
}
}
kotlin.runCatching { kotlin.runCatching {
return parseFunction2(raw, sender) return parseFunction2(raw, sender)
}.getOrElse { }.getOrElse {
@ -240,22 +220,15 @@ public object ExistingUserArgumentParser : InternalCommandArgumentParserExtensio
/** /**
* 解析任意一个群成员. * 解析任意一个群成员.
*
* 支持的输入:
* - `botId.group.memberId`
* - `botId.group.memberCard` (模糊搜索, 寻找最优匹配)
* - `~` (指代指令调用人自己. 仅聊天环境下)
*
* 当只登录了一个 [Bot] , 无需上述 `botId` 参数即可
*/ */
public object ExistingMemberArgumentParser : InternalCommandArgumentParserExtensions<Member> { public object ExistingMemberArgumentParser : InternalCommandArgumentParserExtensions<Member> {
private val syntax: String = """ private val syntax: String = """
- `botId.group.memberId` - `botId.groupId.memberId`
- `botId.group.memberCard` (模糊搜索, 寻找最优匹配) - `botId.groupId.memberCard` (模糊搜索, 寻找最优匹配)
- `~` (指代指令调用人自己. 仅聊天环境下) - `~` (指代指令调用人自己. 仅聊天环境下)
- `$` (随机成员) - `groupId.$` (随机成员)
当只登录了一个 [Bot] , 无需上述 `botId` 参数 当只登录了一个 [Bot] , `botId` 参数省略
""".trimIndent() """.trimIndent()
public override fun parse(raw: String, sender: CommandSender): Member { public override fun parse(raw: String, sender: CommandSender): Member {
@ -320,7 +293,10 @@ internal interface InternalCommandArgumentParserExtensions<T : Any> : CommandArg
?: illegalArgument("无法找到目标群员 $idOrCard") ?: illegalArgument("无法找到目标群员 $idOrCard")
} }
fun CommandSender.inferBotOrFail(): Bot = (this as? BotAwareCommandSender)?.bot ?: illegalArgument("当前语境下无法推断目标群员") fun CommandSender.inferBotOrFail(): Bot =
(this as? BotAwareCommandSender)?.bot
?: Bot.botInstancesSequence.singleOrNull()
?: illegalArgument("当前语境下无法推断目标 Bot, 因为目前有多个 Bot 在线.")
fun CommandSender.inferGroupOrFail(): Group = fun CommandSender.inferGroupOrFail(): Group =
inferGroup() ?: illegalArgument("当前语境下无法推断目标群") inferGroup() ?: illegalArgument("当前语境下无法推断目标群")