Compare commits
1 Commits
289d6e27c9
...
v1.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48050fe3cc |
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
44
main.go
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
types.go
2
types.go
@@ -4,7 +4,6 @@ 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"`
|
||||||
@@ -12,7 +11,6 @@ type myConfig 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"`
|
||||||
|
|||||||
Reference in New Issue
Block a user