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/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()

View File

@@ -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: */

View File

@@ -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
}
// Собственно, какбэ "точка входа" - основная процедура в нашем боте.

View File

@@ -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", "сиси", "сисечки"}

12
util.go
View File

@@ -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)
}