projeto-hit/backend/src/services/WbotServices/SendWhatsAppMedia.ts

123 lines
3.4 KiB
TypeScript
Raw Normal View History

import fs from "fs";
import path from "path";
import { MessageMedia, Message as WbotMessage } from "whatsapp-web.js";
import AppError from "../../errors/AppError";
import GetTicketWbot from "../../helpers/GetTicketWbot";
import Ticket from "../../models/Ticket";
2023-09-08 19:50:51 +00:00
import { updateTicketCacheByTicketId } from "../../helpers/TicketCache";
import { date } from "faker";
import { getIO } from "../../libs/socket";
import sendWhatsAppMessageSocket from "../../helpers/SendWhatsappMessageSocket";
import sendWhatsAppMediaSocket from "../../helpers/SendWhatsappMessageMediaSocket";
2023-09-08 19:50:51 +00:00
import sendWhatsMediaOfficialAPI from "../../helpers/sendWhatsMediaOfficialAPI";
import { mediaTypeWhatsappOfficial } from "./wbotMessageListener";
import { bytesToMB } from "../../helpers/BytesToMB";
interface Request {
media?: Express.Multer.File;
2023-09-08 19:50:51 +00:00
ticket: Ticket;
mic_audio?: any;
filePath?: string;
}
const SendWhatsAppMedia = async ({
media,
2023-09-08 19:50:51 +00:00
ticket,
mic_audio,
filePath
}: Request): Promise<WbotMessage | any> => {
2023-09-08 19:50:51 +00:00
const { phoneNumberId } = ticket;
2023-09-08 19:50:51 +00:00
if (phoneNumberId) {
if (media) {
const { type, mbMaxSize }: any = mediaTypeWhatsappOfficial(media.mimetype);
const filesize: any = bytesToMB(media.size);
if (filesize > mbMaxSize) {
throw new AppError("FILE TOO LARGE!");
}
if (!type) {
throw new AppError("FILE TYPE NOT SUPPORTED!");
}
sendWhatsMediaOfficialAPI(ticket, media, type, mic_audio);
return;
}
2023-09-08 19:50:51 +00:00
}
2023-09-08 19:50:51 +00:00
try {
let newMedia: MessageMedia;
if (filePath) {
newMedia = MessageMedia.fromFilePath(filePath);
} else if (media) {
newMedia = MessageMedia.fromFilePath(media.path);
} else {
throw new AppError("No media provided!");
}
2023-09-08 19:50:51 +00:00
sendWhatsAppMediaSocket(ticket, newMedia);
const lastMessage = filePath ? path.basename(filePath) : media?.filename;
await ticket.update({ lastMessage });
2023-09-08 19:50:51 +00:00
await updateTicketCacheByTicketId(ticket.id, {
lastMessage,
2023-09-08 19:50:51 +00:00
updatedAt: new Date(ticket.updatedAt).toISOString()
});
if (media) {
fs.unlinkSync(media.path);
}
} catch (err) {
throw new AppError("ERR_SENDING_WAPP_MSG");
}
// const { phoneNumberId } = ticket;
// if (phoneNumberId) {
// const { type, mbMaxSize }: any = mediaTypeWhatsappOfficial(media.mimetype);
// const filesize: any = bytesToMB(media.size);
// if (filesize > mbMaxSize) {
// throw new AppError("FILE TOO LARGE!");
// }
// if (!type) {
// throw new AppError("FILE TYPE NOT SUPPORTED!");
// }
// sendWhatsMediaOfficialAPI(ticket, media, type, mic_audio);
// return;
// }
// try {
// //const newMedia = MessageMedia.fromFilePath(media.path);
// let newMedia: MessageMedia;
// if (filePath) {
// newMedia = MessageMedia.fromFilePath(filePath);
// } else if (media) {
// newMedia = MessageMedia.fromFilePath(media.path);
// } else {
// throw new AppError("No media provided!");
// }
// sendWhatsAppMediaSocket(ticket, newMedia);
// await ticket.update({ lastMessage: media.filename });
// await updateTicketCacheByTicketId(ticket.id, {
// lastMessage: media.filename,
// updatedAt: new Date(ticket.updatedAt).toISOString()
// });
// console.log("media.path: ", media.path);
// fs.unlinkSync(media.path);
// } catch (err) {
// throw new AppError("ERR_SENDING_WAPP_MSG");
// }
};
export default SendWhatsAppMedia;