よしたかのぶろぐ

大学院生の戯言

slackbotでポケモンガチャ作った

Why

仕事はslackメインだし学生時代の研究室メンバーと今もslackでやりとりするようになりました.
ていうか卒業したら大学のOBOGのワークスペースに強制収容され,遊び道具にも使うようになったからbot活用していきたくなりました.
そもそも会社で治安の悪いslackスタンプMEGAMOJIが横行していたので,スタンプ作って遊んでいたらポケモンスタンプ見つけてしまいました.
ポケモンは小学生のときにキモオタして以来なので,記憶は金銀あたりで止まっています.
でも最近暑くて虫取り少年スタイルで出勤しているせいか,ポケモンゲットしたくなりました(夏バテ).
詳しい導入方法は以下を参考にしました.
qiita.com

What

適当にポケモンとか投稿するとこうなりたい.

f:id:thenocchinochi08:20180722180717p:plain

slackbotガチャは下のようなワークスペースのカスタマイズ画面で簡単に設定できます.ガチャ結果(おみくじ結果)は「slackbotの返信」に入力します.

f:id:thenocchinochi08:20180722172654p:plain

ワークスペースのカスタマイズ画面

スタンプ名は :pokemon: の形に整形して同様に入力すればいいのですが,ポケモンスタンプは何十個もあって相当だるい...のでPythonで文字列加工しました.

How

きっともっとスタイリッシュなやり方があるでしょうが,仕事の片手間でやった処理を紹介します.
こうしたらよかったやん,はコメントいただけると助かります.

1. スタンプ名の取得

普通にターミナルから ls コマンドでemojiディレクトリの中身みてみた.

➜  github.com git:(master) ✗ ls slack-emoji-pokemon/emojis
abra.png       electrode.png  kingdra.png    parasect.png   sneasel.png
aerodactyl.png elekid.png     kingler.png    persian.png    snorlax.png
aipom.png      entei.png      koffing.png    phanpy.png     snubbull.png
alakazam.png   espeon.png     krabby.png     pichu.png      spearow.png
ampharos.png   exeggcute.png  lanturn.png    pidgeot.png    spinarak.png

......

多分あと10倍くらいこの png ファイルの羅列が続く.
とりあえずこの羅列をコピペして txt ファイルに保存.

2. ファイルを読み出す

保存したスタンプ名ファイルpoke.txtを読み出す.

f = open("poke.txt", "r")
raw =  f.read()
f.close()

3. 文字列の加工

読み出した文字列を加工し,変数pokelist にリストとして格納する.
このときファイル名を要素として取り出し,各要素の.pngが邪魔なので:の文字列で置換する.

pokelist = raw.replace('.png', ':').split()

変数pokelistの中身(一部)はこんな感じ.

['abra:',
 'croconaw:',
 'gastly:',
 'jynx:',
 'meowth:',
 'pikachu:',
 'seel:',
 'togepi:',
 'aerodactyl:',
 'cubone:',
....
 'pidgey:',
 'seaking:',
 'tentacruel:']

4. まだ文字列の加工

ゴールはこのカタチ:pokemon:なので,各要素の先頭の文字列に:と,最後に改行が必要. 新しくリストpokeを用意して格納する. Pythonだと文字列連結が演算子でできる.

poke = []
for i in range(len(pokelist)):
    poke.insert(i,':'+pokelist[i]+'\n')

5. ファイルに書き出す

文字列をそのままテキストファイルからコピペして「slackbotの返信」に貼り付けたい.

f = open('result_poke.txt', 'w')
f.writelines(poke)
f.close()

slackbotに登録

あとはresult_poke.txtというファイルが作成されているはずなのでこんな感じでslackbotに登録する. f:id:thenocchinochi08:20180722180420p:plain

まとめ

これで今後slackスタンプを一括大量追加しても,すぐガチャ作れます.
Pythonでそんなに難しい文字列処理することなくできました.
せっかくなのでPythonでslackbot作ろうと思います.