mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 05:30:07 +08:00
114 lines
3.0 KiB
Go
114 lines
3.0 KiB
Go
package console
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"strings"
|
|
|
|
"golang.org/x/sys/windows"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/FloatTech/ZeroBot-Plugin/kanban"
|
|
)
|
|
|
|
func init() {
|
|
stdin := windows.Handle(os.Stdin.Fd())
|
|
|
|
var mode uint32
|
|
err := windows.GetConsoleMode(stdin, &mode)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
mode &^= windows.ENABLE_QUICK_EDIT_MODE // 禁用快速编辑模式
|
|
mode |= windows.ENABLE_EXTENDED_FLAGS // 启用扩展标志
|
|
|
|
mode &^= windows.ENABLE_MOUSE_INPUT // 禁用鼠标输入
|
|
mode |= windows.ENABLE_PROCESSED_INPUT // 启用控制输入
|
|
|
|
mode &^= windows.ENABLE_INSERT_MODE // 禁用插入模式
|
|
mode |= windows.ENABLE_ECHO_INPUT | windows.ENABLE_LINE_INPUT // 启用输入回显&逐行输入
|
|
|
|
mode &^= windows.ENABLE_WINDOW_INPUT // 禁用窗口输入
|
|
mode &^= windows.ENABLE_VIRTUAL_TERMINAL_INPUT // 禁用虚拟终端输入
|
|
|
|
err = windows.SetConsoleMode(stdin, mode)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
stdout := windows.Handle(os.Stdout.Fd())
|
|
err = windows.GetConsoleMode(stdout, &mode)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
mode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING // 启用虚拟终端处理
|
|
mode |= windows.ENABLE_PROCESSED_OUTPUT // 启用处理后的输出
|
|
|
|
err = windows.SetConsoleMode(stdout, mode)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
// windows 带颜色 log 自定义格式
|
|
logrus.SetFormatter(&LogFormat{})
|
|
|
|
err = windows.SetConsoleTitle("ZeroBot-Blugin " + kanban.Version + " " + kanban.Copyright)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
const (
|
|
colorCodePanic = "\x1b[1;31m" // color.Style{color.Bold, color.Red}.String()
|
|
colorCodeFatal = "\x1b[1;31m" // color.Style{color.Bold, color.Red}.String()
|
|
colorCodeError = "\x1b[31m" // color.Style{color.Red}.String()
|
|
colorCodeWarn = "\x1b[33m" // color.Style{color.Yellow}.String()
|
|
colorCodeInfo = "\x1b[37m" // color.Style{color.White}.String()
|
|
colorCodeDebug = "\x1b[32m" // color.Style{color.Green}.String()
|
|
colorCodeTrace = "\x1b[36m" // color.Style{color.Cyan}.String()
|
|
colorReset = "\x1b[0m"
|
|
)
|
|
|
|
// LogFormat specialize for zbp
|
|
type LogFormat struct{}
|
|
|
|
// Format implements logrus.Formatter
|
|
func (f LogFormat) Format(entry *logrus.Entry) ([]byte, error) {
|
|
buf := new(bytes.Buffer)
|
|
|
|
buf.WriteByte('[')
|
|
buf.WriteString(getLogLevelColorCode(entry.Level))
|
|
buf.WriteString(strings.ToUpper(entry.Level.String()))
|
|
buf.WriteString(colorReset)
|
|
buf.WriteString("] ")
|
|
buf.WriteString(entry.Message)
|
|
buf.WriteString(" \n")
|
|
|
|
return buf.Bytes(), nil
|
|
}
|
|
|
|
// getLogLevelColorCode 获取日志等级对应色彩code
|
|
func getLogLevelColorCode(level logrus.Level) string {
|
|
switch level {
|
|
case logrus.PanicLevel:
|
|
return colorCodePanic
|
|
case logrus.FatalLevel:
|
|
return colorCodeFatal
|
|
case logrus.ErrorLevel:
|
|
return colorCodeError
|
|
case logrus.WarnLevel:
|
|
return colorCodeWarn
|
|
case logrus.InfoLevel:
|
|
return colorCodeInfo
|
|
case logrus.DebugLevel:
|
|
return colorCodeDebug
|
|
case logrus.TraceLevel:
|
|
return colorCodeTrace
|
|
|
|
default:
|
|
return colorCodeInfo
|
|
}
|
|
}
|