mirror of
https://github.com/cjdenio/jia.git
synced 2025-05-14 17:33:05 +00:00
Move stuff out of main package (wip)
This commit is contained in:
parent
558803a0de
commit
dbb0a90706
6 changed files with 109 additions and 65 deletions
|
@ -2,17 +2,24 @@ package jia
|
|||
|
||||
import (
|
||||
"os"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
BotToken string
|
||||
ChannelId string
|
||||
BotToken string
|
||||
ChannelID string
|
||||
Port int
|
||||
RedisURL string
|
||||
VerificationToken string
|
||||
}
|
||||
|
||||
func NewConfig() *Config {
|
||||
return &Config{
|
||||
BotToken: getEnv("SLACK_CLIENT_BOT_TOKEN", ""),
|
||||
ChannelId: getEnv("SLACK_CHANNEL_ID", ""),
|
||||
BotToken: getEnv("SLACK_CLIENT_BOT_TOKEN", ""),
|
||||
ChannelID: getEnv("SLACK_CHANNEL_ID", ""),
|
||||
Port: getEnvAsInt("PORT", 3000),
|
||||
RedisURL: getEnv("REDIS_URL", "redis://localhost:6379/0"),
|
||||
VerificationToken: getEnv("SLACK_VERIFICATION_TOKEN", ""),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,3 +31,12 @@ func getEnv(key string, defaultValue string) string {
|
|||
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func getEnvAsInt(key string, defaultValue int) int {
|
||||
valueStr := getEnv(key, "")
|
||||
if value, err := strconv.Atoi(valueStr); err == nil {
|
||||
return value
|
||||
}
|
||||
|
||||
return defaultValue
|
||||
}
|
||||
|
|
17
pkg/jia/handlers.go
Normal file
17
pkg/jia/handlers.go
Normal file
|
@ -0,0 +1,17 @@
|
|||
package jia
|
||||
|
||||
import (
|
||||
"github.com/slack-go/slack"
|
||||
"github.com/slack-go/slack/slackevents"
|
||||
)
|
||||
|
||||
func HandleInnerEvent(slackClient *slack.Client, innerEvent *slackevents.EventsAPIInnerEvent) {
|
||||
switch e := innerEvent.Data.(type) {
|
||||
case *slackevents.MessageEvent:
|
||||
onMessage(slackClient, e)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
func onMessage(slackClient *slack.Client, event *slackevents.MessageEvent) {
|
||||
}
|
66
pkg/jia/server.go
Normal file
66
pkg/jia/server.go
Normal file
|
@ -0,0 +1,66 @@
|
|||
package jia
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/go-redis/redis"
|
||||
"github.com/slack-go/slack"
|
||||
"github.com/slack-go/slack/slackevents"
|
||||
)
|
||||
|
||||
var (
|
||||
jiaConfig *Config
|
||||
redisClient *redis.Client
|
||||
slackClient *slack.Client
|
||||
)
|
||||
|
||||
func StartServer(config *Config) {
|
||||
jiaConfig = config
|
||||
// Set up Redis connection
|
||||
options, err := redis.ParseURL(config.RedisURL)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
redisClient = redis.NewClient(options)
|
||||
|
||||
// Initialize Slack app
|
||||
slackClient = slack.New(config.BotToken)
|
||||
|
||||
// Start receiving events
|
||||
http.HandleFunc("/slack/events", handleSlackEvents)
|
||||
http.ListenAndServe(fmt.Sprintf("127.0.0.1:%d", config.Port), nil)
|
||||
}
|
||||
|
||||
func handleSlackEvents(w http.ResponseWriter, r *http.Request) {
|
||||
// Verify the payload was sent by Slack.
|
||||
buf := new(bytes.Buffer)
|
||||
buf.ReadFrom(r.Body)
|
||||
body := buf.String()
|
||||
apiEvent, err := slackevents.ParseEvent(json.RawMessage(body),
|
||||
slackevents.OptionVerifyToken(
|
||||
&slackevents.TokenComparator{VerificationToken: jiaConfig.VerificationToken}))
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// Handle the event that came through
|
||||
switch apiEvent.Type {
|
||||
case slackevents.URLVerification:
|
||||
var r *slackevents.ChallengeResponse
|
||||
err := json.Unmarshal([]byte(body), &r)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "text")
|
||||
w.Write([]byte(r.Challenge))
|
||||
break
|
||||
case slackevents.CallbackEvent:
|
||||
HandleInnerEvent(slackClient, &apiEvent.InnerEvent)
|
||||
break
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue