0

Move settings routines to separate internal module

This commit is contained in:
eleksir
2025-10-12 11:58:03 +03:00
parent 24507ed6b4
commit 79840796f6
5 changed files with 41 additions and 26 deletions

View File

@@ -7,7 +7,6 @@ import (
"aleesa-irc-go/internal/anycollection" "aleesa-irc-go/internal/anycollection"
"aleesa-irc-go/internal/boolcollection" "aleesa-irc-go/internal/boolcollection"
"github.com/cockroachdb/pebble"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
irc "github.com/thoj/go-ircevent" irc "github.com/thoj/go-ircevent"
) )
@@ -44,9 +43,6 @@ var imChanUnrestricted = make(chan iMsg, 100)
// "Ведёрко" с timestamp-ами последних отправленных сообщений. // "Ведёрко" с timestamp-ами последних отправленных сообщений.
var msgBucket bucket var msgBucket bucket
// Мапка с открытыми дескрипторами баз с настройками.
var settingsDB = make(map[string]*pebble.DB)
// "Базюлька" с MODE-ами пользователей на каналах. // "Базюлька" с MODE-ами пользователей на каналах.
var userMode = anycollection.NewCollection() var userMode = anycollection.NewCollection()

View File

@@ -1,4 +1,4 @@
package main package setting
import ( import (
"crypto/sha256" "crypto/sha256"
@@ -11,6 +11,10 @@ import (
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
// Мапка с открытыми дескрипторами баз с настройками.
var settingsDB = make(map[string]*pebble.DB)
var DataDir string
// StoreKV сохраняет в указанной бд ключ и значение. // StoreKV сохраняет в указанной бд ключ и значение.
func StoreKV(db *pebble.DB, key string, value string) error { func StoreKV(db *pebble.DB, key string, value string) error {
var kArray = []byte(key) 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 var err error
chatHash := sha256.Sum256([]byte(chatID)) chatHash := sha256.Sum256([]byte(chatID))
@@ -56,7 +60,7 @@ func getSetting(chatID string, setting string) string {
// настройками порождается огромное количество файлов. Умолчальное ограничение на количество файлов - 500 штук, // настройками порождается огромное количество файлов. Умолчальное ограничение на количество файлов - 500 штук,
// что нас не устраивает, поэтому немного снизим эту цифру до более приемлемых значений // что нас не устраивает, поэтому немного снизим эту цифру до более приемлемых значений
options.L0CompactionFileThreshold = 8 options.L0CompactionFileThreshold = 8
settingsDB[database], err = pebble.Open(config.DataDir+"/"+database, &options) settingsDB[database], err = pebble.Open(DataDir+"/"+database, &options)
if err != nil { if err != nil {
log.Errorf("Unable to open settings db, %s: %s\n", database, err) 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 chatHash = sha256.Sum256([]byte(chatID))
var database = fmt.Sprintf("settings_db/%x", chatHash) var database = fmt.Sprintf("settings_db/%x", chatHash)
@@ -102,7 +106,7 @@ func saveSetting(chatID string, setting string, value string) error {
// что нас не устраивает, поэтому немного снизим эту цифру до более приемлемых значений // что нас не устраивает, поэтому немного снизим эту цифру до более приемлемых значений
options.L0CompactionFileThreshold = 8 options.L0CompactionFileThreshold = 8
settingsDB[database], err = pebble.Open(config.DataDir+"/"+database, &options) settingsDB[database], err = pebble.Open(DataDir+"/"+database, &options)
if err != nil { if err != nil {
log.Errorf("Unable to open settings db, %s: %s\n", database, err) 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 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: */ /* vim: set ft=go noet ai ts=4 sw=4 sts=4: */

View File

@@ -7,6 +7,8 @@ import (
"os/signal" "os/signal"
"syscall" "syscall"
"aleesa-irc-go/internal/setting"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@@ -50,6 +52,8 @@ func init() {
userMode.Set("channel", usersModes) userMode.Set("channel", usersModes)
userMode.Delete("channel") userMode.Delete("channel")
setting.DataDir = config.DataDir
} }
// Собственно, какбэ "точка входа" - основная процедура в нашем боте. // Собственно, какбэ "точка входа" - основная процедура в нашем боте.

View File

@@ -6,6 +6,8 @@ import (
"regexp" "regexp"
"strings" "strings"
"aleesa-irc-go/internal/setting"
log "github.com/sirupsen/logrus" 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": case cmd == "admin oboobs":
if userModeIsOped(channel, nick) { if userModeIsOped(channel, nick) {
value := getSetting(channel, "oboobs") value := setting.Get(channel, "oboobs")
switch value { switch value {
case "": case "":
_ = saveSetting(channel, "oboobs", "0") _ = setting.Set(channel, "oboobs", "0")
imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs выключен"} imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs выключен"}
case "0": case "0":
imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs выключен"} 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": case cmd == "admin oboobs 1":
if userModeIsOped(channel, nick) { if userModeIsOped(channel, nick) {
err := saveSetting(channel, "oboobs", "1") err := setting.Set(channel, "oboobs", "1")
if err != nil { if err != nil {
imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs всё ещё выключен"} 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": case cmd == "admin oboobs 0":
if userModeIsOped(channel, nick) { if userModeIsOped(channel, nick) {
_ = saveSetting(channel, "oboobs", "0") _ = setting.Set(channel, "oboobs", "0")
imChan <- iMsg{ChatID: nick, Text: "Плагин oboobs выключен"} 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": case cmd == "admin obutts":
if userModeIsOped(channel, nick) { if userModeIsOped(channel, nick) {
value := getSetting(channel, "obutts") value := setting.Get(channel, "obutts")
switch value { switch value {
case "": case "":
_ = saveSetting(channel, "obutts", "0") _ = setting.Set(channel, "obutts", "0")
imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"} imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"}
case "0": case "0":
imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"} 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": case cmd == "admin obutts 1":
if userModeIsOped(channel, nick) { if userModeIsOped(channel, nick) {
err := saveSetting(channel, "obutts", "1") err := setting.Set(channel, "obutts", "1")
if err != nil { if err != nil {
imChan <- iMsg{ChatID: nick, Text: "Плагин obutts всё ещё выключен"} 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": case cmd == "admin obutts 0":
if userModeIsOped(channel, nick) { if userModeIsOped(channel, nick) {
_ = saveSetting(channel, "obutts", "0") _ = setting.Set(channel, "obutts", "0")
imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"} imChan <- iMsg{ChatID: nick, Text: "Плагин obutts выключен"}
} }
@@ -262,7 +264,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s
// Отключаемые команды // Отключаемые команды
if !done { if !done {
value := getSetting(channel, "obutts") value := setting.Get(channel, "obutts")
if value == "1" { if value == "1" {
cmds := []string{"butt", "booty", "ass", "попа", "попка"} cmds := []string{"butt", "booty", "ass", "попа", "попка"}
@@ -279,7 +281,7 @@ func ircMsgParser(channel string, nick string, user string, source string, msg s
} }
if !done { if !done {
value = getSetting(channel, "oboobs") value = setting.Get(channel, "oboobs")
if value == "1" { if value == "1" {
cmds := []string{"tits", "boobs", "tities", "boobies", "сиси", "сисечки"} cmds := []string{"tits", "boobs", "tities", "boobies", "сиси", "сисечки"}

12
util.go
View File

@@ -7,6 +7,8 @@ import (
"path/filepath" "path/filepath"
"syscall" "syscall"
"aleesa-irc-go/internal/setting"
"github.com/hjson/hjson-go" "github.com/hjson/hjson-go"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@@ -239,16 +241,12 @@ func sigHandler() {
log.Debug("Close irc connection") log.Debug("Close irc connection")
ircClient.Quit() ircClient.Quit()
log.Debug("Close userModeDB") log.Debug("Close userModeDB")
userMode.Close() userMode.Close()
if len(settingsDB) > 0 { log.Debug("Close settingsDB")
log.Debug("Closing runtime irc channel settings db") setting.CloseAll()
for _, db := range settingsDB {
_ = db.Close()
}
}
os.Exit(0) os.Exit(0)
} }