Compare commits

...

2 Commits
v1 ... master

Author SHA1 Message Date
bf1db865a2 [mod] 2021-12-26 15:15:28 +08:00
74b941a94e [fix] CPBL賽事判斷錯誤 2021-04-27 08:42:22 +08:00
8 changed files with 889 additions and 765 deletions

View File

@ -1,347 +1,404 @@
const dateFormat = require('dateformat'); const dateFormat = require('dateformat');
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const schedule = require('node-schedule'); const schedule = require('node-schedule');
const { decode } = require('querystring'); const { decode } = require('querystring');
const LINENotifyClass = require('../api/LINENotifyClass');
/** CPBL */
class CPBLClass { /** CPBL */
constructor(app) { class CPBLClass {
this.app = app; constructor(app) {
this.TimeList = []; this.app = app;
// var rule = new schedule.RecurrenceRule(); this.LINENotify = new LINENotifyClass();
// // rule.minute = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]; this.TimeList = [];
// rule.second = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]; // var rule = new schedule.RecurrenceRule();
// // console.log(`設定任務 每${JSON.stringify(rule.minute)}分鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")); // // rule.minute = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];
// console.log(`設定任務 每${JSON.stringify(rule.second)}秒鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")); // rule.second = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];
// this.Timer = schedule.scheduleJob(rule, this.Update.bind(this)); // // console.log(`設定任務 每${JSON.stringify(rule.minute)}分鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"));
} // console.log(`設定任務 每${JSON.stringify(rule.second)}秒鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"));
// this.Timer = schedule.scheduleJob(rule, this.Update.bind(this));
async Update() { }
// let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
// console.log("執行任務 現在時間: " + datetime); async Update() {
// if (dateFormat(new Date(), "ss") === "00") { // let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
// this.Timer.cancel(); // console.log("執行任務 現在時間: " + datetime);
// // console.log("取消任務 現在時間: " + datetime); // if (dateFormat(new Date(), "ss") === "00") {
// } // this.Timer.cancel();
if (this.TimeList.length > 0) { // // console.log("取消任務 現在時間: " + datetime);
for (let i = 0; i < this.TimeList.length; i++) { // }
this.RunTime(this.TimeList[i]); if (this.TimeList.length > 0) {
} for (let i = 0; i < this.TimeList.length; i++) {
} else { this.RunTime(this.TimeList[i]);
this.CloseTime(); }
} } else {
} this.CloseTime();
}
async AddTime(Data, event) { }
let game_id = Data["game_id"];
let cpbldata = Data["cpbldata"]; async AddTime(Data, event) {
let LineID = Data["LineID"]; let replyMsg = "";
let GameSno = Data["GameSno"];
let Isgame_id = false; let LineID = Data["LineID"];
let IsLineID = false; let access_token = Data["access_token"];
let Time = {
game_id: game_id, let IsHaveGameSno = false;
cpbldata: cpbldata, let IsHaveLineID = false;
LineID: [LineID] let Time = {
} GameSno: GameSno,
for (let i = 0; i < this.TimeList.length; i++) { LineID: [LineID],
if (this.TimeList[i]["game_id"] === game_id) { access_token: [access_token]
Isgame_id = true; }
Time = this.TimeList[i]; for (let i = 0; i < this.TimeList.length; i++) {
for (let j = 0; j < this.TimeList[i]["LineID"].length; j++) { if (this.TimeList[i]["GameSno"] === GameSno) {
if (this.TimeList[i]["LineID"][j] === LineID) { IsHaveGameSno = true;
IsLineID = true; Time = this.TimeList[i];
break; for (let j = 0; j < this.TimeList[i]["LineID"].length; j++) {
} if (this.TimeList[i]["LineID"][j] === LineID) {
} IsHaveLineID = true;
break; break;
} }
} }
let IsRUN = true; break;
let Response = await this.GetCPBL(Time); }
if (Response[Response.length - 1]["title"].indexOf("比賽結束") !== -1) { }
IsRUN = false; let IsRUN = true;
} let Response = await this.GetCPBL(GameSno);
let replyMsg = ""; if (Response === "比賽尚未開始" || Response[Response.length - 1].indexOf("比賽結束") !== -1) {
for (let i = 0; i < Response.length; i++) { IsRUN = false;
replyMsg += Response[i]["title"]; }
if (i !== Response.length - 1) { if (Response === "比賽尚未開始") {
replyMsg += "\n\n"; // await this.LINENotify.Send(access_token, Response);
} } else {
} let PushMsg = "";
if (IsRUN) { for (let i = 0; i < Response.length; i++) {
if (!Isgame_id) { let ThisPushMsg = Response[i];
// 沒有這場賽事 if (PushMsg.length + ThisPushMsg.length > 1000) {
if (this.TimeList.length === 0) { // await this.LINENotify.Send(access_token, PushMsg);
this.StartTime(); PushMsg = ThisPushMsg;
} } else {
this.TimeList.push(Time); PushMsg += ThisPushMsg;
} else if (Isgame_id && !IsLineID) { }
// 有這場賽事但沒這個帳號 }
Time["LineID"].push(LineID); // await this.LINENotify.Send(access_token, PushMsg);
} }
let Extra = { if (IsRUN) {
cpbldata: cpbldata, if (!IsHaveGameSno) {
count: Response.length // 沒有這場賽事
} if (this.TimeList.length === 0) {
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); this.StartTime();
let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='CPBL RUN', \`Extra\`='${JSON.stringify(Extra)}' WHERE (\`userid\`='${LineID}');`; }
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); this.TimeList.push(Time);
} else { } else if (IsHaveGameSno && !IsHaveLineID) {
replyMsg += "\n\n已停止中職轉播功能"; // 有這場賽事但沒這個帳號
} Time["LineID"].push(LineID);
if (event) { Time["access_token"].push(access_token);
event.reply(replyMsg).then(function (data) { }
// 當訊息成功回傳後的處理 let Extra = {
}).catch(function (error) { GameSno: GameSno,
// 當訊息回傳失敗後的處理 count: Response.length
}); }
} let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
} let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='CPBL RUN', \`Extra\`='${JSON.stringify(Extra)}' WHERE (\`userid\`='${LineID}');`;
let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
StartTime() { } else {
// var rule = '0 1 * * * *'; replyMsg = "已停止中職轉播功能";
// * * * * * * }
// ┬ ┬ ┬ ┬ ┬ ┬ if (event) {
// │ │ │ │ │ | event.reply(replyMsg).then(function (data) {
// │ │ │ │ │ └ 星期几取值0 - 7其中 0 和 7 都表示是周日 // 當訊息成功回傳後的處理
// │ │ │ │ └─── 月份取值1 - 12 }).catch(function (error) {
// │ │ │ └────── 日期取值1 - 31 // 當訊息回傳失敗後的處理
// │ │ └───────── 时取值0 - 23 });
// │ └──────────── 分取值0 - 59 }
// └─────────────── 秒取值0 - 59可选 }
var rule = new schedule.RecurrenceRule();
let minute = 2; StartTime() {
let minute_arr = []; // var rule = '2 * * * * *';
for (let i = 0; i < 60; i++) { // * * * * * *
if (i % minute === 0) { // ┬ ┬ ┬ ┬ ┬ ┬
minute_arr.push(i); // │ │ │ │ │ |
} // │ │ │ │ │ └ 星期几取值0 - 7其中 0 和 7 都表示是周日
} // │ │ │ │ └─── 月份取值1 - 12
rule.minute = minute_arr; // │ │ │ └────── 日期取值1 - 31
// rule.second = [0]; // │ │ └───────── 时取值0 - 23
// rule.second = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]; // │ └──────────── 分取值0 - 59
// console.log(`設定任務 每${JSON.stringify(rule.minute)}分鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")); // └─────────────── 秒取值0 - 59可选
// console.log(`設定任務 每${JSON.stringify(rule.second)}秒鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")); var rule = new schedule.RecurrenceRule();
this.Timer = schedule.scheduleJob(rule, this.Update.bind(this)); // rule.date = "*";
} // rule.dayOfWeek = "*";
// rule.hour = "*";
CloseTime() { // rule.minute = "*";
this.Timer.cancel(); // rule.year = "*";
} // rule.month = "*";
let minute = 2;
async GetCPBL(Time) { let minute_arr = [];
let game_id = Time["game_id"]; for (let i = 0; i < 60; i++) {
let cpbldata = Time["cpbldata"]; if (i % minute === 0) {
let LineID = Time["LineID"]; minute_arr.push(i);
let url = "https://jianmiau.ml:3333/CPBL"; }
let Data = { }
URL: `http://www.cpbl.com.tw/games/play_by_play.html?&game_type=${cpbldata["game_type"]}&game_id=${cpbldata["game_id"]}&game_date=${cpbldata["game_date"]}&pbyear=${cpbldata["pbyear"]}`
}; rule.second = new schedule.Range(0, 59, 2);
let Response = await this.GetData(url, Data); // rule.minute = minute_arr;
Response = [].concat.apply([], JSON.parse(Response)); // rule.second = [0];
return new Promise((resolve, reject) => { // rule.second = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];
// 傳入 resolve 與 reject表示資料成功與失敗 // console.log(`設定任務 每${minute}分鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"));
resolve(Response); console.log(`設定任務 每${minute}秒鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"));
// reject() // this.Timer = schedule.scheduleJob(rule, this.Update.bind(this));
}); this.Timer = schedule.scheduleJob(rule, () => {
} console.log(`現在時間: ${dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")}`);
});
DelTime(game_id) { }
for (let i = 0; i < this.TimeList.length; i++) {
if (this.TimeList[i]["game_id"] === game_id) { CloseTime() {
this.TimeList.splice(i, 1); this.Timer.cancel();
if (this.TimeList.length === 0) { }
this.CloseTime();
} async GetCPBL(GameSno) {
} let Data = {
} GameSno: GameSno,
} KindCode: "A",
Year: dateFormat(new Date(), "yyyy")
async RunTime(Time) { };
let game_id = Time["game_id"]; let url = "https://jianmiau.ml:3333/CPBL";
let cpbldata = Time["cpbldata"]; let Response = await this.GetData(url, Data);
let LineID = Time["LineID"]; Response = JSON.parse(Response);
let url = "https://jianmiau.ml:3333/CPBL"; // Response = [].concat.apply([], JSON.parse(Response));
let Data = { return new Promise((resolve, reject) => {
URL: `http://www.cpbl.com.tw/games/play_by_play.html?&game_type=${cpbldata["game_type"]}&game_id=${cpbldata["game_id"]}&game_date=${cpbldata["game_date"]}&pbyear=${cpbldata["pbyear"]}` // 傳入 resolve 與 reject表示資料成功與失敗
}; resolve(Response);
let Response = await this.GetData(url, Data); // reject()
Response = [].concat.apply([], JSON.parse(Response)); });
let IsRUN = true; }
if (Response[Response.length - 1]["title"].indexOf("比賽結束") !== -1 || Response[Response.length - 1]["title"].indexOf("final") !== -1) {
IsRUN = false; DelTime(game_id) {
} for (let i = 0; i < this.TimeList.length; i++) {
for (let i = 0; i < LineID.length; i++) { if (this.TimeList[i]["game_id"] === game_id) {
let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${LineID[i]}' LIMIT 1;`; this.TimeList.splice(i, 1);
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); if (this.TimeList.length === 0) {
let Data = res_Query; this.CloseTime();
let Status = Data[0]['Status']; }
if (Status === "CPBL RUN") { }
let Extra = JSON.parse(Data[0]["Extra"]); }
let cpbldata = Extra["cpbldata"]; }
let count = Extra["count"];
if (Response.length > count) { async RunTime(Time) {
let replyMsg = ""; let GameSno = Time["GameSno"];
for (let j = count; j < Response.length; j++) { let LineID = Time["LineID"];
replyMsg += Response[j]["title"]; let access_token = Time["access_token"];
if (j !== Response.length - 1) { let Response = await this.GetCPBL(GameSno);
replyMsg += "\n\n"; let IsRUN = true;
} if (Response === "比賽尚未開始" || Response[Response.length - 1].indexOf("比賽結束") !== -1) {
} IsRUN = false;
if (IsRUN) { }
let Extra = { for (let i = 0; i < LineID.length; i++) {
cpbldata: cpbldata, let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${LineID[i]}' LIMIT 1;`;
count: Response.length let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
} let Data = res_Query;
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); let Status = Data[0]['Status'];
let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='CPBL RUN', \`Extra\`='${JSON.stringify(Extra)}' WHERE (\`userid\`='${LineID[i]}');`; if (Status === "CPBL RUN") {
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); let Extra = JSON.parse(Data[0]["Extra"]);
} else { let GameSno = Extra["GameSno"];
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); let count = Extra["count"];
let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userid\`='${LineID[i]}');`; if (Response.length > count) {
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); let PushMsg = "";
replyMsg += "\n\n已停止中職轉播功能"; for (let i = count; i < Response.length; i++) {
} let ThisPushMsg = Response[i];
let res_Msg = this.app.bot.push(LineID[i], replyMsg); if (PushMsg.length + ThisPushMsg.length > 1000) {
} await this.LINENotify.Send(access_token, PushMsg);
} PushMsg = ThisPushMsg;
} } else {
if (!IsRUN) { PushMsg += ThisPushMsg;
this.DelTime(game_id); }
} }
} await this.LINENotify.Send(access_token, PushMsg);
if (IsRUN) {
async GetCPBLList(Date) { let Extra = {
// let game_id = Time["game_id"]; GameSno: GameSno,
// let cpbldata = Time["cpbldata"]; count: Response.length
// let LineID = Time["LineID"]; }
let url = "https://jianmiau.ml:3333/CPBLList"; let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
let Data = { let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='CPBL RUN', \`Extra\`='${JSON.stringify(Extra)}' WHERE (\`userid\`='${LineID[i]}');`;
Date: Date let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
}; } else {
let Response = await this.GetData(url, Data); let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
Response = [].concat.apply([], JSON.parse(Response)); let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userid\`='${LineID[i]}');`;
let columns = []; let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
for (let i = 0; i < Response.length; i++) { PushMsg = "已停止中職轉播功能";
let img = []; let res_Msg = this.app.bot.push(LineID[i], PushMsg);
let team = []; }
let data = ""; // await this.LINENotify.Send(access_token, PushMsg);
let href = Response[i]["href"]; }
for (let j = 1; j <= 2; j++) { }
if (Response[i][`img${j}`].indexOf("AJL011_logo_01") !== -1) { }
img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/R.png"); if (!IsRUN) {
team.push("樂天桃猿"); this.DelTime(game_id);
} else if (Response[i][`img${j}`].indexOf("B04_logo_01") !== -1) { }
img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/F.png"); }
team.push("富邦悍將");
} else if (Response[i][`img${j}`].indexOf("D01_logo_01") !== -1) { async GetCPBLList(DateTime, access_token) {
img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/D.png"); // let game_id = Time["game_id"];
team.push("味全龍"); // let cpbldata = Time["cpbldata"];
} else if (Response[i][`img${j}`].indexOf("E02_logo_01") !== -1) { // let LineID = Time["LineID"];
img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/B.png"); let url = "https://jianmiau.ml:3333/CPBLList";
team.push("中信兄弟"); let Data = {
} else if (Response[i][`img${j}`].indexOf("L01_logo_01") !== -1) { today: DateTime
img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/L.png"); // today: "2021-09-26"
team.push("統一獅"); };
} let Response = await this.GetData(url, Data);
} Response = [].concat.apply([], JSON.parse(Response));
if (href["time"]) { let columns = [];
data = `action=nogame&game_type=${href["game_type"]}&game_id=${href["game_id"]}&game_date=${href["game_date"]}&pbyear=${href["game_date"].substr(0, 4)}&time=${href["time"]}`; for (let i = 0; i < Response.length; i++) {
} else { let img = [];
data = `action=hasgame&game_type=${href["game_type"]}&game_id=${href["game_id"]}&game_date=${href["game_date"]}&pbyear=${href["game_date"].substr(0, 4)}`; let team = [];
} let data = "";
let url = `http://www.cpbl.com.tw/games/play_by_play.html?&game_type=${href["game_type"]}&game_id=${href["game_id"]}&game_date=${href["game_date"]}&pbyear=${href["game_date"].substr(0, 4)}`; let game = Response[i];
let Data_columns = { let info = {
"thumbnailImageUrl": img[0], "樂天桃猿": {
"imageBackgroundColor": "#FFFFFF", img: "https://jianmiau.ml/MyWeb/Resources/CPBL/R.png"
"title": `${team[0]} VS ${team[1]}`, },
"text": `比賽場地 ${Response[i]["address"]} ${href["game_date"]}`, "富邦悍將": {
"defaultAction": { img: "https://jianmiau.ml/MyWeb/Resources/CPBL/F.png"
"type": "uri", },
"label": "比賽網站", "味全龍": {
"uri": url img: "https://jianmiau.ml/MyWeb/Resources/CPBL/D.png"
}, },
"actions": [ "中信兄弟": {
{ img: "https://jianmiau.ml/MyWeb/Resources/CPBL/B.png"
"type": "postback", },
"label": "追蹤比賽", "統一7-ELEVEn獅": {
"data": data img: "https://jianmiau.ml/MyWeb/Resources/CPBL/L.png"
} },
] }
}; let url = `https://karolchang.github.io/cpbl-vue/#/record/${game.GameSno}/A/2021`;
columns.push(Data_columns); let gametime = game.PreExeDate.split("T");
} // let nowUNIXtime = Date.now();
// let gameUNIXtime = new Date(`${gametime[0]} ${gametime[1]}`).getTime();
// columns = [ // let IsStart = nowUNIXtime - gameUNIXtime > 0;
// { data = `action=hasgame&game_date=${gametime[0]}&time=${gametime[1]}&GameSno=${game.GameSno}&access_token=${access_token}`;
// "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/L.png", let Data_columns = {
// "imageBackgroundColor": "#FFFFFF", "thumbnailImageUrl": info[game.HomeTeamName].img,
// "title": "this is menu", "imageBackgroundColor": "#FFFFFF",
// "text": "description", "title": `${game.VisitingTeamName} VS ${game.HomeTeamName}`,
// "defaultAction": { "text": `比賽場地 ${game.FieldAbbe} ${gametime[0]} ${gametime[1]}`,
// "type": "uri", "defaultAction": {
// "label": "View detail", "type": "uri",
// "uri": "http://example.com/page/123" "label": "比賽網站",
// }, "uri": url
// "actions": [ },
// { "actions": [
// "type": "postback", {
// "label": "Buy", // "type": "uri",
// "data": "action=buy&itemid=111" // "label": "比賽網站",
// } // "uri": url
// ] "type": "postback",
// }, "label": "追蹤比賽",
// { "data": data
// "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/B.png", }
// "imageBackgroundColor": "#000000", ]
// "title": "this is menu", };
// "text": "description", columns.push(Data_columns);
// "defaultAction": { }
// "type": "uri",
// "label": "View detail", // columns = [
// "uri": "http://example.com/page/222" // {
// }, // "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/L.png",
// "actions": [ // "imageBackgroundColor": "#FFFFFF",
// { // "title": "this is menu",
// "type": "postback", // "text": "description",
// "label": "Buy", // "defaultAction": {
// "data": "action=buy&itemid=222" // "type": "uri",
// } // "label": "View detail",
// ] // "uri": "http://example.com/page/123"
// } // },
// ] // "actions": [
// {
return new Promise((resolve, reject) => { // "type": "postback",
// 傳入 resolve 與 reject表示資料成功與失敗 // "label": "Buy",
resolve(columns); // "data": "action=buy&itemid=111"
// reject() // }
}); // ]
} // },
// {
/** // "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/B.png",
* 取得表 // "imageBackgroundColor": "#000000",
* @param Url Url // "title": "this is menu",
* @param arrange 是否需要整理 // "text": "description",
*/ // "defaultAction": {
GetData(Url, Data) { // "type": "uri",
return new Promise((resolve, reject) => { // "label": "View detail",
var xhr = new XMLHttpRequest(); // "uri": "http://example.com/page/222"
xhr.onreadystatechange = function () { // },
if (xhr.readyState === 4) { // "actions": [
if (xhr.status >= 200 && xhr.status < 400) { // {
var response = xhr.responseText; // "type": "postback",
resolve(response); // "label": "Buy",
} else { // "data": "action=buy&itemid=222"
reject(""); // }
} // ]
} // }
}; // ]
xhr.open("POST", Url, true);
xhr.setRequestHeader("Content-Type", "application/json"); return new Promise((resolve, reject) => {
xhr.send(JSON.stringify(Data)); // 傳入 resolve 與 reject表示資料成功與失敗
}); resolve(columns);
} // reject()
} });
}
async CPBLBind(Date) {
let url = `https://notify-bot.line.me/oauth/authorize?response_type=code&scope=notify&response_mode=form_post&client_id=Jj4K1D7XxtmDeXJGF3c0vV&redirect_uri=https://jianmiau.ml:3333/LINENotify&state=${userId}$${displayName}`;
let shorturl = await this.Tools.shorturl(url);
let Data_columns = [
{
"thumbnailImageUrl": "https://www.line-community.me/awards/uimage/5b46aedf851f74a6af8eaab8",
"imageBackgroundColor": "#FFFFFF",
"title": "點擊綁定",
"text": "點擊後將會進行綁定",
"defaultAction": {
"type": "uri",
"label": "點擊綁定",
"uri": shorturl
},
"actions": [
{
"type": "uri",
"label": "點擊綁定",
"uri": shorturl
}
]
}
];
return new Promise((resolve, reject) => {
// 傳入 resolve 與 reject表示資料成功與失敗
resolve(Data_columns);
// reject()
});
}
/**
* 取得表
* @param Url Url
* @param arrange 是否需要整理
*/
GetData(Url, Data) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 400) {
var response = xhr.responseText;
resolve(response);
} else {
reject("");
}
}
};
xhr.open("POST", Url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(Data));
});
}
}
module.exports = CPBLClass module.exports = CPBLClass

View File

@ -1,58 +1,58 @@
// 背景執行 forever start -a -l line-cost-js.log app.js // 背景執行 forever start -a -l line-cost-js.log app.js
// npm start // npm start
// npm run dev // npm run dev
// Debug nodemon --inspect=192.168.168.15:9229 app.js // Debug nodemon --inspect=192.168.168.15:9229 app.js
const dateFormat = require('dateformat'); const dateFormat = require('dateformat');
const { decode } = require('querystring'); const { decode } = require('querystring');
const Tools_MYSQLDBClass = require('./Tools_MYSQLDBClass'); const Tools_MYSQLDBClass = require('./Tools_MYSQLDBClass');
const MessageClass = require('./MessageClass'); const MessageClass = require('./MessageClass');
const PostbackClass = require('./PostbackClass'); const PostbackClass = require('./PostbackClass');
const CPBLClass = require('./CPBLClass'); const CPBLClass = require('./CPBLClass');
/** LineBot */ /** LineBot */
class LineBotClass { class LineBotClass {
constructor(path, port, credentials, bot, JianMiaubot) { constructor(path, port, credentials, bot, JianMiaubot) {
let self = this; let self = this;
this.bot = bot; this.bot = bot;
this.JianMiaubot = JianMiaubot; this.JianMiaubot = JianMiaubot;
this.Tools_MYSQLDB = new Tools_MYSQLDBClass(); this.Tools_MYSQLDB = new Tools_MYSQLDBClass();
this.Message = new MessageClass(this); this.Message = new MessageClass(this);
this.Postback = new PostbackClass(this); this.Postback = new PostbackClass(this);
this.CPBL = new CPBLClass(this); this.CPBL = new CPBLClass(this);
// 當有人傳送訊息給Bot時 // 當有人傳送訊息給Bot時
bot.on('event', function (event) { bot.on('event', function (event) {
switch (event.type) { switch (event.type) {
case 'message': { case 'message': {
self.Message.Message(event); self.Message.Message(event);
break; break;
} }
case 'postback': { case 'postback': {
self.Postback.Postback(event); self.Postback.Postback(event);
break; break;
} }
case 'join': case 'join':
case 'leave': case 'leave':
case 'follow': case 'follow':
case 'unfollow': case 'unfollow':
case 'memberJoin': case 'memberJoin':
case 'memberLeave': case 'memberLeave':
case 'accountLink': case 'accountLink':
case 'fallback': case 'fallback':
default: default:
break; break;
} }
}); });
bot.listen(path, port, credentials, function () { bot.listen(path, port, credentials, function () {
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
console.log(`${datetime} listening on ${port}`); console.log(`${datetime} listening on ${port}`);
console.log(`${datetime} [BOT已準備就緒]`); console.log(`${datetime} [BOT已準備就緒]`);
// Tools_MYSQLDB.readData(); // Tools_MYSQLDB.readData();
}); });
} }
} }
module.exports = LineBotClass module.exports = LineBotClass

View File

@ -1,238 +1,302 @@
const dateFormat = require('dateformat'); const dateFormat = require('dateformat');
const { decode } = require('querystring'); const { decode } = require('querystring');
const ToolsClass = require('./ToolsClass');
/** Message */
class MessageClass { /** Message */
constructor(app) { class MessageClass {
this.app = app; constructor(app) {
// this.app.CPBL.AddTime({ this.app = app;
// game_id: 64, this.Tools = new ToolsClass();
// cpbldata: { // this.app.CPBL.AddTime({
// "http://www.cpbl.com.tw/games/play_by_play.html?": "", // game_id: 64,
// game_type: "01", // cpbldata: {
// game_id: "63", // "http://www.cpbl.com.tw/games/play_by_play.html?": "",
// game_date: "2021-04-20", // game_type: "01",
// pbyear: "2021", // game_id: "63",
// }, // game_date: "2021-04-20",
// LineID: 1 // pbyear: "2021",
// }); // },
} // LineID: 1
// });
Message(event) { }
switch (event.message.type) {
case 'text': { Message(event) {
this.Text(event); switch (event.message.type) {
break; case 'text': {
} this.Text(event);
break;
case 'sticker': { }
this.Sticker(event);
break; case 'sticker': {
} this.Sticker(event);
break;
default: }
break;
} default:
} break;
}
Text(event) { }
switch (event.source.type) {
case "user": { Text(event) {
this.User(event); switch (event.source.type) {
break; case "user": {
} this.User(event);
break;
case "group": }
break;
case "group":
default: break;
break;
} default:
} break;
}
async Sticker(event) { }
switch (event.source.type) {
case "user": { async Sticker(event) {
let userId = event.source.userId; switch (event.source.type) {
let displayName = ""; case "user": {
let profile = await this.app.bot.getUserProfile(userId); let userId = event.source.userId;
if (profile) { let displayName = "";
displayName = profile.displayName; let profile = await this.app.bot.getUserProfile(userId);
} if (profile) {
let replyMsg = `line://app/1602687308-GXq4Vvk9?type=sticker&stk=noanim&sid=${event.message.stickerId}&pkg=${event.message.packageId}`; displayName = profile.displayName;
}
//ToJianMiau------------------------------------------------------------------------------------------------------ let replyMsg = `line://app/1602687308-GXq4Vvk9?type=sticker&stk=noanim&sid=${event.message.stickerId}&pkg=${event.message.packageId}`;
if (userId !== process.env.toZhuHantoJianMiau) {
let ToJM_message = "已接收訊息:"; //ToJianMiau------------------------------------------------------------------------------------------------------
ToJM_message += `\ndisplayName: ${displayName}`; if (userId !== process.env.toZhuHantoJianMiau) {
ToJM_message += `\nuserId: ${userId}`; let ToJM_message = "已接收訊息:";
ToJM_message += "\n" + replyMsg; ToJM_message += `\ndisplayName: ${displayName}`;
let res_toJianMiau = this.app.JianMiaubot.push(process.env.toJianMiau, ToJM_message); ToJM_message += `\nuserId: ${userId}`;
} ToJM_message += "\n" + replyMsg;
let res_reply = event.reply(replyMsg).then(function (data) { let res_toJianMiau = this.app.JianMiaubot.push(process.env.toJianMiau, ToJM_message);
// 當訊息成功回傳後的處理 }
}).catch(function (error) { let res_reply = event.reply(replyMsg).then(function (data) {
// 當訊息回傳失敗後的處理 // 當訊息成功回傳後的處理
}); }).catch(function (error) {
break; // 當訊息回傳失敗後的處理
} });
break;
case "group": }
break;
case "group":
default: break;
break;
} default:
} break;
}
async User(event) { }
let userId = event.source.userId;
let replyMsg = event.message.text; async User(event) {
let displayName = ""; let userId = event.source.userId;
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); let replyMsg = event.message.text;
let profile = await this.app.bot.getUserProfile(userId); let displayName = "";
if (profile) { let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
displayName = profile.displayName; let profile = await this.app.bot.getUserProfile(userId);
} if (profile) {
displayName = profile.displayName;
//ToJianMiau------------------------------------------------------------------------------------------------------ }
if (userId !== process.env.toZhuHantoJianMiau) {
let ToJM_message = `已接收訊息:`; //ToJianMiau------------------------------------------------------------------------------------------------------
ToJM_message += `\ndisplayName: ${displayName}`; if (userId !== process.env.toZhuHantoJianMiau) {
ToJM_message += `\nuserId: ${userId}`; let ToJM_message = `已接收訊息:`;
ToJM_message += `\nmessage: ${replyMsg}`; ToJM_message += `\ndisplayName: ${displayName}`;
let res_toJianMiau = this.app.JianMiaubot.push(process.env.toJianMiau, ToJM_message); ToJM_message += `\nuserId: ${userId}`;
} ToJM_message += `\nmessage: ${replyMsg}`;
let res_toJianMiau = this.app.JianMiaubot.push(process.env.toJianMiau, ToJM_message);
// JianMiau特別功能 }
if (userId === process.env.toZhuHantoJianMiau || userId === process.env.toZhuHantoZhuHan) {
/** 訊息 */ // JianMiau特別功能
let Msg = event.message.text.split(" "); if (userId === process.env.toZhuHantoJianMiau || userId === process.env.toZhuHantoZhuHan) {
/** 訊息 */
/** 指令 */ let Msg = event.message.text.split(" ");
let Instruction = Msg[0];
switch (Instruction) { /** 指令 */
case "msg": let Instruction = Msg[0];
case "Msg": switch (Instruction) {
case "MSG": { case "msg":
if (userId == process.env.toZhuHantoJianMiau) { case "Msg":
if (Msg[1] === "豬涵") { case "MSG": {
Msg[1] = process.env.toZhuHantoZhuHan; if (userId == process.env.toZhuHantoJianMiau) {
} else if (Msg[1] === "建喵") { if (Msg[1] === "豬涵") {
Msg[1] = process.env.toZhuHantoJianMiau; Msg[1] = process.env.toZhuHantoZhuHan;
} } else if (Msg[1] === "建喵") {
replyMsg = ""; Msg[1] = process.env.toZhuHantoJianMiau;
for (let i = 2; i < Msg.length; i++) { }
replyMsg += Msg[i] + (i === Msg.length - 1 ? "" : " "); replyMsg = "";
} for (let i = 2; i < Msg.length; i++) {
let res_Msg = this.app.bot.push(Msg[1], replyMsg); replyMsg += Msg[i] + (i === Msg.length - 1 ? "" : " ");
}
let ToJM_message = "已發送訊息:"; let res_Msg = this.app.bot.push(Msg[1], replyMsg);
ToJM_message += `\nuserId: ${Msg[1]}`;
ToJM_message += `\nmessage: ${replyMsg}`; let ToJM_message = "已發送訊息:";
let res_reply = event.reply(ToJM_message).then(function (data) { ToJM_message += `\nuserId: ${Msg[1]}`;
// 當訊息成功回傳後的處理 ToJM_message += `\nmessage: ${replyMsg}`;
}).catch(function (error) { let res_reply = event.reply(ToJM_message).then(function (data) {
// 當訊息回傳失敗後的處理 // 當訊息成功回傳後的處理
}); }).catch(function (error) {
} // 當訊息回傳失敗後的處理
return; });
} }
return;
case "中職": { }
let URL = Msg[1];
let Isplay_by_play = URL.indexOf("play_by_play"); case "中職": {
let data = decode(URL); // let URL = Msg[1];
if (Isplay_by_play === -1 || !data["game_id"]) { // let Isplay_by_play = URL.indexOf("play_by_play");
return; // let data = decode(URL);
} // if (Isplay_by_play === -1 || !data["game_id"]) {
this.app.CPBL.AddTime({ // return;
game_id: data["game_id"], // }
cpbldata: data, // this.app.CPBL.AddTime({
LineID: userId // game_id: data["game_id"],
}, event); // cpbldata: data,
return; // LineID: userId
} // }, event);
case "今日賽事": let GameSno = Msg[1];
case "我愛建喵今日賽事": { if (!GameSno) {
let columns = await this.app.CPBL.GetCPBLList(Msg[1] ? Msg[1] : dateFormat(new Date(), "yyyymmdd")); return;
let res_reply = event.replyimagemap("建喵也愛你", columns).then(function (data) { }
// 當訊息成功回傳後的處理 let Query = `SELECT UserData.LINENotify FROM \`UserData\` WHERE \`userId\` = '${userId}' LIMIT 1;`;
}).catch(function (error) { let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
// 當訊息回傳失敗後的處理 let access_token = res_Query[0]["LINENotify"];
}); this.app.CPBL.AddTime({
return; GameSno: GameSno,
} LineID: userId,
access_token: access_token
default: { }, event);
let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${userId}' LIMIT 1;`; // replyMsg = await this.app.CPBL.GetCPBL1(userId, GameSno);
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); // event.reply(replyMsg)
let Data = res_Query; return;
let Status = Data[0]['Status']; }
switch (Status) {
case "Love_Pig_QA OK": { case "今日賽事":
let Extra = JSON.parse(Data[0]["Extra"]); case "我愛建喵今日賽事": {
let answer = false; let Query = `SELECT UserData.LINENotify FROM \`UserData\` WHERE \`userId\` = '${userId}' LIMIT 1;`;
let keyword = Extra["keyword"].split(","); let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
for (let i = 0; i < keyword.length; i++) { let access_token = res_Query[0]["LINENotify"];
if (!keyword[i] || event.message.text.indexOf(keyword[i]) !== -1) { let columns = await this.app.CPBL.GetCPBLList(Msg[1] ? Msg[1] : dateFormat(new Date(), "yyyy-mm-dd"), access_token);
answer = true; if (columns.length > 0) {
} let res_reply = event.replyimagemap("建喵也愛你", columns).then(function (data) {
} // 當訊息成功回傳後的處理
if (answer) { }).catch(function (error) {
replyMsg = "答對, 答案就是:"; // 當訊息回傳失敗後的處理
} else { });
replyMsg = "答錯, 正確答案是:"; } else {
} replyMsg = "今天沒有比賽";
replyMsg += "\n" + Extra["answer"]; event.reply(replyMsg)
Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userId\`='${userId}');`; .then(function (data) {
res_Query = await this.app.Tools_MYSQLDB.Query(Query); // 當訊息成功回傳後的處理
event.reply(replyMsg).then(function (data) { })
// 當訊息成功回傳後的處理 .catch(function (error) {
}).catch(function (error) { // 當訊息回傳失敗後的處理
// 當訊息回傳失敗後的處理 });
}); }
return; return;
} }
case "CPBL RUN": { case "CPBL綁定": {
switch (Instruction) { let url = `https://notify-bot.line.me/oauth/authorize?response_type=code&scope=notify&response_mode=form_post&client_id=Jj4K1D7XxtmDeXJGF3c0vV&redirect_uri=https://jianmiau.ml:3333/LINENotify&state=${userId}$${displayName}`;
case "停止": { let shorturl = await this.Tools.shorturl(url);
replyMsg = "已停止中職轉播功能"; let Data_columns = [
Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userId\`='${userId}');`; {
res_Query = await this.app.Tools_MYSQLDB.Query(Query); "thumbnailImageUrl": "https://www.line-community.me/awards/uimage/5b46aedf851f74a6af8eaab8",
event.reply(replyMsg).then(function (data) { "imageBackgroundColor": "#FFFFFF",
// 當訊息成功回傳後的處理 "title": "點擊綁定",
}).catch(function (error) { "text": "點擊後將會進行綁定",
// 當訊息回傳失敗後的處理 "defaultAction": {
}); "type": "uri",
break; "label": "點擊綁定",
} "uri": shorturl
},
default: "actions": [
break; {
} "type": "uri",
return; "label": "點擊綁定",
} "uri": shorturl
}
default: ]
break; }
} ];
break; event.replyimagemap("點擊綁定", Data_columns)
} .then(function (data) {
} // 當訊息成功回傳後的處理
} })
if (replyMsg !== "") { .catch(function (error) {
replyMsg = event.message.text; // 當訊息回傳失敗後的處理
// 使用event.reply(要回傳的訊息)方法可將訊息回傳給使用者 });
event.reply(replyMsg).then(function (data) { return;
// 當訊息成功回傳後的處理 }
}).catch(function (error) {
// 當訊息回傳失敗後的處理 default: {
}); let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${userId}' LIMIT 1;`;
} let res_Query = await this.app.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.app.Tools_MYSQLDB.Query(Query);
event.reply(replyMsg).then(function (data) {
// 當訊息成功回傳後的處理
}).catch(function (error) {
// 當訊息回傳失敗後的處理
});
return;
}
case "CPBL RUN": {
switch (Instruction) {
case "停止": {
replyMsg = "已停止中職轉播功能";
Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userId\`='${userId}');`;
res_Query = await this.app.Tools_MYSQLDB.Query(Query);
event.reply(replyMsg).then(function (data) {
// 當訊息成功回傳後的處理
}).catch(function (error) {
// 當訊息回傳失敗後的處理
});
break;
}
default:
break;
}
return;
}
default:
break;
}
break;
}
}
}
if (replyMsg !== "") {
replyMsg = event.message.text;
// 使用event.reply(要回傳的訊息)方法可將訊息回傳給使用者
event.reply(replyMsg).then(function (data) {
// 當訊息成功回傳後的處理
}).catch(function (error) {
// 當訊息回傳失敗後的處理
});
}
}
}
module.exports = MessageClass module.exports = MessageClass

View File

@ -1,49 +1,43 @@
const dateFormat = require('dateformat'); const dateFormat = require('dateformat');
const { decode } = require('querystring'); const { decode } = require('querystring');
/** Postback */ /** Postback */
class PostbackClass { class PostbackClass {
constructor(app) { constructor(app) {
this.app = app; this.app = app;
} }
Postback(event) { Postback(event) {
let action = event.postback.data; let action = event.postback.data;
let data = decode(action); let data = decode(action);
switch (data["action"]) { switch (data["action"]) {
case 'nogame': { case 'hasgame': {
this.NoGame(event, data); this.HasGame(event, data);
break; break;
} }
case 'hasgame': { default:
this.HasGame(event, data); break;
break; }
} }
default: HasGame(event, data) {
break; let game_date = data["game_date"];
} let time = data["time"];
} let nowUNIXtime = Date.now();
let gameUNIXtime = new Date(`${game_date} ${time}`).getTime();
NoGame(event, data) { let IsStart = nowUNIXtime - gameUNIXtime > 0;
let replyMsg = `比賽還沒開始\n時間是${data["game_date"]} ${data["time"]}`; if (IsStart) {
if (event) { this.app.CPBL.AddTime({
event.reply(replyMsg).then(function (data) { GameSno: data["GameSno"],
// 當訊息成功回傳後的處理 access_token: data["access_token"],
}).catch(function (error) { LineID: event.source.userId
// 當訊息回傳失敗後的處理 }, event);
}); } else {
} let replyMsg = `比賽還沒開始\n時間是${game_date} ${time}`;
} event.reply(replyMsg);
}
HasGame(event, data) { }
this.app.CPBL.AddTime({ }
game_id: data["game_id"],
cpbldata: data,
LineID: event.source.userId
}, event);
}
}
module.exports = PostbackClass module.exports = PostbackClass

37
ToolsClass.js Normal file
View File

@ -0,0 +1,37 @@
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
/** ToolsClass */
class ToolsClass {
// constructor() {
// }
/**
* shorturl
* @param url url
*/
shorturl(url) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 400) {
var response = JSON.parse(xhr.responseText);
resolve(response.link);
}
}
};
xhr.open("POST", "https://api-ssl.bitly.com/v4/shorten");
xhr.setRequestHeader("Authorization", "Bearer 88188dfe42e71c8da237fd49ffe5979d0fc69bd6");
xhr.setRequestHeader("Content-Type", "application/json");
let encodedData = JSON.stringify({
"long_url": url,
"domain": "bit.ly"
});
xhr.send(encodedData);
});
}
}
module.exports = ToolsClass

View File

@ -6,7 +6,8 @@ class Tools_MYSQLDBClass {
constructor() { constructor() {
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
let config = { let config = {
host: 'jianmiau.tk', // host: 'jianmiau.tk',
host: '192.168.168.15',
user: 'jianmiau', user: 'jianmiau',
password: 'VQ*ZetC7xcc9%dTW', password: 'VQ*ZetC7xcc9%dTW',
database: 'line-cost-php', database: 'line-cost-php',

121
app.js
View File

@ -1,75 +1,46 @@
// 背景執行 forever start -a -l line-cost-js.log app.js // 背景執行 forever start -a -l line-cost-js.log app.js
// npm start // 重新背景執行 forever restart -a -l line-cost-js.log app.js
// npm run dev // npm start
// Debug nodemon --inspect=192.168.168.15:9229 app.js // npm run dev
// Debug nodemon --inspect=192.168.168.15:9229 app.js
const dateFormat = require('dateformat');
require('dotenv').config() // git clone ssh://JianMiau@192.168.168.15:1922/volume1/github/line-cost-js
// require("./plug/DateFormat");
// 引用linebot SDK const dateFormat = require('dateformat');
var linebot = require('linebot'); require('dotenv').config()
const fs = require('fs'); // require("./plug/DateFormat");
// 引用linebot SDK
//讀取憑證及金鑰 var linebot = require('linebot');
const prikey = fs.readFileSync('privkey.pem', 'utf8'); const fs = require('fs');
const cert = fs.readFileSync('cert.pem', 'utf8');
const cafile = fs.readFileSync('chain.pem', 'utf-8'); //讀取憑證及金鑰
const prikey = fs.readFileSync('../certificate/privkey.pem', 'utf8');
//建立憑證及金鑰 const cert = fs.readFileSync('../certificate/cert.pem', 'utf8');
const credentials = { const cafile = fs.readFileSync('../certificate/chain.pem', 'utf-8');
key: prikey,
cert: cert, //建立憑證及金鑰
ca: cafile const credentials = {
}; key: prikey,
cert: cert,
// 用於辨識Line Channel的資訊 ca: cafile
var bot = linebot({ };
channelId: process.env.toZhuHantoJianMiau,
channelSecret: process.env.ZhuHanchannelSecret, // 用於辨識Line Channel的資訊
channelAccessToken: process.env.ZhuHanchannelAccessToken var bot = linebot({
}); channelId: process.env.toZhuHantoJianMiau,
var JianMiaubot = linebot({ channelSecret: process.env.ZhuHanchannelSecret,
channelId: process.env.toJianMiau, channelAccessToken: process.env.ZhuHanchannelAccessToken
channelSecret: process.env.channelSecret, });
channelAccessToken: process.env.channelAccessToken var JianMiaubot = linebot({
}); channelId: process.env.toJianMiau,
channelSecret: process.env.channelSecret,
const LineBotAPI = require('./LineBotClass'); channelAccessToken: process.env.channelAccessToken
});
// Bot所監聽的webhook路徑與port
const path = process.env.URLPATH || "/"; const LineBotAPI = require('./LineBotClass');
const port = process.env.PORT || 3001;
// Bot所監聽的webhook路徑與port
new LineBotAPI(path, port, credentials, bot, JianMiaubot); const path = process.env.URLPATH || "/";
const port = process.env.PORT || 3001;
// // 當有人傳送訊息給Bot時
// bot.on('event', function (event) { new LineBotAPI(path, port, credentials, bot, JianMiaubot);
// switch (event.type) {
// case 'message': {
// Message.Message(event);
// break;
// }
// case 'postback': {
// Postback.Postback(this, event);
// break;
// }
// case 'join':
// case 'leave':
// case 'follow':
// case 'unfollow':
// case 'memberJoin':
// case 'memberLeave':
// case 'accountLink':
// case 'fallback':
// default:
// break;
// }
// });
// bot.listen(path, port, credentials, function () {
// let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
// console.log(`${datetime} listening on ${port}`);
// console.log(`${datetime} [BOT已準備就緒]`);
// // Tools_MYSQLDB.readData();
// });

View File

@ -22,4 +22,4 @@
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC" "license": "ISC"
} }