main.js 2.8 KB

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