Graphical logout bot

This commit is contained in:
ryoii 2020-03-30 20:17:23 +08:00
parent baddc1117b
commit 62e71ef3a5
4 changed files with 64 additions and 5 deletions

View File

@ -5,6 +5,7 @@ import javafx.collections.ObservableList
import javafx.stage.Modality import javafx.stage.Modality
import javafx.stage.StageStyle import javafx.stage.StageStyle
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.console.command.CommandManager import net.mamoe.mirai.console.command.CommandManager
import net.mamoe.mirai.console.command.CommandManager.runCommand import net.mamoe.mirai.console.command.CommandManager.runCommand
@ -42,6 +43,15 @@ class MiraiGraphicalUIController : Controller(), MiraiConsoleUI {
CommandManager.runCommand(ConsoleCommandSender, "/login $qq $psd") CommandManager.runCommand(ConsoleCommandSender, "/login $qq $psd")
} }
fun logout(qq: Long) {
cache.remove(qq)?.apply {
botList.remove(this)
if (botProperty.value != null && bot.isActive) {
bot.close()
}
}
}
fun sendCommand(command: String) = runCommand(ConsoleCommandSender, command) fun sendCommand(command: String) = runCommand(ConsoleCommandSender, command)
override fun pushLog(identity: Long, message: String) = Platform.runLater { override fun pushLog(identity: Long, message: String) = Platform.runLater {

View File

@ -69,9 +69,21 @@ class PrimaryStyleSheet : BaseStyleSheet() {
backgroundColor += c(100, 100, 100, 0.4) backgroundColor += c(100, 100, 100, 0.4)
backgroundRadius += box(5.px) backgroundRadius += box(5.px)
textFill = c(fontColor) label {
fontWeight = FontWeight.BOLD textFill = c(fontColor)
fontWeight = FontWeight.BOLD
}
button {
opacity = 0.0
backgroundRadius += box(10.px)
backgroundColor += c(fontColor, 0.1)
cursor = Cursor.HAND
and(hover) {
opacity = 1.0
}
}
} }
} }
} }

View File

@ -0,0 +1,15 @@
package net.mamoe.mirai.console.graphical.util
import com.jfoenix.svg.SVGGlyph
import javafx.scene.paint.Color
class SVG {
companion object {
var close = SVGGlyph(
0,
"CLOSE",
"M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z",
Color.WHITE
).apply { setSize(8.0, 8.0) }
}
}

View File

@ -5,18 +5,21 @@ import com.jfoenix.controls.JFXListCell
import javafx.collections.ObservableList import javafx.collections.ObservableList
import javafx.geometry.Insets import javafx.geometry.Insets
import javafx.geometry.Pos import javafx.geometry.Pos
import javafx.scene.control.Alert
import javafx.scene.control.ButtonType
import javafx.scene.control.Tab import javafx.scene.control.Tab
import javafx.scene.control.TabPane import javafx.scene.control.TabPane
import javafx.scene.image.Image import javafx.scene.image.Image
import javafx.scene.input.KeyCode import javafx.scene.input.KeyCode
import javafx.scene.layout.Priority
import javafx.stage.FileChooser import javafx.stage.FileChooser
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController
import net.mamoe.mirai.console.graphical.model.BotModel import net.mamoe.mirai.console.graphical.model.BotModel
import net.mamoe.mirai.console.graphical.util.*
import net.mamoe.mirai.console.graphical.util.jfxButton import net.mamoe.mirai.console.graphical.util.jfxButton
import net.mamoe.mirai.console.graphical.util.jfxListView import net.mamoe.mirai.console.graphical.util.jfxListView
import net.mamoe.mirai.console.graphical.util.jfxTabPane import net.mamoe.mirai.console.graphical.util.jfxTabPane
import net.mamoe.mirai.console.graphical.util.myButtonBar
import tornadofx.* import tornadofx.*
class PrimaryView : View() { class PrimaryView : View() {
@ -72,8 +75,27 @@ class PrimaryView : View() {
override fun updateItem(item: BotModel?, empty: Boolean) { override fun updateItem(item: BotModel?, empty: Boolean) {
super.updateItem(item, empty) super.updateItem(item, empty)
if (item != null && !empty) { if (item != null && !empty) {
graphic = null graphic = hbox {
text = item.uin.toString()
alignment = Pos.CENTER_LEFT
label(item.uin.toString())
pane {
hgrow = Priority.ALWAYS
}
jfxButton(graphic = SVG.close) {
buttonType = JFXButton.ButtonType.FLAT
tooltip("退出登录")
}.action {
alert(Alert.AlertType.CONFIRMATION, "${item.uin}将会退出登录,是否确认") {
if (it == ButtonType.OK) {
tab?.close()
controller.logout(item.uin)
}
}
}
}
text = ""
} else { } else {
graphic = null graphic = null
text = "" text = ""