JavaScript
Node.js
Slack

Slackの絵文字(emoji)を一括エクスポート&インポートする

Slackの所属チームが増えてきたりすると、他チームで使っているemojiが欲しくなったり、まとめてemojiを移行したくなったりすることはよくあります。いろいろ調べてみると素敵なツールが公開されていたので、今回はそれらを使ったemojiの一括インポート&エクスポートする手順をまとめました。

※Windows10で動作確認済み。

更新履歴

2018/01/12: .png 以外の拡張子のemojiもエクスポートできるようにスクリプトを修正 (@daik さん、ありがとうございます!)

現在のチームのemojiをエクスポート

こちらの記事を参考に進めます。
Qiita: Slackのカスタム絵文字を全てダウンロードする

1. Node.jsをインストール

インストール後、 node --version コマンドで動作確認できます。
今回は下記バージョンを使いました。

λ node --version
v6.10.0

2. 必要なモジュールをインストール

λ npm install slack-node
λ npm install request
λ npm install fs

3. エクスポート元のSlackチームのAPIトークンを取得

ここ でAPIトークンを発行する。

20170322_slack-api-token.png

4. スクリプトファイルを配置

メモ帳やらに下記をコピペして、 "<apitoken>" の部分に発行したAPIトークンを貼り付ける。
その後 slack-emoji-export.js という名前で保存(何でも良い)。

var Slack = require('slack-node');
var request = require('request');
var fs = require('fs');

apiToken = "<apitoken>"; // ここにAPIトークンを貼り付ける。
slack = new Slack(apiToken);

slack.api("emoji.list", function (err, response) {
    for(key in response.emoji){
        url = response.emoji[key];
        //エイリアスは無視
        if(url.match(/alias/)){
            continue;
        }

        // 取得対象の拡張子
        extention = url.match(/\.[^\.]+$/);

        request
        .get(url)
        .on('response', function (res) {
        })
        .pipe(fs.createWriteStream('image/' + key + extention));
    }
});

5. 保存先ディレクトリを作成する

slack-emoji-export.js を配置した同階層に image というディレクトリを作成する。

6. 実行

コマンドプロンプトからスクリプトを実行する。

C:\Users\emoji-export>node slack-emoji-export.js

7. 完了

imageディレクトリにカスタム絵文字が保存されているはず。

emojiを一括インポート

GoogleChromeのエクステンション、 Slack Emoji Tools を使う。

こちらの記事を参考。
Hatena Blog: Slack Emoji (絵文字) を一括登録できるツールが素敵すぎました

導入後、UIから一括登録できるようになる

20170322_slack-emoji-bulk.png

チームのemoji追加画面 (https://チーム.slack.com/customize/emoji) に行くと、一括登録できるようになっている。
ファイル名がそのままemojiの名前になる。

おわり

おかげでとっても楽に移行できました。各作者様に感謝。