Move settings routines to separate internal module
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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: */
|
||||
4
main.go
4
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
|
||||
}
|
||||
|
||||
// Собственно, какбэ "точка входа" - основная процедура в нашем боте.
|
||||
|
||||
@@ -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
12
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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user