Spaces:
Runtime error
Runtime error
| 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<void> { | |
| 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<ConnectionState>) => { | |
| 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) | |