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({