diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py
index b5382438..01acf632 100644
--- a/compiler/docs/compiler.py
+++ b/compiler/docs/compiler.py
@@ -256,14 +256,17 @@ def pyrogram_api():
edit_chat_invite_link
revoke_chat_invite_link
delete_chat_invite_link
- get_chat_invite_link_members
- get_chat_invite_link_members_count
+ get_chat_invite_link_joiners
+ get_chat_invite_link_joiners_count
get_chat_admin_invite_links
get_chat_admin_invite_links_count
get_chat_admins_with_invite_links
+ get_chat_join_requests
delete_chat_admin_invite_links
approve_chat_join_request
+ approve_all_chat_join_requests
decline_chat_join_request
+ decline_all_chat_join_requests
""",
contacts="""
Contacts
@@ -370,6 +373,7 @@ def pyrogram_api():
ChatEventFilter
ChatMemberUpdated
ChatJoinRequest
+ ChatJoiner
Dialog
Restriction
""",
diff --git a/pyrogram/methods/invite_links/__init__.py b/pyrogram/methods/invite_links/__init__.py
index c2183d9b..67c1d149 100644
--- a/pyrogram/methods/invite_links/__init__.py
+++ b/pyrogram/methods/invite_links/__init__.py
@@ -17,8 +17,10 @@
# along with Pyrogram. If not, see .
+from .approve_all_chat_join_requests import ApproveAllChatJoinRequests
from .approve_chat_join_request import ApproveChatJoinRequest
from .create_chat_invite_link import CreateChatInviteLink
+from .decline_all_chat_join_requests import DeclineAllChatJoinRequests
from .decline_chat_join_request import DeclineChatJoinRequest
from .delete_chat_admin_invite_links import DeleteChatAdminInviteLinks
from .delete_chat_invite_link import DeleteChatInviteLink
@@ -28,8 +30,9 @@ from .get_chat_admin_invite_links import GetChatAdminInviteLinks
from .get_chat_admin_invite_links_count import GetChatAdminInviteLinksCount
from .get_chat_admins_with_invite_links import GetChatAdminsWithInviteLinks
from .get_chat_invite_link import GetChatInviteLink
-from .get_chat_invite_link_members import GetChatInviteLinkMembers
-from .get_chat_invite_link_members_count import GetChatInviteLinkMembersCount
+from .get_chat_invite_link_joiners import GetChatInviteLinkJoiners
+from .get_chat_invite_link_joiners_count import GetChatInviteLinkJoinersCount
+from .get_chat_join_requests import GetChatJoinRequests
from .revoke_chat_invite_link import RevokeChatInviteLink
@@ -38,8 +41,8 @@ class InviteLinks(
DeleteChatInviteLink,
EditChatInviteLink,
CreateChatInviteLink,
- GetChatInviteLinkMembers,
- GetChatInviteLinkMembersCount,
+ GetChatInviteLinkJoiners,
+ GetChatInviteLinkJoinersCount,
GetChatAdminInviteLinks,
ExportChatInviteLink,
DeleteChatAdminInviteLinks,
@@ -47,6 +50,9 @@ class InviteLinks(
GetChatAdminsWithInviteLinks,
GetChatInviteLink,
ApproveChatJoinRequest,
- DeclineChatJoinRequest
+ DeclineChatJoinRequest,
+ ApproveAllChatJoinRequests,
+ DeclineAllChatJoinRequests,
+ GetChatJoinRequests
):
pass
diff --git a/pyrogram/methods/invite_links/get_chat_invite_link_members.py b/pyrogram/methods/invite_links/get_chat_invite_link_joiners.py
similarity index 85%
rename from pyrogram/methods/invite_links/get_chat_invite_link_members.py
rename to pyrogram/methods/invite_links/get_chat_invite_link_joiners.py
index 28121ccc..cfd68734 100644
--- a/pyrogram/methods/invite_links/get_chat_invite_link_members.py
+++ b/pyrogram/methods/invite_links/get_chat_invite_link_joiners.py
@@ -23,13 +23,13 @@ from pyrogram import raw
from pyrogram import types
-class GetChatInviteLinkMembers:
- async def get_chat_invite_link_members(
+class GetChatInviteLinkJoiners:
+ async def get_chat_invite_link_joiners(
self: "pyrogram.Client",
chat_id: Union[int, str],
invite_link: str,
limit: int = 0
- ) -> Optional[AsyncGenerator["types.ChatMember", None]]:
+ ) -> Optional[AsyncGenerator["types.ChatJoiner", None]]:
"""Get the members who joined the chat with the invite link.
Parameters:
@@ -45,10 +45,10 @@ class GetChatInviteLinkMembers:
By default, no limit is applied and all invite links are returned.
Returns:
- ``Generator``: A generator yielding :obj:`~pyrogram.types.ChatMember` objects.
+ ``Generator``: A generator yielding :obj:`~pyrogram.types.ChatJoiner` objects.
Yields:
- :obj:`~pyrogram.types.ChatMember` objects.
+ :obj:`~pyrogram.types.ChatJoiner` objects.
"""
current = 0
total = abs(limit) or (1 << 31) - 1
@@ -77,13 +77,7 @@ class GetChatInviteLinkMembers:
offset_user = await self.resolve_peer(r.importers[-1].user_id)
for i in r.importers:
- user = types.User._parse(self, users[i.user_id])
-
- yield types.ChatMember(
- user=user,
- status="member",
- joined_date=i.date
- )
+ yield types.ChatJoiner._parse(self, i, users)
current += 1
diff --git a/pyrogram/methods/invite_links/get_chat_invite_link_members_count.py b/pyrogram/methods/invite_links/get_chat_invite_link_joiners_count.py
similarity index 95%
rename from pyrogram/methods/invite_links/get_chat_invite_link_members_count.py
rename to pyrogram/methods/invite_links/get_chat_invite_link_joiners_count.py
index d5428957..084fbae5 100644
--- a/pyrogram/methods/invite_links/get_chat_invite_link_members_count.py
+++ b/pyrogram/methods/invite_links/get_chat_invite_link_joiners_count.py
@@ -22,8 +22,8 @@ import pyrogram
from pyrogram import raw
-class GetChatInviteLinkMembersCount:
- async def get_chat_invite_link_members_count(
+class GetChatInviteLinkJoinersCount:
+ async def get_chat_invite_link_joiners_count(
self: "pyrogram.Client",
chat_id: Union[int, str],
invite_link: str
diff --git a/pyrogram/methods/invite_links/get_chat_join_requests.py b/pyrogram/methods/invite_links/get_chat_join_requests.py
new file mode 100644
index 00000000..9a9bc387
--- /dev/null
+++ b/pyrogram/methods/invite_links/get_chat_join_requests.py
@@ -0,0 +1,86 @@
+# 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, Optional, AsyncGenerator
+
+import pyrogram
+from pyrogram import raw
+from pyrogram import types
+
+
+class GetChatJoinRequests:
+ async def get_chat_join_requests(
+ self: "pyrogram.Client",
+ chat_id: Union[int, str],
+ limit: int = 0,
+ query: str = ""
+ ) -> Optional[AsyncGenerator["types.ChatJoiner", None]]:
+ """Get the pending join requests of a chat.
+
+ Parameters:
+ chat_id (``int`` | ``str``):
+ Unique identifier for the target chat or username of the target channel/supergroup
+ (in the format @username).
+
+ limit (``int``, *optional*):
+ Limits the number of invite links to be retrieved.
+ By default, no limit is applied and all invite links are returned.
+
+ query (``str``, *optional*):
+ Query to search for a user.
+
+ Returns:
+ ``Generator``: A generator yielding :obj:`~pyrogram.types.ChatJoiner` objects.
+
+ Yields:
+ :obj:`~pyrogram.types.ChatJoiner` objects.
+ """
+ current = 0
+ total = abs(limit) or (1 << 31) - 1
+ limit = min(100, total)
+
+ offset_date = 0
+ offset_user = raw.types.InputUserEmpty()
+
+ while True:
+ r = await self.invoke(
+ raw.functions.messages.GetChatInviteImporters(
+ peer=await self.resolve_peer(chat_id),
+ limit=limit,
+ offset_date=offset_date,
+ offset_user=offset_user,
+ requested=True,
+ q=query
+ )
+ )
+
+ if not r.importers:
+ break
+
+ users = {i.id: i for i in r.users}
+
+ offset_date = r.importers[-1].date
+ offset_user = await self.resolve_peer(r.importers[-1].user_id)
+
+ for i in r.importers:
+ yield types.ChatJoiner._parse(self, i, users)
+
+ current += 1
+
+ if current >= total:
+ return
diff --git a/pyrogram/types/user_and_chats/__init__.py b/pyrogram/types/user_and_chats/__init__.py
index 15ddf8c9..bf508279 100644
--- a/pyrogram/types/user_and_chats/__init__.py
+++ b/pyrogram/types/user_and_chats/__init__.py
@@ -22,6 +22,7 @@ from .chat_event import ChatEvent
from .chat_event_filter import ChatEventFilter
from .chat_invite_link import ChatInviteLink
from .chat_join_request import ChatJoinRequest
+from .chat_joiner import ChatJoiner
from .chat_member import ChatMember
from .chat_member_updated import ChatMemberUpdated
from .chat_permissions import ChatPermissions
@@ -57,5 +58,6 @@ __all__ = [
"ChatMemberUpdated",
"VoiceChatScheduled",
"ChatJoinRequest",
- "ChatPrivileges"
+ "ChatPrivileges",
+ "ChatJoiner"
]
diff --git a/pyrogram/types/user_and_chats/chat_joiner.py b/pyrogram/types/user_and_chats/chat_joiner.py
new file mode 100644
index 00000000..024f88ea
--- /dev/null
+++ b/pyrogram/types/user_and_chats/chat_joiner.py
@@ -0,0 +1,82 @@
+# 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 datetime import datetime
+from typing import Dict
+
+import pyrogram
+from pyrogram import raw, types, utils
+from ..object import Object
+
+
+class ChatJoiner(Object):
+ """Contains information about a joiner member of a chat.
+
+ Parameters:
+ user (:obj:`~pyrogram.types.User`):
+ Information about the user.
+
+ date (:py:obj:`~datetime.datetime`):
+ Date when the user joined.
+
+ bio (``str``, *optional*):
+ Bio of the user.
+
+ pending (``bool``, *optional*):
+ True in case the chat joiner has a pending request.
+
+ approved_by (:obj:`~pyrogram.types.User`, *optional*):
+ Administrator who approved this chat joiner.
+ """
+
+ def __init__(
+ self,
+ *,
+ client: "pyrogram.Client",
+ user: "types.User",
+ date: datetime = None,
+ bio: str = None,
+ pending: bool = None,
+ approved_by: "types.User" = None,
+ ):
+ super().__init__(client)
+
+ self.user = user
+ self.date = date
+ self.bio = bio
+ self.pending = pending
+ self.approved_by = approved_by
+
+ @staticmethod
+ def _parse(
+ client: "pyrogram.Client",
+ joiner: "raw.base.ChatInviteImporter",
+ users: Dict[int, "raw.base.User"],
+ ) -> "ChatJoiner":
+ return ChatJoiner(
+ user=types.User._parse(client, users[joiner.user_id]),
+ date=utils.timestamp_to_datetime(joiner.date),
+ pending=joiner.requested,
+ bio=joiner.about,
+ approved_by=(
+ types.User._parse(client, users[joiner.approved_by])
+ if joiner.approved_by
+ else None
+ ),
+ client=client
+ )