mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-26 18:38:39 -06:00
Adds initial_connection setting and filter old messages
This commit is contained in:
parent
2c76098d59
commit
ef7c6678cf
@ -402,6 +402,7 @@ export class InstanceController {
|
|||||||
read_status: read_status || false,
|
read_status: read_status || false,
|
||||||
sync_full_history: sync_full_history ?? false,
|
sync_full_history: sync_full_history ?? false,
|
||||||
ignore_list: [],
|
ignore_list: [],
|
||||||
|
initial_connection: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.logger.verbose('settings: ' + JSON.stringify(settings));
|
this.logger.verbose('settings: ' + JSON.stringify(settings));
|
||||||
|
@ -7,4 +7,5 @@ export class SettingsDto {
|
|||||||
read_status?: boolean;
|
read_status?: boolean;
|
||||||
sync_full_history?: boolean;
|
sync_full_history?: boolean;
|
||||||
ignore_list?: string[];
|
ignore_list?: string[];
|
||||||
|
initial_connection?: number;
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,12 @@ import { Logger } from '../../../../config/logger.config';
|
|||||||
import { dbserver } from '../../../../libs/db.connect';
|
import { dbserver } from '../../../../libs/db.connect';
|
||||||
import { InstanceDto } from '../../../dto/instance.dto';
|
import { InstanceDto } from '../../../dto/instance.dto';
|
||||||
import { WAMonitoringService } from '../../../services/monitor.service';
|
import { WAMonitoringService } from '../../../services/monitor.service';
|
||||||
|
import { SettingsService } from '../../../services/settings.service';
|
||||||
|
|
||||||
const logger = new Logger('KwikController');
|
const logger = new Logger('KwikController');
|
||||||
|
|
||||||
export class KwikController {
|
export class KwikController {
|
||||||
constructor(private readonly waMonitor: WAMonitoringService) {}
|
constructor(private readonly waMonitor: WAMonitoringService, private readonly settingsService: SettingsService) {}
|
||||||
|
|
||||||
private isTextMessage(messageType: any) {
|
private isTextMessage(messageType: any) {
|
||||||
return [
|
return [
|
||||||
@ -184,4 +185,17 @@ export class KwikController {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public async cleanChats(instance: InstanceDto) {
|
||||||
|
const db = configService.get<Database>('DATABASE');
|
||||||
|
const connection = dbserver.getClient().db(db.CONNECTION.DB_PREFIX_NAME + '-whatsapp-api');
|
||||||
|
const settings = this.settingsService.find(instance);
|
||||||
|
const initialConnection = (await settings).initial_connection;
|
||||||
|
if (initialConnection) {
|
||||||
|
connection
|
||||||
|
.collection('messages')
|
||||||
|
.deleteMany({ owner: instance.instanceName, messageTimestamp: { $lt: initialConnection } });
|
||||||
|
}
|
||||||
|
|
||||||
|
return { status: 'ok' };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,30 @@ export class KwikRouter extends RouterBroker {
|
|||||||
|
|
||||||
return res.status(HttpStatus.OK).json(response);
|
return res.status(HttpStatus.OK).json(response);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.router.post(this.routerPath('cleanChats'), ...guards, async (req, res) => {
|
||||||
|
logger.verbose('request received in cleanChats');
|
||||||
|
logger.verbose('request body: ');
|
||||||
|
logger.verbose(req.body);
|
||||||
|
|
||||||
|
logger.verbose('request query: ');
|
||||||
|
logger.verbose(req.query);
|
||||||
|
|
||||||
|
logger.error('request received in cleanChats');
|
||||||
|
logger.error('request body: ');
|
||||||
|
logger.error(req.body);
|
||||||
|
logger.error('request query: ');
|
||||||
|
logger.error(req.query);
|
||||||
|
|
||||||
|
const response = await this.dataValidate<InstanceDto>({
|
||||||
|
request: req,
|
||||||
|
schema: null,
|
||||||
|
ClassRef: InstanceDto,
|
||||||
|
execute: (instance) => kwikController.cleanChats(instance),
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.status(HttpStatus.OK).json(response);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public readonly router = Router();
|
public readonly router = Router();
|
||||||
|
@ -12,6 +12,7 @@ export class SettingsRaw {
|
|||||||
read_status?: boolean;
|
read_status?: boolean;
|
||||||
sync_full_history?: boolean;
|
sync_full_history?: boolean;
|
||||||
ignore_list?: string[];
|
ignore_list?: string[];
|
||||||
|
initial_connection?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const settingsSchema = new Schema<SettingsRaw>({
|
const settingsSchema = new Schema<SettingsRaw>({
|
||||||
@ -24,6 +25,7 @@ const settingsSchema = new Schema<SettingsRaw>({
|
|||||||
read_status: { type: Boolean, required: true },
|
read_status: { type: Boolean, required: true },
|
||||||
sync_full_history: { type: Boolean, required: true },
|
sync_full_history: { type: Boolean, required: true },
|
||||||
ignore_list: { type: [String], required: false },
|
ignore_list: { type: [String], required: false },
|
||||||
|
initial_connection: { type: Number, required: false },
|
||||||
});
|
});
|
||||||
|
|
||||||
export const SettingsModel = dbserver?.model(SettingsRaw.name, settingsSchema, 'settings');
|
export const SettingsModel = dbserver?.model(SettingsRaw.name, settingsSchema, 'settings');
|
||||||
|
@ -183,6 +183,6 @@ export const sendMessageController = new SendMessageController(waMonitor);
|
|||||||
export const chatController = new ChatController(waMonitor);
|
export const chatController = new ChatController(waMonitor);
|
||||||
export const groupController = new GroupController(waMonitor);
|
export const groupController = new GroupController(waMonitor);
|
||||||
export const labelController = new LabelController(waMonitor);
|
export const labelController = new LabelController(waMonitor);
|
||||||
export const kwikController = new KwikController(waMonitor);
|
export const kwikController = new KwikController(waMonitor, settingsService);
|
||||||
|
|
||||||
logger.info('Module - ON');
|
logger.info('Module - ON');
|
||||||
|
@ -223,6 +223,7 @@ export class ChannelStartupService {
|
|||||||
read_status: data.read_status,
|
read_status: data.read_status,
|
||||||
sync_full_history: data.sync_full_history,
|
sync_full_history: data.sync_full_history,
|
||||||
ignore_list: data.ignore_list,
|
ignore_list: data.ignore_list,
|
||||||
|
initial_connection: data.initial_connection,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -979,6 +979,13 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings.initial_connection && (m.messageTimestamp as number) <= settings.initial_connection) {
|
||||||
|
this.logger.verbose(
|
||||||
|
`[messaging-history.set] Ignore -> ${m.messageTimestamp} <= ${settings.initial_connection}`,
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (messagesRepository.has(m.key.id)) {
|
if (messagesRepository.has(m.key.id)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1098,6 +1105,13 @@ export class BaileysStartupService extends ChannelStartupService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings?.initial_connection && (received.messageTimestamp as number) <= settings.initial_connection) {
|
||||||
|
this.logger.verbose(
|
||||||
|
`[messages.upsert] Ignore -> ${received.messageTimestamp} <= ${settings.initial_connection}`,
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (settings?.ignore_list && settings.ignore_list.includes(received.key.remoteJid)) {
|
if (settings?.ignore_list && settings.ignore_list.includes(received.key.remoteJid)) {
|
||||||
this.logger.verbose('contact in ignore list.');
|
this.logger.verbose('contact in ignore list.');
|
||||||
return;
|
return;
|
||||||
|
@ -84,6 +84,7 @@ export declare namespace wa {
|
|||||||
read_status?: boolean;
|
read_status?: boolean;
|
||||||
sync_full_history?: boolean;
|
sync_full_history?: boolean;
|
||||||
ignore_list?: string[];
|
ignore_list?: string[];
|
||||||
|
initial_connection?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type LocalWebsocket = {
|
export type LocalWebsocket = {
|
||||||
|
@ -1003,6 +1003,7 @@ export const settingsSchema: JSONSchema7 = {
|
|||||||
read_status: { type: 'boolean', enum: [true, false] },
|
read_status: { type: 'boolean', enum: [true, false] },
|
||||||
sync_full_history: { type: 'boolean', enum: [true, false] },
|
sync_full_history: { type: 'boolean', enum: [true, false] },
|
||||||
ignore_list: { type: 'array', items: { type: 'string' } },
|
ignore_list: { type: 'array', items: { type: 'string' } },
|
||||||
|
initial_connection: { type: 'integer', minLength: 1 },
|
||||||
},
|
},
|
||||||
required: ['reject_call', 'groups_ignore', 'always_online', 'read_messages', 'read_status', 'sync_full_history'],
|
required: ['reject_call', 'groups_ignore', 'always_online', 'read_messages', 'read_status', 'sync_full_history'],
|
||||||
...isNotEmpty('reject_call', 'groups_ignore', 'always_online', 'read_messages', 'read_status', 'sync_full_history'),
|
...isNotEmpty('reject_call', 'groups_ignore', 'always_online', 'read_messages', 'read_status', 'sync_full_history'),
|
||||||
|
Loading…
Reference in New Issue
Block a user