ブラックPEOPLEくん（Slack Bot）との熾烈な戦い

あっ、ずっと前から Slack Bot 作ってみたかったんですよ。


## ずっと温めてたけど

なんで急に作ろうと思ったか。

うちの会社の新人ちゃんとその先輩が Unibo から Slack にメッセージを飛ばすみたいなことやってたので、そろそろやろうかなと、思ったわけです。

:link: [新人ちゃんの記事](https://qiita.com/dama-a/items/88988f0229d124275d51)

:link: [その先輩の記事](https://qiita.com/s-suefusa/items/86b5eab5c9d9d84e054c)

## Bot と言ったものの．．．

よくメンヘラ Bot とか聞きますけど、自分で作るとなると題材がなく．．．



### あっ！

うちの会社のマスコット的な子、PEOPLEくん（非公式）っていうんですけど、これ使おう！


![original.png](https://qiita-image-store.s3.amazonaws.com/0/135956/5aead0f0-b5cb-edf3-0047-29e7435309f9.png)



:arrow_up: これね



でも、個人的なイメージだけど Bot って毒舌だよね。だよね？



### ブラックにしてしまえ！


![black-people-kun.png](https://qiita-image-store.s3.amazonaws.com/0/135956/dd0ee125-2aa2-c0fb-f157-5bb913a5e53b.png)



はい、いいのかなこんな事して？

~~おっと、誰かが来たようだ．．．~~



## 本題（Slack 側）

Slack Bot を作るためには Slack API のページから Slack App を作成する必要があります。

:link: [Slack API](https://api.slack.com/apps)

### 1. Create an App を押す

押すだけ！

![bot1.png](https://qiita-image-store.s3.amazonaws.com/0/135956/e3aec9ba-31a3-5c25-752a-dc6082da3964.png)


### 2. アプリ名と導入する Slack のワークスペースを選択

「**App Name**」にアプリ名を入力します。

利用したいワークスペースを「**Development Slack Workspace**」から選択して「**Create App**」！

![bot2.png](https://qiita-image-store.s3.amazonaws.com/0/135956/eda56250-faf0-ed2a-4e12-5208e5e439ee.png)


### 3. Bot にする！

左側の「**Bot Users**」を選択すると画面が切り替わるので、「**Add a Bot User**」押す！

![bot3.png](https://qiita-image-store.s3.amazonaws.com/0/135956/4906e2f7-7387-0593-bc30-9709c6f500ee.png)


### 4. Bot に命を吹き込む

「**Display name**」に Bot の名前を入力します。

（日本語も OK だよ！）

「**Default username**」はユーザーネーム、つまり Slack の ID にあたる値です。

こちらは日本語むーりー


![bot4.png](https://qiita-image-store.s3.amazonaws.com/0/135956/c5973289-60eb-059f-8ef5-2792d84e2b8d.png)



「**Add a Bot User**」押したら Bot が産声をあげます。



### 5. Slack と連動

「**Basic Information**」に戻り「**Install your app to your workspace**」のトグルを開くと「**Install App to Workspace**」というボタンが現れます。

![bot5.png](https://qiita-image-store.s3.amazonaws.com/0/135956/3c22ca6b-f308-b715-56e4-b994654ec28e.png)

押したらワークスペースとの認証の許可を聞かれますので、OK したらSlack に Bot が表示されるようになります！


## 本題（実装側）

Bot なので会話出来るのがいいなと思っていました。

**Real Time Messaging API** というものが用意されていますので、これを使って Bot を喋らせて見ようと思います！

（実装は Go言語 です）



### 1. 実装って言っても1ファイルだけだけど

```go
package main

import (
	"log"

	"github.com/nlopes/slack"
)

func main() {
	// API Client を作成する
	api := slack.New("「Bot User OAuth Access Token」を入力するよ")

	// WebSocket で Slack RTM API に接続する
	rtm := api.NewRTM()
	go rtm.ManageConnection()

	for msg := range rtm.IncomingEvents {
		switch ev := msg.Data.(type) {
		case *slack.MessageEvent:
			// メッセージイベントの場合は、入力メッセージを Log 出力
			log.Printf("Message: %v\n", ev.Text)
			rtm.SendMessage(rtm.NewOutgoingMessage("は？", ev.Channel))
		}
	}
}
```



コード内に概要を書いていますが、

>  API クライアント作成 :arrow_right: Slack RTM API に接続 :arrow_right: ​ メッセージイベントの場合に喋る！

です！

ちなみにコメントにある `"「Bot User OAuth Access Token」を入力するよ"` の部分は Slack API のページから取ってきます。


![bot6.png](https://qiita-image-store.s3.amazonaws.com/0/135956/08226796-36d4-1f0a-de13-96fb9796b223.png)



「**OAuth & Permissions**」の「**Bot User OAuth Access Token**」の値を貼り付けましょう。



## 動かしてみた


![熾烈な争い.png](https://qiita-image-store.s3.amazonaws.com/0/135956/1414d416-5936-de94-94a3-b536e10a6499.png)



この子．．．嫌い。



## まとめ

割とすんなり作れると思います。

いろいろな言語で書けるので、好きな言語で作ってみてはどうでしょう？



## 参考

参考にさせていただきました！

ありがとうございます！！

:link: [Slack Botの種類と大まかな作り方](https://qiita.com/namutaka/items/233a83100c94af033575)