割り勘してくれるlinebot

#今回の目次
・使用技術
・作ろうとしたきっかけ
・開発手順

##使用技術
[GAS(Google App Script)](https://developers.google.com/apps-script?hl=ja)で開発した
![3FEEFC5F-ED98-4A7B-BF30-38D9033DCBF4_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/75c29672-f6f5-b4b0-ede3-79857828876c.jpeg)

選んだ理由としては、環境構築やサーバーを用意する必要がないし、手軽に開発をできるから！

#きっかけ
きっかけは、友人と遊んでいて、割り勘できるようなbotあればほしいと言われて、１日で実装！

#成果物
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">これから新歓とかあるしこれ使えば簡単に割り勘できるし、いちいち口で何円とか言わなくてもLINEだからテキストを送ればいいだけで済むから便利や！ <a href="https://t.co/0fpnV4dkcu">pic.twitter.com/0fpnV4dkcu</a></p>&mdash; キンジョウ (@kinjoshotaro616) <a href="https://twitter.com/kinjoshotaro616/status/1376347257595777025?ref_src=twsrc%5Etfw">March 29, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#開発手順
まずは、[LINEDeveloperConsole](https://developers.line.biz/)でbotを作っていきます！
つくったbotからアクセストークンなどを取得してきます
今回はそこの部分は省きます！
もし、わからない場合は[こちらへ](https://qiita.com/inoue2002/items/dcf40d5ebfe2454796fa)


次に、[GoogleDrive](https://drive.google.com/)にいきます。
![CE02128F-3AD2-4C6C-833E-A8BE16BB61BF_4_5005_c.jpeg]
(https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/21013db7-a7cb-45d5-e380-e89a316838d9.jpeg)

新規をクリック

![A34CE81C-DCCA-4666-A87B-ACA55428297A_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/1d3aa40c-d171-d226-24b4-876d66e24af2.jpeg)

スプレッドシートをクリック

![6D341378-7F79-411D-B1BE-7BD1BE6774D2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/42e88760-2678-23b8-57b9-eef2c7e31ae0.jpeg)

ツールをクリック

![051C6FDA-A9BC-418A-8EEE-EDEB2EF70897_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/b3ef44a7-f84c-1f51-a2d7-1e4f0d10a41c.jpeg)

スクリプトエディタをクリック

![E415E4D6-8E7C-4E5A-B93F-D8B7D5BF0EEE.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/aa1fd1f4-9795-5565-c79b-c35268ce5001.jpeg)

ここのコードを全部削除して、下のコードを貼る

```index.js
const ACCESS_TOKEN = "アクセストークンを入れる";
function doPost(e) {
  if (typeof e === "undefined") {
    return;
  }
  else {
    const sheet = SpreadsheetApp.getActiveSheet();
    const json = JSON.parse(e.postData.contents);
    const user_text = json.events[0].message.text;
    //これのせいで↓、スプレッドシートのセル（A列とB列とC列）に値が最低２列ないとスプレッドシートがバグる！
    const ArowCell = sheet.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
    const BrowCell = sheet.getRange(1, 2).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
    if (user_text === "割り勘する") {
      const reply_token = json.events[0].replyToken;
      let options = JSON.stringify({
        "replyToken": reply_token,
        'messages': [{
          "type": "text",
          "text": "金額を入力してください！"
        }],
      })
      const header = {
        "Content-Type": "application/json; charset=UTF-8",
        "Authorization": "Bearer " + ACCESS_TOKEN,
      }
      const option = {
        "method": "post",
        "headers": header,
        "payload": options,
      }
      UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", option)
    }
    else if (user_text === "使い方") {
      const reply_token = json.events[0].replyToken;
      const options = JSON.stringify({
        "replyToken": reply_token,
        'messages': [{
          "type": "text",
          "text": `使い方は`+"\n"+
          `・スマホの方は、下の割り勘を始めるを押してね！`+"\n"+
          `・PC, タブレットの方は、`+"\n"+`いきなり金額、人数の順番で入力してね`+"\n"+
          `・半角で入力してね！`+"\n"+
          `・単位はなし！`
    }],
  })
  const header = {
    "Content-Type": "application/json; charset=UTF-8",
    "Authorization": "Bearer " + ACCESS_TOKEN,
  }
  const option = {
    "method": "post",
    "headers": header,
    "payload": options,
  }
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", option)
}
    else if (ArowCell > BrowCell) {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  sheet.getRange(lastRow, 2).setValue(user_text);
  let price, people;
  price = sheet.getRange(lastRow, 1).getValue();
  people = sheet.getRange(lastRow, 2).getValue();
  sheet.getRange(lastRow, 3).setValue(price / people);
  const person = sheet.getRange(lastRow, 3).getValue();
  const money = Math.ceil((person * 100) / 100)
  const reply_token = json.events[0].replyToken;
  let options = JSON.stringify({
    "replyToken": reply_token,
    'messages': [{
      "type": "text",
      "text": "一人当たりは" + money + "円です"
    }],
  })
  const header = {
    "Content-Type": "application/json; charset=UTF-8",
    "Authorization": "Bearer " + ACCESS_TOKEN,
  }
  const option = {
    "method": "post",
    "headers": header,
    "payload": options,
  }
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", option)
}
else {
  const user_text = json.events[0].message.text;
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  sheet.getRange(lastRow + 1, 1).setValue(user_text);
  const reply_token = json.events[0].replyToken;
  let options = JSON.stringify({
    "replyToken": reply_token,
    'messages': [{
      "type": "text",
      "text": "人数を入力してください"
    }],
  })
  const header = {
    "Content-Type": "application/json; charset=UTF-8",
    "Authorization": "Bearer " + ACCESS_TOKEN,
  }
  const option = {
    "method": "post",
    "headers": header,
    "payload": options,
  }
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", option)
}
    }
  }

```

####コメントアウトのところを詳しく
![A1C65E40-119F-4B82-A5DE-DFF64223F0B9_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/16fd5e26-e8d4-4a98-42fb-f69d9ed02342.jpeg)

こんな感じに好きな数字を埋めておく必要がある！
（誰かいいコードがあればおしえてください、、）

あとは、デプロイするだけ
やり方は
![59BA09D4-100B-447F-AEBC-FD5F8FCCA98B_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/22f71a2f-72b0-6f04-2067-2dd5f77307b4.jpeg)

デプロイをクリック

![8B4454F8-6B1E-48FA-B6B1-C3BC39283F77_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/565743cf-cf00-5e69-206d-792de87fb42d.jpeg)

新しいデプロイをクリック

![C053EFF8-572C-462E-8ADD-39664D3526F9_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/7c87e0f4-b69b-f12e-0264-e71805ea23c0.jpeg)

初めての場合は、ネジのところをクリックして、ウェブアプリをクリックしてください

![30B6BC70-13A4-422B-A7BB-B4B0139412BC_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/763535/cbd64a30-547b-692b-a502-09f568c35d9d.jpeg)

上の説明文は、空白で大丈夫です
一つ注意点は、アクセスできるユーザーを全員しておくことです！
そして、デプロイをクリック

最後に、発行されたURLをwebhookにはる！

完成！お疲れ様でした！