衝動的にボタン買いました。
SlackでWebhookから投稿出来る記事は数多く見ていましたので、
個人的にSlackより使っているDiscordでも同じような感じでいけるんじゃね?という思いつきです。
目指すところ
毎日のようにBattlefield 1をプレイしているので「これを押したら今から出撃しますよ」という意味で、ボタンを押したらDiscordに投稿するというbotにします。
準備
- Amazon Dash Button(人気ボタンは入荷待ちのため消臭力 Dash Buttonにしました)
- Raspberry Pi Model B
- Discord
- Node.js
- Wifi環境
ボタンのセットアップ
Dash Buttonのセットアップについては、他記事が詳しいので省略します。
下記を参考にしました。
- http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4
- http://qiita.com/momochan/items/d8dc0b95cfaee216ace4
DiscordのWebhook利用設定
Discordを起動し、左ナビのメッセージを投稿したいchannelの設定ボタン(歯車の画像)をクリックすると、設定画面に入ります。
一番下のWebhookを選択し、Webhookを作成ボタンをクリックすると作成できます。名前(これが投稿名になる)をつけてさらにアバターを変えたければ設定。
WebhookURLが表示されているはずなので、これをコピー。後ほど使います。
https://discordapp.com/api/webhooks/{webhook.id}/{webhook.token}
所属しているサーバーの管理権限があればいいのですが、なければ管理者に権限もらってください。
Raspberry Pi側の下準備
Radikoサーバーにしてはいるものの、
そういえばgitだのnodeだの入れてなかったのを思い出したので下準備です。
Raspberry Pi にgitをインストール
いつもの
$ sudo apt-get update
$ sudo apt-get install git
$ git --version
nvm経由でNode.jsを入れる
既に入れてあった古いバージョンを一旦削除
$ sudo apt-get purge nodejs
インストール用ディレクトリを追加
$ sudo mkdir /usr/local/nvm
$ sudo chmod 777 /usr/local/nvm
nvmリポジトリのclone
$ git clone https://github.com/creationix/nvm.git /usr/local/nvm
nvmを使えるように読み込む
$ source /usr/local/nvm/nvm.sh
ようやくnodeインストール
LTSの最新を利用します
$ nvm ls-remote //nodeのバージョン一覧
$ nvm install v6.9.2 //現時点でのv6系LTS
動作確認
$ node -v
$ npm -v
dasherのインストール
dasherが良さげだったのでこちら使います。
$ git clone https://github.com/maddox/dasher.git
$ cd dasher
$ npm install
うまくいかない。
socketwatcherがrebuildできなかったのでnodeのバージョンが高すぎた疑惑。あえて古いの入れてみます。
nvm install 0.10.48
入ったのを確認。
$ node -v
v0.10.48
ボタンのMACアドレスを確認
$ script/find_button
Dash Button ポチー
Watching for arp & udp requests on your local network, please try to press your dash now
Dash buttons should appear as manufactured by 'Amazon Technologies Inc.'
Possible dash hardware address detected: xx:xx:xx:xx:xx Manufacturer: unknown Protocol: udp
Possible dash hardware address detected: xx:xx:xx:xx:xx Manufacturer: unknown Protocol: arp
Possible dash hardware address detected: xx:xx:xx:xx:xx Manufacturer: BUFFALO.INC Protocol: arp
Possible dash hardware address detected: xx:xx:xx:xx:xx Manufacturer: Apple Protocol: arp
Manufacturer: unknownのMACアドレスがそれです。
ということで、config/config.json
に記載。
$ vi config/config.json
記載例はこちら
{"buttons":[
{
"name": "BFbot", //区別用の名前
"address": "xx:xx:xx:xx:xx",
"url": "https://discordapp.com/api/webhooks/{webhook.id}/{webhook.token}", // DiscordのWebhook 書式は公式ドキュメント参照
"method": "POST",
"formData": {
"username": "BFbot", //Bot名
"content": "ここに投稿内容をご自由に"
}
} //ここまでのセットをカンマ区切りで複数記載可能
]}
今回、DiscordのWebhookを利用するにあたり、formからのpostを送らないと受け取ってもらえなかったので、formDataの形式にしました。
複数記載可能ということは、httpリクエストを飛ばす先も変えてその書式に合わせればいいだけなので、ひとつの設定ファイルだけでSlackとか別のサービスへの設定を自由に追加できます。
つまりボタン増やせるということです。これがdasherにした理由でもあります。
起動
起動してボタンの押下を監視します。
$ sudo npm run start
> dasher@1.1.1 start /home/pi/dasher
> node app.js
[2016-12-21T14:43:33.082Z] BFbot added.
[2016-12-21T14:43:44.806Z] BFbot pressed.
実際の動作
ヤッターBattlefield Dash Buttonできた pic.twitter.com/fEzvbKUmLu
— komacchi (@komacchi) 2016年12月21日
ちなみに、ショーシューリキButtonだと味気ないなと思っていたところ、神が、いやむしろGodが降臨されたので、まずは出力して切り抜いて仮止めしてみました。
プリンタの具合と出力紙の都合でアレなことになってますが、あらためて光沢紙に出力して切り抜いて貼り付けるつもりです。
これで「Battlefield Dash Button」の爆誕ですヤッター
ただのボタンかもしれませんが、少し見方を変えれば、家庭内で役立つことにも使えそうで夢膨らみますね。
例えば子供が帰って来たときに「このボタン1回押してね」ということにしておけば通知がSlackなりDiscordなりに飛んでくるので、仕事中でも安否確認に役立ちます。
さあボタン増やすぞ!