akiraa-scrape
Version:
Module & tools for bot whatsApp
360 lines (328 loc) • 9.95 kB
JavaScript
const { proto } = require("akiraa-baileys");
const chalk = require("chalk");
const fs = require("fs");
const Crypto = require("crypto");
const axios = require("axios");
const moment = require("moment-timezone");
const { sizeFormatter } = require("human-readable");
const util = require("util");
const jimp = require("jimp");
const { defaultMaxListeners } = require("stream");
const unixTimestampSeconds = (date = new Date()) =>
Math.floor(date.getTime() / 1000);
exports.unixTimestampSeconds = unixTimestampSeconds;
exports.generateMessageTag = (epoch) => {
let tag = (0, exports.unixTimestampSeconds)().toString();
if (epoch) tag += ".--" + epoch; // attach epoch if provided
return tag;
};
exports.processTime = (timestamp, now) => {
return moment.duration(now - moment(timestamp * 1000)).asSeconds();
};
exports.getRandom = (ext) => {
return `${Math.floor(Math.random() * 10000)}${ext}`;
};
exports.getBuffer = async (url, options) => {
try {
options ? options : {};
const res = await axios({
method: "get",
url,
headers: {
DNT: 1,
"Upgrade-Insecure-Request": 1,
},
...options,
responseType: "arraybuffer",
});
return res.data;
} catch (e) {
return err;
}
};
exports.fetchJson = async (url, options) => {
try {
options ? options : {};
const res = await axios({
method: "GET",
url: url,
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
},
...options,
});
return res.data;
} catch (err) {
return err;
}
};
exports.runtime = function (seconds) {
seconds = Number(seconds);
var d = Math.floor(seconds / (3600 * 24));
var h = Math.floor((seconds % (3600 * 24)) / 3600);
var m = Math.floor((seconds % 3600) / 60);
var s = Math.floor(seconds % 60);
var dDisplay = d > 0 ? d + (d == 1 ? " day, " : " days, ") : "";
var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
return dDisplay + hDisplay + mDisplay + sDisplay;
};
exports.clockString = function (seconds) {
let h = isNaN(seconds) ? "--" : Math.floor((seconds % (3600 * 24)) / 3600);
let m = isNaN(seconds) ? "--" : Math.floor((seconds % 3600) / 60);
let s = isNaN(seconds) ? "--" : Math.floor(seconds % 60);
return [h, m, s].map((v) => v.toString().padStart(2, 0)).join(":");
};
exports.sleep = async (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
};
exports.isUrl = (url) => {
return url.match(
new RegExp(
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)/,
"gi",
),
);
};
exports.getTime = (format, date) => {
if (date) {
return moment(date).locale("id").format(format);
} else {
return moment.tz("Asia/Jakarta").locale("id").format(format);
}
};
exports.formatDate = (n, locale = "id") => {
let d = new Date(n);
return d.toLocaleDateString(locale, {
weekday: "long",
day: "numeric",
month: "long",
year: "numeric",
hour: "numeric",
minute: "numeric",
second: "numeric",
});
};
exports.tanggal = (numer) => {
myMonths = [
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember",
];
myDays = ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum’at", "Sabtu"];
var tgl = new Date(numer);
var day = tgl.getDate();
bulan = tgl.getMonth();
var thisDay = tgl.getDay(),
thisDay = myDays[thisDay];
var yy = tgl.getYear();
var year = yy < 1000 ? yy + 1900 : yy;
const time = moment.tz("Asia/Jakarta").format("DD/MM HH:mm:ss");
let d = new Date();
let locale = "id";
let gmt = new Date(0).getTime() - new Date("1 January 1970").getTime();
let weton = ["Pahing", "Pon", "Wage", "Kliwon", "Legi"][
Math.floor((d * 1 + gmt) / 84600000) % 5
];
return `${thisDay}, ${day} - ${myMonths[bulan]} - ${year}`;
};
exports.formatp = sizeFormatter({
std: "JEDEC", //'SI' = default | 'IEC' | 'JEDEC'
decimalPlaces: 2,
keepTrailingZeroes: false,
render: (literal, symbol) => `${literal} ${symbol}B`,
});
exports.jsonformat = (string) => {
return JSON.stringify(string, null, 2);
};
function delay(ms) {
return new Promise((resolve, reject) => setTimeout(resolve, ms));
}
function format(...args) {
return util.format(...args);
}
exports.logic = (check, inp, out) => {
if (inp.length !== out.length)
throw new Error("Input and Output must have same length");
for (let i in inp) if (util.isDeepStrictEqual(check, inp[i])) return out[i];
return null;
};
exports.generateProfilePicture = async (buffer) => {
const jimp = await jimp_1.read(buffer);
const min = jimp.getWidth();
const max = jimp.getHeight();
const cropped = jimp.crop(0, 0, min, max);
return {
img: await cropped.scaleToFit(720, 720).getBufferAsync(jimp_1.MIME_JPEG),
preview: await cropped
.scaleToFit(720, 720)
.getBufferAsync(jimp_1.MIME_JPEG),
};
};
exports.parseMention = (text = "") => {
return [...text.matchAll(/@([0-9]{5,16}|0)/g)].map(
(v) => v[1] + "@s.whatsapp.net",
);
};
exports.getGroupAdmins = (participantes) => {
var admins = [];
for (let i of participantes) {
i.admin === "admin" ? admins.push(i.id) : "";
}
return admins;
};
/**
* Serialize Message
* @param {WAConnection} conn
* @param {Object} m
* @param {store} store
*/
exports.smsg = (conn, m, store) => {
if (!m) return m;
let M = proto.WebMessageInfo;
if (m.key) {
m.id = m.key.id;
m.isBaileys = m.id.startsWith("BAE5") && m.id.length === 16;
m.chat = m.key.remoteJid;
m.fromMe = m.key.fromMe;
m.isGroup = m.chat.endsWith("@g.us");
m.sender = m.fromMe
? conn.user.id.split(":")[0] + "@s.whatsapp.net" || conn.user.id
: m.key.participant || m.key.remoteJid;
}
if (m.message) {
m.mtype = Object.keys(m.message)[0];
m.body =
m.message.conversation ||
m.message[m.mtype].caption ||
m.message[m.mtype].text ||
(m.mtype == "listResponseMessage" &&
m.message[m.mtype].singleSelectReply.selectedRowId) ||
(m.mtype == "buttonsResponseMessage" &&
m.message[m.mtype].selectedButtonId) ||
m.mtype;
m.msg = m.message[m.mtype];
if (m.mtype === "ephemeralMessage") {
exports.smsg(hisoka, m.msg);
m.mtype = m.msg.mtype;
m.msg = m.msg.msg;
}
let quoted = (m.quoted = m.msg.contextInfo
? m.msg.contextInfo.quotedMessage
: null);
m.mentionedJid = m.msg.contextInfo ? m.msg.contextInfo.mentionedJid : [];
if (m.quoted) {
let type = Object.keys(m.quoted)[0];
m.quoted = m.quoted[type];
if (["productMessage"].includes(type)) {
type = Object.keys(m.quoted)[0];
m.quoted = m.quoted[type];
}
if (typeof m.quoted === "string")
m.quoted = {
text: m.quoted,
};
m.quoted.mtype = type;
m.quoted.id = m.msg.contextInfo.stanzaId;
m.quoted.chat = m.msg.contextInfo.remoteJid || m.chat;
m.quoted.isBaileys = m.quoted.id
? m.quoted.id.startsWith("BAE5") && m.quoted.id.length === 16
: false;
m.quoted.sender =
m.msg.contextInfo.participant.split(":")[0] ||
m.msg.contextInfo.participant;
m.quoted.fromMe = m.quoted.sender === (conn.user && conn.user.id);
m.quoted.text = m.quoted.text || m.quoted.caption || "";
m.quoted.mentionedJid = m.msg.contextInfo
? m.msg.contextInfo.mentionedJid
: [];
m.getQuotedObj = m.getQuotedMessage = async () => {
if (!m.quoted.id) return false;
let q = await store.loadMessage(m.chat, m.quoted.id, conn);
return exports.smsg(conn, q, store);
};
let vM = (m.quoted.fakeObj = M.fromObject({
key: {
remoteJid: m.quoted.chat,
fromMe: m.quoted.fromMe,
id: m.quoted.id,
},
message: quoted,
...(m.isGroup ? { participant: m.quoted.sender } : {}),
}));
/**
*
* @returns
*/
m.quoted.delete = () =>
conn.sendMessage(m.quoted.chat, { delete: vM.key });
/**
*
* @param {*} jid
* @param {*} forceForward
* @param {*} options
* @returns
*/
m.quoted.copyNForward = (jid, forceForward = false, options = {}) =>
conn.copyNForward(jid, vM, forceForward, options);
/**
*
* @returns
*/
m.quoted.download = () => conn.downloadMediaMessage(m.quoted);
}
}
if (m.msg.url) m.download = () => conn.downloadMediaMessage(m.msg);
m.text =
(m.mtype == "listResponseMessage"
? m.msg.singleSelectReply.selectedRowId
: "") ||
m.msg.text ||
m.msg.caption ||
m.msg ||
"";
/**
* Reply to this message
* @param {String|Object} text
* @param {String|false} chatId
* @param {Object} options
*/
m.reply = (text, chatId, options) =>
conn.sendMessage(
chatId ? chatId : m.chat,
{ text: text },
{ quoted: m, detectLinks: false, thumbnail: global.thumb, ...options },
);
/**
* Copy this message
*/
m.copy = () => exports.smsg(conn, M.fromObject(M.toObject(m)));
/**
*
* @param {*} jid
* @param {*} forceForward
* @param {*} options
* @returns
*/
m.copyNForward = (jid = m.chat, forceForward = false, options = {}) =>
conn.copyNForward(jid, m, forceForward, options);
return m;
};
let file = require.resolve(__filename);
fs.watchFile(file, () => {
fs.unwatchFile(file);
console.log(chalk.redBright(`Update ${__filename}`));
delete require.cache[file];
require(file);
});