読者です 読者をやめる 読者になる 読者になる

THE えのき

えのきです。

Slackに突然の死っぽいアレを投稿するスペシャルなコマンドをSlash CommandとLambdaを使って作った話

おはこんばんちは!健康診断で尿酸値過去最高記録(9.5)を叩き出しました!
k_enokiです!

この記事はCyberAgent Developers Advent Calendar 2016の13日目の記事です。

12日目はkuro_m88さんのゲームのユーザに合わせた広告画像を動的に生成して配信する仕組み | Tech Blogです。
(現状は記事が公開されていないようです。13日19時現在)

突然の死とは

インターネッツに生息している皆様は、突然の死というのを見たことがあると思います。 こういう吹き出し風なAAのことです。

_人人 人人_
> 突然の死 <
 ̄Y^Y^Y^Y ̄

一応複数のAAを使ったストーリーの最後に出てくるAAですが、汎用性が高いので吹き出しだけ使われていることを見たことがあると思います。
先日、インフラチームで検証開発合宿を行ったのですが、

詳しくは以下を参照してください。

突然の死とは (トツゼンノシとは) [単語記事] - ニコニコ大百科

Webアプリ版のジェネレータもあります。

突然の死ジェネレータ 突然の死ジェネレーター(吹き出し文字作成)

構成

あとで絵を書きます…すいません…

Slash Commands

API Gateway + Lambda(Python2.7)

incoming Webhooks

設定

あとで書きます…すいません…

lambdaのblueprintにslack-echo-command-pythonというのがあるのでコレを使っています。 (コードのコメントに設定方法が書いてあります。)
f:id:k_enoki:20161213195023p:plain

Slash Commandsはデフォルトだと自分にしか結果が見えないので、Incoming Webhooksを叩くことにしました。

なぜincoming Webhooksを使うのか

Slash Commandsでもレスポンスに
"response_type": "in_channel" を設定すれば他の人でも結果を見ることが出来るのですが、いきなり突然の死が現れたほうが面白いと思い、in_channelは使わないことにしました。 以下の画像のように

f:id:k_enoki:20161213200707p:plain Slash Commands | Slack

使ってみる

f:id:k_enoki:20161213194443p:plain

SlackのPublic Channelで、おもむろに/totsuzenと入力します。
Slash Commandなのでタブで補完が効くのがいいですね。

f:id:k_enoki:20161213195157p:plain

posted.と書かれた発言は自分にしか見えません。

いたずらに叩かれすぎても困るので、名前を出すようにしているのですが、

f:id:k_enoki:20161213195222p:plain

/totsuzen ninja 突然の死

このようにサブコマンド ninjaを付けることで名前を隠すことも出来ます。(ログには出力してます)
これで場面に合わせて使い分けることが出来ますね!

f:id:k_enoki:20161213195351p:plain

無駄に使いすぎるとこういう事も言われてしまうので、注意してください。

突然の死ジェネレータのコード

遊びながら改修中です。

 ̄Y^Y^Y^Y^Y^Y ̄

この部分はまだ調整中なので大きくずれることがあります。

SlackのIncoming WebhooksのURLはkmsに設定してください。

制約

  • Public Channelでしか使えません。
    • Slash CommandのHookで渡されるChannnel名がPrivate Channelだと'privategroup'になるため。
  • Private Channelの場合はメッセージを表示するようにしてあります。