Help us understand the problem. What is going on with this article?

SlackでPublicチャンネルの発言を1箇所に集める方法

More than 1 year has passed since last update.

はじめに

  • 情報ジャンキーなのでチャンネルに投稿があると見ずにはいられません
  • でもチャンネル数が多いと色んなチャンネルを行ったり来たりして大変
  • なのでtimelineチャンネルを作り全てそこに集めてしまえば良いと思いBotkitでやってみました
  • BotkitをSlackで使う方法はこちらの記事が参考になるかもしれません

SlackBotの設定

  • OAuth & Permissionsの設定に以下を追加します

    • users:read
    • chat:write:bot
    • chat:write:user(これはいらないかも?)
    • channels:history
  • Event Subscriptionsの設定に以下を追加します

    • message.channels

Botkitのコード

  • .envファイルにtimelineチャンネルのIDを設定します
    • チャンネルIDを知るにはslackメッセージを右クリックしてコピーする方法が簡単だと思います
    • Cから始まるやつがチャンネルIDです
.env
timelineChannelId=Cxxxxxxxxx
  • 3つのイベントに反応するようにします
    • ambient
    • direct_mention
    • mention
      • イベントについてはここにこちら詳しく書いてあります
  • users.infoとchat.postMessageを使ってtimelineチャンネルに投稿します
    • users.infoの仕様はここに書いてあります
    • chat.postMessageの仕様はここに書いてあります
skills/timeline.js
module.exports = function(controller) {
  controller.on('ambient,direct_mention,mention', function(bot, message) {

      // ユーザトークンを使っているためボット作成者が参照できるプライベートチャンネルなどの発言も拾ってしまう
      // そのためchannel(パブリックチャンネル)でない場合は処理を終了する(そもそもPermissionsを与えなければ良いのですが念の為)
      const channel_type = message.event.channel_type;
      if(channel_type !== "channel"){ return }

      // 発言者の情報を取得する
      bot.api.users.info({user: message.event.user}, function(err, res){
          if(err) { console.log("err: ", err); return; }
          // timelineに発言するテキストを作成する(#チャンネル名 発言内容)
          const text = '<#' + message.event.channel + '> ' + message.event.text
          // チャンネル、テキスト、ユーザ名、ユーザアイコンを設定してtimelineチャンネルに投稿
          bot.api.chat.postMessage({ text: text, channel: process.env.timelineChannelId, as_user: false, username: res.user.profile.real_name, icon_url: res.user.profile.image_48}, function(err, res){
              if(err) { console.log("err: ", err); return; }
          });
      });
  });
}

Slackイメージ

Screenshot from 2018-12-16 17-18-26.png

  • 色んなPublicチャンネルの発言が集まって良い感じですね
  • もはやPublicチャンネルはここだけ見ていれば良いかもしれません
  • ちなみにこの日は弊社の忘年会で帰りにおいしいどら焼きが配られました
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away