Skip to content

Commit 4f206f6

Browse files
Merge pull request #433 from w3nder/develop
Add blockUser functionality
2 parents e2c67d7 + fa513bf commit 4f206f6

File tree

6 files changed

+68
-0
lines changed

6 files changed

+68
-0
lines changed

src/validate/validate.schema.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,17 @@ export const privacySettingsSchema: JSONSchema7 = {
539539
required: ['privacySettings'],
540540
};
541541

542+
export const blockUserSchema: JSONSchema7 = {
543+
$id: v4(),
544+
type: 'object',
545+
properties: {
546+
number: { type: 'string' },
547+
status: { type: 'string', enum: ['block', 'unblock'] },
548+
},
549+
required: ['number', 'status'],
550+
...isNotEmpty('number', 'status'),
551+
};
552+
542553
export const archiveChatSchema: JSONSchema7 = {
543554
$id: v4(),
544555
type: 'object',

src/whatsapp/controllers/chat.controller.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Logger } from '../../config/logger.config';
22
import {
33
ArchiveChatDto,
4+
BlockUserDto,
45
DeleteMessage,
56
getBase64FromMediaMessageDto,
67
NumberDto,
@@ -123,4 +124,9 @@ export class ChatController {
123124
logger.verbose('requested updateMessage from ' + instanceName + ' instance');
124125
return await this.waMonitor.waInstances[instanceName].updateMessage(data);
125126
}
127+
128+
public async blockUser({ instanceName }: InstanceDto, data: BlockUserDto) {
129+
logger.verbose('requested blockUser from ' + instanceName + ' instance');
130+
return await this.waMonitor.waInstances[instanceName].blockUser(data);
131+
}
126132
}

src/whatsapp/dto/chat.dto.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,8 @@ export class UpdateMessageDto extends Metadata {
115115
key: proto.IMessageKey;
116116
text: string;
117117
}
118+
119+
export class BlockUserDto {
120+
number: string;
121+
status: 'block' | 'unblock';
122+
}

src/whatsapp/routers/chat.router.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { RequestHandler, Router } from 'express';
33
import { Logger } from '../../config/logger.config';
44
import {
55
archiveChatSchema,
6+
blockUserSchema,
67
contactValidateSchema,
78
deleteMessageSchema,
89
messageUpSchema,
@@ -20,6 +21,7 @@ import {
2021
import { RouterBroker } from '../abstract/abstract.router';
2122
import {
2223
ArchiveChatDto,
24+
BlockUserDto,
2325
DeleteMessage,
2426
getBase64FromMediaMessageDto,
2527
NumberDto,
@@ -384,6 +386,23 @@ export class ChatRouter extends RouterBroker {
384386
});
385387

386388
return res.status(HttpStatus.OK).json(response);
389+
})
390+
.put(this.routerPath('updateBlockStatus'), ...guards, async (req, res) => {
391+
logger.verbose('request received in updateBlockStatus');
392+
logger.verbose('request body: ');
393+
logger.verbose(req.body);
394+
395+
logger.verbose('request query: ');
396+
logger.verbose(req.query);
397+
398+
const response = await this.dataValidate<BlockUserDto>({
399+
request: req,
400+
schema: blockUserSchema,
401+
ClassRef: BlockUserDto,
402+
execute: (instance, data) => chatController.blockUser(instance, data),
403+
});
404+
405+
return res.status(HttpStatus.CREATED).json(response);
387406
});
388407
}
389408

src/whatsapp/services/whatsapp.baileys.service.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import { useMultiFileAuthStateDb } from '../../utils/use-multi-file-auth-state-d
6363
import { useMultiFileAuthStateRedisDb } from '../../utils/use-multi-file-auth-state-redis-db';
6464
import {
6565
ArchiveChatDto,
66+
BlockUserDto,
6667
DeleteMessage,
6768
getBase64FromMediaMessageDto,
6869
LastMessage,
@@ -2796,6 +2797,29 @@ export class BaileysStartupService extends WAStartupService {
27962797
}
27972798
}
27982799

2800+
public async blockUser(data: BlockUserDto) {
2801+
this.logger.verbose('Blocking user: ' + data.number);
2802+
try {
2803+
const { number } = data;
2804+
2805+
this.logger.verbose(`Check if number "${number}" is WhatsApp`);
2806+
const isWA = (await this.whatsappNumber({ numbers: [number] }))?.shift();
2807+
2808+
this.logger.verbose(`Exists: "${isWA.exists}" | jid: ${isWA.jid}`);
2809+
if (!isWA.exists && !isJidGroup(isWA.jid) && !isWA.jid.includes('@broadcast')) {
2810+
throw new BadRequestException(isWA);
2811+
}
2812+
2813+
const sender = isWA.jid;
2814+
2815+
await this.client.updateBlockStatus(sender, data.status);
2816+
2817+
return { block: 'success' };
2818+
} catch (error) {
2819+
throw new InternalServerErrorException('Error blocking user', error.toString());
2820+
}
2821+
}
2822+
27992823
public async updateMessage(data: UpdateMessageDto) {
28002824
try {
28012825
const jid = this.createJid(data.number);

src/whatsapp/services/whatsapp.business.service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,6 +1159,9 @@ export class BusinessStartupService extends WAStartupService {
11591159
public async removeProfilePicture() {
11601160
throw new BadRequestException('Method not available on WhatsApp Business API');
11611161
}
1162+
public async blockUser() {
1163+
throw new BadRequestException('Method not available on WhatsApp Business API');
1164+
}
11621165
public async updateMessage() {
11631166
throw new BadRequestException('Method not available on WhatsApp Business API');
11641167
}

0 commit comments

Comments
 (0)