From 79840796f65da21577056fc8583ff5d0d91efb39 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sun, 12 Oct 2025 11:58:03 +0300 Subject: [PATCH] Move settings routines to separate internal module --- globals.go | 4 --- .../setting/settings.go | 25 +++++++++++++++---- main.go | 4 +++ msg-parsers.go | 22 ++++++++-------- util.go | 12 ++++----- 5 files changed, 41 insertions(+), 26 deletions(-) rename settings-db-util.go => internal/setting/settings.go (84%) diff --git a/globals.go b/globals.go index ca0721c..81c2c49 100644 --- a/globals.go +++ b/globals.go @@ -7,7 +7,6 @@ import ( "aleesa-irc-go/internal/anycollection" "aleesa-irc-go/internal/boolcollection" - "github.com/cockroachdb/pebble" "github.com/go-redis/redis/v8" irc "github.com/thoj/go-ircevent" ) @@ -44,9 +43,6 @@ var imChanUnrestricted = make(chan iMsg, 100) // "Ведёрко" с timestamp-ами последних отправленных сообщений. var msgBucket bucket -// Мапка с открытыми дескрипторами баз с настройками. -var settingsDB = make(map[string]*pebble.DB) - // "Базюлька" с MODE-ами пользователей на каналах. var userMode = anycollection.NewCollection() diff --git a/settings-db-util.go b/internal/setting/settings.go similarity index 84% rename from settings-db-util.go rename to internal/setting/settings.go index 00562fe..ac27f16 100644 --- a/settings-db-util.go +++ b/internal/setting/settings.go @@ -1,4 +1,4 @@ -package main +package setting import ( "crypto/sha256" @@ -11,6 +11,10 @@ import ( log "github.com/sirupsen/logrus" ) +// Мапка с открытыми дескрипторами баз с настройками. +var settingsDB = make(map[string]*pebble.DB) +var DataDir string + // StoreKV сохраняет в указанной бд ключ и значение. func StoreKV(db *pebble.DB, key string, value string) error { var kArray = []byte(key) @@ -43,7 +47,7 @@ func FetchV(db *pebble.DB, key string) (string, error) { } // Достанем настройку из БД с настройками. -func getSetting(chatID string, setting string) string { +func Get(chatID string, setting string) string { var err error chatHash := sha256.Sum256([]byte(chatID)) @@ -56,7 +60,7 @@ func getSetting(chatID string, setting string) string { // настройками порождается огромное количество файлов. Умолчальное ограничение на количество файлов - 500 штук, // что нас не устраивает, поэтому немного снизим эту цифру до более приемлемых значений options.L0CompactionFileThreshold = 8 - settingsDB[database], err = pebble.Open(config.DataDir+"/"+database, &options) + settingsDB[database], err = pebble.Open(DataDir+"/"+database, &options) if err != nil { log.Errorf("Unable to open settings db, %s: %s\n", database, err) @@ -87,7 +91,7 @@ func getSetting(chatID string, setting string) string { } // Сохраним настройку в БД с настройками. -func saveSetting(chatID string, setting string, value string) error { +func Set(chatID string, setting string, value string) error { var chatHash = sha256.Sum256([]byte(chatID)) var database = fmt.Sprintf("settings_db/%x", chatHash) @@ -102,7 +106,7 @@ func saveSetting(chatID string, setting string, value string) error { // что нас не устраивает, поэтому немного снизим эту цифру до более приемлемых значений options.L0CompactionFileThreshold = 8 - settingsDB[database], err = pebble.Open(config.DataDir+"/"+database, &options) + settingsDB[database], err = pebble.Open(DataDir+"/"+database, &options) if err != nil { log.Errorf("Unable to open settings db, %s: %s\n", database, err) @@ -118,4 +122,15 @@ func saveSetting(chatID string, setting string, value string) error { return err } +// Закрываем все инстансы баз с настройками. +func CloseAll() { + if len(settingsDB) > 0 { + log.Debug("Closing runtime irc channel settings db") + + for _, db := range settingsDB { + _ = db.Close() + } + } +} + /* vim: set ft=go noet ai ts=4 sw=4 sts=4: */ diff --git a/main.go b/main.go index a5352c2..d32a825 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,8 @@ import ( "os/signal" "syscall" + "aleesa-irc-go/internal/setting" + "github.com/go-redis/redis/v8" log "github.com/sirupsen/logrus" ) @@ -50,6 +52,8 @@ func init() { userMode.Set("channel", usersModes) userMode.Delete("channel") + + setting.DataDir = config.DataDir } // Собственно, какбэ "точка входа" - основная процедура в нашем боте. diff --git a/msg-parsers.go b/msg-parsers.go index 207af17..c660a7b 100644 --- a/msg-parsers.go +++ b/msg-parsers.go @@ -6,6 +6,8 @@ import ( "regexp" "strings" + "aleesa-irc-go/internal/setting" + log "github.com/sirupsen/logrus" ) @@ -98,11 +100,11 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s case cmd == "admin oboobs": if userModeIsOped(channel, nick) { - value := getSetting(channel, "oboobs") + value := setting.Get(channel, "oboobs") switch value { case "": - _ = saveSetting(channel, "oboobs", "0") + _ = setting.Set(channel, "oboobs", "0") imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs выключен"} case "0": imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs выключен"} @@ -117,7 +119,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s case cmd == "admin oboobs 1": if userModeIsOped(channel, nick) { - err := saveSetting(channel, "oboobs", "1") + err := setting.Set(channel, "oboobs", "1") if err != nil { imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs всё ещё выключен"} @@ -130,7 +132,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s case cmd == "admin oboobs 0": if userModeIsOped(channel, nick) { - _ = saveSetting(channel, "oboobs", "0") + _ = setting.Set(channel, "oboobs", "0") imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs выключен"} } @@ -138,11 +140,11 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s case cmd == "admin obutts": if userModeIsOped(channel, nick) { - value := getSetting(channel, "obutts") + value := setting.Get(channel, "obutts") switch value { case "": - _ = saveSetting(channel, "obutts", "0") + _ = setting.Set(channel, "obutts", "0") imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"} case "0": imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"} @@ -157,7 +159,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s case cmd == "admin obutts 1": if userModeIsOped(channel, nick) { - err := saveSetting(channel, "obutts", "1") + err := setting.Set(channel, "obutts", "1") if err != nil { imChan <- iMsg{ChatID: nick, Text: "Плагин obutts всё ещё выключен"} @@ -170,7 +172,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s case cmd == "admin obutts 0": if userModeIsOped(channel, nick) { - _ = saveSetting(channel, "obutts", "0") + _ = setting.Set(channel, "obutts", "0") imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"} } @@ -262,7 +264,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s // Отключаемые команды if !done { - value := getSetting(channel, "obutts") + value := setting.Get(channel, "obutts") if value == "1" { cmds := []string{"butt", "booty", "ass", "попа", "попка"} @@ -279,7 +281,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s } if !done { - value = getSetting(channel, "oboobs") + value = setting.Get(channel, "oboobs") if value == "1" { cmds := []string{"tits", "boobs", "tities", "boobies", "сиси", "сисечки"} diff --git a/util.go b/util.go index 2adc3df..33f8e1a 100644 --- a/util.go +++ b/util.go @@ -7,6 +7,8 @@ import ( "path/filepath" "syscall" + "aleesa-irc-go/internal/setting" + "github.com/hjson/hjson-go" log "github.com/sirupsen/logrus" ) @@ -239,16 +241,12 @@ func sigHandler() { log.Debug("Close irc connection") ircClient.Quit() + log.Debug("Close userModeDB") userMode.Close() - if len(settingsDB) > 0 { - log.Debug("Closing runtime irc channel settings db") - - for _, db := range settingsDB { - _ = db.Close() - } - } + log.Debug("Close settingsDB") + setting.CloseAll() os.Exit(0) }