Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8946

Serverless Framework でじゃんけんのLinbot を作る

$
0
0
概要 Line bot上でじゃんけんをできるようにしました。早い話が下記動画です。 アジェンダ 実装 リッチメニューの作成 デプロイ・実行 備考 1. 実装 ディレクトリ構成 ~/develop/study/linebot $ tree ./jankenbot -I node_modules ./jankenbot ├── janken.js ├── package.json ├── serverless.yml └── yarn.lock serverless.yml service: jankenbot frameworkVersion: '2' provider: name: aws runtime: nodejs12.x lambdaHashingVersion: 20201221 stage: dev region: ap-northeast-1 plugins: - serverless-offline functions: lineWebhook: handler: janken.webhook events: - http: path: janken/webhook method: post janken.js 'use strict'; // パッケージのインストール const line = require('@line/bot-sdk'); const { PrismaClientRustPanicError } = require('@prisma/client/runtime'); // LINEアクセストークンの設定 const config = { channelAccessToken: 'アクセストークン', channelSecret: 'シークレットキー', }; // インスタンス化 const client = new line.Client(config); exports.webhook = async (event, context) => { /* リクエストボディ*/ const body = JSON.parse(event.body) /* Lineのevent情報*/ const response = body.events[0] /* ユーザの出した手を取得*/ const userHand = response.message.text /* コンピュータの出した手を取得 */ const cpHand = getCpHand() let message = hantei(userHand, cpHand) /* メッセージ送信のために必要な情報 */ const replyToken = response.replyToken console.log('replyToken:' + replyToken) const post = { type: 'text', text: message, } try { await client.replyMessage(replyToken, post) } catch (err) { console.log(err) } }; /** * コンピュータの手を決定します。 * @return {string} cpHand - コンピュータの手 */ function getCpHand(){ /**ランダム数値を取得(範囲:0~2) */ let num = Math.floor(Math.random() * 3) let cpHand = '' if(num ==0){ cpHand = 'グー' }else if(num ==1){ cpHand = 'チョキ' }else{ cpHand = 'パー' } return cpHand } /** * じゃんけんの勝ち負けを判定します。 * @param {string} userHand - ユーザの出した手 * @param {string} cpHand - コンピュータの出した手 * @return {string} - message 判定結果 */ //TODO ロジックが美しくない。数学的に処理する方法を後日の記事にする。 function hantei(userHand, cpHand){ let message = '' if(userHand == 'グー'){ if(cpHand == 'グー'){ message = 'あいこです。(あなた:'+userHand + '、CP:'+ cpHand +')' }else if(cpHand == 'チョキ'){ message = 'あなたの勝ちです。(あなた:'+userHand + '、CP:'+ cpHand +')' }else{ message = 'あなたの負けです。(あなた:'+userHand + '、CP:'+ cpHand +')' } }else if(userHand == 'チョキ'){ if(cpHand == 'チョキ'){ message = 'あいこです。(あなた:'+userHand + '、CP:'+ cpHand +')' }else if(cpHand == 'パー'){ message = 'あなたの勝ちです。(あなた:'+userHand + '、CP:'+ cpHand +')' }else{ message = 'あなたの負けです。(あなた:'+userHand + '、CP:'+ cpHand +')' } }else{ if(cpHand == 'パー'){ message = 'あいこです。(あなた:'+userHand + '、CP:'+ cpHand +')' }else if(cpHand == 'グー'){ message = 'あなたの勝ちです。(あなた:'+userHand + '、CP:'+ cpHand +')' }else{ message = 'あなたの負けです。(あなた:'+userHand + '、CP:'+ cpHand +')' } } return message } 2. リッチメニューの作成 Linebotでリッチメニューを作成します。えっ、リッチメニューって何って思った人はリンクを参考にしてね。 まぁ、簡単に言うと、下記画像を作成します。 作り方は省略しますが、下記内容が作れていればOKです。 3 デプロイ・実行 デプロイ ~/develop/study/linebot/jankenbot $ serverless deploy Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service jankenbot.zip file to S3 (4.53 MB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ......................... Serverless: Stack update finished... Service Information service: jankenbot stage: dev region: ap-northeast-1 stack: jankenbot-dev resources: 12 api keys: None endpoints: POST - https://URL/dev/janken/webhook functions: lineWebhook: jankenbot-dev-lineWebhook layers: None Serverless: Removing old service artifacts from S3... webhook用のURLをLine botに追記すれば稼動します!! 4. 備考 じゃんけんの判定ロジックが美しくないですよね。次回の記事では数学的に処理したロジックを紹介します。

Viewing all articles
Browse latest Browse all 8946

Trending Articles