運用しているSlack (競技プログラミングSlack) に海外の方が入ってきたので、翻訳botを足してみた。
国旗のリアクションで、スレッドに翻訳してくれる。
いくつかの記事を読んでみたところ、何点か変えたいところがあったので自作してみた。
- botに聞く形ではなく、国旗のリアクションで翻訳してほしい
- スレッドに返信してほしい
- できれば無料で
ということで以下の流れで作成した。
- Google Apps Script(GAS)を新規作成
- GASのPublish -> Deploy as web appで、GASを外部から叩けるようにする
- リアクションを取るためにSlack Appを作る
- Event Subscriptionsに
reaction_added
を追加し、Request URLにGASのURLを入力して保存する - OAuth & Permissionsで
reactions:read
chat:write:bot
channels:history
を追加する - Slackアプリを自分のワークスペースにインストールする
無料で翻訳するために、GASの LanguageApp
を使った。
ということで、できたGASはこれ
https://github.com/firewood/test/blob/master/compprog-translator.js
どうやらreaction_addedは複数回呼ばれることがあるようなので、 conversations.replies
でスレッドの内容を取得して、同じ国旗の翻訳がすでにあるかどうかチェックして、なかったら投稿するようにしてみた。(ただし10件しか確認していないので、すでにスレッドに10件以上投稿されているとそのまま足されてしまう)
会社のSlackに同様のbotがあるのだが、たぶん普通に有料のGoogle Translate APIを使っていると思われるので、実装は見なかった。(会社のものはスレッドの文章が翻訳できるなど、もう少し機能が充実している)
GASを使うのが初めてだったので、バージョンを上げてdeployしないと更新されないことにはまった。
参考にした資料