2019-12-21

Slackの絵文字を全部消したい!

JavaScript
Slack

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

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

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

ブラウザ のコンソールから JavaScript を実行させる

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

削除スクリプトの例

下記がその削除スクリプト。
これ流すと絵文字全部消えちゃうからね!

https://[team].slack.com/customize/emoji ([team] は自分のチーム名)にアクセスして、下記スクリプトを開発者ツールにコピペ & Enter!!

// https://[team].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 回繰り返しました。

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

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


猫派 / 基本インドア / ガジェット大好き / RDP推進派
コロナ禍の趣味はPC+VRでゲーム。
最近のゲーム:Factorio / BeatSaber / にゃんこ大戦争

→ Policy