Spaces:
Runtime error
Runtime error
File size: 4,903 Bytes
4d3d726 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
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)
|