From 5474f1ec0e2edfebf846d7ce5a71518273b66411 Mon Sep 17 00:00:00 2001 From: devlikepro Date: Sun, 13 Oct 2024 15:46:45 +0700 Subject: [PATCH] [core] Forward message fix #158 --- src/api/chatting.controller.ts | 9 +++++++++ src/core/abc/session.abc.ts | 4 ++++ src/core/engines/noweb/session.noweb.core.ts | 18 ++++++++++++++++++ src/core/engines/webjs/session.webjs.core.ts | 10 ++++++++++ src/structures/chatting.dto.ts | 7 +++++++ yarn.lock | 4 ++-- 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/api/chatting.controller.ts b/src/api/chatting.controller.ts index da7b47a9..8f7918ef 100644 --- a/src/api/chatting.controller.ts +++ b/src/api/chatting.controller.ts @@ -8,6 +8,7 @@ import { GetMessageQuery, MessageContactVcardRequest, MessageFileRequest, + MessageForwardRequest, MessageImageRequest, MessageLinkPreviewRequest, MessageLocationRequest, @@ -81,6 +82,14 @@ export class ChattingController { return whatsapp.sendVideo(request); } + @Post('/forwardMessage') + async forwardMessage( + @Body() request: MessageForwardRequest, + ): Promise { + const whatsapp = await this.manager.getWorkingSession(request.session); + return await whatsapp.forwardMessage(request); + } + @Post('/sendSeen') async sendSeen(@Body() chat: SendSeenRequest) { const whatsapp = await this.manager.getWorkingSession(chat.session); diff --git a/src/core/abc/session.abc.ts b/src/core/abc/session.abc.ts index ca49e285..c31e2dcc 100644 --- a/src/core/abc/session.abc.ts +++ b/src/core/abc/session.abc.ts @@ -5,6 +5,7 @@ import { } from '@waha/structures/channels.dto'; import { GetChatsQuery } from '@waha/structures/chats.dto'; import { Label, LabelID } from '@waha/structures/labels.dto'; +import { WAMessage } from '@waha/structures/responses.dto'; import { LoggerBuilder } from '@waha/utils/logging'; import { EventEmitter } from 'events'; import * as fs from 'fs'; @@ -18,6 +19,7 @@ import { GetMessageQuery, MessageContactVcardRequest, MessageFileRequest, + MessageForwardRequest, MessageImageRequest, MessageLinkPreviewRequest, MessageLocationRequest, @@ -279,6 +281,8 @@ export abstract class WhatsappSession { throw new NotImplementedByEngineError(); } + abstract forwardMessage(request: MessageForwardRequest): Promise; + abstract sendImage(request: MessageImageRequest); abstract sendFile(request: MessageFileRequest); diff --git a/src/core/engines/noweb/session.noweb.core.ts b/src/core/engines/noweb/session.noweb.core.ts index 024ffd56..72317021 100644 --- a/src/core/engines/noweb/session.noweb.core.ts +++ b/src/core/engines/noweb/session.noweb.core.ts @@ -68,6 +68,7 @@ import { MessageContactVcardRequest, MessageDestination, MessageFileRequest, + MessageForwardRequest, MessageImageRequest, MessageLinkPreviewRequest, MessageLocationRequest, @@ -669,6 +670,23 @@ export class WhatsappSessionNoWebCore extends WhatsappSession { }); } + async forwardMessage(request: MessageForwardRequest): Promise { + const key = parseMessageIdSerialized(request.messageId); + const forwardMessage = await this.store.loadMessage(key.remoteJid, key.id); + if (!forwardMessage) { + throw new UnprocessableEntityException( + `Message with id '${request.messageId}' not found`, + ); + } + const chatId = toJID(this.ensureSuffix(request.chatId)); + const message = { + forward: forwardMessage, + force: true, + }; + const result = await this.sock.sendMessage(chatId, message, {}); + return this.toWAMessage(result); + } + sendLinkPreview(request: MessageLinkPreviewRequest) { const text = `${request.title}\n${request.url}`; const chatId = toJID(this.ensureSuffix(request.chatId)); diff --git a/src/core/engines/webjs/session.webjs.core.ts b/src/core/engines/webjs/session.webjs.core.ts index 48fc5fcc..b527f582 100644 --- a/src/core/engines/webjs/session.webjs.core.ts +++ b/src/core/engines/webjs/session.webjs.core.ts @@ -26,6 +26,7 @@ import { EditMessageRequest, GetMessageQuery, MessageFileRequest, + MessageForwardRequest, MessageImageRequest, MessageLocationRequest, MessageReactionRequest, @@ -463,6 +464,15 @@ export class WhatsappSessionWebJSCore extends WhatsappSession { return this.whatsapp.sendMessage(request.chatId, location, options); } + async forwardMessage(request: MessageForwardRequest): Promise { + const forwardMessage = this.recreateMessage(request.messageId); + const msg = await forwardMessage.forward(request.chatId); + // Return "sent: true" for now + // need to research how to get the data from WebJS + // @ts-ignore + return { sent: msg || false }; + } + async sendSeen(request: SendSeenRequest) { const chat: Chat = await this.whatsapp.getChatById(request.chatId); await chat.sendSeen(); diff --git a/src/structures/chatting.dto.ts b/src/structures/chatting.dto.ts index 98162d9a..e8977b7f 100644 --- a/src/structures/chatting.dto.ts +++ b/src/structures/chatting.dto.ts @@ -256,6 +256,13 @@ export class MessageLinkPreviewRequest extends ChatRequest { title: string; } +export class MessageForwardRequest extends ChatRequest { + @ApiProperty({ + example: 'false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA', + }) + messageId: string; +} + export class MessageReactionRequest extends MessageRequest { @ApiProperty({ description: diff --git a/yarn.lock b/yarn.lock index 6bc38b6a..33116f7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12331,7 +12331,7 @@ __metadata: "whatsapp-web.js@github:devlikeapro/whatsapp-web.js#fork-main-channels": version: 1.26.0 - resolution: "whatsapp-web.js@https://github.com/devlikeapro/whatsapp-web.js.git#commit=4c4cc9817bac3fc1369f09571f9efd2477ba10a9" + resolution: "whatsapp-web.js@https://github.com/devlikeapro/whatsapp-web.js.git#commit=6a333d0088591269238726e9effa3cbb14c8e7c7" dependencies: "@pedroslopez/moduleraid": ^5.0.2 archiver: ^5.3.1 @@ -12349,7 +12349,7 @@ __metadata: optional: true unzipper: optional: true - checksum: ac30714d3e55fe9da1a1cd23db6988e1f060414a2b2c60e9d280938c4e620098da75edf85e54cd24efd976e884f5bc401e96d3cdabe583fae0332258f4d62b4d + checksum: 51e9dce51270cf6fb20acd0bd7368f36763dcc3d28c6c3725c78b46edd5da21fea2c9c1f78ab6699464e4e1a6d9c361b6ab76a88225ebdeeb3f9abdd860d082c languageName: node linkType: hard