最近、外に出かけることが少なくなってきたので、slackのbotで友達を作ろうと思い、Go言語でslackのbotを作る方法を調べました。
手始めに@で話しかけた時に反応する簡単なbotを作りました。
Botsをワークスペースに追加する
slackのbotを作るときはslack APIを作る場合もありますが、
簡単なbotの場合は、slackが公式で提供しているbotsで充分みたいです。
下のURLにアクセスしてワークスペースにbotsを追加します。
https://my.slack.com/services/new/bot
Botsが出来ること
・slackでキーワードを入力すると回答
・slackのスラッシュコマンドをフックにリマインダーやタスクの登録など
botsをワークスペースに追加するとtokenが表示されるので、コピーしておきます。
ライブラリ
Go言語でslackのbotを使うにはslack-go/slackというライブラリを使います。
サンプルコードが用意されているので、試しに使ってみるレベルなので、必要な部分をコピペして、一部書き換えました。
slack/websocket.go at master · slack-go/slack
実際のコードが下のような感じです。
package main
import (
	"fmt"
	"log"
	"os"
	
	"github.com/slack-go/slack"
)
func main() {
	config := ReadConfig()
	api := slack.New(
		config.Token,
		slack.OptionDebug(true),
		slack.OptionLog(log.New(os.Stdout, "slack-bot: ", log.Lshortfile|log.LstdFlags)),
	)
	rtm := api.NewRTM()
	go rtm.ManageConnection()
	for msg := range rtm.IncomingEvents {
		fmt.Print("Event Received: ")
		switch ev := msg.Data.(type) {
			case *slack.DesktopNotificationEvent:
				fmt.Printf("Desktop Notification: %v\n", ev)
				rtm.SendMessage(rtm.NewOutgoingMessage("なに?", ev.Channel))
			case *slack.RTMError:
				fmt.Printf("Error: %s\n", ev.Error())
			default:
		}
	}
}無事に反応してくれました。
簡単に作ることができたので、次はいろいろ機能を追加して友達を作っていきたいです。
