0

1 Commits

4 changed files with 45 additions and 58 deletions

View File

@@ -95,7 +95,7 @@ func msgParser(ctx context.Context, msg string) {
for _, command := range cmds { for _, command := range cmds {
if cmd == command { if cmd == command {
sendTo = config.ForwardChannels.Phrases sendTo = "phrases"
// Костыль для кармы // Костыль для кармы
if cmd == "karma" || cmd == "карма" { if cmd == "karma" || cmd == "карма" {
@@ -109,28 +109,14 @@ func msgParser(ctx context.Context, msg string) {
// Не угадали? акей, как насчёт модуля webapp? // Не угадали? акей, как насчёт модуля webapp?
if !done { if !done {
cmds = []string{"frog", cmds = []string{"buni", "anek", "анек", "анекдот", "cat", "кис", "drink", "праздник", "fox", "лис", "frog",
"лягушка", "horse", "лошадь", "лошадка", "rabbit", "bunny", "кролик", "snail", "улитка", "лягушка", "horse", "лошадь", "лошадка", "monkeyuser", "rabbit", "bunny", "кролик", "snail", "улитка",
"owl", "сова", "сыч"} "owl", "сова", "сыч", "xkcd", "tits", "boobs", "tities", "boobies", "сиси", "сисечки", "butt", "booty",
"ass", "попа", "попка"}
for _, command := range cmds { for _, command := range cmds {
if cmd == command { if cmd == command {
sendTo = config.ForwardChannels.Webapp sendTo = "webapp"
done = true
break
}
}
}
// Не угадали? акей, как насчёт модуля webapp-go?
if !done {
cmds = []string{"cat", "кис", "fox", "лис", "buni", "anek", "анек", "анекдот", "xkcd", "monkeyuser", "tits",
"boobs", "tities", "boobies", "сиси", "сисечки", "butt", "booty", "ass", "попа", "попка", "drink",
"праздник"}
for _, command := range cmds {
if cmd == command {
sendTo = config.ForwardChannels.WebappGo
done = true done = true
break break
} }
@@ -143,7 +129,7 @@ func msgParser(ctx context.Context, msg string) {
for _, command := range cmds { for _, command := range cmds {
if cmd == command { if cmd == command {
sendTo = config.ForwardChannels.Games sendTo = "games"
done = true done = true
break break
} }
@@ -158,7 +144,7 @@ func msgParser(ctx context.Context, msg string) {
for _, command := range cmds { for _, command := range cmds {
if cmdLen > len(command) && cmd[0:len(command)] == command { if cmdLen > len(command) && cmd[0:len(command)] == command {
sendTo = config.ForwardChannels.WebappGo sendTo = "webapp"
done = true done = true
break break
} }
@@ -174,7 +160,7 @@ func msgParser(ctx context.Context, msg string) {
for _, command := range cmds { for _, command := range cmds {
if cmdLen > len(command) && cmd[0:len(command)] == command { if cmdLen > len(command) && cmd[0:len(command)] == command {
sendTo = config.ForwardChannels.Phrases sendTo = "phrases"
if command == "karma " || command == "карма " { if command == "karma " || command == "карма " {
// Костыль для кармы // Костыль для кармы
@@ -194,7 +180,7 @@ func msgParser(ctx context.Context, msg string) {
if j.Message[msgLen-len("--"):msgLen] == "--" || j.Message[msgLen-len("++"):msgLen] == "++" { if j.Message[msgLen-len("--"):msgLen] == "--" || j.Message[msgLen-len("++"):msgLen] == "++" {
// Предполагается, что менять карму мы будем для одной фразы, то есть для 1 строки // Предполагается, что менять карму мы будем для одной фразы, то есть для 1 строки
if len(strings.Split(j.Message, "\n")) == 1 { if len(strings.Split(j.Message, "\n")) == 1 {
sendTo = config.ForwardChannels.Phrases sendTo = "phrases"
// Костыль для кармы // Костыль для кармы
j.Misc.Answer = 1 j.Misc.Answer = 1
@@ -310,10 +296,6 @@ func readConfig() {
sampleConfig.Port = 6379 sampleConfig.Port = 6379
} }
if sampleConfig.Timeout == 0 {
sampleConfig.Timeout = 10
}
if sampleConfig.Loglevel == "" { if sampleConfig.Loglevel == "" {
sampleConfig.Loglevel = "info" sampleConfig.Loglevel = "info"
} }
@@ -337,10 +319,6 @@ func readConfig() {
sampleConfig.ForwardChannels.Webapp = "webapp" sampleConfig.ForwardChannels.Webapp = "webapp"
} }
if sampleConfig.ForwardChannels.WebappGo == "" {
sampleConfig.ForwardChannels.WebappGo = "webapp-go"
}
if sampleConfig.ForwardChannels.Craniac == "" { if sampleConfig.ForwardChannels.Craniac == "" {
sampleConfig.ForwardChannels.Craniac = "craniac" sampleConfig.ForwardChannels.Craniac = "craniac"
} }
@@ -361,6 +339,7 @@ func readConfig() {
if !configLoaded { if !configLoaded {
log.Error("Config was not loaded! Refusing to start.") log.Error("Config was not loaded! Refusing to start.")
os.Exit(1)
} }
} }

View File

@@ -5,9 +5,6 @@
# 6379 if not set # 6379 if not set
"port" : 6379, "port" : 6379,
# Redis timeout, 10 seconds if not set
"timeout" : 10,
# info if not set # info if not set
"loglevel" : "info", "loglevel" : "info",
@@ -28,9 +25,6 @@
# webapp if not set # webapp if not set
"webapp" : "webapp", "webapp" : "webapp",
# webapp-go if not set
"webapp-go" : "webapp-go",
# craniac if not set # craniac if not set
"craniac" : "craniac" "craniac" : "craniac"
}, },

44
main.go
View File

@@ -1,6 +1,7 @@
package main package main
import ( import (
"context"
"fmt" "fmt"
"os" "os"
"os/signal" "os/signal"
@@ -38,18 +39,13 @@ func init() {
default: default:
log.SetLevel(log.InfoLevel) log.SetLevel(log.InfoLevel)
} }
// Иницализируем клиента Редиски
redisClient = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", config.Server, config.Port),
}).WithContext(ctx).WithTimeout(time.Duration(config.Timeout) * time.Second)
// Обозначим, что хотим после соединения подписаться на события из канала config.Channel
subscriber = redisClient.Subscribe(ctx, config.Channel)
} }
// Основная функция программы, не добавить и не убавить // Основная функция программы, не добавить и не убавить
func main() { func main() {
// Main context
var ctx = context.Background()
// Откроем лог и скормим его логгеру // Откроем лог и скормим его логгеру
if config.Log != "" { if config.Log != "" {
logfile, err := os.OpenFile(config.Log, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) logfile, err := os.OpenFile(config.Log, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
@@ -61,6 +57,14 @@ func main() {
log.SetOutput(logfile) log.SetOutput(logfile)
} }
// Иницализируем клиента
redisClient = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", config.Server, config.Port),
})
log.Debugf("Lazy connect() to redis at %s:%d", config.Server, config.Port)
subscriber = redisClient.Subscribe(ctx, config.Channel)
// Самое время поставить траппер сигналов // Самое время поставить траппер сигналов
signal.Notify(sigChan, signal.Notify(sigChan,
syscall.SIGINT, syscall.SIGINT,
@@ -69,13 +73,25 @@ func main() {
go sigHandler() go sigHandler()
// Начнём выгребать события из редиски (длина ковеера/буфера канала по-умолчанию - 100 сообщений) // Обработчик событий от редиски
ch := subscriber.Channel() for {
if shutdown {
for msg := range ch { time.Sleep(1 * time.Second)
if !shutdown { continue
msgParser(ctx, msg.Payload)
} }
msg, err := subscriber.ReceiveMessage(ctx)
if err != nil {
if !shutdown {
log.Warnf("Unable to connect to redis at %s:%d: %s", config.Server, config.Port, err)
}
time.Sleep(1 * time.Second)
continue
}
go msgParser(ctx, msg.Payload)
} }
} }

View File

@@ -4,16 +4,14 @@ package main
type myConfig struct { type myConfig struct {
Server string `json:"server,omitempty"` Server string `json:"server,omitempty"`
Port int `json:"port,omitempty"` Port int `json:"port,omitempty"`
Timeout int `json:"timeout,omitempty"`
Loglevel string `json:"loglevel,omitempty"` Loglevel string `json:"loglevel,omitempty"`
Log string `json:"log,omitempty"` Log string `json:"log,omitempty"`
Channel string `json:"channel,omitempty"` Channel string `json:"channel,omitempty"`
ForwardChannels struct { ForwardChannels struct {
Games string `json:"games,omitempty"` Games string `json:"games,omitempty"`
Phrases string `json:"phrases,omitempty"` Phrases string `json:"phrases,omitempty"`
Webapp string `json:"webapp,omitempty"` Webapp string `json:"webapp,omitempty"`
WebappGo string `json:"webapp-go,omitempty"` Craniac string `json:"craniac,omitempty"`
Craniac string `json:"craniac,omitempty"`
} `json:"forward_channels"` } `json:"forward_channels"`
Csign string `json:"csign,omitempty"` Csign string `json:"csign,omitempty"`
ForwardsMax int64 `json:"forwards_max,omitempty"` ForwardsMax int64 `json:"forwards_max,omitempty"`