|
const express = require("express"); |
|
const cs = require("cloudscraper"); |
|
const q = require("request"); |
|
const qjob = require("qjobs"); |
|
const Telegraf = require("telegraf"); |
|
const Logs = require("telegraf-update-logger"); |
|
const Extra = require("telegraf/extra"); |
|
const Markup = require("telegraf/markup"); |
|
const Composer = require("telegraf/composer"); |
|
const session = require("telegraf/session"); |
|
const Stage = require("telegraf/stage"); |
|
const WizardScene = require("telegraf/scenes/wizard"); |
|
const Date = require("date-format-lite"); |
|
|
|
const app = express(); |
|
const bot = new Telegraf(process.env.BOT_TOKEN); |
|
|
|
//method |
|
var parseRupiah = number => { |
|
let tempNum = String(number) |
|
.split("") |
|
.reverse(); |
|
let rupiah = ""; |
|
|
|
for (let i = 0; i < tempNum.length; i++) { |
|
if ((i + 1) % 3 == 0 && i != tempNum.length - 1) { |
|
tempNum[i] = `.${tempNum[i]}`; |
|
} |
|
} |
|
rupiah = `Rp. ${tempNum.reverse().join("")},00`; |
|
return rupiah; |
|
}; |
|
|
|
var parseTypeTracking = type => { |
|
switch(type) |
|
{ |
|
case 'DELIVERY_SUCCESS': |
|
return "Berhasil dikirim." |
|
break; |
|
case 'DRIVER_INBOUND_SCAN': |
|
return "Parcel sedang dikirim." |
|
break; |
|
case 'HUB_INBOUND_SCAN': |
|
return "Berhasil dijemput dari pengirim." |
|
break; |
|
case 'PARCEL_ROUTING_SCAN': |
|
return "Parcel sedang diproses di gudang Ninja Van." |
|
break; |
|
case 'ADDED_TO_SHIPMENT': |
|
return "Berangkat dari gudang Ninja Van - Sedang transit." |
|
break; |
|
case 'DRIVER_PICKUP_SCAN': |
|
return "Pesanan dibuat." |
|
break; |
|
default: |
|
} |
|
} |
|
|
|
|
|
|
|
const error_typing = "Tekan tombol `💬 Masukan Resi` atau ketik /cek"; |
|
|
|
bot.catch((err, ctx) => { |
|
console.log(`Ooops, encountered an error for ${ctx.updateType}`, err); |
|
}); |
|
|
|
const stepHandler = new Composer(); |
|
stepHandler.action("cek", ctx => { |
|
ctx.replyWithHTML( |
|
"✍️ <i>Silahkan Ketik Resinya ...</i>", |
|
Markup.inlineKeyboard([ |
|
Markup.callbackButton("⛔ BATAL !! ", "batal") |
|
]).extra() |
|
); |
|
return ctx.wizard.next(); |
|
}); |
|
stepHandler.command("cek", ctx => { |
|
ctx.replyWithHTML( |
|
"✍️ <i>Silahkan Ketik Resinya ...</i>", |
|
Markup.inlineKeyboard([ |
|
Markup.callbackButton("⛔ BATAL !! ", "batal") |
|
]).extra() |
|
); |
|
return ctx.wizard.next(); |
|
}); |
|
stepHandler.action("batal", ctx => { |
|
ctx.scene.leave(); |
|
ctx.scene.reenter(); |
|
return ctx.wizard.stop(); |
|
}); |
|
stepHandler.command("batal", ctx => { |
|
ctx.scene.leave(); |
|
ctx.scene.reenter(); |
|
return ctx.wizard.stop(); |
|
}); |
|
|
|
const superWizard = new WizardScene( |
|
"super-wizard", |
|
ctx => { |
|
ctx.replyWithHTML( |
|
`<code>🛰 CEK RESI Ninja Xpress v1.0 🛰</code> |
|
|
|
<b>🛑 Silahkan Pilih Menu Dibawah Ini ... </b>`, |
|
Markup.inlineKeyboard([ |
|
Markup.callbackButton("💬 Masukan Resi", "cek"), |
|
Markup.callbackButton("❓ Help ", "help") |
|
]).extra() |
|
); |
|
return ctx.wizard.next(); |
|
}, |
|
stepHandler, |
|
async ctx => { |
|
try { |
|
const input_resi = await ctx.message.text; |
|
cs.get( |
|
"https://api.ninjavan.co/id/dash/1.2/public/orders?tracking_id=" + |
|
input_resi, |
|
async function(err, response, body) { |
|
const wait_data = await JSON.parse(body); |
|
|
|
if (response.statusCode != "400") { |
|
//result tracking RESI |
|
|
|
const data_general = await wait_data; |
|
const data_tracking = await (wait_data.events); |
|
const data_signature = await wait_data.pods[0]; |
|
|
|
ctx.replyWithHTML(` ✳ <code> INFORMASI PAKET </code> ✳ |
|
|
|
✔️ RESI : <code>${data_general.tracking_id}</code> |
|
✔️ PENGIRIM : <code>${data_general.shipper_short_name}</code> |
|
|
|
✔️ JENIS PENGIRIMAN : <code>${data_general.service_type}</code> |
|
✔️ BIAYA : <code>${parseRupiah(data_general.goods_amount)}</code> |
|
|
|
✔️ TGL_KIRIM : <code>${(data_general.created_at).date("DD MMM YYYY, HH:mm A")}</code> |
|
|
|
|
|
🔔 STATUS : <b>${data_general.status}</b> |
|
|
|
🏡 PENERIMA : <a href="${data_signature.url}">${data_signature.name}</a> |
|
|
|
`); |
|
|
|
|
|
ctx.replyWithHTML(`🧭 <code> RIWAYAT PELACAKAN </code> 🧭 |
|
` + |
|
`${Array(wait_data.events.length) |
|
.reverse() |
|
.fill() |
|
.map( |
|
(item, i) => ` |
|
| |
|
❎ <code>${parseTypeTracking(data_tracking[i].type)}</code> |
|
| |
|
| 📌 <b>${(typeof data_tracking[i].data.hub_name)=='undefined' ? 'Proses Pengiriman ... ' : data_tracking[i].data.hub_name}</b> |
|
| |
|
| 🕝 <b>${(data_tracking[i].time).date("DD MMM YYYY, HH:mm A")}</b> |
|
|`).join("")}`); |
|
|
|
//end result |
|
} else if (response.statusCode == "400") { |
|
ctx.replyWithHTML(` <code>🕜💤 Server Sedang Sibuk ... </code> |
|
|
|
<em>mohon tunggu sebentar dan coba lagi.</em>`); |
|
} else if ((wait_data.error.code) == "150003") { |
|
ctx.replyWithHTML(` <code>⛔ Resi Tidak Ditemukan ... </code>`); |
|
} else if (typeof(body) === undefined) { |
|
ctx.replyWithHTML(` <code>🕜💤 Server Sedang Sibuk ... </code> |
|
|
|
|
|
<em>mohon tunggu sebentar dan coba lagi.</em>`); |
|
} else { |
|
ctx.replyWithHTML(` <code>⛔ Resi Tidak Ditemukan ... </code>`); |
|
} |
|
} |
|
); |
|
} catch (e) { |
|
ctx.replyWithHTML(`<code>✂ Permintaan Dibatalkan ... </code>`); |
|
} |
|
|
|
ctx.replyWithMarkdown( |
|
"🔃 `Mau Cek Resi Lagi ... ?`", |
|
Markup.inlineKeyboard([ |
|
Markup.callbackButton("🚀 COBA LAGI !! ", "cek") |
|
]).extra() |
|
); |
|
return ctx.scene.leave(); |
|
} |
|
); |
|
|
|
stepHandler.use(ctx => ctx.replyWithMarkdown(error_typing)); |
|
|
|
const stage = new Stage([superWizard], { default: "super-wizard" }); |
|
// bot.use(Logs({ colors: true })); |
|
bot.use(session()); |
|
bot.use(stage.middleware()); |
|
bot.command("start", ctx => { |
|
ctx.scene.enter("super-wizard"); |
|
}); |
|
|
|
bot.launch(); |
|
|
|
app.get("/", (req, res) => { |
|
// cs.get( |
|
// "https://api.ninjavan.co/id/dash/1.2/public/orders?tracking_id=NLIDRP0070005790", |
|
// async function(err, response, body) { |
|
// const wait_data = await JSON.parse(body); |
|
|
|
// res.json(`${Array(wait_data.events.length).fill().map((item, i) => ` |
|
// ${wait_data.events[i].type} |
|
// `).join('')}`); |
|
// }); |
|
|
|
res.json({ status: true }); |
|
}); |
|
|
|
const listener = app.listen(process.env.PORT, () => { |
|
console.log("Your app is listening on port " + listener.address().port); |
|
}); |
Id telegram