import makeWASocket, { useMultiFileAuthState, DisconnectReason, WAMessage, ConnectionState, downloadMediaMessage, } from '@whiskeysockets/baileys' import * as qrcode from 'qrcode-terminal' import { Boom } from '@hapi/boom' // The session ID to use, you can change this const SESSION_ID = 'my-bot-session' async function startBot(sessionId: string): Promise { console.log(`🔄 Starting bot for session: ${sessionId}`) const { state, saveCreds } = await useMultiFileAuthState(`./sessions/${sessionId}`) const sock = makeWASocket({ auth: state, printQRInTerminal: false, }) // Save credentials on update sock.ev.on('creds.update', saveCreds) // Handle connection logic sock.ev.on('connection.update', (update: Partial) => { const { connection, lastDisconnect, qr } = update if (qr) { console.log('📱 Scan this QR code with your phone:') qrcode.generate(qr, { small: true }) } if (connection === 'open') { console.log('✅ Connection opened! Bot is ready.') } if (connection === 'close') { const shouldReconnect = (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut console.log( `🔌 Connection closed. Reason: ${lastDisconnect?.error?.message}. Reconnecting: ${shouldReconnect}` ) if (shouldReconnect) { startBot(sessionId) } else { console.log('🔴 Not reconnecting, you were logged out.') } } }) // Handle incoming messages sock.ev.on('messages.upsert', async ({ messages }) => { const msg: WAMessage | undefined = messages[0]; if (!msg?.message || msg.key.fromMe) { return; } const sender = msg.key.remoteJid; // --- YOUR BOT LOGIC GOES HERE --- // Handle TEXT messages if (msg.message.conversation || msg.message.extendedTextMessage) { console.log(`📩 Received a [Text Message] from [${sender}]`); const messageText = msg.message.conversation || msg.message.extendedTextMessage?.text || ''; console.log(`💬 Text: "${messageText}"`); if (messageText.toLowerCase() === 'hello' && sender) { const replyText = 'Hello there!'; await sock.sendMessage(sender, { text: replyText }); console.log(`📤 Sent message to [${sender}]: "${replyText}"`); } } // Handle IMAGE messages (without downloading) else if (msg.message.imageMessage) { console.log(`📩 Received an [Image Message] from [${sender}]`); const caption = msg.message.imageMessage.caption || ''; console.log(`🖼️ Caption: "${caption}"`); } // Handle VIDEO messages (without downloading) else if (msg.message.videoMessage) { console.log(`📩 Received a [Video Message] from [${sender}]`); const caption = msg.message.videoMessage.caption || ''; console.log(`🎥 Video message received. Caption: "${caption}"`); } // Handle DOCUMENT messages (without downloading) else if (msg.message.documentMessage) { console.log(`📩 Received a [Document Message] from [${sender}]`); const caption = msg.message.documentMessage.caption || ''; const fileName = msg.message.documentMessage.fileName || 'file'; console.log(`📄 Document: "${fileName}", Caption: "${caption}"`); } // Handle CONTACT messages else if (msg.message.contactMessage) { console.log(`📩 Received a [Contact Message] from [${sender}]`); const name = msg.message.contactMessage.displayName || "No Name"; const vcard = msg.message.contactMessage.vcard || ""; const number = vcard.match(/waid=(\d+):/)?.[1] || "Not Found"; console.log(`🙋 Contact: Name="${name}", Number="${number}"`); } // Handle POLL CREATION messages else if (msg.message.pollCreationMessageV2) { console.log(`📩 Received a [Poll Creation] from [${sender}]`); const poll = msg.message.pollCreationMessageV2; const pollQuestion = poll.name || 'No Question'; const pollOptions = (poll.options?.map(opt => opt.optionName) || []).join(', ') || 'No Options'; console.log(`📊 Poll created. Question: "${pollQuestion}", Options: [${pollOptions}]`); } // Handle POLL VOTE messages else if (msg.message.pollUpdateMessage) { console.log(`📩 Received a [Poll Vote] from [${sender}]`); // You can add more logic here to see which option was voted for console.log('🗳️ A vote was cast on a poll.'); } // Handle other message types else { const messageType = Object.keys(msg.message)[0]; console.log(`📩 Received an unhandled message type [${messageType}] from [${sender}]`); } }); } // Start the bot startBot(SESSION_ID)