mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-11 02:50:15 +08:00
Change object ConsoleCommandSender
to abstract class ConsoleCommandSender
, and should implemented by frontend
This commit is contained in:
parent
060ed31873
commit
51718b3f02
@ -7,22 +7,26 @@
|
|||||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@file:Suppress("NOTHING_TO_INLINE")
|
@file:Suppress("NOTHING_TO_INLINE", "INAPPLICABLE_JVM_NAME")
|
||||||
|
|
||||||
package net.mamoe.mirai.console.command
|
package net.mamoe.mirai.console.command
|
||||||
|
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import net.mamoe.mirai.Bot
|
import net.mamoe.mirai.Bot
|
||||||
|
import net.mamoe.mirai.console.MiraiConsole
|
||||||
|
import net.mamoe.mirai.console.utils.JavaFriendlyAPI
|
||||||
import net.mamoe.mirai.contact.*
|
import net.mamoe.mirai.contact.*
|
||||||
import net.mamoe.mirai.message.MessageEvent
|
import net.mamoe.mirai.message.MessageEvent
|
||||||
import net.mamoe.mirai.message.data.Message
|
import net.mamoe.mirai.message.data.Message
|
||||||
import net.mamoe.mirai.message.data.PlainText
|
import net.mamoe.mirai.message.data.PlainText
|
||||||
|
import org.jetbrains.annotations.Contract
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 指令发送者
|
* 指令发送者
|
||||||
*
|
*
|
||||||
* @see AbstractCommandSender 请继承于该抽象类
|
* @see AbstractCommandSender 请继承于该抽象类
|
||||||
*/
|
*/
|
||||||
|
@Suppress("FunctionName")
|
||||||
interface CommandSender {
|
interface CommandSender {
|
||||||
/**
|
/**
|
||||||
* 与这个 [CommandSender] 相关的 [Bot]. 当通过控制台执行时为 null.
|
* 与这个 [CommandSender] 相关的 [Bot]. 当通过控制台执行时为 null.
|
||||||
@ -32,15 +36,18 @@ interface CommandSender {
|
|||||||
/**
|
/**
|
||||||
* 立刻发送一条消息
|
* 立刻发送一条消息
|
||||||
*/
|
*/
|
||||||
|
@JvmSynthetic
|
||||||
suspend fun sendMessage(message: Message)
|
suspend fun sendMessage(message: Message)
|
||||||
|
|
||||||
/**
|
@JvmDefault
|
||||||
* 写入要发送的内容 所有内容最后会被以一条发出
|
@JavaFriendlyAPI
|
||||||
*/
|
@JvmName("sendMessage")
|
||||||
fun appendMessage(message: String)
|
fun __sendMessageBlocking(messageChain: Message) = runBlocking { sendMessage(messageChain) }
|
||||||
|
|
||||||
fun sendMessageBlocking(messageChain: Message) = runBlocking { sendMessage(messageChain) }
|
@JvmDefault
|
||||||
fun sendMessageBlocking(message: String) = runBlocking { sendMessage(message) }
|
@JavaFriendlyAPI
|
||||||
|
@JvmName("sendMessage")
|
||||||
|
fun __sendMessageBlocking(message: String) = runBlocking { sendMessage(message) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,42 +59,19 @@ interface BotAwareCommandSender : CommandSender {
|
|||||||
|
|
||||||
suspend inline fun CommandSender.sendMessage(message: String) = sendMessage(PlainText(message))
|
suspend inline fun CommandSender.sendMessage(message: String) = sendMessage(PlainText(message))
|
||||||
|
|
||||||
abstract class AbstractCommandSender : CommandSender {
|
|
||||||
internal val builder = StringBuilder()
|
|
||||||
|
|
||||||
override fun appendMessage(message: String) {
|
|
||||||
builder.appendln(message)
|
|
||||||
}
|
|
||||||
|
|
||||||
internal open suspend fun flushMessage() {
|
|
||||||
if (builder.isNotEmpty()) {
|
|
||||||
sendMessage(builder.toString().removeSuffix("\n"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 控制台指令执行者. 代表由控制台执行指令
|
* 控制台指令执行者. 代表由控制台执行指令
|
||||||
*/
|
*/
|
||||||
object ConsoleCommandSender : AbstractCommandSender() {
|
// 前端实现
|
||||||
override val bot: Nothing? get() = null
|
abstract class ConsoleCommandSender internal constructor() : CommandSender {
|
||||||
|
final override val bot: Nothing? get() = null
|
||||||
override suspend fun sendMessage(message: Message) {
|
|
||||||
TODO()
|
|
||||||
// MiraiConsole.logger("[Command]", 0, messageChain.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun flushMessage() {
|
|
||||||
super.flushMessage()
|
|
||||||
builder.clear()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun Friend.asCommandSender(): FriendCommandSender = FriendCommandSender(this)
|
fun Friend.asCommandSender(): FriendCommandSender = FriendCommandSender(this)
|
||||||
|
|
||||||
inline fun Member.asCommandSender(): MemberCommandSender = MemberCommandSender(this)
|
fun Member.asCommandSender(): MemberCommandSender = MemberCommandSender(this)
|
||||||
|
|
||||||
inline fun User.asCommandSender(): UserCommandSender {
|
fun User.asCommandSender(): UserCommandSender {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is Friend -> this.asCommandSender()
|
is Friend -> this.asCommandSender()
|
||||||
is Member -> this.asCommandSender()
|
is Member -> this.asCommandSender()
|
||||||
@ -100,7 +84,10 @@ inline fun User.asCommandSender(): UserCommandSender {
|
|||||||
* 代表一个用户私聊机器人执行指令
|
* 代表一个用户私聊机器人执行指令
|
||||||
* @see User.asCommandSender
|
* @see User.asCommandSender
|
||||||
*/
|
*/
|
||||||
sealed class UserCommandSender : AbstractCommandSender(), BotAwareCommandSender {
|
sealed class UserCommandSender : CommandSender, BotAwareCommandSender {
|
||||||
|
/**
|
||||||
|
* @see MessageEvent.sender
|
||||||
|
*/
|
||||||
abstract val user: User
|
abstract val user: User
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user