main.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. const { WhasAppClient, map, duplicateMap } = require('./whatsapp-client.js');
  2. const { MessageMedia } = require('whatsapp-web.js');
  3. const express = require('express');
  4. const axios = require('axios');
  5. const https = require('https');
  6. const fs = require('fs');
  7. function createWa(be, res) {
  8. new WhasAppClient(be, res);
  9. }
  10. fs.readdir('.wwebjs_auth', (err, files) => {
  11. if (files != null) {
  12. files.forEach(file => {
  13. console.log(`Read session: ${file}`);
  14. const be = file.split('-')[1];
  15. createWa(be);
  16. });
  17. }
  18. });
  19. const app = express();
  20. app.use(express.json({ limit: '50mb' }));
  21. app.get("/api/qr/:be", (req, res) => {
  22. console.log(`params:${req.params.be}`);
  23. const be = req.params.be;
  24. try {
  25. const client = map.get(be);
  26. if (client != null) {
  27. res.json({ status: '00', be: be });
  28. return;
  29. }
  30. const duplicate = duplicateMap.get(be);
  31. if (duplicate != null) {
  32. res.json({ status: '02', be: be, description: 'Duplicate request' });
  33. return;
  34. }
  35. duplicateMap.set(be, be);
  36. createWa(be, res);
  37. } catch (error) {
  38. console.log(`error:${error}`);
  39. res.json({ status: '99', be: be, description: 'General error' });
  40. }
  41. });
  42. app.post("/api/send/:be", async (req, res) => {
  43. console.log(`params:${req.params.be}, body:${JSON.stringify(req.body)}`);
  44. const be = req.params.be;
  45. try {
  46. const client = map.get(be);
  47. if (client == null) {
  48. res.json({ status: '01', be: be, description: 'Unauthorize access' });
  49. return;
  50. }
  51. const to = req.body.to;
  52. const message = req.body.message;
  53. if (Object.hasOwn(message, 'media')) {
  54. const fileName = req.body.message.fileName;
  55. const media = req.body.message.media;
  56. const data = req.body.message.data;
  57. const caption = req.body.message.caption;
  58. let messageMedia = new MessageMedia(media, data, fileName);
  59. to.forEach(it => {
  60. client.sendMessage(`${it}@c.us`, messageMedia, { caption: caption });
  61. });
  62. res.json({ status: '00', be: be });
  63. return;
  64. }
  65. to.forEach(it => {
  66. client.sendMessage(`${it}@c.us`, message);
  67. });
  68. res.json({ status: '00', be: be });
  69. } catch (error) {
  70. console.log(`error:${error}`);
  71. res.json({ status: '99', be: be, description: 'General error' });
  72. }
  73. });
  74. const port = process.env.PORT || 9009;
  75. const options = {
  76. key: fs.readFileSync('./server.key'),
  77. cert: fs.readFileSync('./server.crt'),
  78. rejectUnauthorized: false,
  79. requestCert: true,
  80. agent: false
  81. };
  82. https.createServer(options, app).listen(port, () => {
  83. console.log(`Server running on port ${port}`);
  84. });