LINE BOTとlotで、いつでもレベルアップできるようになった！ 


##はじめに
アニメ・ゲーム・漫画を愛するタレント、喜屋武ちあきです。

2019年7月から１６年間いた事務所から独立し、フリーランスとして活動しはじめました。
色々新しいことに自由に挑戦できる環境の中、もともとオタクとして興味があったプログラミングにもチャレンジしています。


今月からnodeでjavasqriptを始めたばかりの全くの素人で、まだ学校で言われたことをそのままトレースしている段階ですが、少しずつコードを読めるようになりたいです。




##obnizをゲット

「obniz」という、IOTの基盤があります。この基盤をインターネットとつなげると、それだけでnodeから色々な指示を送ることができて、すごく面白いんです！！！

LEDライトやスピーカー、超音波センサーなど色々差し込んで遊ぶ中で、私が一番気になったのは音の出る「スピーカー」でした。




##正直、まだ、プログラミングは「辛い」
これ、**動機**の話なんですが。
本当にまだ何も分からない中で色々なことにチャレンジしていますが、意味不明のエラーは出るし、新品のLEDなのに光らないし(これはモノの問題かもですが)、なかなか心をへし折られることばかり。

でも、ちょっとずつ成長していることを、誰かに認めてもらいたいし、成長しているということをもっと感じたい！！！

そう思ったので、LINEbotとobnizをつなげて、**頑張りを認めてレベルアップさせてくれるbot**を作ることにしました。



私の目的とするbotは

「今日は、朝５時起きでお仕事に行って頑張ったよ！」
など、”頑張った”という文字に反応して
「よく頑張ったね！勇者きゃんちはレベルが１上がりました。」
と褒めて、さらに某国民的RPGのレベルアップ音を鳴らしてくれるbotです。



でっきるっかな、でっきるっかな♪



##開発環境と用意したもの
**環境**
node.js　v11.10.0
mac os 10.15
Visual Studio Code v1.39.1

**用意**
Obniz ボード
圧電スピーカー（圧電サウンダ）（１３ｍｍ）ＰＫＭ１３ＥＰＹＨ４０００－Ａ０
USB2.0ケーブル(A-microBタイプ)50cm



##じゃ、やってみようか##


**参考にした記事**

[「1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest」]
(https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d)

[「老眼と加齢性難聴のチェックができるLINE Bot×Iotの作成」]
(https://qiita.com/doikatsuyuki/items/fb14483b69a3d3202bed)

[「超初心者がLineBot×Obnizでスピーカから音を出してみた。」](https://qiita.com/marumaruchan/items/85394968aff480174c78)





まず、一番上の記事を参考に、LINE BOTの設定を行います。
何回か同じことを繰り返しているうちに、LINE BOT自体作るのは慣れが出てスムーズに行くようになりました。個人的にはこれがすでに**奇跡**。

続いて、２番目の記事を参考に、Aコードを埋め込み、スピーカーとLINEbotを繋ぎます。



シンプルに、「頑張った」というワードに文字と音を同時に送るということがしたかったので、３番目の記事からコードをお借りして、文字を変更。

さらに、**一番時間をかけた**、レベルアップ音の指定を入力します。


以下、functionからのコードです。
頑張ったレベルアップ音の指定を！！！見て！！！




```
function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }

  var hz = Number(event.message.text);
  speaker.play(1396);　//　ファ
  obniz.wait(130); 
  speaker.play(0); // 休符
  obniz.wait(10);
  speaker.play(1396);//　ファ
  obniz.wait(130);
  speaker.play(0); // 休符
  obniz.wait(10);
  speaker.play(1396);// ファ
  obniz.wait(130);
  speaker.play(0); // 休符
  obniz.wait(10);
  speaker.play(1396); // ファ
  obniz.wait(130);
  speaker.play(0); // 休符
  obniz.wait(70);
  speaker.play(1244);// ミ
  obniz.wait(210);
  speaker.play(0); // 休符
  obniz.wait(50);
  speaker.play(1567);// ソ
  obniz.wait(200);
  speaker.play(50); // 休符
  obniz.wait(30);
  speaker.play(1396); // ファ
  obniz.wait(1000);
  speaker.stop();
  let replyText = '';
  if(event.message.text === '頑張った'){
    replyText = 'よく頑張ったね！勇者きゃんちはレベルが１上がりました。';
  }else{
    replyText = hz;
  }


  return client.replyMessage(event.replyToken, {
    type: 'text',
    text: replyText
  });
}
```

音階はともかく、スタッカート機能なんてついているのかわからないので、音の長さと休符(音のならない0ヘルツ)の設定だけでレベルアップ音を作りました。



そして、早速Webhookを使ってトンネリング。
LINEbotに話しかけたところ・・・

![S__64856132.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512686/8dbad0c1-2935-1535-a1fe-09b60c2c0d59.jpeg)



不思議なことに、どんな言葉にも、レベルアップ音で返すようになりました。


そして、シンプルに"頑張った"と打つと、

「よく頑張ったね！勇者きゃんちはレベルが１上がりました。」
と褒めてくれるようになりました。

![IMG_0498.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512686/99a9ac3f-d5a3-98d9-ce7e-028db31ca5fd.jpeg)
画像、おっきいな・・・；



ま、何を打ってもレベルが上がる音がするなら、それはそれでいっか！！！と思います。
この後、「頑張った」というワードが言葉のどこかに入っていれば自動で返信できるようにと頑張ったのですがうまくいかず、何を送っても返信もなく、レベルアップ音が虚しく鳴り響くという形になってしまったので、元に戻しました。




[レベルアップ音の動画をUPしました！こちらからどうぞ。](https://youtu.be/Y7M2Hm4lqsE)



##まとめ##
電脳の世界のみで完結するというのがまだわかりづらく、こうしてIOTとして繋げてみると、工作感が出てきてわかりやすく楽しいと感じました。


スピーカーから発せられるレベルアップ音もゲームっぽくて可愛いーーと思いましたが、元祖１ってすでに単音じゃないので、３０年も後なのに・・・！？！？と思うとエモいです。