Compare commits

..

No commits in common. "master" and "v1" have entirely different histories.
master ... v1

8 changed files with 765 additions and 889 deletions

View File

@ -1,404 +1,347 @@
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 */
/** CPBL */ class CPBLClass {
class CPBLClass { constructor(app) {
constructor(app) { this.app = app;
this.app = app; this.TimeList = [];
this.LINENotify = new LINENotifyClass(); // var rule = new schedule.RecurrenceRule();
this.TimeList = []; // // rule.minute = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];
// var rule = new schedule.RecurrenceRule(); // rule.second = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];
// // rule.minute = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]; // // console.log(`設定任務 每${JSON.stringify(rule.minute)}分鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"));
// rule.second = [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"));
// // console.log(`設定任務 每${JSON.stringify(rule.minute)}分鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")); // this.Timer = schedule.scheduleJob(rule, this.Update.bind(this));
// 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");
async Update() { // console.log("執行任務 現在時間: " + datetime);
// let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); // if (dateFormat(new Date(), "ss") === "00") {
// console.log("執行任務 現在時間: " + datetime); // this.Timer.cancel();
// if (dateFormat(new Date(), "ss") === "00") { // // console.log("取消任務 現在時間: " + datetime);
// this.Timer.cancel(); // }
// // console.log("取消任務 現在時間: " + datetime); if (this.TimeList.length > 0) {
// } for (let i = 0; i < this.TimeList.length; i++) {
if (this.TimeList.length > 0) { this.RunTime(this.TimeList[i]);
for (let i = 0; i < this.TimeList.length; i++) { }
this.RunTime(this.TimeList[i]); } else {
} this.CloseTime();
} else { }
this.CloseTime(); }
}
} async AddTime(Data, event) {
let game_id = Data["game_id"];
async AddTime(Data, event) { let cpbldata = Data["cpbldata"];
let replyMsg = ""; let LineID = Data["LineID"];
let GameSno = Data["GameSno"];
let LineID = Data["LineID"]; let Isgame_id = false;
let access_token = Data["access_token"]; let IsLineID = false;
let Time = {
let IsHaveGameSno = false; game_id: game_id,
let IsHaveLineID = false; cpbldata: cpbldata,
let Time = { LineID: [LineID]
GameSno: GameSno, }
LineID: [LineID], for (let i = 0; i < this.TimeList.length; i++) {
access_token: [access_token] if (this.TimeList[i]["game_id"] === game_id) {
} Isgame_id = true;
for (let i = 0; i < this.TimeList.length; i++) { Time = this.TimeList[i];
if (this.TimeList[i]["GameSno"] === GameSno) { for (let j = 0; j < this.TimeList[i]["LineID"].length; j++) {
IsHaveGameSno = true; if (this.TimeList[i]["LineID"][j] === LineID) {
Time = this.TimeList[i]; IsLineID = true;
for (let j = 0; j < this.TimeList[i]["LineID"].length; j++) { break;
if (this.TimeList[i]["LineID"][j] === LineID) { }
IsHaveLineID = true; }
break; break;
} }
} }
break; let IsRUN = true;
} let Response = await this.GetCPBL(Time);
} if (Response[Response.length - 1]["title"].indexOf("比賽結束") !== -1) {
let IsRUN = true; IsRUN = false;
let Response = await this.GetCPBL(GameSno); }
if (Response === "比賽尚未開始" || Response[Response.length - 1].indexOf("比賽結束") !== -1) { let replyMsg = "";
IsRUN = false; for (let i = 0; i < Response.length; i++) {
} replyMsg += Response[i]["title"];
if (Response === "比賽尚未開始") { if (i !== Response.length - 1) {
// await this.LINENotify.Send(access_token, Response); replyMsg += "\n\n";
} else { }
let PushMsg = ""; }
for (let i = 0; i < Response.length; i++) { if (IsRUN) {
let ThisPushMsg = Response[i]; if (!Isgame_id) {
if (PushMsg.length + ThisPushMsg.length > 1000) { // 沒有這場賽事
// await this.LINENotify.Send(access_token, PushMsg); if (this.TimeList.length === 0) {
PushMsg = ThisPushMsg; this.StartTime();
} else { }
PushMsg += ThisPushMsg; this.TimeList.push(Time);
} } else if (Isgame_id && !IsLineID) {
} // 有這場賽事但沒這個帳號
// await this.LINENotify.Send(access_token, PushMsg); Time["LineID"].push(LineID);
} }
if (IsRUN) { let Extra = {
if (!IsHaveGameSno) { cpbldata: cpbldata,
// 沒有這場賽事 count: Response.length
if (this.TimeList.length === 0) { }
this.StartTime(); 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}');`;
this.TimeList.push(Time); let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
} else if (IsHaveGameSno && !IsHaveLineID) { } else {
// 有這場賽事但沒這個帳號 replyMsg += "\n\n已停止中職轉播功能";
Time["LineID"].push(LineID); }
Time["access_token"].push(access_token); if (event) {
} event.reply(replyMsg).then(function (data) {
let Extra = { // 當訊息成功回傳後的處理
GameSno: GameSno, }).catch(function (error) {
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);
} else { StartTime() {
replyMsg = "已停止中職轉播功能"; // var rule = '0 1 * * * *';
} // * * * * * *
if (event) { // ┬ ┬ ┬ ┬ ┬ ┬
event.reply(replyMsg).then(function (data) { // │ │ │ │ │ |
// 當訊息成功回傳後的處理 // │ │ │ │ │ └ 星期几取值0 - 7其中 0 和 7 都表示是周日
}).catch(function (error) { // │ │ │ │ └─── 月份取值1 - 12
// 當訊息回傳失敗後的處理 // │ │ │ └────── 日期取值1 - 31
}); // │ │ └───────── 时取值0 - 23
} // │ └──────────── 分取值0 - 59
} // └─────────────── 秒取值0 - 59可选
var rule = new schedule.RecurrenceRule();
StartTime() { let minute = 2;
// var rule = '2 * * * * *'; let minute_arr = [];
// * * * * * * for (let i = 0; i < 60; i++) {
// ┬ ┬ ┬ ┬ ┬ ┬ if (i % minute === 0) {
// │ │ │ │ │ | minute_arr.push(i);
// │ │ │ │ │ └ 星期几取值0 - 7其中 0 和 7 都表示是周日 }
// │ │ │ │ └─── 月份取值1 - 12 }
// │ │ │ └────── 日期取值1 - 31 rule.minute = minute_arr;
// │ │ └───────── 时取值0 - 23 // rule.second = [0];
// │ └──────────── 分取值0 - 59 // 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"));
var rule = new schedule.RecurrenceRule(); // console.log(`設定任務 每${JSON.stringify(rule.second)}秒鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"));
// rule.date = "*"; this.Timer = schedule.scheduleJob(rule, this.Update.bind(this));
// rule.dayOfWeek = "*"; }
// rule.hour = "*";
// rule.minute = "*"; CloseTime() {
// rule.year = "*"; this.Timer.cancel();
// rule.month = "*"; }
let minute = 2;
let minute_arr = []; async GetCPBL(Time) {
for (let i = 0; i < 60; i++) { let game_id = Time["game_id"];
if (i % minute === 0) { let cpbldata = Time["cpbldata"];
minute_arr.push(i); let LineID = Time["LineID"];
} 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); };
// rule.minute = minute_arr; let Response = await this.GetData(url, Data);
// rule.second = [0]; Response = [].concat.apply([], JSON.parse(Response));
// rule.second = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]; return new Promise((resolve, reject) => {
// console.log(`設定任務 每${minute}分鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")); // 傳入 resolve 與 reject表示資料成功與失敗
console.log(`設定任務 每${minute}秒鐘 現在時間: ` + dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss")); resolve(Response);
// this.Timer = schedule.scheduleJob(rule, this.Update.bind(this)); // reject()
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++) {
CloseTime() { if (this.TimeList[i]["game_id"] === game_id) {
this.Timer.cancel(); this.TimeList.splice(i, 1);
} 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 url = "https://jianmiau.ml:3333/CPBL"; let game_id = Time["game_id"];
let Response = await this.GetData(url, Data); let cpbldata = Time["cpbldata"];
Response = JSON.parse(Response); let LineID = Time["LineID"];
// Response = [].concat.apply([], JSON.parse(Response)); let url = "https://jianmiau.ml:3333/CPBL";
return new Promise((resolve, reject) => { let Data = {
// 傳入 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(Response); };
// reject() let Response = await this.GetData(url, Data);
}); 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) {
DelTime(game_id) { IsRUN = false;
for (let i = 0; i < this.TimeList.length; i++) { }
if (this.TimeList[i]["game_id"] === game_id) { for (let i = 0; i < LineID.length; i++) {
this.TimeList.splice(i, 1); let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${LineID[i]}' LIMIT 1;`;
if (this.TimeList.length === 0) { let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
this.CloseTime(); let Data = res_Query;
} let Status = Data[0]['Status'];
} if (Status === "CPBL RUN") {
} let Extra = JSON.parse(Data[0]["Extra"]);
} let cpbldata = Extra["cpbldata"];
let count = Extra["count"];
async RunTime(Time) { if (Response.length > count) {
let GameSno = Time["GameSno"]; let replyMsg = "";
let LineID = Time["LineID"]; for (let j = count; j < Response.length; j++) {
let access_token = Time["access_token"]; replyMsg += Response[j]["title"];
let Response = await this.GetCPBL(GameSno); if (j !== Response.length - 1) {
let IsRUN = true; replyMsg += "\n\n";
if (Response === "比賽尚未開始" || Response[Response.length - 1].indexOf("比賽結束") !== -1) { }
IsRUN = false; }
} if (IsRUN) {
for (let i = 0; i < LineID.length; i++) { let Extra = {
let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${LineID[i]}' LIMIT 1;`; cpbldata: cpbldata,
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); count: Response.length
let Data = res_Query; }
let Status = Data[0]['Status']; let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
if (Status === "CPBL RUN") { let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='CPBL RUN', \`Extra\`='${JSON.stringify(Extra)}' WHERE (\`userid\`='${LineID[i]}');`;
let Extra = JSON.parse(Data[0]["Extra"]); let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
let GameSno = Extra["GameSno"]; } else {
let count = Extra["count"]; let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
if (Response.length > count) { let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userid\`='${LineID[i]}');`;
let PushMsg = ""; let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
for (let i = count; i < Response.length; i++) { replyMsg += "\n\n已停止中職轉播功能";
let ThisPushMsg = Response[i]; }
if (PushMsg.length + ThisPushMsg.length > 1000) { let res_Msg = this.app.bot.push(LineID[i], replyMsg);
await this.LINENotify.Send(access_token, PushMsg); }
PushMsg = ThisPushMsg; }
} else { }
PushMsg += ThisPushMsg; if (!IsRUN) {
} this.DelTime(game_id);
} }
await this.LINENotify.Send(access_token, PushMsg); }
if (IsRUN) {
let Extra = { async GetCPBLList(Date) {
GameSno: GameSno, // let game_id = Time["game_id"];
count: Response.length // let cpbldata = Time["cpbldata"];
} // let LineID = Time["LineID"];
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); let url = "https://jianmiau.ml:3333/CPBLList";
let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='CPBL RUN', \`Extra\`='${JSON.stringify(Extra)}' WHERE (\`userid\`='${LineID[i]}');`; let Data = {
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); Date: Date
} else { };
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); let Response = await this.GetData(url, Data);
let Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userid\`='${LineID[i]}');`; Response = [].concat.apply([], JSON.parse(Response));
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); let columns = [];
PushMsg = "已停止中職轉播功能"; for (let i = 0; i < Response.length; i++) {
let res_Msg = this.app.bot.push(LineID[i], PushMsg); let img = [];
} let team = [];
// await this.LINENotify.Send(access_token, PushMsg); let data = "";
} let href = Response[i]["href"];
} for (let j = 1; j <= 2; j++) {
} if (Response[i][`img${j}`].indexOf("AJL011_logo_01") !== -1) {
if (!IsRUN) { img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/R.png");
this.DelTime(game_id); team.push("樂天桃猿");
} } else if (Response[i][`img${j}`].indexOf("B04_logo_01") !== -1) {
} img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/F.png");
team.push("富邦悍將");
async GetCPBLList(DateTime, access_token) { } else if (Response[i][`img${j}`].indexOf("D01_logo_01") !== -1) {
// let game_id = Time["game_id"]; img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/D.png");
// let cpbldata = Time["cpbldata"]; team.push("味全龍");
// let LineID = Time["LineID"]; } else if (Response[i][`img${j}`].indexOf("E02_logo_01") !== -1) {
let url = "https://jianmiau.ml:3333/CPBLList"; img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/B.png");
let Data = { team.push("中信兄弟");
today: DateTime } else if (Response[i][`img${j}`].indexOf("L01_logo_01") !== -1) {
// today: "2021-09-26" img.push("https://jianmiau.ml/MyWeb/Resources/CPBL/L.png");
}; team.push("統一獅");
let Response = await this.GetData(url, Data); }
Response = [].concat.apply([], JSON.parse(Response)); }
let columns = []; if (href["time"]) {
for (let i = 0; i < Response.length; i++) { 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"]}`;
let img = []; } else {
let team = []; 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 data = ""; }
let game = Response[i]; 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 info = { let Data_columns = {
"樂天桃猿": { "thumbnailImageUrl": img[0],
img: "https://jianmiau.ml/MyWeb/Resources/CPBL/R.png" "imageBackgroundColor": "#FFFFFF",
}, "title": `${team[0]} VS ${team[1]}`,
"富邦悍將": { "text": `比賽場地 ${Response[i]["address"]} ${href["game_date"]}`,
img: "https://jianmiau.ml/MyWeb/Resources/CPBL/F.png" "defaultAction": {
}, "type": "uri",
"味全龍": { "label": "比賽網站",
img: "https://jianmiau.ml/MyWeb/Resources/CPBL/D.png" "uri": url
}, },
"中信兄弟": { "actions": [
img: "https://jianmiau.ml/MyWeb/Resources/CPBL/B.png" {
}, "type": "postback",
"統一7-ELEVEn獅": { "label": "追蹤比賽",
img: "https://jianmiau.ml/MyWeb/Resources/CPBL/L.png" "data": data
}, }
} ]
let url = `https://karolchang.github.io/cpbl-vue/#/record/${game.GameSno}/A/2021`; };
let gametime = game.PreExeDate.split("T"); columns.push(Data_columns);
// let nowUNIXtime = Date.now(); }
// let gameUNIXtime = new Date(`${gametime[0]} ${gametime[1]}`).getTime();
// let IsStart = nowUNIXtime - gameUNIXtime > 0; // columns = [
data = `action=hasgame&game_date=${gametime[0]}&time=${gametime[1]}&GameSno=${game.GameSno}&access_token=${access_token}`; // {
let Data_columns = { // "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/L.png",
"thumbnailImageUrl": info[game.HomeTeamName].img, // "imageBackgroundColor": "#FFFFFF",
"imageBackgroundColor": "#FFFFFF", // "title": "this is menu",
"title": `${game.VisitingTeamName} VS ${game.HomeTeamName}`, // "text": "description",
"text": `比賽場地 ${game.FieldAbbe} ${gametime[0]} ${gametime[1]}`, // "defaultAction": {
"defaultAction": { // "type": "uri",
"type": "uri", // "label": "View detail",
"label": "比賽網站", // "uri": "http://example.com/page/123"
"uri": url // },
}, // "actions": [
"actions": [ // {
{ // "type": "postback",
// "type": "uri", // "label": "Buy",
// "label": "比賽網站", // "data": "action=buy&itemid=111"
// "uri": url // }
"type": "postback", // ]
"label": "追蹤比賽", // },
"data": data // {
} // "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/B.png",
] // "imageBackgroundColor": "#000000",
}; // "title": "this is menu",
columns.push(Data_columns); // "text": "description",
} // "defaultAction": {
// "type": "uri",
// columns = [ // "label": "View detail",
// { // "uri": "http://example.com/page/222"
// "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/L.png", // },
// "imageBackgroundColor": "#FFFFFF", // "actions": [
// "title": "this is menu", // {
// "text": "description", // "type": "postback",
// "defaultAction": { // "label": "Buy",
// "type": "uri", // "data": "action=buy&itemid=222"
// "label": "View detail", // }
// "uri": "http://example.com/page/123" // ]
// }, // }
// "actions": [ // ]
// {
// "type": "postback", return new Promise((resolve, reject) => {
// "label": "Buy", // 傳入 resolve 與 reject表示資料成功與失敗
// "data": "action=buy&itemid=111" resolve(columns);
// } // reject()
// ] });
// }, }
// {
// "thumbnailImageUrl": "https://jianmiau.ml/MyWeb/Resources/CPBL/B.png", /**
// "imageBackgroundColor": "#000000", * 取得表
// "title": "this is menu", * @param Url Url
// "text": "description", * @param arrange 是否需要整理
// "defaultAction": { */
// "type": "uri", GetData(Url, Data) {
// "label": "View detail", return new Promise((resolve, reject) => {
// "uri": "http://example.com/page/222" var xhr = new XMLHttpRequest();
// }, xhr.onreadystatechange = function () {
// "actions": [ if (xhr.readyState === 4) {
// { if (xhr.status >= 200 && xhr.status < 400) {
// "type": "postback", var response = xhr.responseText;
// "label": "Buy", resolve(response);
// "data": "action=buy&itemid=222" } else {
// } reject("");
// ] }
// } }
// ] };
xhr.open("POST", Url, true);
return new Promise((resolve, reject) => { xhr.setRequestHeader("Content-Type", "application/json");
// 傳入 resolve 與 reject表示資料成功與失敗 xhr.send(JSON.stringify(Data));
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,302 +1,238 @@
const dateFormat = require('dateformat'); const dateFormat = require('dateformat');
const { decode } = require('querystring'); const { decode } = require('querystring');
const ToolsClass = require('./ToolsClass');
/** Message */
/** Message */ class MessageClass {
class MessageClass { constructor(app) {
constructor(app) { this.app = app;
this.app = app; // this.app.CPBL.AddTime({
this.Tools = new ToolsClass(); // game_id: 64,
// this.app.CPBL.AddTime({ // cpbldata: {
// game_id: 64, // "http://www.cpbl.com.tw/games/play_by_play.html?": "",
// cpbldata: { // game_type: "01",
// "http://www.cpbl.com.tw/games/play_by_play.html?": "", // game_id: "63",
// game_type: "01", // game_date: "2021-04-20",
// game_id: "63", // pbyear: "2021",
// game_date: "2021-04-20", // },
// pbyear: "2021", // LineID: 1
// }, // });
// LineID: 1 }
// });
} Message(event) {
switch (event.message.type) {
Message(event) { case 'text': {
switch (event.message.type) { this.Text(event);
case 'text': { break;
this.Text(event); }
break;
} case 'sticker': {
this.Sticker(event);
case 'sticker': { break;
this.Sticker(event); }
break;
} default:
break;
default: }
break; }
}
} Text(event) {
switch (event.source.type) {
Text(event) { case "user": {
switch (event.source.type) { this.User(event);
case "user": { break;
this.User(event); }
break;
} case "group":
break;
case "group":
break; default:
break;
default: }
break; }
}
} async Sticker(event) {
switch (event.source.type) {
async Sticker(event) { case "user": {
switch (event.source.type) { let userId = event.source.userId;
case "user": { let displayName = "";
let userId = event.source.userId; let profile = await this.app.bot.getUserProfile(userId);
let displayName = ""; if (profile) {
let profile = await this.app.bot.getUserProfile(userId); displayName = profile.displayName;
if (profile) { }
displayName = profile.displayName; let replyMsg = `line://app/1602687308-GXq4Vvk9?type=sticker&stk=noanim&sid=${event.message.stickerId}&pkg=${event.message.packageId}`;
}
let replyMsg = `line://app/1602687308-GXq4Vvk9?type=sticker&stk=noanim&sid=${event.message.stickerId}&pkg=${event.message.packageId}`; //ToJianMiau------------------------------------------------------------------------------------------------------
if (userId !== process.env.toZhuHantoJianMiau) {
//ToJianMiau------------------------------------------------------------------------------------------------------ let ToJM_message = "已接收訊息:";
if (userId !== process.env.toZhuHantoJianMiau) { ToJM_message += `\ndisplayName: ${displayName}`;
let ToJM_message = "已接收訊息:"; ToJM_message += `\nuserId: ${userId}`;
ToJM_message += `\ndisplayName: ${displayName}`; ToJM_message += "\n" + replyMsg;
ToJM_message += `\nuserId: ${userId}`; let res_toJianMiau = this.app.JianMiaubot.push(process.env.toJianMiau, ToJM_message);
ToJM_message += "\n" + replyMsg; }
let res_toJianMiau = this.app.JianMiaubot.push(process.env.toJianMiau, ToJM_message); let res_reply = event.reply(replyMsg).then(function (data) {
} // 當訊息成功回傳後的處理
let res_reply = event.reply(replyMsg).then(function (data) { }).catch(function (error) {
// 當訊息成功回傳後的處理 // 當訊息回傳失敗後的處理
}).catch(function (error) { });
// 當訊息回傳失敗後的處理 break;
}); }
break;
} case "group":
break;
case "group":
break; default:
break;
default: }
break; }
}
} async User(event) {
let userId = event.source.userId;
async User(event) { let replyMsg = event.message.text;
let userId = event.source.userId; let displayName = "";
let replyMsg = event.message.text; let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss");
let displayName = ""; let profile = await this.app.bot.getUserProfile(userId);
let datetime = dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"); if (profile) {
let profile = await this.app.bot.getUserProfile(userId); displayName = profile.displayName;
if (profile) { }
displayName = profile.displayName;
} //ToJianMiau------------------------------------------------------------------------------------------------------
if (userId !== process.env.toZhuHantoJianMiau) {
//ToJianMiau------------------------------------------------------------------------------------------------------ let ToJM_message = `已接收訊息:`;
if (userId !== process.env.toZhuHantoJianMiau) { ToJM_message += `\ndisplayName: ${displayName}`;
let ToJM_message = `已接收訊息:`; ToJM_message += `\nuserId: ${userId}`;
ToJM_message += `\ndisplayName: ${displayName}`; ToJM_message += `\nmessage: ${replyMsg}`;
ToJM_message += `\nuserId: ${userId}`; let res_toJianMiau = this.app.JianMiaubot.push(process.env.toJianMiau, ToJM_message);
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特別功能 /** 訊息 */
if (userId === process.env.toZhuHantoJianMiau || userId === process.env.toZhuHantoZhuHan) { let Msg = event.message.text.split(" ");
/** 訊息 */
let Msg = event.message.text.split(" "); /** 指令 */
let Instruction = Msg[0];
/** 指令 */ switch (Instruction) {
let Instruction = Msg[0]; case "msg":
switch (Instruction) { case "Msg":
case "msg": case "MSG": {
case "Msg": if (userId == process.env.toZhuHantoJianMiau) {
case "MSG": { if (Msg[1] === "豬涵") {
if (userId == process.env.toZhuHantoJianMiau) { Msg[1] = process.env.toZhuHantoZhuHan;
if (Msg[1] === "豬涵") { } else if (Msg[1] === "建喵") {
Msg[1] = process.env.toZhuHantoZhuHan; Msg[1] = process.env.toZhuHantoJianMiau;
} else if (Msg[1] === "建喵") { }
Msg[1] = process.env.toZhuHantoJianMiau; replyMsg = "";
} for (let i = 2; i < Msg.length; i++) {
replyMsg = ""; replyMsg += Msg[i] + (i === Msg.length - 1 ? "" : " ");
for (let i = 2; i < Msg.length; i++) { }
replyMsg += Msg[i] + (i === Msg.length - 1 ? "" : " "); let res_Msg = this.app.bot.push(Msg[1], replyMsg);
}
let res_Msg = this.app.bot.push(Msg[1], replyMsg); let ToJM_message = "已發送訊息:";
ToJM_message += `\nuserId: ${Msg[1]}`;
let ToJM_message = "已發送訊息:"; ToJM_message += `\nmessage: ${replyMsg}`;
ToJM_message += `\nuserId: ${Msg[1]}`; let res_reply = event.reply(ToJM_message).then(function (data) {
ToJM_message += `\nmessage: ${replyMsg}`; // 當訊息成功回傳後的處理
let res_reply = event.reply(ToJM_message).then(function (data) { }).catch(function (error) {
// 當訊息成功回傳後的處理 // 當訊息回傳失敗後的處理
}).catch(function (error) { });
// 當訊息回傳失敗後的處理 }
}); return;
} }
return;
} case "中職": {
let URL = Msg[1];
case "中職": { let Isplay_by_play = URL.indexOf("play_by_play");
// let URL = Msg[1]; let data = decode(URL);
// let Isplay_by_play = URL.indexOf("play_by_play"); if (Isplay_by_play === -1 || !data["game_id"]) {
// let data = decode(URL); return;
// if (Isplay_by_play === -1 || !data["game_id"]) { }
// return; this.app.CPBL.AddTime({
// } game_id: data["game_id"],
// this.app.CPBL.AddTime({ cpbldata: data,
// game_id: data["game_id"], LineID: userId
// cpbldata: data, }, event);
// LineID: userId return;
// }, event); }
let GameSno = Msg[1]; case "今日賽事":
if (!GameSno) { case "我愛建喵今日賽事": {
return; let columns = await this.app.CPBL.GetCPBLList(Msg[1] ? Msg[1] : dateFormat(new Date(), "yyyymmdd"));
} let res_reply = event.replyimagemap("建喵也愛你", columns).then(function (data) {
let Query = `SELECT UserData.LINENotify FROM \`UserData\` WHERE \`userId\` = '${userId}' LIMIT 1;`; // 當訊息成功回傳後的處理
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); }).catch(function (error) {
let access_token = res_Query[0]["LINENotify"]; // 當訊息回傳失敗後的處理
this.app.CPBL.AddTime({ });
GameSno: GameSno, return;
LineID: userId, }
access_token: access_token
}, event); default: {
// replyMsg = await this.app.CPBL.GetCPBL1(userId, GameSno); let Query = `SELECT * FROM \`line-cost-status\` WHERE \`userId\` = '${userId}' LIMIT 1;`;
// event.reply(replyMsg) let res_Query = await this.app.Tools_MYSQLDB.Query(Query);
return; let Data = res_Query;
} let Status = Data[0]['Status'];
switch (Status) {
case "今日賽事": case "Love_Pig_QA OK": {
case "我愛建喵今日賽事": { let Extra = JSON.parse(Data[0]["Extra"]);
let Query = `SELECT UserData.LINENotify FROM \`UserData\` WHERE \`userId\` = '${userId}' LIMIT 1;`; let answer = false;
let res_Query = await this.app.Tools_MYSQLDB.Query(Query); let keyword = Extra["keyword"].split(",");
let access_token = res_Query[0]["LINENotify"]; for (let i = 0; i < keyword.length; i++) {
let columns = await this.app.CPBL.GetCPBLList(Msg[1] ? Msg[1] : dateFormat(new Date(), "yyyy-mm-dd"), access_token); if (!keyword[i] || event.message.text.indexOf(keyword[i]) !== -1) {
if (columns.length > 0) { answer = true;
let res_reply = event.replyimagemap("建喵也愛你", columns).then(function (data) { }
// 當訊息成功回傳後的處理 }
}).catch(function (error) { if (answer) {
// 當訊息回傳失敗後的處理 replyMsg = "答對, 答案就是:";
}); } else {
} else { replyMsg = "答錯, 正確答案是:";
replyMsg = "今天沒有比賽"; }
event.reply(replyMsg) replyMsg += "\n" + Extra["answer"];
.then(function (data) { 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) { // 當訊息成功回傳後的處理
// 當訊息回傳失敗後的處理 }).catch(function (error) {
}); // 當訊息回傳失敗後的處理
} });
return; return;
} }
case "CPBL綁定": { case "CPBL RUN": {
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}`; switch (Instruction) {
let shorturl = await this.Tools.shorturl(url); case "停止": {
let Data_columns = [ replyMsg = "已停止中職轉播功能";
{ Query = `UPDATE \`line-cost-status\` SET \`datetime\`='${datetime}', \`Status\`='', \`Extra\`='' WHERE (\`userId\`='${userId}');`;
"thumbnailImageUrl": "https://www.line-community.me/awards/uimage/5b46aedf851f74a6af8eaab8", res_Query = await this.app.Tools_MYSQLDB.Query(Query);
"imageBackgroundColor": "#FFFFFF", event.reply(replyMsg).then(function (data) {
"title": "點擊綁定", // 當訊息成功回傳後的處理
"text": "點擊後將會進行綁定", }).catch(function (error) {
"defaultAction": { // 當訊息回傳失敗後的處理
"type": "uri", });
"label": "點擊綁定", break;
"uri": shorturl }
},
"actions": [ default:
{ break;
"type": "uri", }
"label": "點擊綁定", return;
"uri": shorturl }
}
] default:
} break;
]; }
event.replyimagemap("點擊綁定", Data_columns) break;
.then(function (data) { }
// 當訊息成功回傳後的處理 }
}) }
.catch(function (error) { if (replyMsg !== "") {
// 當訊息回傳失敗後的處理 replyMsg = event.message.text;
}); // 使用event.reply(要回傳的訊息)方法可將訊息回傳給使用者
return; event.reply(replyMsg).then(function (data) {
} // 當訊息成功回傳後的處理
}).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,43 +1,49 @@
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 'hasgame': { case 'nogame': {
this.HasGame(event, data); this.NoGame(event, data);
break; break;
} }
default: case 'hasgame': {
break; this.HasGame(event, data);
} break;
} }
HasGame(event, data) { default:
let game_date = data["game_date"]; break;
let time = data["time"]; }
let nowUNIXtime = Date.now(); }
let gameUNIXtime = new Date(`${game_date} ${time}`).getTime();
let IsStart = nowUNIXtime - gameUNIXtime > 0; NoGame(event, data) {
if (IsStart) { let replyMsg = `比賽還沒開始\n時間是${data["game_date"]} ${data["time"]}`;
this.app.CPBL.AddTime({ if (event) {
GameSno: data["GameSno"], event.reply(replyMsg).then(function (data) {
access_token: data["access_token"], // 當訊息成功回傳後的處理
LineID: event.source.userId }).catch(function (error) {
}, 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

View File

@ -1,37 +0,0 @@
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,8 +6,7 @@ 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,46 +1,75 @@
// 背景執行 forever start -a -l line-cost-js.log app.js // 背景執行 forever start -a -l line-cost-js.log app.js
// 重新背景執行 forever restart -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');
// git clone ssh://JianMiau@192.168.168.15:1922/volume1/github/line-cost-js require('dotenv').config()
// require("./plug/DateFormat");
const dateFormat = require('dateformat'); // 引用linebot SDK
require('dotenv').config() var linebot = require('linebot');
// require("./plug/DateFormat"); const fs = require('fs');
// 引用linebot SDK
var linebot = require('linebot'); //讀取憑證及金鑰
const fs = require('fs'); const prikey = fs.readFileSync('privkey.pem', 'utf8');
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 cafile = fs.readFileSync('../certificate/chain.pem', 'utf-8'); const credentials = {
key: prikey,
//建立憑證及金鑰 cert: cert,
const credentials = { ca: cafile
key: prikey, };
cert: cert,
ca: cafile // 用於辨識Line Channel的資訊
}; var bot = linebot({
channelId: process.env.toZhuHantoJianMiau,
// 用於辨識Line Channel的資訊 channelSecret: process.env.ZhuHanchannelSecret,
var bot = linebot({ channelAccessToken: process.env.ZhuHanchannelAccessToken
channelId: process.env.toZhuHantoJianMiau, });
channelSecret: process.env.ZhuHanchannelSecret, var JianMiaubot = linebot({
channelAccessToken: process.env.ZhuHanchannelAccessToken channelId: process.env.toJianMiau,
}); channelSecret: process.env.channelSecret,
var JianMiaubot = linebot({ channelAccessToken: process.env.channelAccessToken
channelId: process.env.toJianMiau, });
channelSecret: process.env.channelSecret,
channelAccessToken: process.env.channelAccessToken const LineBotAPI = require('./LineBotClass');
});
// Bot所監聽的webhook路徑與port
const LineBotAPI = require('./LineBotClass'); const path = process.env.URLPATH || "/";
const port = process.env.PORT || 3001;
// Bot所監聽的webhook路徑與port
const path = process.env.URLPATH || "/"; new LineBotAPI(path, port, credentials, bot, JianMiaubot);
const port = process.env.PORT || 3001;
// // 當有人傳送訊息給Bot時
new LineBotAPI(path, port, credentials, bot, JianMiaubot); // bot.on('event', function (event) {
// 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"
} }