Edited at

Slackのemojiを別のTeamに引っ越しするスクリプトをRubyで作ってみた

2019/07/07追記 結構前からSlackの仕様が変更されて動作しない状態となっております m(_ _)m

(2016/09/21追記 ログと注意書きの記載がなかったため追記)


はじめに

チームでSlackを使用していると、色々なemojiが増えていきますよね?

普段からemojiを使っている方ほど、別のチームを作成した時に「あのemojiが使いたいけど登録されてない」というような、残念な思いをしているのではないでしょうか。

現時点(2016年9月)は特に引っ越しする機能も用意されていないため、手作業で登録するしかないですね。

しかし、大量のemojiを一つ一つちまちまと登録し直すのはとても面倒くさい・・・。

そこで、emojiを引っ越しする作業をRuby+Mechanizeで自動化しました。

このスクリプトがあれば、100個以上emojiを登録していても大丈夫!

※既に幾つかemojiをアップロードするスクリプトはネットで見つかりましたが、どれも環境作成でつまづいたため、なるべくシンプルなスクリプトを目指して作成しました。


ソースについて

こちらにアップロードしました。

slack_emoji_mover

まだrubyはあまり詳しくないため、ご指摘等ありましたらよろしくお願いします。

また、READMEやコメントが充実していないので、いずれ直します・・・。


環境について

スクリプトが動作するためには下記が必要ですので、インストールしてください。

WindowsとMac OS(Linuxは未テストです)で動作するはずですが、うまくいかない場合はコメントお願いします。


  • Ruby 2.2.2以上(Mechanizeが1.9.2以上なので、1.9.2以上で動作するかもしれないです)

  • nokogiri (Ruby gem)

  • mechanize (Ruby gem)

  • open-uri-s3 (Ruby gem)

Ruby gemと書かれているものに関しては、gem install ~でインストールしてください。


使用方法について

環境のセットアップが済んだら、emoji_conf.txtに必要な情報を記入してください。

引っ越し先の情報


  • Slack team URL

  • メールアドレス

  • パスワード

引っ越し元の情報


  • token

tokenはbot等で既に使用している場合はそちらでも大丈夫ですが、ない場合は生成する必要があります。

以下のurlから引っ越し元のSlackのteamのtokenを生成してください。

Test token generator

tokenの生成方法については、下記記事で詳しく書かれていました。

ロードバランスすだちくん Slackの絵文字、他社のも見たいよね

なお、tokenを使うことで様々な事が出来てしまうため、くれぐれも他人に教えたりはしないでください。

全て記入できたらcmdやターミナルでフォルダまで移動し、import_emoji.rbを実行してください。

ruby import_emoji.rb

あとは待つだけでemojiがアップロードされていきます。

結果はemoji_log.txtに、emoji一つ一つに対して結果が記載されています。

アップロードに成功している場合は

Successfully added.

失敗した場合は

・名前が被っている場合は

Same emoji name already exist.

・それ以外のエラーは

Unknown error occured.

と出力されるので実行後に確認してください。

注意:


  • 引っ越し元のemojiの画像はスクリプトと同じフォルダ内にダウンロードされます。

  • 画像のダウンロードやアップロードは、サーバーに負担をかけない様に一回毎に3秒のsleepを挟んでいるので気長にお待ちください。


仕組みについて

引っ越し元のemojiの取得については、以下のurlからJSONで情報が取得できるため、そちらを利用しました。

https://slack.com/api/emoji.list?pretty=1&token=

上記urlのtokenのパラメーターに使用方法で記載したtokenを入れることで、登録しているemojiのリストが返ってきます。

そちらのJSONからデフォルトの絵文字を除き、全ての画像ファイルをダウンロードします。

取得したJSONはemoji.txtというファイルでスクリプトと同じフォルダにダウンロードされます。

取得したemojiの登録についてですが、残念ながら現在Slackのemojiを登録するAPIはありません。

そのため、emojiを登録するためには通常通りにWebから登録します。

ざっくり書くと以下の様な作業を自動化します。


  1. SlackのTeamにログインする

  2. Webページにemojiの情報を記入する

  3. 「Save New Emoji」のボタンを押す

  4. アップロードが完了していない場合、2.に戻る

今回はRuby+Mechanizeで上記作業を自動化しました。

このスクリプトのプロトタイプは思っていたよりも簡単に出来ました。

Mechanize様々ですね。


最後に

今回作成したスクリプトの解説は、別の記事で書きたいと思っています。

今回のスクリプトを応用して、新しいemojiを簡単に登録するスクリプトも作成していますので、そちらについても記事に書ければと思っています。

分かりにくいところなどありましたら、コメントよろしくお願いいたします。

それでは、よいSlackライフを!