LoginSignup
16

More than 1 year has passed since last update.

posted at

updated at

Organization

割り勘してくれるlinebot

今回の目次

・使用技術
・作ろうとしたきっかけ
・開発手順

使用技術

GAS(Google App Script)で開発した
3FEEFC5F-ED98-4A7B-BF30-38D9033DCBF4_4_5005_c.jpeg

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

きっかけ

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

成果物

開発手順

まずは、LINEDeveloperConsoleでbotを作っていきます!
つくったbotからアクセストークンなどを取得してきます
今回はそこの部分は省きます!
もし、わからない場合はこちらへ

次に、GoogleDriveにいきます。
CE02128F-3AD2-4C6C-833E-A8BE16BB61BF_4_5005_c.jpeg

新規をクリック

A34CE81C-DCCA-4666-A87B-ACA55428297A_4_5005_c.jpeg

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

6D341378-7F79-411D-B1BE-7BD1BE6774D2.jpeg

ツールをクリック

051C6FDA-A9BC-418A-8EEE-EDEB2EF70897_4_5005_c.jpeg

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

E415E4D6-8E7C-4E5A-B93F-D8B7D5BF0EEE.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列)に値が最低2列ないとスプレッドシートがバグる!
    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

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

あとは、デプロイするだけ
やり方は
59BA09D4-100B-447F-AEBC-FD5F8FCCA98B_4_5005_c.jpeg

デプロイをクリック

8B4454F8-6B1E-48FA-B6B1-C3BC39283F77_4_5005_c.jpeg

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

C053EFF8-572C-462E-8ADD-39664D3526F9_4_5005_c.jpeg

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

30B6BC70-13A4-422B-A7BB-B4B0139412BC_4_5005_c.jpeg

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

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

完成!お疲れ様でした!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
16