2017-05-07

Slack の発言を他のチャンネルに転送するためのツール「telescreen」

前々から作ろうと思いつつなかなか手が動かなかったのですが、ゴールデンウィークで暇を持て余してたこともあり、勢いで telescreen というツールを作りました。

mozamimy/telescreen

telescreen - A slack bot to forward messages by simple routing definition

telescreen は Slack の bot として常駐し、join しているチャンネルの発言を他のチャンネルに転送するためのツールです。人間の発言を集めたいというモチベーションで実装したため、bot による発言は転送しません。 利用には Bot integration で発行することのできる API トークンが必要になります。

ふんいき

こんな感じの YAML による設定を書くと

- match: 'personal-.+'
  destinations:
    - personal-timeline
- match: '.*'
  destinations:
    - public-timeline

こんな感じで発言を別のチャンネルに転送します。

personal- からはじまるチャンネルの発言は #personal-timeline チャンネルに転送しつつ、全てのチャンネルでの発言は #public-timeline に転送する、という感じです。

設定ファイルは YAML で書き、{ match: 正規表現, destinations: [channel1, channel2, ... ] } というようなハッシュの配列になっています。match で指定した正規表現にひっかかるチャンネルでの発言が、destinations に列挙されたチャンネルに転送されます。

telescreen を使うことで、たとえば全チャンネルでの発言を #public-timeline に転送し、いわゆる分報チャンネルでの発言は #funho-timeline に集める、というようなことが可能です。

インストール・使い方

リリースページ にあるビルド済みのバイナリを使うか、Rust および cargo がインストールされているなら、$ cargo install telescreen してください。

起動は以下のような感じ。API key と設定ファイルの場所を引数で指定します。

$ telescreen --api-key=foobar --config=config.yml

もともと Amazon EC2 Container Service で動かすつもりだったので、Docker イメージも用意してあります

Entrykit を使って以下のように設定ファイルをテンプレート化しているので、環境変数 DEST_CHANNEL に転送先のチャンネルを設定すればすぐに使い始められます。 込み入った設定をしたい場合は、適宜 mozamimy/telescreen イメージをベースにしたイメージを作るなり、いい感じにしてください。

- match: '.*'
  destinations:
    - {{ var "DEST_CHANNEL" | default "general" }}