ITオムライス

slackのbotをGo言語で作ってみた

2020-05-21 技術系

最近、外に出かけることが少なくなってきたので、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-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:

		}
	}
}

無事に反応してくれました。

簡単に作ることができたので、次はいろいろ機能を追加して友達を作っていきたいです。

参考

【Golang初心者 part2】お題:Slack Botを作る - Qiita

Go で Slack Bot を作る (2020年3月版) - Qiita