PERANGKAT LUNAK YANG HARUS DIINSTAL DI KOMPUTER
LOKAL
1. Download dan Install node js dan npm
[Link]
pastikan node js versi 22
link tutorial : [Link]
js-and-npm/
Setelah instalasi selesai, verifikasi bahwa [Link] dan NPM telah terpasang dengan benar
dengan menjalankan langkah-langkah berikut:
Perintah di atas digunakan untuk mengecek versinya. Jika hasilnya muncul seperti pada
gambar, berarti instalasi berhasil
2. Menyiapkan proyek bot Telegram
Proyek bot akan disimpan di Local Disk (D) dengan membuat folder bernama warteg-
telegram-bot. Ikuti langkah-langkah sesuai dengan gambar yang ditampilkan.
Buka Windows Explorer dan pastikan folder warteg-telegram-bot sudah terlihat di Drive D
3. Instal library Telegram di [Link]. Pastikan terminal yang aktif berada di dalam folder
warteg-telegram-bot, seperti yang ditunjukkan pada gambar. Kemudian jalankan perintah
berikut: npm init -y
Lanjutkan dengan menjalankan perintah berikut untuk menginstal library:: npm install
node-telegram-bot-api. Pastikan hasilnya sesuai dengan yang ditampilkan pada gambar.
Pada gambar di atas, terlihat perintah npm audit fix. Jalankan perintah tersebut di terminal
untuk memperbaiki potensi kerentanan yang terdeteksi. Hasilnya seperti pada gambar
dibawah
Perhatikan terdapat perintah : npm audit fix –force. berikan perintah tersebut pada
prompt. Hasilnya seperti gambar berikut:
Proses selesai!
4. Install Cursor AI
[Link]
Tampilan Cursor AI setelah diinstal dan dijalankan. Dengan menggunakan Cursor AI, jika
ditemukan bug, program ini dapat membantu memberikan solusi untuk bug tersebut.
5. Menggunakan Cursor AI dalam proses kerja (coding and repair bug) aplikasi bot telegram
- Open project
- Pastikan folder yang dibuka sebagai project adalah: warteg-telegram-bot
- Buat file baru dengan nama [Link] Perhatikan dengan seksama gambar berikut:
1. klik new file
2. ketik nama file: [Link]
- Copy script dibawah ini pada [Link]. Link sebagai berikut:
// =============================
// WARTEG MANTAP JIWA BOT 🍛
// Telegram Bot Version
// =============================
require('dotenv').config();
const TelegramBot = require('node-telegram-bot-api');
// === MASUKKAN TOKEN TELEGRAM ANDA DI SINI ===
const token = [Link].TELEGRAM_BOT_TOKEN ||
'8030957437:AAEbO61n_NvT42dptv_1eNF8egUN18V4w7w';
// Jalankan bot dengan polling
const bot = new TelegramBot(token, { polling: true });
// Error handling untuk bot
[Link]('error', (error) => {
[Link]('Bot error:', error);
});
[Link]('polling_error', (error) => {
[Link]('Polling error:', error);
});
// =============================
// Data Menu Warteg
// =============================
const menu = {
"Ayam Goreng": 12000,
"Ikan Lele Goreng": 10000,
"Telur Dadar": 8000,
"Sayur Asem": 5000,
"Nasi Putih": 4000
};
// =============================
// State Management
// =============================
const userStates = new Map(); // chatId -> state
// =============================
// Inline Keyboard Menu Utama
// =============================
const mainMenu = {
reply_markup: {
inline_keyboard: [
[{ text: "🍛 Lihat Menu", callback_data: "lihat_menu" }],
[{ text: "🛒 Pesan Makanan", callback_data:
"pesan_makanan" }],
[{ text: "📍 Info Lokasi & Jam Buka", callback_data:
"info_lokasi" }],
[{ text: "📞 Hubungi Admin", callback_data: "hubungi_admin" }]
]
}
};
// =============================
// COMMAND /START
// =============================
[Link](/\/start/, async (msg) => {
const chatId = [Link];
try {
await [Link](chatId, `
🍽️Halo, selamat datang di *Warteg Mantap Jiwa*!
Saya *WartegBot*, siap bantu kamu pesan makanan enak dan hemat 😋
Silakan pilih menu di bawah ini:
`, { parse_mode: 'Markdown', ...mainMenu });
} catch (error) {
[Link]('Error sending start message:', error);
}
});
// =============================
// HANDLER CALLBACK BUTTON
// =============================
[Link]('callback_query', async (query) => {
const chatId = [Link];
const action = [Link];
try {
switch (action) {
// === FLOW 2: LIHAT MENU ===
case 'lihat_menu':
await [Link](chatId, `
🍛 *Menu Hari Ini:*
🍗 Ayam Goreng – Rp12.000
🐟 Ikan Lele Goreng – Rp10.000
🍳 Telur Dadar – Rp8.000
🥦 Sayur Asem – Rp5.000
🍚 Nasi Putih – Rp4.000
Ketik *pesan* untuk lanjut order makanan.
`, { parse_mode: 'Markdown' });
break;
// === FLOW 3: PESAN MAKANAN ===
case 'pesan_makanan':
[Link](chatId, 'waiting_for_order');
await [Link](chatId, `
Baik! Ketik pesanan kamu ya, contoh:
*Pesan Ayam Goreng 1, Nasi 1, Sayur Asem 1*
`, { parse_mode: 'Markdown' });
break;
// === FLOW 4: INFO LOKASI ===
case 'info_lokasi':
await [Link](chatId, `
🕒 Kami buka setiap hari pukul *07.00–21.00 WIB*
📍 Alamat: *Jl. Mawar No. 123, Cibubur*
📌 Google Maps: [[Link]/warteg-mantapjiwa]([Link]
mantapjiwa)
`, { parse_mode: 'Markdown', ...mainMenu });
break;
// === FLOW 5: HUBUNGI ADMIN ===
case 'hubungi_admin':
await [Link](chatId, `
Untuk pertanyaan atau pesanan besar (catering):
📞 *0812-3456-7890*
📧 *wartegmantapjiwa@[Link]*
Kami siap membantu Anda! 🍛
`, { parse_mode: 'Markdown', ...mainMenu });
break;
default:
await fallback(chatId);
}
await [Link]([Link]);
} catch (error) {
[Link]('Error handling callback query:', error);
try {
await [Link]([Link], { text: 'Terjadi
kesalahan, silakan coba lagi.' });
} catch (answerError) {
[Link]('Error answering callback query:',
answerError);
}
}
});
// =============================
// HANDLER PESAN UMUM
// =============================
[Link]('message', async (msg) => {
const chatId = [Link];
const userState = [Link](chatId);
try {
if (userState === 'waiting_for_order') {
await handleOrder(msg);
} else if (userState === 'waiting_for_confirmation') {
await handleConfirmation(msg);
} else if (userState === 'waiting_for_contact') {
await handleContact(msg);
}
} catch (error) {
[Link]('Error handling message:', error);
try {
await [Link](chatId, 'Terjadi kesalahan, silakan
coba lagi atau gunakan menu utama.', mainMenu);
} catch (sendError) {
[Link]('Error sending error message:', sendError);
}
}
});
// =============================
// FLOW 3.1: PROSES PESAN MAKANAN
// =============================
async function handleOrder(msg) {
const chatId = [Link];
const orderText = [Link];
try {
const items = parseOrder(orderText);
const total = calculateTotal(items);
if (total === 0) {
[Link](chatId);
await [Link](chatId, "Maaf, saya tidak menemukan
item valid dari pesanan kamu 😅", mainMenu);
return;
}
const orderSummary = [Link](i => `${[Link]} x$
{[Link]}`).join(" + ");
[Link](chatId, 'waiting_for_confirmation');
[Link](`${chatId}_order`, { items, total,
orderSummary });
await [Link](chatId, `
✅ Pesanan kamu: ${orderSummary}
💰 Total: Rp${[Link]('id-ID')}
Mau lanjut checkout? (ya/tidak)
`, { parse_mode: 'Markdown' });
} catch (error) {
[Link]('Error in handleOrder:', error);
[Link](chatId);
await [Link](chatId, "Terjadi kesalahan saat memproses
pesanan. Silakan coba lagi.", mainMenu);
}
}
async function handleConfirmation(msg) {
const chatId = [Link];
const reply = [Link]();
try {
if (reply === "ya") {
[Link](chatId, 'waiting_for_contact');
await [Link](chatId, "Silakan kirim *nama dan nomor
HP* untuk konfirmasi pesanan.", { parse_mode: 'Markdown' });
} else {
[Link](chatId);
[Link](`${chatId}_order`);
await [Link](chatId, "Baik, pesanan dibatalkan.
Silakan lihat menu lain atau kembali ke menu utama.", mainMenu);
}
} catch (error) {
[Link]('Error in handleConfirmation:', error);
[Link](chatId);
[Link](`${chatId}_order`);
await [Link](chatId, "Terjadi kesalahan. Silakan coba
lagi.", mainMenu);
}
}
async function handleContact(msg) {
const chatId = [Link];
const contact = [Link];
try {
[Link](chatId);
[Link](`${chatId}_order`);
await [Link](chatId, `
Terima kasih ${[Link](" ")[0]}! 🙏
Admin kami akan segera menghubungi kamu untuk konfirmasi pesanan.
🍽️*Terima kasih sudah pesan di Warteg Mantap Jiwa!* 💚
`, { parse_mode: 'Markdown', ...mainMenu });
} catch (error) {
[Link]('Error in handleContact:', error);
await [Link](chatId, "Terima kasih! Admin akan
menghubungi Anda.", mainMenu);
}
}
// =============================
// Fungsi Parsing & Hitung Total
// =============================
function parseOrder(orderText) {
const foundItems = [];
const orderLower = [Link]();
for (let key in menu) {
const itemLower = [Link]();
if ([Link](itemLower)) {
// Cari jumlah item dengan regex
const quantityRegex = new RegExp(`(\\d+)\\s*$
{[Link](/\s+/g, '\\s+')}`, 'i');
const match = [Link](quantityRegex);
const quantity = match ? parseInt(match[1]) : 1;
[Link]({
name: key,
price: menu[key],
quantity: quantity
});
}
}
return foundItems;
}
function calculateTotal(items) {
return [Link]((sum, item) => sum + ([Link] *
[Link]), 0);
}
// =============================
// FLOW 6: FALLBACK
// =============================
async function fallback(chatId) {
try {
await [Link](chatId, `
Maaf, saya belum paham maksud kamu 😅
Silakan pilih menu berikut:
1️
⃣ Lihat Menu
2️
⃣ Pesan Makanan
3️
⃣ Info Lokasi
4️
⃣ Hubungi Admin
`, mainMenu);
} catch (error) {
[Link]('Error in fallback:', error);
}
}
[Link]("🤖 Warteg Mantap Jiwa Bot is running...");
- Mendapatkan token telegram
- sss
6. Menjalankan bot telegram
7.
8. sss
1. Buka windows explorer hasil tahapan diatas akan terlihat pada folder D:\warteg-telegram-
bot
2. Bekerja dengan cursor AI membuat [Link]
- Open project
- Pastikan project yang dibuka adalah folder: warteg-telegram-bot
- Membuat file baru: [Link]. Perhatikan dengan baik gambar berikut:
1. klik new file
2. ketik nama file: [Link]
3. aaa