mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
90 lines
4.5 KiB
JavaScript
90 lines
4.5 KiB
JavaScript
const WhatsAppWeb = require("../WhatsAppWeb")
|
|
const fs = require("fs")
|
|
|
|
let client = new WhatsAppWeb() // instantiate
|
|
try {
|
|
const file = fs.readFileSync("auth_info.json") // load a closed session back if it exists
|
|
const authInfo = JSON.parse(file)
|
|
client.login( authInfo ) // log back in using the info we just loaded
|
|
} catch {
|
|
// if no auth info exists, start a new session
|
|
client.connect() // start a new session, with QR code scanning and what not
|
|
}
|
|
// called once the client connects successfully to the WhatsApp servers
|
|
client.handlers.onConnected = () => {
|
|
const authInfo = client.base64EncodedAuthInfo() // get all the auth info we need to restore this session
|
|
fs.writeFileSync("auth_info.json", JSON.stringify(authInfo, null, "\t")) // save this info to a file
|
|
/*
|
|
Note: one can take this file and login again from any computer without having to scan the QR code, and get full access to one's WhatsApp
|
|
Despite the convenience, be careful with this file
|
|
*/
|
|
}
|
|
// called when someone's presence is updated
|
|
client.handlers.presenceUpdated = (id, type) => {
|
|
console.log("presence of " + id + " is " + type)
|
|
}
|
|
// called when your message gets delivered or read
|
|
client.handlers.onMessageStatusChanged = (id, messageID, status) => {
|
|
console.log(id + " acknowledged message '" + messageID + "' status as " + status)
|
|
}
|
|
// called when you have a pending unread message or recieve a new message
|
|
client.handlers.onUnreadMessage = (m) => {
|
|
// console.log("recieved message: " + JSON.stringify(m)) // uncomment to see what the raw message looks like
|
|
|
|
const messageType = client.getMessageType(m.message) // get what type of message it is -- text, image, video
|
|
console.log("got message of type: " + messageType)
|
|
|
|
if (messageType === WhatsAppWeb.MessageType.text) { // if it is plain text
|
|
const text = m.message.conversation
|
|
console.log (m.key.remoteJid + " sent: " + text)
|
|
} else if (messageType === WhatsAppWeb.MessageType.extendedText) { // if it is a quoted thing
|
|
const text = m.message.extendedTextMessage.text // the actual text
|
|
const quotedMessage = m.message.extendedTextMessage.contextInfo.quotedMessage // message that was replied to
|
|
console.log (m.key.remoteJid + " sent: " + text + " and quoted a " + client.getMessageType(quotedMessage))
|
|
} else { // if it is a media (audio, image, video) message
|
|
// decode, decrypt & save the media.
|
|
// The extension to the is applied automatically based on the media type
|
|
client.decodeMediaMessage(m.message, "media_in_" + m.key.id)
|
|
.then (meta => console.log(m.key.remoteJid + " sent media, saved at: " + meta.fileName))
|
|
.catch (err => console.log("error in decoding message: " + err))
|
|
}
|
|
console.log("responding...")
|
|
|
|
/* send a message after at least a 1 second timeout after recieving a message, otherwise WhatsApp will reject the message otherwise */
|
|
setTimeout(() => client.sendReadReceipt(m.key.remoteJid, m.key.id), 2*1000) // send a read reciept for the message in 2 seconds
|
|
setTimeout(() => client.updatePresence(m.key.remoteJid, WhatsAppWeb.Presence.composing), 2.5*1000) // let them know you're typing in 2.5 seconds
|
|
setTimeout(() => {
|
|
let promise
|
|
if (Math.random() > 0.5) { // choose at random
|
|
promise = client.sendTextMessage(m.key.remoteJid, "hello!", m) // send a "hello!" & quote the message recieved
|
|
} else {
|
|
const buffer = fs.readFileSync("./ma_gif.mp4") // load the gif
|
|
const info = {
|
|
gif: true, // the video is a gif
|
|
caption: "hello!" // the caption
|
|
}
|
|
promise = client.sendMediaMessage (m.key.remoteJid, buffer, WhatsAppWeb.MessageType.video, info) // send this gif!
|
|
}
|
|
promise.then (([m, q]) => {
|
|
const success = m.status === 200
|
|
const messageID = q[2][0][2].key.id
|
|
console.log("sent message with ID '" + messageID + "' successfully: " + success)
|
|
})
|
|
|
|
}, 4*1000) // send after 4 seconds
|
|
}
|
|
|
|
// called if an error occurs
|
|
client.handlers.onError = (err) => console.log(err)
|
|
client.handlers.onDisconnect = () => { /* internet got disconnected, save chats here or whatever; will reconnect automatically */ }
|
|
|
|
const readline = require('readline').createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout
|
|
})
|
|
readline.question("type exit to disconnect\n", (txt) => {
|
|
if (txt === "exit") {
|
|
client.close()
|
|
process.exit(0)
|
|
}
|
|
}) |