読者です 読者をやめる 読者になる 読者になる

日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

Slackに新しいチャンネルができたら、特定のチャンネルに通知を送るスクリプトを組んでみた。

JavaScript Slack AdventCalendar

この記事はSlack Advent Calendar 2015の4日目として書かれています。

qiita.com

こんにちは@ara_ta3です。
自分が属してるDarkというコミュニティでSlackを利用しているのですが、なにかおもしろいチャンネルができても気が付けないことがあるので、チャンネルが出来たことに気が付きたいと思いました。
Real Time Messaging API | Slack とかあるので、チャンネルが出来たというイベントを元にSlackにメッセージを送れればできるのでとても簡単なはずです
Slack RTMのライブラリ絶対あるだろって思ったらさくっと見つかりました。

xBytez/slackbotapi · GitHub

言語がJavaScriptなのは初めHubotでやろうと思ってたからです。

今回作ったレポジトリはこちら

github.com

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としてチャンネルが出来たよっていうメッセージが飛んでるのがわかりますね。

まとめ

これでSlackにどんなに人が増えて、色んな人が色んなチャンネルを作ったとしても気がつけますね!
最高!!11

明日の担当は@nofrmmさんです!
楽しみにしてます!