[add] 機智問答
This commit is contained in:
parent
ea46097ae9
commit
f29639106e
@ -1,8 +1,11 @@
|
|||||||
|
const dateFormat = require('dateformat');
|
||||||
|
|
||||||
/** Message */
|
/** Message */
|
||||||
class MessageClass {
|
class MessageClass {
|
||||||
constructor(bot, JianMiaubot) {
|
constructor(bot, JianMiaubot, Tools_MYSQLDB) {
|
||||||
this.bot = bot;
|
this.bot = bot;
|
||||||
this.JianMiaubot = JianMiaubot;
|
this.JianMiaubot = JianMiaubot;
|
||||||
|
this.Tools_MYSQLDB = Tools_MYSQLDB;
|
||||||
}
|
}
|
||||||
|
|
||||||
Message(event) {
|
Message(event) {
|
||||||
@ -76,12 +79,13 @@ class MessageClass {
|
|||||||
let userId = event.source.userId;
|
let userId = event.source.userId;
|
||||||
let replyMsg = event.message.text;
|
let replyMsg = event.message.text;
|
||||||
let displayName = "";
|
let displayName = "";
|
||||||
|
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
|
||||||
let profile = await this.bot.getUserProfile(userId);
|
let profile = await this.bot.getUserProfile(userId);
|
||||||
if (profile) {
|
if (profile) {
|
||||||
displayName = profile.displayName;
|
displayName = profile.displayName;
|
||||||
}
|
}
|
||||||
// JianMiau特別功能
|
// JianMiau特別功能
|
||||||
if (userId === process.env.toJianMiau || userId === process.env.toZhuHan) {
|
if (userId === process.env.toZhuHantoJianMiau || userId === process.env.toZhuHantoZhuHan) {
|
||||||
/** 訊息 */
|
/** 訊息 */
|
||||||
let Msg = event.message.text.split(" ");
|
let Msg = event.message.text.split(" ");
|
||||||
|
|
||||||
@ -112,18 +116,54 @@ class MessageClass {
|
|||||||
// 當訊息回傳失敗後的處理
|
// 當訊息回傳失敗後的處理
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
|
let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${userId}' LIMIT 1;`;
|
||||||
|
let res_Query = await this.Tools_MYSQLDB.Query(Query);
|
||||||
|
let Data = res_Query;
|
||||||
|
let Status = Data[0]['Status'];
|
||||||
|
switch (Status) {
|
||||||
|
case "Love_Pig_QA OK": {
|
||||||
|
let Extra = JSON.parse(Data[0]["Extra"]);
|
||||||
|
let answer = false;
|
||||||
|
let keyword = Extra["keyword"].split(",");
|
||||||
|
for (let i = 0; i < keyword.length; i++) {
|
||||||
|
if (!keyword[i] || event.message.text.indexOf(keyword[i]) !== -1) {
|
||||||
|
answer = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (answer) {
|
||||||
|
replyMsg = "答對, 答案就是:";
|
||||||
|
} else {
|
||||||
|
replyMsg = "答錯, 正確答案是:";
|
||||||
|
}
|
||||||
|
replyMsg += "\n" + Extra["answer"];
|
||||||
|
Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userId\`='${userId}');`;
|
||||||
|
res_Query = await this.Tools_MYSQLDB.Query(Query);
|
||||||
|
event.reply(replyMsg).then(function (data) {
|
||||||
|
// 當訊息成功回傳後的處理
|
||||||
|
}).catch(function (error) {
|
||||||
|
// 當訊息回傳失敗後的處理
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (replyMsg !== "") {
|
||||||
|
replyMsg = event.message.text;
|
||||||
// 使用event.reply(要回傳的訊息)方法可將訊息回傳給使用者
|
// 使用event.reply(要回傳的訊息)方法可將訊息回傳給使用者
|
||||||
event.reply(replyMsg).then(function (data) {
|
event.reply(replyMsg).then(function (data) {
|
||||||
// 當訊息成功回傳後的處理
|
// 當訊息成功回傳後的處理
|
||||||
}).catch(function (error) {
|
}).catch(function (error) {
|
||||||
// 當訊息回傳失敗後的處理
|
// 當訊息回傳失敗後的處理
|
||||||
});
|
});
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
64
Tools_MYSQLDBClass.js
Normal file
64
Tools_MYSQLDBClass.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
const mysql = require('mysql');
|
||||||
|
|
||||||
|
/** Tools_MYSQLDB */
|
||||||
|
class Tools_MYSQLDBClass {
|
||||||
|
constructor() {
|
||||||
|
let config = {
|
||||||
|
host: 'jianmiau.tk',
|
||||||
|
user: 'jianmiau',
|
||||||
|
password: 'VQ*ZetC7xcc9%dTW',
|
||||||
|
database: 'line-cost-php',
|
||||||
|
port: 3307
|
||||||
|
};
|
||||||
|
this.conn = new mysql.createConnection(config);
|
||||||
|
this.conn.connect(
|
||||||
|
function (err) {
|
||||||
|
if (err) {
|
||||||
|
console.log("!!! Cannot connect !!! Error:");
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log("Connection established.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Query(Query) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.conn.query(Query,
|
||||||
|
function (err, results, fields) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(results);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseDB() {
|
||||||
|
this.conn.end(
|
||||||
|
function (err) {
|
||||||
|
if (err) throw err;
|
||||||
|
else console.log('Closing connection.')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// readData() {
|
||||||
|
// this.conn.query('SELECT * FROM `LoveZhuHan` LIMIT 2',
|
||||||
|
// function (err, results, fields) {
|
||||||
|
// if (err) throw err;
|
||||||
|
// else console.log('Selected ' + results.length + ' row(s).');
|
||||||
|
// for (let i = 0; i < results.length; i++) {
|
||||||
|
// console.log('Row: ' + JSON.stringify(results[i]));
|
||||||
|
// }
|
||||||
|
// console.log('Done.');
|
||||||
|
// });
|
||||||
|
// // this.conn.end(
|
||||||
|
// // function (err) {
|
||||||
|
// // if (err) throw err;
|
||||||
|
// // else console.log('Closing connection.')
|
||||||
|
// // });
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Tools_MYSQLDBClass
|
20
app.js
20
app.js
@ -3,11 +3,10 @@
|
|||||||
// Debug node --inspect=192.168.168.15:9229 app.js
|
// Debug node --inspect=192.168.168.15:9229 app.js
|
||||||
|
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
|
// require("./plug/DateFormat");
|
||||||
// 引用linebot SDK
|
// 引用linebot SDK
|
||||||
var linebot = require('linebot');
|
var linebot = require('linebot');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const express = require('express');
|
|
||||||
const app = express();
|
|
||||||
|
|
||||||
//讀取憑證及金鑰
|
//讀取憑證及金鑰
|
||||||
const prikey = fs.readFileSync('privkey.pem', 'utf8');
|
const prikey = fs.readFileSync('privkey.pem', 'utf8');
|
||||||
@ -33,8 +32,15 @@ var JianMiaubot = linebot({
|
|||||||
channelAccessToken: process.env.channelAccessToken
|
channelAccessToken: process.env.channelAccessToken
|
||||||
});
|
});
|
||||||
|
|
||||||
const MessageClass = require('./MessageClass')
|
const Tools_MYSQLDBClass = require('./Tools_MYSQLDBClass');
|
||||||
const Message = new MessageClass(bot, JianMiaubot);
|
const MessageClass = require('./MessageClass');
|
||||||
|
|
||||||
|
const Tools_MYSQLDB = new Tools_MYSQLDBClass();
|
||||||
|
const Message = new MessageClass(bot, JianMiaubot, Tools_MYSQLDB);
|
||||||
|
|
||||||
|
// Bot所監聽的webhook路徑與port
|
||||||
|
const path = process.env.URLPATH || "/";
|
||||||
|
const port = process.env.PORT || 3001;
|
||||||
|
|
||||||
// 當有人傳送訊息給Bot時
|
// 當有人傳送訊息給Bot時
|
||||||
bot.on('event', function (event) {
|
bot.on('event', function (event) {
|
||||||
@ -57,10 +63,8 @@ bot.on('event', function (event) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
bot.listen(path, port, credentials, function () {
|
||||||
// Bot所監聽的webhook路徑與port
|
|
||||||
const port = process.env.PORT || 3000;
|
|
||||||
bot.listen('/linewebhook', port, credentials, function () {
|
|
||||||
console.log(`listening on ${port}`);
|
console.log(`listening on ${port}`);
|
||||||
console.log('[BOT已準備就緒]');
|
console.log('[BOT已準備就緒]');
|
||||||
|
// Tools_MYSQLDB.readData();
|
||||||
});
|
});
|
@ -4,9 +4,11 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"dateformat": "^4.5.1",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"linebot": "^1.6.1"
|
"linebot": "^1.6.1",
|
||||||
|
"mysql": "^2.18.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"nodemon": "^2.0.7"
|
"nodemon": "^2.0.7"
|
||||||
|
Reference in New Issue
Block a user