mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 02:20:14 +08:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
c42169a238
@ -1,11 +1,13 @@
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.alsoLogin
|
||||
import net.mamoe.mirai.plugin.Command
|
||||
import net.mamoe.mirai.plugin.CommandManager
|
||||
import net.mamoe.mirai.plugin.PluginManager
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
fun main() {
|
||||
val bots = mutableMapOf<Long, Bot>()
|
||||
|
||||
fun main() {
|
||||
println("loading Mirai in console environments")
|
||||
println("正在控制台环境中启动Mirai ")
|
||||
println()
|
||||
@ -15,39 +17,56 @@ fun main() {
|
||||
println("Mirai-console now running on " + System.getProperty("user.dir"))
|
||||
println("Mirai-console 正在 " + System.getProperty("user.dir") + " 运行")
|
||||
println()
|
||||
println("\"login qqnumber qqpassword \" to login a bot")
|
||||
println("\"login qq号 qq密码 \" 来登陆一个BOT")
|
||||
println("\"/login qqnumber qqpassword \" to login a bot")
|
||||
println("\"/login qq号 qq密码 \" 来登陆一个BOT")
|
||||
|
||||
thread { processNextCommandLine() }
|
||||
|
||||
PluginManager.loadPlugins()
|
||||
defaultCommands()
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(thread(start = false) {
|
||||
PluginManager.disableAllPlugins()
|
||||
})
|
||||
}
|
||||
|
||||
tailrec fun processNextCommandLine() {
|
||||
val commandArgs = readLine()?.split(" ") ?: return
|
||||
when (commandArgs[0]) {
|
||||
"login" -> {
|
||||
if (commandArgs.size < 3) {
|
||||
println("\"login qqnumber qqpassword \" to login a bot")
|
||||
println("\"login qq号 qq密码 \" 来登录一个BOT")
|
||||
return processNextCommandLine()
|
||||
}
|
||||
val qqNumber = commandArgs[1].toLong()
|
||||
val qqPassword = commandArgs[2]
|
||||
println("login...")
|
||||
|
||||
fun defaultCommands() {
|
||||
class LoginCommand : Command(
|
||||
"login"
|
||||
) {
|
||||
override fun onCommand(args: List<String>): Boolean {
|
||||
if (args.size < 2) {
|
||||
println("\"/login qqnumber qqpassword \" to login a bot")
|
||||
println("\"/login qq号 qq密码 \" 来登录一个BOT")
|
||||
return false
|
||||
}
|
||||
val qqNumber = args[0].toLong()
|
||||
val qqPassword = args[1]
|
||||
println("login...")
|
||||
runBlocking {
|
||||
try {
|
||||
Bot(qqNumber, qqPassword).alsoLogin()
|
||||
Bot(qqNumber, qqPassword).also {
|
||||
it.login()
|
||||
bots[qqNumber] = it
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
println("login failed")
|
||||
println("$qqNumber login failed")
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
return processNextCommandLine()
|
||||
CommandManager.register(LoginCommand())
|
||||
}
|
||||
|
||||
tailrec fun processNextCommandLine() {
|
||||
val fullCommand = readLine()
|
||||
if (fullCommand != null && fullCommand.startsWith("/")) {
|
||||
if (!CommandManager.runCommand(fullCommand)) {
|
||||
println("unknown command $fullCommand")
|
||||
println("未知指令 $fullCommand")
|
||||
}
|
||||
}
|
||||
processNextCommandLine();
|
||||
}
|
||||
|
@ -16,6 +16,24 @@ object CommandManager {
|
||||
}
|
||||
}
|
||||
|
||||
fun runCommand(fullCommand: String): Boolean {
|
||||
val blocks = fullCommand.split(" ")
|
||||
val commandHead = blocks[0].replace("/", "")
|
||||
if (!registeredCommand.containsKey(commandHead)) {
|
||||
return false
|
||||
}
|
||||
val args = blocks.subList(1, blocks.size)
|
||||
registeredCommand[commandHead]?.run {
|
||||
if (onCommand(
|
||||
blocks.subList(1, blocks.size)
|
||||
)
|
||||
) {
|
||||
PluginManager.onCommand(this, args)
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -27,7 +45,7 @@ abstract class Command(
|
||||
* 最高优先级监听器
|
||||
* 如果return [false] 这次指令不会被[PluginBase]的全局onCommand监听器监听
|
||||
* */
|
||||
fun onCommand(args: List<String>): Boolean {
|
||||
open fun onCommand(args: List<String>): Boolean {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ abstract class PluginBase(coroutineContext: CoroutineContext) : CoroutineScope {
|
||||
/**
|
||||
* 当任意指令被使用
|
||||
*/
|
||||
open fun onCommand(command: Command) {
|
||||
open fun onCommand(command: Command, args: List<String>) {
|
||||
|
||||
}
|
||||
|
||||
@ -176,6 +176,11 @@ object PluginManager {
|
||||
//已完成加载的
|
||||
private val nameToPluginBaseMap: MutableMap<String, PluginBase> = mutableMapOf()
|
||||
|
||||
fun onCommand(command: Command, args: List<String>) {
|
||||
this.nameToPluginBaseMap.values.forEach {
|
||||
it.onCommand(command, args)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 尝试加载全部插件
|
||||
@ -196,7 +201,6 @@ object PluginManager {
|
||||
PluginDescription.readFromContent(URL("jar:file:" + file.absoluteFile + "!/" + pluginYml.name).openConnection().inputStream.use {
|
||||
it.readBytes().encodeToString()
|
||||
})
|
||||
println(description)
|
||||
pluginsFound[description.name] = description
|
||||
pluginsLocation[description.name] = file
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user