Slack のカスタム絵文字を一括でダウンロードする Ruby のスクリプト書いた
いくつかのワークスペースを行き来してると「あの絵文字とかもろもろ引っ越ししたいんだよなあ…」と思うことあると思います。いや知らんけど。
そこで、Slack のカスタム絵文字を一括でダウンロードするコード書いてみみました。これを実行すると実行したディレクトリに /emoji が作られ、そこに絵文字の画像が全部入ります。
こんな感じのコード
# frozen_string_literal: true
require 'json'
require 'down'
SLACK_OAUTH_TOKEN = '<your OAuth Access Token here>'
SLACK_ENDPOINT = 'slack.com/api'
SLACK_METHOD_EMOJI_READ = 'emoji.list'
uri = URI("https://#{SLACK_ENDPOINT}/#{SLACK_METHOD_EMOJI_READ}?token=#{SLACK_OAUTH_TOKEN}")
req = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(req)
end
result = JSON.parse(res.body)
raise('Failed to get emoji lists.') unless result['ok']
emoji_urls = result['emoji'].reject { |_, v| v.match?(/\Aalias:.+\z/) }
FileUtils.mkdir('./emoji') unless system('find ./emoji')
emoji_urls.each do |k, v|
tmpfile = Down.download(v)
extension = tmpfile.original_filename.match(/[^.]+\.(.+)\z/)[1]
FileUtils.mv(tmpfile.path, "./emoji/#{k}.#{extension}")
end
必要なものは以下の通りです。
- emoji:read の Permission を持つ適当な Slack App の OAuth Access Token
- down っていう 安全にファイルをダウンロードする gem
ホントは Slack App の Slash command とかでどっか適当なエンドポイント叩いたら Serverless Function 的なのが動いてダウンロードしたファイル群を zip で Slack の適当なチャンネルに投下する、みたいなことしたかったんですけど、 OAuth Access Token がワークスペースごとかつ Slack App ごとに発行されるヤツなので、どのワークスペースでも汎用的に使えるってわけじゃなさそうなんですよね…。
絵文字を一括アップロードする
ちなみに絵文字を一括でアップロードしたい場合は、こちらの Chrome 拡張機能がおすすめです。アップロードするとファイル名が絵文字の名前になります。
↑↑ドラッグアンドドロップで画像を突っ込んでいけます。