SlackBotにGIFを検索して流す機能を実装したら治安が崩壊した話
Qiitaご利用の諸君はおそらく社内でのコミュニケーションにSlackを利用していることだろう。
- 特に開発しなくても便利に使える便利なアプリが山程ある
- GitHubやGitLabの更新をメッセージとして流したりIssueなどをその場で発行できる
- Emoji無限(?)に増やせるたのしい!!!
これだけの利点があるのだから今更強烈な事情がない限りChatOps基盤にSlackを導入するのはほぼ必然と言い切ってもいいだろう。
そしてSlackではもっとコアな機能を持ったボットなどを開発する人たち向けにAPIを用意している。
今回はSlackのAPIの一つ、RealTimeMessageAPIを用いて開発していたSlackのBotにとある機能を実装したこと、リリースをした話をしようと思う。
新機能の概要
Botがinviteされているチャンネルで
特定の書式(今回は
put_gif
)+検索文字列
と飛ばすとBotがそれを識別して適当なAPIからGIF画像のリンクを引っ張り、それを投げるというような機能を実装しようという話がチャンネル内で上がった。
丁度卒業研究が終わったところで暇だったので片手間で実装、そのままリリースすることにした。
実装の概略
GIF検索に利用するAPI
今回はtenor APIの提供するAPIを使う。
似たようなAPIにGIPHYがあるが、使ってみるとあまり検索結果がよくなかった(設定が悪かった?)ので移行した。
利用する言語など
アプリケーション全体の実装をRuby(v2.6.5)で行った。
また、RTM APIとの相互通信のためにWebsocketを使うため、faye/websocket
も利用させてもらっている。
デプロイ
個人で持っているEC2インスタンスの中にdocker及びdocker-composeを使って置いた。
GIFを拾ってくる部分の関数に関して
機能のコア部分だけ切り抜いてきた。
これをメソッドとして入れてやればGIFのリンクを返す関数ができる
# frozen-string-literal: true
def gif_get(search_query)
require 'http'
# 環境変数は`docker-compose.yml`経由で`.env`を参照している
tenor_api_key = ENV['TENOR_API_KEY']
response = JSON.parse(HTTP.get('https://api.tenor.com/v1/search',
params: { key: tenor_api_key,
q: search_query,
limit: 50 }))
# 検索結果が0の場合は'SearchCount: 0`とだけ返して、
# それ意外の場合は `Array#sample` でランダム抽出してURLを返す
if response['results'].empty?
'SearchCount: 0'
else
response['results'].sample['media'][0]['gif']['url']
end
end
実際の成果物
ローカルでコンテナを展開しているので少し応答が遅れてしまっているが、本番のEC2上においているコンテナは1秒以内で応答を返してくれるので常用可能な機能になっている。
ここからが本題
で、弊部のワークスペースに入れた結果
なんだよこれ
TAGは関係ねえぞ
THE 世紀末と言わんばかりに遊ばれてしまった。事実今日だけで300くらいはメッセージの送受信があったように思える
この機能を一般的なグループが入れて良いものか
結論から言うと進捗阻害にしかならないのでやめておいたほうがいい(あたりまえ)
今回は非公認のサークル組織であるためにこんなもんがまかり通っているが、汎用性はともかくとして実はこれ以外に 色々モラル的にアレなやつまで出てきてしまった ことがあった。
他の方々などはやるのであればAPIアクセス時のリクエストパラメータに contentfilter
というキー項目があったのでそちらを meddium
なり high
なりに指定してフィルタリングをかけたほうが良い。
逆にSlackにセンシティブなもんが出したい!みたいな人は off
でもいいんじゃないだろうか。覗き見られたら死亡だけど。
最後に
開発しているSlackBotはソースコードをGitHubにて公開しているのでSlackを面白い感じにしたいサークルなどがあれば触っていただければ、と思います
nkc-ug/NKCUG_Slack_Bot
PRや新機能導入のIssueなどは弊部部員以外の方も歓迎します。
ただし導入して進捗が落ちたとかの文句は受けないぞ。
Author And Source
この問題について(SlackBotにGIFを検索して流す機能を実装したら治安が崩壊した話), 我々は、より多くの情報をここで見つけました https://qiita.com/huequica/items/c9e491067b05574d6902著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .