From 70d9d2db5fe260785d2fdd4abd3527ba366b1e03 Mon Sep 17 00:00:00 2001 From: KurimuzonAkuma Date: Sat, 2 Dec 2023 16:07:08 +0300 Subject: [PATCH] Add get_similar_channels to high-lvl --- compiler/docs/compiler.py | 1 + pyrogram/methods/chats/__init__.py | 2 + .../methods/chats/get_similar_channels.py | 59 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 pyrogram/methods/chats/get_similar_channels.py diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index 82bc674d..a6ba859e 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -250,6 +250,7 @@ def pyrogram_api(): export_folder_link get_folders update_folder + get_similar_channels """, users=""" Users diff --git a/pyrogram/methods/chats/__init__.py b/pyrogram/methods/chats/__init__.py index 46c7ee1e..36c1788c 100644 --- a/pyrogram/methods/chats/__init__.py +++ b/pyrogram/methods/chats/__init__.py @@ -38,6 +38,7 @@ from .get_chat_member import GetChatMember from .get_chat_members import GetChatMembers from .get_chat_members_count import GetChatMembersCount from .get_chat_online_count import GetChatOnlineCount +from .get_similar_channels import GetSimilarChannels from .get_dialogs import GetDialogs from .get_dialogs_count import GetDialogsCount from .get_folders import GetFolders @@ -120,6 +121,7 @@ class Chats( MarkChatUnread, GetChatEventLog, GetChatOnlineCount, + GetSimilarChannels, GetSendAsChats, SetSendAsChat, SetChatProtectedContent diff --git a/pyrogram/methods/chats/get_similar_channels.py b/pyrogram/methods/chats/get_similar_channels.py new file mode 100644 index 00000000..75f74865 --- /dev/null +++ b/pyrogram/methods/chats/get_similar_channels.py @@ -0,0 +1,59 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-present Dan +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from typing import Union, List, Optional + +import pyrogram +from pyrogram import raw +from pyrogram import types + + +class GetSimilarChannels: + async def get_similar_channels( + self: "pyrogram.Client", + chat_id: Union[int, str] + ) -> Optional[List["types.Chat"]]: + """Get similar channels. + + .. include:: /_includes/usable-by/users.rst + + Parameters: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + + Returns: + List of :obj:`~pyrogram.types.Chat`: On success, the list of channels is returned. + + Example: + .. code-block:: python + + channels = await app.get_similar_channels(chat_id) + print(channels) + """ + chat = await self.resolve_peer(chat_id) + + if isinstance(chat, raw.types.InputPeerChannel): + r = await self.invoke( + raw.functions.channels.GetChannelRecommendations( + channel=chat + ) + ) + + return types.List([types.Chat._parse_channel_chat(self, chat) for chat in r.chats]) or None + else: + raise ValueError(f'The chat_id "{chat_id}" belongs to a user or chat')