mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-16 04:02:54 -06:00
feat: method to mark chat as unread
This commit is contained in:
parent
633dbb82d3
commit
8e9a1e2ba5
@ -4,6 +4,7 @@ import {
|
|||||||
BlockUserDto,
|
BlockUserDto,
|
||||||
DeleteMessage,
|
DeleteMessage,
|
||||||
getBase64FromMediaMessageDto,
|
getBase64FromMediaMessageDto,
|
||||||
|
MarkChatUnreadDto,
|
||||||
NumberDto,
|
NumberDto,
|
||||||
PrivacySettingDto,
|
PrivacySettingDto,
|
||||||
ProfileNameDto,
|
ProfileNameDto,
|
||||||
@ -40,6 +41,11 @@ export class ChatController {
|
|||||||
return await this.waMonitor.waInstances[instanceName].archiveChat(data);
|
return await this.waMonitor.waInstances[instanceName].archiveChat(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async markChatUnread({ instanceName }: InstanceDto, data: MarkChatUnreadDto) {
|
||||||
|
logger.verbose('requested markChatUnread from ' + instanceName + ' instance');
|
||||||
|
return await this.waMonitor.waInstances[instanceName].markChatUnread(data);
|
||||||
|
}
|
||||||
|
|
||||||
public async deleteMessage({ instanceName }: InstanceDto, data: DeleteMessage) {
|
public async deleteMessage({ instanceName }: InstanceDto, data: DeleteMessage) {
|
||||||
logger.verbose('requested deleteMessage from ' + instanceName + ' instance');
|
logger.verbose('requested deleteMessage from ' + instanceName + ' instance');
|
||||||
return await this.waMonitor.waInstances[instanceName].deleteMessage(data);
|
return await this.waMonitor.waInstances[instanceName].deleteMessage(data);
|
||||||
|
@ -73,6 +73,11 @@ export class ArchiveChatDto {
|
|||||||
archive: boolean;
|
archive: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class MarkChatUnreadDto {
|
||||||
|
lastMessage?: LastMessage;
|
||||||
|
chat?: string;
|
||||||
|
}
|
||||||
|
|
||||||
class PrivacySetting {
|
class PrivacySetting {
|
||||||
readreceipts: WAReadReceiptsValue;
|
readreceipts: WAReadReceiptsValue;
|
||||||
profile: WAPrivacyValue;
|
profile: WAPrivacyValue;
|
||||||
|
@ -6,6 +6,7 @@ import {
|
|||||||
blockUserSchema,
|
blockUserSchema,
|
||||||
contactValidateSchema,
|
contactValidateSchema,
|
||||||
deleteMessageSchema,
|
deleteMessageSchema,
|
||||||
|
markChatUnreadSchema,
|
||||||
messageUpSchema,
|
messageUpSchema,
|
||||||
messageValidateSchema,
|
messageValidateSchema,
|
||||||
presenceSchema,
|
presenceSchema,
|
||||||
@ -24,6 +25,7 @@ import {
|
|||||||
BlockUserDto,
|
BlockUserDto,
|
||||||
DeleteMessage,
|
DeleteMessage,
|
||||||
getBase64FromMediaMessageDto,
|
getBase64FromMediaMessageDto,
|
||||||
|
MarkChatUnreadDto,
|
||||||
NumberDto,
|
NumberDto,
|
||||||
PrivacySettingDto,
|
PrivacySettingDto,
|
||||||
ProfileNameDto,
|
ProfileNameDto,
|
||||||
@ -98,6 +100,23 @@ export class ChatRouter extends RouterBroker {
|
|||||||
|
|
||||||
return res.status(HttpStatus.CREATED).json(response);
|
return res.status(HttpStatus.CREATED).json(response);
|
||||||
})
|
})
|
||||||
|
.put(this.routerPath('markChatUnread'), ...guards, async (req, res) => {
|
||||||
|
logger.verbose('request received in markChatUnread');
|
||||||
|
logger.verbose('request body: ');
|
||||||
|
logger.verbose(req.body);
|
||||||
|
|
||||||
|
logger.verbose('request query: ');
|
||||||
|
logger.verbose(req.query);
|
||||||
|
|
||||||
|
const response = await this.dataValidate<MarkChatUnreadDto>({
|
||||||
|
request: req,
|
||||||
|
schema: markChatUnreadSchema,
|
||||||
|
ClassRef: MarkChatUnreadDto,
|
||||||
|
execute: (instance, data) => chatController.markChatUnread(instance, data),
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.status(HttpStatus.CREATED).json(response);
|
||||||
|
})
|
||||||
.delete(this.routerPath('deleteMessageForEveryone'), ...guards, async (req, res) => {
|
.delete(this.routerPath('deleteMessageForEveryone'), ...guards, async (req, res) => {
|
||||||
logger.verbose('request received in deleteMessageForEveryone');
|
logger.verbose('request received in deleteMessageForEveryone');
|
||||||
logger.verbose('request body: ');
|
logger.verbose('request body: ');
|
||||||
|
@ -68,6 +68,7 @@ import {
|
|||||||
DeleteMessage,
|
DeleteMessage,
|
||||||
getBase64FromMediaMessageDto,
|
getBase64FromMediaMessageDto,
|
||||||
LastMessage,
|
LastMessage,
|
||||||
|
MarkChatUnreadDto,
|
||||||
NumberBusiness,
|
NumberBusiness,
|
||||||
OnWhatsAppDto,
|
OnWhatsAppDto,
|
||||||
PrivacySettingDto,
|
PrivacySettingDto,
|
||||||
@ -2714,6 +2715,45 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async markChatUnread(data: MarkChatUnreadDto) {
|
||||||
|
this.logger.verbose('Marking chat as unread');
|
||||||
|
|
||||||
|
try {
|
||||||
|
let last_message = data.lastMessage;
|
||||||
|
let number = data.chat;
|
||||||
|
|
||||||
|
if (!last_message && number) {
|
||||||
|
last_message = await this.getLastMessage(number);
|
||||||
|
} else {
|
||||||
|
last_message = data.lastMessage;
|
||||||
|
last_message.messageTimestamp = last_message?.messageTimestamp ?? Date.now();
|
||||||
|
number = last_message?.key?.remoteJid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!last_message || Object.keys(last_message).length === 0) {
|
||||||
|
throw new NotFoundException('Last message not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.client.chatModify(
|
||||||
|
{
|
||||||
|
markRead: false,
|
||||||
|
lastMessages: [last_message],
|
||||||
|
},
|
||||||
|
this.createJid(number),
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
chatId: number,
|
||||||
|
markedChatUnread: true,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
throw new InternalServerErrorException({
|
||||||
|
markedChatUnread: false,
|
||||||
|
message: ['An error occurred while marked unread the chat. Open a calling.', error.toString()],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async deleteMessage(del: DeleteMessage) {
|
public async deleteMessage(del: DeleteMessage) {
|
||||||
this.logger.verbose('Deleting message');
|
this.logger.verbose('Deleting message');
|
||||||
try {
|
try {
|
||||||
|
@ -1258,6 +1258,9 @@ export class BusinessStartupService extends ChannelStartupService {
|
|||||||
public async archiveChat() {
|
public async archiveChat() {
|
||||||
throw new BadRequestException('Method not available on WhatsApp Business API');
|
throw new BadRequestException('Method not available on WhatsApp Business API');
|
||||||
}
|
}
|
||||||
|
public async markChatUnread() {
|
||||||
|
throw new BadRequestException('Method not available on WhatsApp Business API');
|
||||||
|
}
|
||||||
public async fetchProfile() {
|
public async fetchProfile() {
|
||||||
throw new BadRequestException('Method not available on WhatsApp Business API');
|
throw new BadRequestException('Method not available on WhatsApp Business API');
|
||||||
}
|
}
|
||||||
|
@ -597,6 +597,33 @@ export const archiveChatSchema: JSONSchema7 = {
|
|||||||
required: ['archive'],
|
required: ['archive'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const markChatUnreadSchema: JSONSchema7 = {
|
||||||
|
$id: v4(),
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
chat: { type: 'string' },
|
||||||
|
lastMessage: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
key: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
id: { type: 'string' },
|
||||||
|
remoteJid: { type: 'string' },
|
||||||
|
fromMe: { type: 'boolean', enum: [true, false] },
|
||||||
|
},
|
||||||
|
required: ['id', 'fromMe', 'remoteJid'],
|
||||||
|
...isNotEmpty('id', 'remoteJid'),
|
||||||
|
},
|
||||||
|
messageTimestamp: { type: 'integer', minLength: 1 },
|
||||||
|
},
|
||||||
|
required: ['key'],
|
||||||
|
...isNotEmpty('messageTimestamp'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
required: ['lastMessage'],
|
||||||
|
};
|
||||||
|
|
||||||
export const deleteMessageSchema: JSONSchema7 = {
|
export const deleteMessageSchema: JSONSchema7 = {
|
||||||
$id: v4(),
|
$id: v4(),
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
Loading…
Reference in New Issue
Block a user