feat: Added reject call and send text message when receiving a call and Added setting to ignore group messages

This commit is contained in:
Davidson Gomes 2023-07-24 10:18:16 -03:00
parent 73d9cd62a5
commit 1fcbd4f9fd
2 changed files with 61 additions and 19 deletions

View File

@ -5,6 +5,8 @@
* Added connection functionality via pairing code * Added connection functionality via pairing code
* Added fetch profile endpoint in chat controller * Added fetch profile endpoint in chat controller
* Created settings controller * Created settings controller
* Added reject call and send text message when receiving a call
* Added setting to ignore group messages
### Fixed ### Fixed
@ -12,7 +14,7 @@
### Integrations ### Integrations
- Chatwoot: v2.18.0 - Chatwoot: v2.18.0 - v3.0.0 (Beta)
# 1.3.2 (2023-07-21 17:19) # 1.3.2 (2023-07-21 17:19)

View File

@ -1086,6 +1086,7 @@ export class WAStartupService {
type: MessageUpsertType; type: MessageUpsertType;
}, },
database: Database, database: Database,
settings: SettingsRaw,
) => { ) => {
this.logger.verbose('Event received: messages.upsert'); this.logger.verbose('Event received: messages.upsert');
const received = messages[0]; const received = messages[0];
@ -1103,6 +1104,11 @@ export class WAStartupService {
received.messageTimestamp = received.messageTimestamp?.toNumber(); received.messageTimestamp = received.messageTimestamp?.toNumber();
} }
if (settings.groups_ignore && received.key.remoteJid.includes('@g.us')) {
this.logger.verbose('group ignored');
return;
}
const messageRaw: MessageRaw = { const messageRaw: MessageRaw = {
key: received.key, key: received.key,
pushName: received.pushName, pushName: received.pushName,
@ -1194,7 +1200,11 @@ export class WAStartupService {
); );
}, },
'messages.update': async (args: WAMessageUpdate[], database: Database) => { 'messages.update': async (
args: WAMessageUpdate[],
database: Database,
settings: SettingsRaw,
) => {
this.logger.verbose('Event received: messages.update'); this.logger.verbose('Event received: messages.update');
const status: Record<number, wa.StatusMessage> = { const status: Record<number, wa.StatusMessage> = {
0: 'ERROR', 0: 'ERROR',
@ -1205,6 +1215,10 @@ export class WAStartupService {
5: 'PLAYED', 5: 'PLAYED',
}; };
for await (const { key, update } of args) { for await (const { key, update } of args) {
if (settings.groups_ignore && key.remoteJid.includes('@g.us')) {
this.logger.verbose('group ignored');
return;
}
if (key.remoteJid !== 'status@broadcast' && !key?.remoteJid?.match(/(:\d+)/)) { if (key.remoteJid !== 'status@broadcast' && !key?.remoteJid?.match(/(:\d+)/)) {
this.logger.verbose('Message update is valid'); this.logger.verbose('Message update is valid');
@ -1304,9 +1318,28 @@ export class WAStartupService {
private eventHandler() { private eventHandler() {
this.logger.verbose('Initializing event handler'); this.logger.verbose('Initializing event handler');
this.client.ev.process((events) => { this.client.ev.process(async (events) => {
if (!this.endSession) { if (!this.endSession) {
const database = this.configService.get<Database>('DATABASE'); const database = this.configService.get<Database>('DATABASE');
const settings = await this.findSettings();
if (events.call) {
this.logger.verbose('Listening event: call');
console.log('events.call', events.call);
const call = events.call[0];
if (settings?.reject_call && call.status == 'offer') {
this.logger.verbose('Rejecting call');
this.client.rejectCall(call.id, call.from);
}
if (settings?.msg_call.trim().length > 0 && call.status == 'offer') {
this.logger.verbose('Sending message in call');
this.client.sendMessage(call.from, {
text: settings.msg_call,
});
}
}
if (events['connection.update']) { if (events['connection.update']) {
this.logger.verbose('Listening event: connection.update'); this.logger.verbose('Listening event: connection.update');
@ -1327,21 +1360,27 @@ export class WAStartupService {
if (events['messages.upsert']) { if (events['messages.upsert']) {
this.logger.verbose('Listening event: messages.upsert'); this.logger.verbose('Listening event: messages.upsert');
const payload = events['messages.upsert']; const payload = events['messages.upsert'];
this.messageHandle['messages.upsert'](payload, database); this.messageHandle['messages.upsert'](payload, database, settings);
} }
if (events['messages.update']) { if (events['messages.update']) {
this.logger.verbose('Listening event: messages.update'); this.logger.verbose('Listening event: messages.update');
const payload = events['messages.update']; const payload = events['messages.update'];
this.messageHandle['messages.update'](payload, database); this.messageHandle['messages.update'](payload, database, settings);
} }
if (events['presence.update']) { if (events['presence.update']) {
this.logger.verbose('Listening event: presence.update'); this.logger.verbose('Listening event: presence.update');
const payload = events['presence.update']; const payload = events['presence.update'];
if (settings.groups_ignore && payload.id.includes('@g.us')) {
this.logger.verbose('group ignored');
return;
}
this.sendDataWebhook(Events.PRESENCE_UPDATE, payload); this.sendDataWebhook(Events.PRESENCE_UPDATE, payload);
} }
if (!settings?.groups_ignore) {
if (events['groups.upsert']) { if (events['groups.upsert']) {
this.logger.verbose('Listening event: groups.upsert'); this.logger.verbose('Listening event: groups.upsert');
const payload = events['groups.upsert']; const payload = events['groups.upsert'];
@ -1359,6 +1398,7 @@ export class WAStartupService {
const payload = events['group-participants.update']; const payload = events['group-participants.update'];
this.groupHandler['group-participants.update'](payload); this.groupHandler['group-participants.update'](payload);
} }
}
if (events['chats.upsert']) { if (events['chats.upsert']) {
this.logger.verbose('Listening event: chats.upsert'); this.logger.verbose('Listening event: chats.upsert');