loadAllJadiBots.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. CÓDIGO SIMPLE PARA LA RECARGA DE JADIBOTS AL INICIAR, SE PUEDE EXTENDER Y MEJORAR DE ACUERDO A TÚS NECESIDADES.
  3. SI QUIERES QUE MANEJE MÁS EVENTOS LOS TIENES QUE AGREGAR AQUI.
  4. CÓDIGO HECHO POR: DanixlJs - si asi es, el nuvsito ese.
  5. [https://github.com/DanixlJs]
  6. DEJA LOS CRÉDITOS HDP
  7. */
  8. import path from "path";
  9. import { fileURLToPath } from "url";
  10. import { promises as fs } from "fs";
  11. import pino from 'pino'
  12. import { makeWASocket } from "./simple.js";
  13. import { makeCacheableSignalKeyStore, useMultiFileAuthState, fetchLatestBaileysVersion } from "@whiskeysockets/baileys";
  14. import { Boom } from "@hapi/boom";
  15. import { handler } from "../handler.js";
  16. const __dirname = path.join(fileURLToPath(import.meta.url));
  17. export default async function loadAllJadiBots() {
  18. const authJadi = path.join(__dirname, "../../jadibts");
  19. const sesions = await fs.readdir(authJadi);
  20. if (sesions.length !== 0) {
  21. console.log("Cargando " + sesions.length + " Sesiones de la carpeta 'jadibts'"); // que asco tiene 'bts' :v
  22. for (const sesion of sesions) {
  23. const auth = path.join(authJadi, sesion);
  24. try {
  25. await fs.access(path.join(auth, "creds.json"));
  26. } catch {
  27. continue;
  28. }
  29. await connect(auth);
  30. }
  31. } else {
  32. console.log("Sin JadiBots que cargar.");
  33. }
  34. }
  35. async function connect(sesionFile, retries = 0) {
  36. const { state, saveCreds } = await useMultiFileAuthState(sesionFile);
  37. const { version } = await fetchLatestBaileysVersion();
  38. const conn = makeWASocket({
  39. markOnlineOnConnect: true,
  40. defaultQueryTimeoutMs: undefined,
  41. auth: {
  42. creds: state.creds,
  43. keys: makeCacheableSignalKeyStore(state.keys, pino({
  44. level: "silent"
  45. }).child({
  46. level: "silent"
  47. }))
  48. },
  49. logger: pino({
  50. level: "silent"
  51. }),
  52. browser: ["Ubuntu", "Edge", "20.0.4"],
  53. syncFullHistory: true,
  54. printQRInTerminal: false,
  55. patchMessageBeforeSending: async message => {
  56. try {
  57. await sock.uploadPreKeysToServerIfRequired();
  58. } catch (err) {
  59. console.error(err);
  60. }
  61. return message;
  62. },
  63. generateHighQualityLinkPreview: true,
  64. version
  65. });
  66. conn.ev.on("creds.update", saveCreds);
  67. conn.ev.on("connection.update", async update => {
  68. const { connection, lastDisconnect } = update;
  69. if (connection === "close") {
  70. const code = new Boom(lastDisconnect?.error)?.output?.statusCode;
  71. // ojo al ingles de la más alta calidad 🗿
  72. switch (code) {
  73. case 401: //logout
  74. case 500: //bad sesion?
  75. case 403: //forbiden
  76. case 405: //conn end
  77. try {
  78. console.log("error inesperado")
  79. //await fs.rm(sesionFile, { recursive: true, force: true });
  80. } catch (err) {
  81. console.error(err);
  82. }
  83. break;
  84. default:
  85. if (retries < 6) {
  86. await connect(sesionFile, retries + 1);
  87. } else {
  88. try {
  89. //await fs.rm(sesionFile, { recursive: true, force: true });
  90. } catch (err) {
  91. console.error(err);
  92. }
  93. }
  94. break;
  95. }
  96. } else if (connection === "open") {
  97. global.conns.push(conn);
  98. }
  99. });
  100. conn.ev.on("messages.upsert", handler);
  101. }