こんにちはエンジニアの sakasai です。
先月は 動画の作成 とかをやっていて全然ブログ書いてませんでした。
今月はブログもちょっとがんばります。
はじめに
ディーメイクでは先月からMattermostやSlackなどで使える絵文字の配布をはじめました。
簡単なアンケートにお答えいただくと無料でダウンロードできますので、是非ダウンロードしてご利用ください。
お気に入りの絵文字を個別に追加する方法は下記の記事にまとめてありますので、そちらを参考にしてみてください!
というわけでダウンロードしていただいた絵文字を一括で登録できると便利ということで、簡易的なツール(プログラム)を作ってみましたのでご紹介したいと思います。
Jupyter Lab でPythonを実行して絵文字の登録を行います。
Jupyter Labの環境はご自身でご用意ください。(確認してませんが GoogleColab でも実行できると思います。ただし実行する際は自己責任でお願いします。)
Jupyter Labの使い方や詳しい説明は今回は省略します。 https://jupyter.org/index.html
今回のソースコードは GitHub に公開してますのでこちらをご参照ください。
https://github.com/msakasai/mm-emoji-bulk-create-on-jupyter/blob/main/mm_emoji.ipynb
おおまかな流れ
- MattermostのBot作成
- Jupyter Lab実行ファイルの環境変数にMattermostの情報を設定
- Jupyter Labにカスタム絵文字をアップロード
- Jupyter Labでカスタム絵文字の登録実行
- 登録する絵文字ファイルの一覧取得
- 絵文字をMattermostに登録
- 登録した絵文字をMattermostのチャンネルに投稿
MattermostのBot作成
Mattermost API を利用してカスタム絵文字の登録を行います。
Mattermost API を実行するためのBotアカウントの作成から行っていきます。
(以下システム管理者での操作を想定しています)
最初にシステムコンソールから「統合機能 > Botアカウント」を開いて、Botアカウントの作成を有効にします。

次にMattermostメニューの統合機能からBotアカウントを作成していきます。

統合メニューのBotアカウントを選択

右上のBotアカウント追加ボタンをクリック

Botアカウントの情報を入力

カスタム絵文字の登録にはシステム管理者権限が必要なため「役割」を必ずシステム管理者にしてください。その他は好きなように入力していただいて大丈夫です。
Botが作成できるとAPIアクセスに必要なトークンが発行されますのでコピーしておいてください。

完了するとBotアカウントの一覧に表示されます。

環境変数を設定
Jupyter Lab実行ファイルの環境変数に以下の情報を設定します。
- MattermostのURL
- 絵文字登録を行うユーザーのID
- 絵文字登録を行うユーザーのアクセストークン
- 登録したカスタム絵文字一覧を投稿するチャンネルID

ユーザーIDは作成したBotアカウントのIDを設定します。
確認したところMattermost上ではユーザーIDを確認できなかったためDBの値を直接参照しました。以下で確認できます。
UserAccessTokensテーブル.UserIdカラム
他にも以下のように作成したBotアカウントの情報をもとに Mattermost API からも取得することが出来ます。
# curlコマンド実行
# AuthorizationヘッダのBearerにトークンをセットして、パラメータに配列でユーザー名を渡してください。
$ curl -XPOST -H 'Authorization: Bearer rXXXXXXXXXXXXXXXXXXXXc' -d '["emoji-bot"]' http://your-mattermost-url/api/v4/users/usernames |jq '.[] | .id'
# 取得結果
"1XXXXXXXXXXXXXXXXXXXXXXXXo"
アクセストークンはBotアカウント作成時に発行されたトークンを設定します。
絵文字を投稿するチャンネルIDはMattermostのチャンネル情報を表示すると確認できます。

下部のIDがチャンネルIDになります。

Jupyter Labにカスタム絵文字をアップロード
今回は以下の絵文字を一括で登録します。(ディーメイクで配布している絵文字をアップロードする場合は、zipファイルを解凍したファイルをアップロードしてください)

Jupyter Labの 実行ファイル と同じ階層に絵文字ファイル格納ディレクトリ(emoji)を作成し絵文字ファイルをアップロードします。(ドラッグアンドドロップでアップロードできます)


カスタム絵文字の登録実行
ここまで出来たらJupyter Lab上でプログラムを実行していきます。
https://github.com/msakasai/mm-emoji-bulk-create-on-jupyter/blob/main/mm_emoji.ipynb
登録する絵文字ファイルの一覧取得
Jupyter Labにアップロードしたファイルの一覧を作成し、ファイル名をローマ字変換して辞書リストを作成します。
実行すると以下のようにリストが作成されます。

絵文字をMattermostに登録
作成したリストを使ってMattermostに絵文字を登録します。
実行するとMattermostに登録した絵文字の一覧が以下のように取得できます。

絵文字の名前(name)にはファイル名をローマ字変換したものが登録されています。
ここでは以下のAPIを使っています
登録した絵文字をMattermostのチャンネルに投稿
最後に確認のため登録した絵文字をMattermostに投稿します。
実行するとチャンネルに絵文字一覧が投稿されます。

絵文字登録の失敗について
一括で登録すると中には登録が失敗するものがあります。
例として以下の絵文字を登録してみます。

登録するリストが以下のようになり

登録実行すると以下のエラーが出力されます。

「井.png」の方はローマ字変換した結果がすでに登録済みの名前になってしまいエラーになっています。
「Thumbs_Up.png」の方はメッセージからはわかりませんが、ローマ字変換した名前がシステム絵文字として存在するためエラーになっています。(これですね → 👍)
Mattermost上で「Thumbs_Up.png」を「thumbsup」と言う名前で登録すると以下のエラーが出ます。

このようにエラーになった絵文字についてはMattermost上で名前を変えて個別に登録するなどの対応をしてください。
おわりに
Jupyter Labを使ってMattermostのカスタム絵文字を一括登録する方法について紹介させていだきました。
Jupyter Labの環境を用意して頂く必要がありますが、ステップを踏んで結果を確認しながら実行できるのでわかりやすいかなと思います。
後日Mattermost上だけで登録が完結するようなBotも作成しようと思っています。
Mattermostの導入を検討されていましたら、ディーメイクで導入支援も行っていますのでお気軽にご相談ください。
https://chat.remocla.online/lp/
チャットBotやツールを作るのが好きなエンジニアの募集も行っています。こちらもお気軽にお問い合わせください。
https://www.d-make.co.jp/recruit/