유명현

Merge branch 'feature/line_bot' into 'main'

Line bot 기본 기능 구현



See merge request !16
1 +function priceToString(price) {
2 + return price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
3 +}
4 +
5 +function setFlexMessage(platform, name, price, thumbnailUrl, itemUrl) {
6 + let koreanPlatformName = "";
7 + if (platform === "daangn") {
8 + koreanPlatformName = "당근";
9 + } else if (platform === "joongna") {
10 + koreanPlatformName = "중고나라";
11 + } else if (platform === "bunjang") {
12 + koreanPlatformName = "번개나라";
13 + } else {
14 + koreanPlatformName = "Unknown";
15 + }
16 +
17 + let flexMessage = {
18 + type: "bubble",
19 + hero: {
20 + type: "image",
21 + url: thumbnailUrl,
22 + size: "full",
23 + aspectRatio: "20:13",
24 + aspectMode: "cover",
25 + action: {
26 + type: "uri",
27 + uri: itemUrl,
28 + },
29 + },
30 + body: {
31 + type: "box",
32 + layout: "vertical",
33 + contents: [
34 + {
35 + type: "text",
36 + text: name,
37 + weight: "bold",
38 + size: "xl",
39 + },
40 + // {
41 + // type: "box",
42 + // layout: "baseline",
43 + // margin: "md",
44 + // contents: [
45 + // {
46 + // type: "icon",
47 + // size: "sm",
48 + // url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
49 + // },
50 + // {
51 + // type: "icon",
52 + // size: "sm",
53 + // url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
54 + // },
55 + // {
56 + // type: "icon",
57 + // size: "sm",
58 + // url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
59 + // },
60 + // {
61 + // type: "icon",
62 + // size: "sm",
63 + // url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gold_star_28.png",
64 + // },
65 + // {
66 + // type: "icon",
67 + // size: "sm",
68 + // url: "https://scdn.line-apps.com/n/channel_devcenter/img/fx/review_gray_star_28.png",
69 + // },
70 + // {
71 + // type: "text",
72 + // text: "4.0",
73 + // size: "sm",
74 + // color: "#999999",
75 + // margin: "md",
76 + // flex: 0,
77 + // },
78 + // ],
79 + // },
80 + {
81 + type: "box",
82 + layout: "vertical",
83 + margin: "lg",
84 + spacing: "sm",
85 + contents: [
86 + {
87 + type: "box",
88 + layout: "baseline",
89 + spacing: "sm",
90 + contents: [
91 + {
92 + type: "text",
93 + text: "플랫폼",
94 + color: "#aaaaaa",
95 + size: "sm",
96 + flex: 1,
97 + },
98 + {
99 + type: "text",
100 + text: koreanPlatformName,
101 + wrap: true,
102 + color: "#666666",
103 + size: "sm",
104 + flex: 5,
105 + },
106 + ],
107 + },
108 + {
109 + type: "box",
110 + layout: "baseline",
111 + spacing: "sm",
112 + contents: [
113 + {
114 + type: "text",
115 + text: "가격",
116 + color: "#aaaaaa",
117 + size: "sm",
118 + flex: 1,
119 + },
120 + {
121 + type: "text",
122 + text: priceToString(price * 1) + "원",
123 + wrap: true,
124 + color: "#666666",
125 + size: "sm",
126 + flex: 5,
127 + },
128 + ],
129 + },
130 + ],
131 + },
132 + ],
133 + },
134 + footer: {
135 + type: "box",
136 + layout: "vertical",
137 + spacing: "sm",
138 + contents: [
139 + {
140 + type: "button",
141 + style: "link",
142 + height: "sm",
143 + action: {
144 + type: "uri",
145 + label: "매물 확인",
146 + uri: itemUrl,
147 + },
148 + },
149 + {
150 + type: "box",
151 + layout: "vertical",
152 + contents: [],
153 + margin: "sm",
154 + },
155 + ],
156 + flex: 0,
157 + },
158 + };
159 + return flexMessage;
160 + //return JSON.stringify(flexMessage);
161 +}
162 +
163 +module.exports = setFlexMessage;
1 -var express = require("express"); 1 +const express = require("express");
2 -var app = express(); 2 +const line = require("@line/bot-sdk");
3 +const setFlexMessage = require("./apis/setFlexMessage");
4 +const fs = require("fs");
3 5
4 -app.get("/", function (req, res) { 6 +require("dotenv").config();
5 - res.send("<h1>hello express!</h1>"); 7 +const config = {
8 + channelAccessToken: process.env.channelAccessToken,
9 + channelSecret: process.env.channelSecret,
10 +};
11 +
12 +const app = express();
13 +app.post("/webhook", line.middleware(config), (req, res) => {
14 + Promise.all(req.body.events.map(handleEvent)).then((result) =>
15 + res.json(result)
16 + );
6 }); 17 });
7 18
8 -app.listen(3000); 19 +const client = new line.Client(config);
20 +
21 +let waitNewMamulList = []; // 매물 키워드 입력 기다리는 목록
22 +
23 +function handleEvent(event) {
24 + if (event.type !== "message" || event.message.type !== "text") {
25 + console.log(event);
26 + if (event.type == "postback") {
27 + if (event.postback.data == "new") {
28 + var found = waitNewMamulList.indexOf(event.source.userId);
29 + if (found == -1) {
30 + waitNewMamulList.push(event.source.userId);
31 + console.log(waitNewMamulList);
32 + return Promise.resolve(
33 + client.replyMessage(event.replyToken, {
34 + type: "text",
35 + text: "등록할 매물 키워드를 알려주세요!",
36 + })
37 + );
38 + } else {
39 + return Promise.resolve(
40 + client.replyMessage(event.replyToken, {
41 + type: "text",
42 + text: "등록할 매물 키워드를 알려주세요!",
43 + })
44 + );
45 + }
46 + } else if (event.postback.data == "check") {
47 + return Promise.resolve(
48 + client.replyMessage(event.replyToken, {
49 + type: "flex",
50 + altText: "등록된 매물",
51 + contents: setFlexMessage(
52 + "daangn",
53 + "RTX 3080",
54 + "1000000",
55 + "https://dnvefa72aowie.cloudfront.net/origin/article/202205/94cdd237258671d5806a70f64ab2b3c7dcd790da0384b394ef5809fe10c08ced.webp?q=95&s=1440x1440&t=inside",
56 + "https://www.daangn.com/articles/403755360"
57 + ),
58 + })
59 + );
60 + }
61 + }
62 + return Promise.resolve(null);
63 + } else {
64 + console.log(event);
65 + var found = waitNewMamulList.indexOf(event.source.userId);
66 + if (found == -1) {
67 + return Promise.resolve(
68 + client.replyMessage(event.replyToken, {
69 + type: "text",
70 + text: "왼쪽 하단 메뉴버튼(☰)을 클릭해 상호작용 해주세요!",
71 + })
72 + );
73 + } else {
74 + // TODO: 서버에 키워드 등록하는 api
75 + waitNewMamulList.splice(found, 1);
76 + console.log(waitNewMamulList[found]);
77 + return Promise.resolve(
78 + client.replyMessage(event.replyToken, {
79 + type: "text",
80 + text: "매물이 등록되었습니다!\n등록된 매물: " + event.message.text,
81 + })
82 + );
83 + }
84 + }
85 +}
86 +
87 +const port = 1231;
88 +app.listen(port);
89 +console.log(`listening...\nport : ${port}`);
90 +
91 +/*Push Message*/
92 +// client.pushMessage(event.source.userId, {
93 +// type: "flex",
94 +// altText: "새로운 매물이 왔어요!",
95 +// contents: setFlexMessage(
96 +// "daangn",
97 +// "RTX 3080",
98 +// "1000000",
99 +// "https://dnvefa72aowie.cloudfront.net/origin/article/202205/94cdd237258671d5806a70f64ab2b3c7dcd790da0384b394ef5809fe10c08ced.webp?q=95&s=1440x1440&t=inside",
100 +// "https://www.daangn.com/articles/403755360"
101 +// ),
102 +// })
103 +
104 +/*리치메뉴 설정*/
105 +// let richMenu = {
106 +// size: {
107 +// width: 2500,
108 +// height: 843,
109 +// },
110 +// selected: false,
111 +// name: "Nice richmenu",
112 +// chatBarText: "Tap to open",
113 +// areas: [
114 +// {
115 +// bounds: {
116 +// x: 0,
117 +// y: 0,
118 +// width: 1250,
119 +// height: 843,
120 +// },
121 +// action: {
122 +// type: "postback",
123 +// label: "new",
124 +// data: "new",
125 +// displayText: "키워드 등록",
126 +// inputOption: "openKeyboard",
127 +// fillInText: "",
128 +// },
129 +// },
130 +// {
131 +// bounds: {
132 +// x: 1250,
133 +// y: 0,
134 +// width: 1250,
135 +// height: 843,
136 +// },
137 +// action: {
138 +// type: "postback",
139 +// label: "check",
140 +// data: "check",
141 +// displayText: "최신 매물 확인",
142 +// inputOption: "openKeyboard",
143 +// fillInText: "",
144 +// },
145 +// },
146 +// ],
147 +// };
148 +//// 등록
149 +// client.createRichMenu(richMenu).then((richMenuId) => console.log(richMenuId));
150 +// client.setRichMenuImage(
151 +// "richmenu-183eff606f059b8244f0a625b54bddf1",
152 +// fs.createReadStream("./static/img/richMenu.jpg")
153 +// );
154 +// client.setDefaultRichMenu("richmenu-183eff606f059b8244f0a625b54bddf1");
......
...@@ -7,12 +7,30 @@ ...@@ -7,12 +7,30 @@
7 "": { 7 "": {
8 "name": "secondhand-noti-bot", 8 "name": "secondhand-noti-bot",
9 "version": "1.0.0", 9 "version": "1.0.0",
10 - "license": "ISC", 10 + "license": "MIT",
11 "dependencies": { 11 "dependencies": {
12 + "@line/bot-sdk": "^7.5.0",
13 + "dotenv": "^16.0.1",
12 "express": "^4.18.1", 14 "express": "^4.18.1",
13 "nodemon": "^2.0.16" 15 "nodemon": "^2.0.16"
14 } 16 }
15 }, 17 },
18 + "node_modules/@line/bot-sdk": {
19 + "version": "7.5.0",
20 + "resolved": "https://registry.npmjs.org/@line/bot-sdk/-/bot-sdk-7.5.0.tgz",
21 + "integrity": "sha512-1PQW/tlg13olH93Ue+X4LwD4JvTK7JR5k59z2xM/rNNKWINbCigBgvwB0lwqnpQmehN7EvxolkN2aEPoSQ+JGw==",
22 + "dependencies": {
23 + "@types/body-parser": "^1.19.2",
24 + "@types/node": "^14.18.12",
25 + "axios": "^0.21.1",
26 + "body-parser": "^1.20.0",
27 + "file-type": "^15.0.0",
28 + "form-data": "^3.0.0"
29 + },
30 + "engines": {
31 + "node": ">=10"
32 + }
33 + },
16 "node_modules/@sindresorhus/is": { 34 "node_modules/@sindresorhus/is": {
17 "version": "0.14.0", 35 "version": "0.14.0",
18 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 36 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
...@@ -32,6 +50,33 @@ ...@@ -32,6 +50,33 @@
32 "node": ">=6" 50 "node": ">=6"
33 } 51 }
34 }, 52 },
53 + "node_modules/@tokenizer/token": {
54 + "version": "0.3.0",
55 + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
56 + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
57 + },
58 + "node_modules/@types/body-parser": {
59 + "version": "1.19.2",
60 + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
61 + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
62 + "dependencies": {
63 + "@types/connect": "*",
64 + "@types/node": "*"
65 + }
66 + },
67 + "node_modules/@types/connect": {
68 + "version": "3.4.35",
69 + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
70 + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
71 + "dependencies": {
72 + "@types/node": "*"
73 + }
74 + },
75 + "node_modules/@types/node": {
76 + "version": "14.18.18",
77 + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.18.tgz",
78 + "integrity": "sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig=="
79 + },
35 "node_modules/abbrev": { 80 "node_modules/abbrev": {
36 "version": "1.1.1", 81 "version": "1.1.1",
37 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 82 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
...@@ -96,6 +141,19 @@ ...@@ -96,6 +141,19 @@
96 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 141 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
97 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 142 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
98 }, 143 },
144 + "node_modules/asynckit": {
145 + "version": "0.4.0",
146 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
147 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
148 + },
149 + "node_modules/axios": {
150 + "version": "0.21.4",
151 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
152 + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
153 + "dependencies": {
154 + "follow-redirects": "^1.14.0"
155 + }
156 + },
99 "node_modules/balanced-match": { 157 "node_modules/balanced-match": {
100 "version": "1.0.2", 158 "version": "1.0.2",
101 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 159 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
...@@ -343,6 +401,17 @@ ...@@ -343,6 +401,17 @@
343 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 401 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
344 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 402 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
345 }, 403 },
404 + "node_modules/combined-stream": {
405 + "version": "1.0.8",
406 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
407 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
408 + "dependencies": {
409 + "delayed-stream": "~1.0.0"
410 + },
411 + "engines": {
412 + "node": ">= 0.8"
413 + }
414 + },
346 "node_modules/concat-map": { 415 "node_modules/concat-map": {
347 "version": "0.0.1", 416 "version": "0.0.1",
348 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 417 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
...@@ -436,6 +505,14 @@ ...@@ -436,6 +505,14 @@
436 "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 505 "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
437 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" 506 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
438 }, 507 },
508 + "node_modules/delayed-stream": {
509 + "version": "1.0.0",
510 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
511 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
512 + "engines": {
513 + "node": ">=0.4.0"
514 + }
515 + },
439 "node_modules/depd": { 516 "node_modules/depd": {
440 "version": "2.0.0", 517 "version": "2.0.0",
441 "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 518 "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
...@@ -464,6 +541,14 @@ ...@@ -464,6 +541,14 @@
464 "node": ">=8" 541 "node": ">=8"
465 } 542 }
466 }, 543 },
544 + "node_modules/dotenv": {
545 + "version": "16.0.1",
546 + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
547 + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==",
548 + "engines": {
549 + "node": ">=12"
550 + }
551 + },
467 "node_modules/duplexer3": { 552 "node_modules/duplexer3": {
468 "version": "0.1.4", 553 "version": "0.1.4",
469 "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 554 "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
...@@ -557,6 +642,23 @@ ...@@ -557,6 +642,23 @@
557 "node": ">= 0.10.0" 642 "node": ">= 0.10.0"
558 } 643 }
559 }, 644 },
645 + "node_modules/file-type": {
646 + "version": "15.0.1",
647 + "resolved": "https://registry.npmjs.org/file-type/-/file-type-15.0.1.tgz",
648 + "integrity": "sha512-0LieQlSA3bWUdErNrxzxfI4rhsvNAVPBO06R8pTc1hp9SE6nhqlVyvhcaXoMmtXkBTPnQenbMPLW9X76hH76oQ==",
649 + "dependencies": {
650 + "readable-web-to-node-stream": "^2.0.0",
651 + "strtok3": "^6.0.3",
652 + "token-types": "^2.0.0",
653 + "typedarray-to-buffer": "^3.1.5"
654 + },
655 + "engines": {
656 + "node": ">=8"
657 + },
658 + "funding": {
659 + "url": "https://github.com/sindresorhus/file-type?sponsor=1"
660 + }
661 + },
560 "node_modules/fill-range": { 662 "node_modules/fill-range": {
561 "version": "7.0.1", 663 "version": "7.0.1",
562 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 664 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
...@@ -585,6 +687,38 @@ ...@@ -585,6 +687,38 @@
585 "node": ">= 0.8" 687 "node": ">= 0.8"
586 } 688 }
587 }, 689 },
690 + "node_modules/follow-redirects": {
691 + "version": "1.15.0",
692 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
693 + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==",
694 + "funding": [
695 + {
696 + "type": "individual",
697 + "url": "https://github.com/sponsors/RubenVerborgh"
698 + }
699 + ],
700 + "engines": {
701 + "node": ">=4.0"
702 + },
703 + "peerDependenciesMeta": {
704 + "debug": {
705 + "optional": true
706 + }
707 + }
708 + },
709 + "node_modules/form-data": {
710 + "version": "3.0.1",
711 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
712 + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
713 + "dependencies": {
714 + "asynckit": "^0.4.0",
715 + "combined-stream": "^1.0.8",
716 + "mime-types": "^2.1.12"
717 + },
718 + "engines": {
719 + "node": ">= 6"
720 + }
721 + },
588 "node_modules/forwarded": { 722 "node_modules/forwarded": {
589 "version": "0.2.0", 723 "version": "0.2.0",
590 "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 724 "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
...@@ -763,6 +897,25 @@ ...@@ -763,6 +897,25 @@
763 "node": ">=0.10.0" 897 "node": ">=0.10.0"
764 } 898 }
765 }, 899 },
900 + "node_modules/ieee754": {
901 + "version": "1.2.1",
902 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
903 + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
904 + "funding": [
905 + {
906 + "type": "github",
907 + "url": "https://github.com/sponsors/feross"
908 + },
909 + {
910 + "type": "patreon",
911 + "url": "https://www.patreon.com/feross"
912 + },
913 + {
914 + "type": "consulting",
915 + "url": "https://feross.org/support"
916 + }
917 + ]
918 + },
766 "node_modules/ignore-by-default": { 919 "node_modules/ignore-by-default": {
767 "version": "1.0.1", 920 "version": "1.0.1",
768 "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 921 "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
...@@ -1208,6 +1361,18 @@ ...@@ -1208,6 +1361,18 @@
1208 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1361 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1209 "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1362 "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1210 }, 1363 },
1364 + "node_modules/peek-readable": {
1365 + "version": "4.1.0",
1366 + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
1367 + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
1368 + "engines": {
1369 + "node": ">=8"
1370 + },
1371 + "funding": {
1372 + "type": "github",
1373 + "url": "https://github.com/sponsors/Borewit"
1374 + }
1375 + },
1211 "node_modules/picomatch": { 1376 "node_modules/picomatch": {
1212 "version": "2.3.1", 1377 "version": "2.3.1",
1213 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1378 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
...@@ -1319,6 +1484,11 @@ ...@@ -1319,6 +1484,11 @@
1319 "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1484 "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
1320 "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 1485 "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
1321 }, 1486 },
1487 + "node_modules/readable-web-to-node-stream": {
1488 + "version": "2.0.0",
1489 + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz",
1490 + "integrity": "sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA=="
1491 + },
1322 "node_modules/readdirp": { 1492 "node_modules/readdirp": {
1323 "version": "3.6.0", 1493 "version": "3.6.0",
1324 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1494 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
...@@ -1516,6 +1686,22 @@ ...@@ -1516,6 +1686,22 @@
1516 "node": ">=0.10.0" 1686 "node": ">=0.10.0"
1517 } 1687 }
1518 }, 1688 },
1689 + "node_modules/strtok3": {
1690 + "version": "6.3.0",
1691 + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
1692 + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
1693 + "dependencies": {
1694 + "@tokenizer/token": "^0.3.0",
1695 + "peek-readable": "^4.1.0"
1696 + },
1697 + "engines": {
1698 + "node": ">=10"
1699 + },
1700 + "funding": {
1701 + "type": "github",
1702 + "url": "https://github.com/sponsors/Borewit"
1703 + }
1704 + },
1519 "node_modules/supports-color": { 1705 "node_modules/supports-color": {
1520 "version": "5.5.0", 1706 "version": "5.5.0",
1521 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1707 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
...@@ -1554,6 +1740,27 @@ ...@@ -1554,6 +1740,27 @@
1554 "node": ">=0.6" 1740 "node": ">=0.6"
1555 } 1741 }
1556 }, 1742 },
1743 + "node_modules/token-types": {
1744 + "version": "2.1.1",
1745 + "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz",
1746 + "integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==",
1747 + "dependencies": {
1748 + "@tokenizer/token": "^0.1.1",
1749 + "ieee754": "^1.2.1"
1750 + },
1751 + "engines": {
1752 + "node": ">=0.1.98"
1753 + },
1754 + "funding": {
1755 + "type": "github",
1756 + "url": "https://github.com/sponsors/Borewit"
1757 + }
1758 + },
1759 + "node_modules/token-types/node_modules/@tokenizer/token": {
1760 + "version": "0.1.1",
1761 + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
1762 + "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w=="
1763 + },
1557 "node_modules/touch": { 1764 "node_modules/touch": {
1558 "version": "3.1.0", 1765 "version": "3.1.0",
1559 "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 1766 "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
...@@ -1746,6 +1953,19 @@ ...@@ -1746,6 +1953,19 @@
1746 } 1953 }
1747 }, 1954 },
1748 "dependencies": { 1955 "dependencies": {
1956 + "@line/bot-sdk": {
1957 + "version": "7.5.0",
1958 + "resolved": "https://registry.npmjs.org/@line/bot-sdk/-/bot-sdk-7.5.0.tgz",
1959 + "integrity": "sha512-1PQW/tlg13olH93Ue+X4LwD4JvTK7JR5k59z2xM/rNNKWINbCigBgvwB0lwqnpQmehN7EvxolkN2aEPoSQ+JGw==",
1960 + "requires": {
1961 + "@types/body-parser": "^1.19.2",
1962 + "@types/node": "^14.18.12",
1963 + "axios": "^0.21.1",
1964 + "body-parser": "^1.20.0",
1965 + "file-type": "^15.0.0",
1966 + "form-data": "^3.0.0"
1967 + }
1968 + },
1749 "@sindresorhus/is": { 1969 "@sindresorhus/is": {
1750 "version": "0.14.0", 1970 "version": "0.14.0",
1751 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 1971 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
...@@ -1759,6 +1979,33 @@ ...@@ -1759,6 +1979,33 @@
1759 "defer-to-connect": "^1.0.1" 1979 "defer-to-connect": "^1.0.1"
1760 } 1980 }
1761 }, 1981 },
1982 + "@tokenizer/token": {
1983 + "version": "0.3.0",
1984 + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
1985 + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
1986 + },
1987 + "@types/body-parser": {
1988 + "version": "1.19.2",
1989 + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
1990 + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
1991 + "requires": {
1992 + "@types/connect": "*",
1993 + "@types/node": "*"
1994 + }
1995 + },
1996 + "@types/connect": {
1997 + "version": "3.4.35",
1998 + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
1999 + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
2000 + "requires": {
2001 + "@types/node": "*"
2002 + }
2003 + },
2004 + "@types/node": {
2005 + "version": "14.18.18",
2006 + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.18.tgz",
2007 + "integrity": "sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig=="
2008 + },
1762 "abbrev": { 2009 "abbrev": {
1763 "version": "1.1.1", 2010 "version": "1.1.1",
1764 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 2011 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
...@@ -1808,6 +2055,19 @@ ...@@ -1808,6 +2055,19 @@
1808 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 2055 "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
1809 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 2056 "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
1810 }, 2057 },
2058 + "asynckit": {
2059 + "version": "0.4.0",
2060 + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
2061 + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
2062 + },
2063 + "axios": {
2064 + "version": "0.21.4",
2065 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
2066 + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
2067 + "requires": {
2068 + "follow-redirects": "^1.14.0"
2069 + }
2070 + },
1811 "balanced-match": { 2071 "balanced-match": {
1812 "version": "1.0.2", 2072 "version": "1.0.2",
1813 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2073 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
...@@ -1987,6 +2247,14 @@ ...@@ -1987,6 +2247,14 @@
1987 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2247 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1988 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2248 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1989 }, 2249 },
2250 + "combined-stream": {
2251 + "version": "1.0.8",
2252 + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
2253 + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
2254 + "requires": {
2255 + "delayed-stream": "~1.0.0"
2256 + }
2257 + },
1990 "concat-map": { 2258 "concat-map": {
1991 "version": "0.0.1", 2259 "version": "0.0.1",
1992 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2260 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
...@@ -2059,6 +2327,11 @@ ...@@ -2059,6 +2327,11 @@
2059 "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 2327 "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
2060 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" 2328 "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
2061 }, 2329 },
2330 + "delayed-stream": {
2331 + "version": "1.0.0",
2332 + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
2333 + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
2334 + },
2062 "depd": { 2335 "depd": {
2063 "version": "2.0.0", 2336 "version": "2.0.0",
2064 "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 2337 "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
...@@ -2077,6 +2350,11 @@ ...@@ -2077,6 +2350,11 @@
2077 "is-obj": "^2.0.0" 2350 "is-obj": "^2.0.0"
2078 } 2351 }
2079 }, 2352 },
2353 + "dotenv": {
2354 + "version": "16.0.1",
2355 + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
2356 + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ=="
2357 + },
2080 "duplexer3": { 2358 "duplexer3": {
2081 "version": "0.1.4", 2359 "version": "0.1.4",
2082 "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 2360 "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
...@@ -2158,6 +2436,17 @@ ...@@ -2158,6 +2436,17 @@
2158 "vary": "~1.1.2" 2436 "vary": "~1.1.2"
2159 } 2437 }
2160 }, 2438 },
2439 + "file-type": {
2440 + "version": "15.0.1",
2441 + "resolved": "https://registry.npmjs.org/file-type/-/file-type-15.0.1.tgz",
2442 + "integrity": "sha512-0LieQlSA3bWUdErNrxzxfI4rhsvNAVPBO06R8pTc1hp9SE6nhqlVyvhcaXoMmtXkBTPnQenbMPLW9X76hH76oQ==",
2443 + "requires": {
2444 + "readable-web-to-node-stream": "^2.0.0",
2445 + "strtok3": "^6.0.3",
2446 + "token-types": "^2.0.0",
2447 + "typedarray-to-buffer": "^3.1.5"
2448 + }
2449 + },
2161 "fill-range": { 2450 "fill-range": {
2162 "version": "7.0.1", 2451 "version": "7.0.1",
2163 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2452 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
...@@ -2180,6 +2469,21 @@ ...@@ -2180,6 +2469,21 @@
2180 "unpipe": "~1.0.0" 2469 "unpipe": "~1.0.0"
2181 } 2470 }
2182 }, 2471 },
2472 + "follow-redirects": {
2473 + "version": "1.15.0",
2474 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
2475 + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ=="
2476 + },
2477 + "form-data": {
2478 + "version": "3.0.1",
2479 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
2480 + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
2481 + "requires": {
2482 + "asynckit": "^0.4.0",
2483 + "combined-stream": "^1.0.8",
2484 + "mime-types": "^2.1.12"
2485 + }
2486 + },
2183 "forwarded": { 2487 "forwarded": {
2184 "version": "0.2.0", 2488 "version": "0.2.0",
2185 "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2489 "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
...@@ -2306,6 +2610,11 @@ ...@@ -2306,6 +2610,11 @@
2306 "safer-buffer": ">= 2.1.2 < 3" 2610 "safer-buffer": ">= 2.1.2 < 3"
2307 } 2611 }
2308 }, 2612 },
2613 + "ieee754": {
2614 + "version": "1.2.1",
2615 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
2616 + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
2617 + },
2309 "ignore-by-default": { 2618 "ignore-by-default": {
2310 "version": "1.0.1", 2619 "version": "1.0.1",
2311 "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 2620 "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
...@@ -2623,6 +2932,11 @@ ...@@ -2623,6 +2932,11 @@
2623 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2932 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
2624 "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 2933 "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
2625 }, 2934 },
2935 + "peek-readable": {
2936 + "version": "4.1.0",
2937 + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
2938 + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="
2939 + },
2626 "picomatch": { 2940 "picomatch": {
2627 "version": "2.3.1", 2941 "version": "2.3.1",
2628 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2942 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
...@@ -2706,6 +3020,11 @@ ...@@ -2706,6 +3020,11 @@
2706 } 3020 }
2707 } 3021 }
2708 }, 3022 },
3023 + "readable-web-to-node-stream": {
3024 + "version": "2.0.0",
3025 + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz",
3026 + "integrity": "sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA=="
3027 + },
2709 "readdirp": { 3028 "readdirp": {
2710 "version": "3.6.0", 3029 "version": "3.6.0",
2711 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3030 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
...@@ -2854,6 +3173,15 @@ ...@@ -2854,6 +3173,15 @@
2854 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3173 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
2855 "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 3174 "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
2856 }, 3175 },
3176 + "strtok3": {
3177 + "version": "6.3.0",
3178 + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
3179 + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
3180 + "requires": {
3181 + "@tokenizer/token": "^0.3.0",
3182 + "peek-readable": "^4.1.0"
3183 + }
3184 + },
2857 "supports-color": { 3185 "supports-color": {
2858 "version": "5.5.0", 3186 "version": "5.5.0",
2859 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3187 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
...@@ -2880,6 +3208,22 @@ ...@@ -2880,6 +3208,22 @@
2880 "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3208 "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
2881 "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 3209 "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
2882 }, 3210 },
3211 + "token-types": {
3212 + "version": "2.1.1",
3213 + "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz",
3214 + "integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==",
3215 + "requires": {
3216 + "@tokenizer/token": "^0.1.1",
3217 + "ieee754": "^1.2.1"
3218 + },
3219 + "dependencies": {
3220 + "@tokenizer/token": {
3221 + "version": "0.1.1",
3222 + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
3223 + "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w=="
3224 + }
3225 + }
3226 + },
2883 "touch": { 3227 "touch": {
2884 "version": "3.1.0", 3228 "version": "3.1.0",
2885 "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 3229 "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 "author": "", 15 "author": "",
16 "license": "MIT", 16 "license": "MIT",
17 "dependencies": { 17 "dependencies": {
18 + "@line/bot-sdk": "^7.5.0",
19 + "dotenv": "^16.0.1",
18 "express": "^4.18.1", 20 "express": "^4.18.1",
19 "nodemon": "^2.0.16" 21 "nodemon": "^2.0.16"
20 } 22 }
......