package plugins import ( "fmt" "kurumibot/database/mdb" "strings" "time" "git.nix13.pw/scuroneko/laniakea" "git.nix13.pw/scuroneko/slog" ) func InitLogsPlugin() {} func InitLogMiddleware() laniakea.Middleware { return laniakea.NewMiddleware("LogMiddleware", logMiddleware).SetAsync(true).Build() } func logMiddleware(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { if ctx.Msg == nil { return } entry := &mdb.MessageLogEntry{ MessageID: ctx.Msg.MessageID, SenderID: ctx.FromID, ChatID: ctx.Msg.Chat.ID, Text: ctx.Msg.Text, TimeStamp: time.Now().Unix(), } err := mdb.WriteMessageLog(db, entry) if err != nil { ctx.Bot.Logger().Errorln(err) } } type DatabaseWriter struct { slog.LoggerWriter db *laniakea.DatabaseContext } func (w *DatabaseWriter) Print(level slog.LogLevel, prefix string, traceback []*slog.MethodTraceback, messages ...any) error { t := time.Now() if messages[len(messages)-1] == "\n" { messages = messages[:len(messages)-1] } entry := &mdb.ConsoleLogEntry{ Level: level.GetName(), Prefix: prefix, Traceback: slog.FormatFullTraceback(traceback), Message: strings.Join(laniakea.Map(messages, func(el any) string { return fmt.Sprintf("%v", el) }), "\n"), Time: t, TimeStamp: t.Unix(), } err := mdb.WriteConsoleLog(w.db, entry) return err } func DatabaseLogger(db *laniakea.DatabaseContext) slog.LoggerWriter { return &DatabaseWriter{db: db} }