おみくじをしましょう

しましょう.

皆さんは各々個人slackをお持ちかと思いますので,ここにそんなこともあろうかと,うまく動くおみくじを用意いたしました.

github.com

動かし方

Deploy to Herokuをついでに配置したので使うと良さそう.

その後は,slackのoutgoing webhookで, https://hogeee.heroku.com/omikuji にoutgoingが飛ぶように設定

f:id:programmerMOT:20170103031619p:plain

あとはslack使うだけ f:id:programmerMOT:20170103031722p:plain

今年もいい年になりそうですね

仕組み

package main

import (
    "log"
    "math/rand"
    "net/http"
    "os"
    "strings"
    "time"

    "github.com/gin-gonic/gin"
)

func main() {
    port := os.Getenv("PORT")

    if port == "" {
        log.Fatal("$PORT must be set")
    }

    router := gin.Default()

    router.POST("/omikuji", func(c *gin.Context) {
        text := c.PostForm("text")
        log.Printf("%s", text)

        nakami := strings.Split(text, ",")
        rand.Seed(time.Now().UnixNano())
        c.JSON(http.StatusOK, gin.H{
            "text":          nakami[rand.Intn(len(nakami))],
            "response_type": "in_channel",
        })
    })
    router.Run(":" + port)
}

仕組みはかなりシンプルで,Outgoingでアクセスが来る→HTTP Responseの際に結果を返すだけ. 今回はシンプルにするために,カンマ区切りでシャッフルするようにした.

最初のos.GetEnv周りはHerokuでうまく動かすためのおまじない.slackのoutgoingはtextというパラメータにテキストが入っているのでそれを利用すればok.

ちなみに

この程度のシンプルなやつならslackbotでもできる.

f:id:programmerMOT:20170103032117p:plainf:id:programmerMOT:20170103032120p:plain

去年頑張ってbot書いたら,この設定を後輩がしてて悲しい気持ちになったのでその供養をさせていただきました.

今年も頑張りましょう