Slackのリアクション(絵文字)をMattermostにまとめて絵文字(リアクション)を追加する
Published: 2022-09-29

Slackのログ保存期間が90日になってしまい、Slackのログがどんどん見えなくなり
Mattermostを導入した際にSlackからMattermostにカスタム絵文字(リアクション)を
コピーした際のメモです。

Slackからリアクションの抽出

最初はSlackのAPIを使って抽出してしまおうと思ってたんですが、Chromeの拡張で
Slack Custom Emoji ManagerSlack を使うと非常に簡単にダウンロードできるのでこれでダウンロードしました。

Chromeの拡張をインストールして https://<自分のSlack>.slack.com/emoji にアクセスして
「すべての絵文字をダウンロードする」を押すだけです。

Mattermostにインポートする

まとめてcurlを使ってAPIで登録してしまいます。
注意点としてはSlackは日本語でリアクション名を付けれますが、Mattermostはマルチバイト名で登録
できないため、あらかじめダウンロードしたリアクションに日本語名がある場合は修正しておきます。

APIを使うためBotを作成しアクセストークンを取得

  1. 「統合機能」を選びます
  2. 「Botアカウント」を選びます
  3. 「Botアカウントを追加する」を押します
  4. アカウントを作成します
    役割は「システム管理者」にします
  5. トークンが発行されるので覚えておきましょう

BotのユーザIDを取得する

emojiを登録する際にボットのユーザIDを指定する必要があるため、
APIを使ってbotのユーザIDを取得します。

$ TOKEN="先ほど取得したTOKEN"
$ CREATE_ID=$(curl -s -X GET -H "Authorization: Bearer ${TOKEN}" https://<Mattermost URL>/api/v4/users/me | jq -r .id)
$ echo $CREATE_ID

これでCREATE_IDの変数に作成したBotのユーザIDが入っているはずです。

APIトークンとBotIDを使ってまとめて登録する

先ほどダウンロードした絵文字をディレクトリに配置して実行します。

$ TOKEN="先ほど取得したTOKEN"
$ CREATE_ID="先ほど取得したBotのユーザID"
$ for file in $(ls)
do
    name=$(echo $file | cut -d . -f 1)

    curl -X POST -H "Authorization: Bearer ${TOKEN}" \
             -H "Content-Type: multipart/form-data" \
             -F "emoji={\"name\":\"${name}\",\"creator_id\":\"${CREATER_ID}\"}" -F "image=@./${file}" \
             https://<Mattermost URL>/api/v4/emoji
done

これで、ファイル名でemojiとして登録されます。