mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
-This is a break from previous versions unfortunately -Connecting is now a promise -Chats, contacts & previously unread messages are supplied on connection -Groups! -Message confirmations are more reliable -Timeout queries & connections
88 lines
4.8 KiB
JavaScript
88 lines
4.8 KiB
JavaScript
const WhatsAppWeb = require("../WhatsAppWeb")
|
|
const fs = require("fs")
|
|
|
|
const client = new WhatsAppWeb() // instantiate
|
|
client.autoReconnect = true // auto reconnect on disconnect
|
|
client.logUnhandledMessages = false // set to true to see what kind of stuff you can implement
|
|
var authInfo = null
|
|
|
|
try {
|
|
const file = fs.readFileSync("auth_info.json") // load a closed session back if it exists
|
|
authInfo = JSON.parse(file)
|
|
} catch { }
|
|
|
|
client.connect (authInfo, 30*1000) // connect or timeout in 30 seconds
|
|
.then (([user, chats, contacts, unread]) => {
|
|
console.log ("oh hello " + user.name + " (" + user.id + ")")
|
|
console.log ("you have " + unread.length + " unread messages")
|
|
console.log ("you have " + chats.length + " chats & " + contacts.length + " contacts")
|
|
|
|
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 auth_info.json 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 */
|
|
|
|
client.setOnPresenceUpdate (json => console.log(json.id + " presence is " + json.type))
|
|
client.setOnMessageStatusChange (json => {
|
|
const participant = json.participant ? " ("+json.participant+")" : "" // participant exists when the message is from a group
|
|
console.log(json.to + participant +
|
|
" acknowledged message(s) " + json.ids +
|
|
" as " + json.type + " at " + json.timestamp)
|
|
})
|
|
client.setOnUnreadMessage (m => {
|
|
const [notificationType, messageType] = client.getNotificationType(m) // get what type of notification it is -- message, group add notification etc.
|
|
console.log("got notification of type: " + notificationType)
|
|
|
|
if (notificationType !== "message") {
|
|
return
|
|
}
|
|
let sender = m.key.remoteJid
|
|
if (m.key.participant) { // participant exists if the message is in a group
|
|
sender += " ("+m.key.participant+")"
|
|
}
|
|
if (messageType === WhatsAppWeb.MessageType.text) {
|
|
const text = m.message.conversation
|
|
console.log (sender + " sent: " + text)
|
|
} else if (messageType === WhatsAppWeb.MessageType.extendedText) {
|
|
const text = m.message.extendedTextMessage.text
|
|
console.log (sender + " sent: " + text + " and quoted message: " + JSON.stringify(m.message))
|
|
} 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(sender + " sent media, saved at: " + meta.fileName))
|
|
.catch (err => console.log("error in decoding message: " + err))
|
|
}
|
|
// send a reply after 3 seconds
|
|
setTimeout (() => {
|
|
client.sendReadReceipt (m.key.remoteJid, m.key.id) // send read receipt
|
|
.then (() => client.updatePresence(m.key.remoteJid, WhatsAppWeb.Presence.available)) // tell them we're available
|
|
.then (() => client.updatePresence(m.key.remoteJid, WhatsAppWeb.Presence.composing)) // tell them we're composing
|
|
.then (() => { // send the message
|
|
if (Math.random() > 0.5) { // choose at random
|
|
return 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
|
|
}
|
|
return client.sendMediaMessage (m.key.remoteJid, buffer, WhatsAppWeb.MessageType.video, info) // send this gif!
|
|
}
|
|
})
|
|
.then (([m, q]) => { // check if it went successfully
|
|
const success = m.status === 200
|
|
const messageID = q[2][0][2].key.id
|
|
console.log("sent message with ID '" + messageID + "' successfully: " + success)
|
|
})
|
|
}, 3*1000)
|
|
})
|
|
/* custom functionality for tracking battery */
|
|
client.registerCallback (["action", null, "battery"], json => {
|
|
const batteryLevelStr = json[2][0][1].value
|
|
const batterylevel = parseInt (batteryLevelStr)
|
|
console.log ("battery level: " + batterylevel)
|
|
})
|
|
client.setOnUnexpectedDisconnect (err => console.log ("disconnected unexpectedly: " + err) )
|
|
})
|
|
.catch (err => console.log ("encountered error: " + err)) |