はじめに
Slack の Workspace は気軽に作成できる反面、個人用、家族用、....等様々存在する誤家庭も少なくないと思います。
それぞれの設定はもちろん大変ですが、今回挙げる emoji が特に面倒です。
Import は Google Chrome の拡張に任せればすぐ終わりますが、 export はそうも行きません。
また過去書かれた記事は、仕様変更等で動かなくなってしまったものも多く、記事にまとめることにしました。
Slack emoji を export する
今回実施する内容は以下です
- 準備
- Slack app 作成
- Node.js の実行環境用意
- 実行
準備
Slack app を作成する
今回 emoji 情報の取得のみ行うことができる Slack app を作成します。
必要は権限は emoji:read
のみです。
面倒な方は ⇩ JSON をコピーして Slack app を作成してください
{
"display_information": {
"name": "Emoji export"
},
"features": {
"bot_user": {
"display_name": "Emoji export",
"always_online": false
}
},
"oauth_config": {
"scopes": {
"bot": ["emoji:read"]
}
},
"settings": {
"org_deploy_enabled": false,
"socket_mode_enabled": false,
"token_rotation_enabled": false
}
}
後のステップで API_TOKEN
を利用します。
Token を発行し安全な場所に控えておいてください。
Node.js の実行環境用意
今回は Node.js で export する定義を書きました。
実行環境に Node.js を install している、 yarn の実行も可能である前提で記載します。設定が終わってない方は設定してください。
cd path/to/emoji-export && cd path/to/emoji-expor
npm init -y
今回依存する npm package を install します。
yarn add image-downloader dotenv @slack/web-api
.evn
ファイルに先ほど作成した Slack app の API_TOKEN を記載します
API_TOKEN=xoxb-xxxx-xxxx-xxxx
index.js
に Slack emoji を export するコード記載します。
今回は path/to/emoji-expor/images
以下に emoji ファイルを書き出します。また、 alias として登録されている emoji は無視しています。
"use strict"
require("dotenv").config()
const { WebClient } = require("@slack/web-api")
const download = require("image-downloader")
const apiToken = process.env.API_TOKEN
const web = new WebClient(apiToken)
web.emoji.list().then((res) => {
// Response sample
//
// {
// ok: true,
// emoji: {
// sample: 'https://emoji.slack-edge.com/xxx/sample/f3ec6f2bb0.png',
// 'サンプル': 'alias:sample',
// sample2: 'https://emoji.slack-edge.com/xxx/sample 2/6535867372d3b644.png'
// },
// cache_ts: '1668865194.021600',
// response_metadata: { scopes: [ 'emoji:read' ], acceptedScopes: [ 'emoji:read' ] }
//}
Object.keys(res.emoji).forEach((key) => {
const fileUrl = res.emoji[key]
if (fileUrl.startsWith("alias:")) {
return
}
const fileName = key + fileUrl.match(/\.(\w+)$/)[0]
download.image({
url: fileUrl,
dest: `${process.cwd()}/images/${fileName}`,
extractFilename: false,
})
})
})
実行
それでは作成した Script を実行します。
yarn node index.js
images directory 以下に emoji が保存されていれば成功です。