この記事はSlack Advent Calendar 2015の4日目として書かれています。
こんにちは@ara_ta3です。
自分が属してるDarkというコミュニティでSlackを利用しているのですが、なにかおもしろいチャンネルができても気が付けないことがあるので、チャンネルが出来たことに気が付きたいと思いました。
Real Time Messaging API | Slack とかあるので、チャンネルが出来たというイベントを元にSlackにメッセージを送れればできるのでとても簡単なはずです
Slack RTMのライブラリ絶対あるだろって思ったらさくっと見つかりました。
言語がJavaScriptなのは初めHubotでやろうと思ってたからです。
今回作ったレポジトリはこちら
JavaScript実装
var slackAPI = require('slackbotapi'); var token = process.env.WEB_SLACK_TOKEN; var botName = process.env.BOT_NAME; var targetChannel = process.env.TARGET_SLACK_CHANNEL; if (!token) { console.error("slack web api token is not set"); console.error("please `export WEB_SLACK_TOKEN`"); process.exit(1); } var slack = new slackAPI({ 'token': token, 'logging': true, 'autoReconnect': true }); slack.on('channel_created', function (data) { var data = { channel: targetChannel, username: botName, text: "new channel <#" + data.channel.id + "|" + data.channel.name +"> has been created", }; slack.reqAPI("chat.postMessage",data); });
という感じです。
利用したライブラリが機能豊富でとてもよかったです。
reqAPIというメソッドによって Slack Web API | Slack の方も呼べるので便利です。
実行結果
起動すると下記のようなログが流れます。
22:11 20s 621ms [Transport] [SlackAPI] Received: {"type":"hello"} 22:11 20s 622ms [Transport] [SlackAPI] Received: {"reply_to":2458,"type":"message","channel":"C068Q2S5N","user":"U068Q58E6","text":"%hoge","ts":"1448280564.000023"} 22:11 27s 955ms [Transport] [SlackAPI] Received: {"type":"channel_marked","channel":"C08A0JK4H","ts":"1448284253.000021","unread_count":0,"unread_count_display":0,"num_mentions":0,"num_mentions_display":0,"mention_count":0,"mention_count_display":0} 22:11 46s 540ms [Transport] [SlackAPI] Received: {"type":"channel_created","channel":{"id":"C0F4824MD","is_channel":true,"name":"dummy","created":1448284306,"creator":"U068Q58E6"},"event_ts":"1448284306.887779"} 22:11 46s 753ms [Transport] [SlackAPI] Received: {"type":"channel_joined","channel":{"id":"C0F4824MD","name":"dummy","is_channel":true,"created":1448284306,"creator":"U068Q58E6","is_archived":false,"is_general":false,"is_member":true,"last_read":"0000000000.000000","latest":null,"unread_count":0,"unread_count_display":0,"members":["U068Q58E6"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"","creator":"","last_set":0}}} 22:11 46s 753ms [Transport] [SlackAPI] Received: {"user":"U068Q58E6","type":"message","subtype":"channel_join","text":"<@U068Q58E6|arata> has joined the channel","channel":"C0F4824MD","ts":"1448284306.000002"} 22:11 46s 753ms [Transport] [SlackAPI] Received: {"type":"pref_change","name":"has_created_channel","value":true} 22:11 47s 439ms [Transport] [SlackAPI] Received: {"text":"new channel <#C0F4824MD|dummy> has been created","username":"slackbot","type":"message","subtype":"bot_message","channel":"C091NMHGT","ts":"1448284307.000003"}
4行目でchannel_createdのイベントが起きて、8行目でbot_messageとしてチャンネルが出来たよっていうメッセージが飛んでるのがわかりますね。