みなさんこんにちは、ひがしです。

さて、こんな経験はありませんか?

「Slackでメンションを飛ばしたのにリアクションがつかない!」
「こいつTwitterにはいるのにSlackみない!」

そんな皆様のお悩みズバッと解決!ということで今回はSlackのメンションに対してリアクションを付けない人にTwitterでメンションを飛ばして優勝していきます。

お詫び

Slackのtokenを使用するため、現状私が所属する部活の人間しか使えません。
良い解決案が思いつき次第、誰でも使えるように改造していきたいと思っています。

作っていく

使用環境、言語

今回使用する環境と言語はこちらです

どんな感じで動かしていくか

まずはGoを使ってサーバーを立てます。
そしてブラウザからデータ(メッセージ内容やらメンション対象者やら)をサーバーに投げ、サーバーがそのデータをfirestoreに保存。
Cloud Shcedulerを使って定期的にサーバーがデータを読み、リアクションをつけていない人に対してTwitterでメンションを飛ばします。

簡単

出来たものがこちらになります

higashi000/arc-front
higashi000/arc-back

フロント側はかなり適当に仕上げましたが、サーバー側は時間がかかりました。
中身の解説に関してはそのうちします。

使い方

次に使い方を説明します。

既にできてるやつを使う場合

メッセージの登録画面にアクセスすると以下のようなページが出ます。

パスワードの部分には管理者が決めたパスワードを
チャンネル名には送信したいチャンネルの名前を
テキストのところには送信したいテキストを
ユーザーデータの追加をクリックするとユーザーのSlackのリアルネーム(下画像の黒丸部分)とTwitter IDを登録できます。追加したい人の数だけクリックして登録してください。

追加を押すと出てくるやつ

必要事項を入力し終えたら送信をクリックします。
成功しても失敗しても何も表示されないのでメッセージが送信されてたら成功、されてなかったら失敗と思ってください。
そのうちここらへんの機能を作ります。

1から立てる場合

1 GCPのプロジェクトを作る

こいつはGCPのプロジェクトを作らないと始まりません。
GCPでプロジェクトを作ってください。

2 firestoreのコレクションを追加

firestoreのコレクションに messages というコレクションを追加してください。

3 GAEにdeploy

deployしましょうdeploy。
higashi000/arc-backをローカルにクローンしてきて、以下のようなapp.yamlを追加します。

runtime: go112

env_variables:
  SLACK_TOKEN: "YOUR_SLACK_TOKEN"
  CONSUMER_KEY: "YOUR_TWITTER_CONSUMER_KEY"
  CONSUMER_SECRET: "YOUR_TWITTER_CONSUMER_SECRET"
  ACCESS_TOKEN: "YOUR_TWITTER_ACCESS_TOKEN"
  ACCESS_TOKEN_SECRET: "YOUR_TWITTER_ACCESS_TOKEN_SECRET"
  PASS: "YOUR PASS"
  UPDATE_TIME: "YOUR UPDATE TIME"

slack tokenからaccess token secretまでは皆さんのslackのtokenとtwitterのtokenを貼り付けてください。

PASSは外部の人間がメッセージの登録をできないようにするためのものです。いい感じのパスワードを決めてください。
なお筆者にはセキュリティ関係の知識が無いため、突破する方法が普通にあると思います。そこら編の責任は負えないのであくまで自己責任でお願いします。というか認証系のいい方法を教えてください。

4 frontをホストする

いい感じにhigashi000/arc-frontをホストしてください。

5 Cloud Schedulerに登録する

cloud schedulerに自分がどのくらいの周期でリアクションをチェックしたいかを設定します。

6 使う

いい感じに使ってください

感想

はじめて一人でGCPを使ってものを作ってみましたが、GCPの素晴らしさに終始圧倒されていました。
外部の人に利用されるという点に関してはTwitterIDと
せっかく作りましたし、部内でしっかり活用していきたいと思っています。

カテゴリー: Go言語ICT委員会

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です