RunTerminal.kt 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright 2020 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/master/LICENSE
  8. */
  9. package net.mamoe.mirai.console.terminal
  10. import kotlinx.coroutines.runBlocking
  11. import net.mamoe.mirai.Bot
  12. import net.mamoe.mirai.console.MiraiConsole
  13. import net.mamoe.mirai.console.extensions.BotConfigurationAlterer
  14. import net.mamoe.mirai.console.logging.LoggerController
  15. import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
  16. import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
  17. import net.mamoe.mirai.utils.MiraiLogger
  18. import net.mamoe.mirai.utils.SimpleLogger
  19. import java.io.File
  20. fun main() {
  21. configureUserDir()
  22. val terminal = object : MiraiConsoleImplementationTerminal() {
  23. override val loggerController: LoggerController = object : LoggerController {
  24. override fun shouldLog(identity: String?, priority: SimpleLogger.LogPriority): Boolean = true
  25. }
  26. }
  27. val mockPlugin = object : KotlinPlugin(JvmPluginDescription("org.test.test", "1.0.0")) {}
  28. terminal.backendAccess.globalComponentStorage.contribute(
  29. BotConfigurationAlterer,
  30. mockPlugin,
  31. BotConfigurationAlterer { _, configuration ->
  32. configuration.networkLoggerSupplier = { MiraiLogger.Factory.create(Bot::class, "Net.${it.id}") } // deploy
  33. configuration
  34. }
  35. )
  36. MiraiConsoleTerminalLoader.startAsDaemon(terminal)
  37. runCatching { runBlocking { MiraiConsole.job.join() } }
  38. }
  39. internal fun configureUserDir() {
  40. val projectDir = runCatching {
  41. File(".").resolve("frontend").resolve("mirai-console-terminal").takeIf { it.isDirectory }
  42. ?: File(".").resolve("mirai-console/frontend").resolve("mirai-console-terminal")
  43. }.getOrElse { return }
  44. if (projectDir.isDirectory) {
  45. val run = projectDir.resolve("run")
  46. run.mkdir()
  47. System.setProperty("user.dir", run.absolutePath)
  48. println("[Mirai Console] Set user.dir = ${run.absolutePath}")
  49. }
  50. }