젠켄 LINEBOT를 만들면서 초보자가 코드에 대해 공부해 보았습니다.
소개
평상시는 엔지니어 업계와는 무연의 보통 회사원입니다.
계속 같은 식품 회사에 있기 때문에 새로운 것에 도전하고 싶어서,
가장 먼 프로그래밍을 배우기 시작했습니다.
처음, 아직 3주간・・・.
이 기술이 점점 널리 보급됨에 따라
초초자의 시점, 손잡이 쉬운 것 등 발신해 가고 싶습니다.
앞으로 공부하기 시작하는 사람, 가르치는 입장에 있는 사람에게 읽어 주시면 기쁩니다.
이것을 만든 목적
「배우기보다 익숙해져」라고 하는 것으로, 우선 만들어 보았습니다. 코드라고 보고 있을 뿐이라고 기억하지 않고, 암기하는 것도 연령적으로 힘들어요.
「간단한 코드로 할 수 있다」, 「친근하고 도움이 될 것 같은 것」으로서 자신이 언제나 이길 수 있는 켄켄 LINEBOT로 했습니다. 아이의 놀이 상대나 약간의 겐 담당하고 싶은 친구에게 사용하고 싶다···.
사양
・쟈켄을 하면, 반드시 자신이 「이기는」인가 「아이코」로 해 주는 봇.
・구, 조, 파 이외에 한마디 준다.
・가타카나로 구, 조키, 파를 쓰면, 앵무새 반환으로 아이코가 된다.
・아이가 듣기 쉬운 「이름」이나 「연령」에는 별도 대응한다
사용한 환경
이번은 1시간에 LINE BOT 만들기 핸즈온 (자료 + 리포트) in Node 학원제 2017 #nodefest 를 참고로 만들었습니다.
Node.js v10.16.3
Windows 10 pro
Visual Studio Code v1.39.1
동작 확인
아이에게 시키게 되면, 카하하~라고 기꺼이 그렇게 호평.
완성까지 망설임
· 코드의 시작 부분에 쓰여진 $를 잘못 복사하여 오류
・코드의 범위를 잘못한다. Visual Studio는 색별로 써 주거나 매우 친절합니다만 끝없이 계속한 후의 괄호는 어디에서 닫고 있는지 모르고, 길을 잃는다···.
·Server.js를 수정·저장한 후, 한번 터미널을 Ctrl+C로 멈추고 다시 서버를 달리지 않으면 변경이 반영되지 않고・・・. 알아차릴 때까지 머리를 안는다.
코드 및 코드 판독
프로그래머와 함께 코드 앞에 설명을 넣을 때는//를 넣는군요. 처음에는 모두 코드라고 생각했습니다. 학생시절, 영어를 1문 1문역해 어학력이 오르기 때문에 이번도 똑같이 해독해 보았습니다. 표현이 잘못되어 있는 곳도 있을지도 모릅니다만 비망록적으로 남깁니다.
//厳格モードの宣言
'use strict';
//expressのモジュール(プログラムのパーツ)をインポート
const express = require('express');
//LINE message APIのSDK(ツールセット)をインポート
const line = require('@line/bot-sdk');
//コンピューターの外とやり取りするポート(ドア)を3000に設定
const PORT = process.env.PORT || 3000;
//Lin Message APIの変数を登録
const config = {
channelSecret: 'LINE Messeage APIのChannel Secret',
channelAccessToken: 'LINE Messeage APIのアクセストークン'
};
//expressを使ってサーバーを作る
const app = express();
//サーバー(https://localhost/)にアクセスしてきたときに「Hello」を返す
app.get('/', (req, res) => res.send('Hello LINE BOT!'));
//webhookにpost要求する。そのやり取りをterminalに記録する。
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(req.body.events);
//サーバー内の細かな処理を一括で表すコード。Allが動いてからthenが動く。handleEventは下で動く関数の名前。
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result));
});
//クライアント機能が動くようにする。
const client = new line.Client(config);
//handleEventという関数を動かす。
function handleEvent(event) {
const message = event.message.text;
let replyMessage = event.message.text;
//event、message以外はnull(空)で返す
if (event.type !== 'message' || event.message.type !== 'text') {
return Promise.resolve(null);
}
// 部分一致(どこかで1つ「じゃんけん」の文言が出る場合の返答)
if( message.indexOf('じゃんけん') > -1 ){
replyMessage = 'お、いいね。ぐー、ちょき、ぱーのどれかだしてね。最初はぐー、じゃんけんぽん';
}
// 部分一致(どこかで1つ「なまえ」の文言が出る場合の返答)
if( message.indexOf('なまえ') > -1 ){
replyMessage = 'わたしのなまえは 〇〇です。';
}
// 部分一致(どこかで1つ「さい」の文言が出る場合の返答)
if( message.indexOf('さいです') > -1 ){
replyMessage = 'わたしはうまれたてです。';
}
// 部分一致(どこかで1つ「へー」の文言が出る場合の返答)
if( message.indexOf('へー') > -1 ){
replyMessage = 'ほー';
}
// 特定の文言だけ返答する。3種類の返答をランダムに。
if( message == 'ぐー' ){
const randomMessages = [
"ちょき なかなかつよいね",
"ちょき まけちゃった",
"ぐー きがあうね"
];
replyMessage = randomMessages[Math.floor(Math.random()*3)];
}
// 特定の文言だけ返答する。3種類の返答をランダムに。
if( message == 'ちょき' ){
const randomMessages = [
"ぱー くやしい>_<",
"ぱー 最強やん",
"ちょき 二人合わせてバルタン聖人"
];
replyMessage = randomMessages[Math.floor(Math.random()*3)];
}
// 特定の文言だけ返答する。3種類の返答をランダムに。
if( message == 'ぱー' ){
const randomMessages = [
"ぐー おぬしもやるな",
"ぐー どんだけ強いの",
"ぱー ハイタッチ "
];
replyMessage = randomMessages[Math.floor(Math.random()*3)];
}
//オウム返しの設定
return client.replyMessage(event.replyToken, {
type: 'text',
text: replyMessage
});
}
//一番上段のexpressのコードとのセット。ポートとつなぎます。
app.listen(PORT);
//つながれたらTerminalに記載します。
console.log(`Server running at ${PORT}`);
(참고하신 정보)
Express Node.js를 위한 빠르고 혁신적인 최소한의 웹 프레임워크
부동의 새의 공부 기록 'Javascripit를 모르게 LINE' Bot의 샘플을 읽는다
Node.js와 Express로 웹 API를 만들어 보자.
감상
초아마추어에게도 코드를 복사하면 LINEBOT을 할 수 있는 것은 감동적이었습니다. 하이소인 엔지니어에게는 죄송합니다만, 이렇게 빨리 물건을 만들 수 있다니 요리보다 간단할지도・・・.
이번은 처음이므로 단순한 말을 돌려줄 뿐이었습니다. 향후는 조금 복잡한 것, 예를 들면 날씨 정보로부터 내일의 세탁물외 말린 OK 판정 LINEBOT라든지, 위치 정보로부터 외출 스폿 소개해 주는 것 따위에 도전하고 싶습니다.
Reference
이 문제에 관하여(젠켄 LINEBOT를 만들면서 초보자가 코드에 대해 공부해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/marumaruchan/items/57b5e6ba8d8352f70be1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)