Slackの絵文字を全部消したい!
create: 2019-12-21
JavaScript Slack

Slackに絵文字を大量に登録したのはいいんだけど、エイリアスが気にいらない。
全部なおすのはめんどくさいので、一括削除して登録し直したかった。

Slack には一括削除ボタンがない

こういうところ気が利かないようなぁ・・・とか勝手に思いつつ、なければ作ればいいじゃない?

Chrome のコンソールから JavaScript を実行させる

Chrome のコンソールから、JavaScript で削除ボタンと確認ボタンを押しまくるスクリプトを作成。
無事削除出来ました。

削除スクリプトの例

これ流すと絵文字全部消えちゃうからね!

https://sub-domain.slack.com/customize/emoji (sub-domain は自分の環境による)にアクセスして、下記スクリプトを開発者ツールにコピペ & Enter!!

// https://sub-domain.slack.com/customize/emoji
!(function() {
  // 300ms待つ関数
  function sleep() {
    return new Promise((resolve) => {
      setTimeout(resolve, 300)
    })
  }

  // 削除ボタンを探して、あるうちは押しまくる
  async function allRemove() {
    let button = document.querySelector('button.c-button-unstyled')
    while (button) {
      button.click()
      await sleep()
      document
        .querySelector(
          'button[data-qa=customize_emoji_single_delete_dialog_go]'
        )
        .click()
      await sleep()
      button = document.querySelector('button.c-button-unstyled')
    }
  }

  // 削除実行
  allRemove()
})()

ちなみに一括登録は

emojipacksslack-emoji-importerが有名だけど、どっちもコケて動かなかった。悲しい。

入れたかったのはポケモン絵文字、全 152 種。
https://github.com/Templarian/slack-emoji-pokemon
で公開されています。

yaml があっても slack に取り込めない

yamlで名前とイメージファイルのリンクが列挙されているのですが、このままではslackに取り込めません。

そこで curl でいったん全部の画像をダウンロードします。
yamlからJavaScriptオブジェクトに変換して、console.logから curl コマンドを吐き出しまくります。

const pokemons = [
  { name: 'フシギダネ', src: 'http://i.imgur.com/J9ynKU9.png' },
  { name: 'フシギソウ', src: 'http://i.imgur.com/2BmEJY1.png' },
  { name: 'フシギバナ', src: 'http://i.imgur.com/HyvH3iG.png' },
  { name: 'ヒトカゲ', src: 'http://i.imgur.com/jee6nD3.png' }
  // --- 以下略 ---
]

// curlコマンドにする
const results = []
for (const p of pokemons) {
  results.push(`curl -s ${p.src} > p-${p.name}.png`)
}

console.log(results.join('\n'))

ファイル名に p- のプレフィックスを付けています。
ファイル名がそのまま絵文字に対応するので、:p-フシギダネ: で呼び出せるようになります。

ログに吐かれたコマンドをコピーして、WSL で実行。
152 個の png ファイルがダウンロードされます。

Chrome 拡張を使ってアップロード

Neutral Face Emoji Tools という Chrome のアドオンツールでアップロードしました。

絵文字ファイルが 1 つもないと D&D アップロード用の領域が表示されません。
なんでもいいので、ひとつは画像ファイルをアップロードしておきましょう。
あとで消せばいいです。

ただ、一気にアップロードすると Web サーバの時間あたりアクセス制限に引っかかるため 152 個を一括で、というわけにはいきません。

20 ファイルくらいずつアップロードしてはリロード・・・を 8 回繰り返しました。

ふう。
やたらと時間がかかりましたが、ポケモン絵文字をアップロードできました。

チームにはまだ自分しかいないことは、この際すみに置いておきます。