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