From a4f6c42bf54f24b7a2297750ccf10b36ff0496fa Mon Sep 17 00:00:00 2001 From: teidesu Date: Sun, 25 Apr 2021 21:47:44 +0300 Subject: [PATCH] feat(client): custom filtering for getDialogs --- packages/client/src/client.ts | 9 ++++++ .../client/src/methods/dialogs/get-dialogs.ts | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index a3177d93..2bcf8de4 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -916,6 +916,15 @@ export interface TelegramClient extends BaseTelegramClient { * By default fetches from "All" folder */ folder?: string | number | tl.RawDialogFilter + + /** + * Additional filtering for the dialogs. + * + * If `folder` is not provided, this filter is used instead. + * If `folder` is provided, fields from this object are used + * to override filters inside the folder. + */ + filter?: Partial> }): AsyncIterableIterator /** * Get list of folders. diff --git a/packages/client/src/methods/dialogs/get-dialogs.ts b/packages/client/src/methods/dialogs/get-dialogs.ts index fb0f6276..b2e2f6c6 100644 --- a/packages/client/src/methods/dialogs/get-dialogs.ts +++ b/packages/client/src/methods/dialogs/get-dialogs.ts @@ -108,6 +108,15 @@ export async function* getDialogs( * By default fetches from "All" folder */ folder?: string | number | tl.RawDialogFilter + + /** + * Additional filtering for the dialogs. + * + * If `folder` is not provided, this filter is used instead. + * If `folder` is provided, fields from this object are used + * to override filters inside the folder. + */ + filter?: Partial> } ): AsyncIterableIterator { if (!params) params = {} @@ -130,6 +139,25 @@ export async function* getDialogs( filters = params.folder } + if (params.filter) { + if (filters) { + filters = { + ...filters, + ...params.filter + } + } else { + filters = { + _: 'dialogFilter', + id: 0, + title: '', + pinnedPeers: [], + includePeers: [], + excludePeers: [], + ...params.filter + } + } + } + const fetchPinnedDialogsFromFolder = async (): Promise => { if (!filters || !filters.pinnedPeers.length) return null const res = await this.call({