Matthew Faltys
8 years ago
commit
1f0cf3fc2e
4 changed files with 129 additions and 0 deletions
Binary file not shown.
@ -0,0 +1,8 @@ |
|||||||
|
[lorebot] |
||||||
|
loglevel = "debug" |
||||||
|
bootstrapdelay = 1 |
||||||
|
APIToken = "" |
||||||
|
|
||||||
|
[redis] |
||||||
|
host = "localhost:6379" |
||||||
|
password = "" |
Binary file not shown.
@ -0,0 +1,121 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"io/ioutil" |
||||||
|
"os" |
||||||
|
"strings" |
||||||
|
"time" |
||||||
|
|
||||||
|
"github.com/nlopes/slack" |
||||||
|
"github.com/unixvoid/glogger" |
||||||
|
"gopkg.in/gcfg.v1" |
||||||
|
"gopkg.in/redis.v5" |
||||||
|
) |
||||||
|
|
||||||
|
type Config struct { |
||||||
|
Lorebot struct { |
||||||
|
Loglevel string |
||||||
|
BootstrapDelay time.Duration |
||||||
|
APIToken string |
||||||
|
} |
||||||
|
Redis struct { |
||||||
|
Host string |
||||||
|
Password string |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var ( |
||||||
|
config = Config{} |
||||||
|
) |
||||||
|
|
||||||
|
func main() { |
||||||
|
// read in config file
|
||||||
|
readConf() |
||||||
|
|
||||||
|
// initialize the logger with the configured loglevel
|
||||||
|
initLogger(config.Lorebot.Loglevel) |
||||||
|
|
||||||
|
// initialize redis connection
|
||||||
|
//redisClient, err := initRedisConnection()
|
||||||
|
//if err != nil {
|
||||||
|
// glogger.Debug.Printf("redis conneciton cannot be made, trying again in %d seconds", config.Lorebot.BootstrapDelay)
|
||||||
|
// time.Sleep(config.Lorebot.BootstrapDelay * time.Second)
|
||||||
|
// redisClient, err = initRedisConnection()
|
||||||
|
// if err != nil {
|
||||||
|
// glogger.Error.Println("redis connection cannot be made.")
|
||||||
|
// os.Exit(1)
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//glogger.Debug.Println("connection to redis succeeded.")
|
||||||
|
//glogger.Info.Println("link to redis on", config.Redis.Host)
|
||||||
|
|
||||||
|
api := slack.New(config.Lorebot.APIToken) |
||||||
|
//api.SetDebug(true)
|
||||||
|
|
||||||
|
rtm := api.NewRTM() |
||||||
|
go rtm.ManageConnection() |
||||||
|
|
||||||
|
Loop: |
||||||
|
for { |
||||||
|
select { |
||||||
|
case msg := <-rtm.IncomingEvents: |
||||||
|
switch ev := msg.Data.(type) { |
||||||
|
//case *slack.ConnectedEvent:
|
||||||
|
// //botId = ev.Info.User.ID
|
||||||
|
//case *slack.TeamJoinEvent:
|
||||||
|
// // Handle new user to client
|
||||||
|
case *slack.MessageEvent: |
||||||
|
if ev.Type == "message" { |
||||||
|
if ev.Text == "test" { |
||||||
|
rtm.SendMessage(rtm.NewOutgoingMessage("MY NAME IS ..JHEFFFFF", ev.Channel)) |
||||||
|
} |
||||||
|
if strings.Contains(ev.Text, "lore") { |
||||||
|
rtm.SendMessage(rtm.NewOutgoingMessage("THA LORE", ev.Channel)) |
||||||
|
} |
||||||
|
} |
||||||
|
case *slack.RTMError: |
||||||
|
fmt.Printf("Error: %s\n", ev.Error()) |
||||||
|
case *slack.InvalidAuthEvent: |
||||||
|
fmt.Printf("Invalid credentials") |
||||||
|
break Loop |
||||||
|
default: |
||||||
|
//fmt.Printf("Unknown error")
|
||||||
|
//fmt.Printf("%v\n", msg.Data)
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func readConf() { |
||||||
|
// init config file
|
||||||
|
err := gcfg.ReadFileInto(&config, "config.gcfg") |
||||||
|
if err != nil { |
||||||
|
panic(fmt.Sprintf("Could not load config.gcfg, error: %s\n", err)) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func initLogger(logLevel string) { |
||||||
|
// init logger
|
||||||
|
if logLevel == "debug" { |
||||||
|
glogger.LogInit(os.Stdout, os.Stdout, os.Stdout, os.Stderr) |
||||||
|
} else if logLevel == "cluster" { |
||||||
|
glogger.LogInit(os.Stdout, os.Stdout, ioutil.Discard, os.Stderr) |
||||||
|
} else if logLevel == "info" { |
||||||
|
glogger.LogInit(os.Stdout, ioutil.Discard, ioutil.Discard, os.Stderr) |
||||||
|
} else { |
||||||
|
glogger.LogInit(ioutil.Discard, ioutil.Discard, ioutil.Discard, os.Stderr) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func initRedisConnection() (*redis.Client, error) { |
||||||
|
// init redis connection
|
||||||
|
redisClient := redis.NewClient(&redis.Options{ |
||||||
|
Addr: config.Redis.Host, |
||||||
|
Password: config.Redis.Password, |
||||||
|
DB: 0, |
||||||
|
}) |
||||||
|
|
||||||
|
_, redisErr := redisClient.Ping().Result() |
||||||
|
return redisClient, redisErr |
||||||
|
} |
Loading…
Reference in new issue