diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py
index 483989df..5448c674 100644
--- a/compiler/docs/compiler.py
+++ b/compiler/docs/compiler.py
@@ -314,6 +314,7 @@ def pyrogram_api():
import_contacts
get_contacts
get_contacts_count
+ search_contacts
""",
payments="""
Payments
@@ -406,6 +407,11 @@ def pyrogram_api():
apply_boost
get_boosts
get_boosts_status
+ """,
+ account="""
+ Account
+ get_account_ttl
+ set_account_ttl
"""
)
@@ -475,6 +481,7 @@ def pyrogram_api():
Folder
GroupCallMember
ChatColor
+ FoundContacts
""",
messages_media="""
Messages & Media
diff --git a/compiler/docs/template/methods.rst b/compiler/docs/template/methods.rst
index 4fd34e1e..0c136a06 100644
--- a/compiler/docs/template/methods.rst
+++ b/compiler/docs/template/methods.rst
@@ -216,6 +216,19 @@ Payments
{payments}
+Account
+-------
+
+.. autosummary::
+ :nosignatures:
+
+ {account}
+
+.. toctree::
+ :hidden:
+
+ {account}
+
Advanced
--------
diff --git a/pyrogram/methods/__init__.py b/pyrogram/methods/__init__.py
index bcf4ebe0..b91bf8f2 100644
--- a/pyrogram/methods/__init__.py
+++ b/pyrogram/methods/__init__.py
@@ -16,6 +16,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see .
+from .account import Account
from .advanced import Advanced
from .auth import Auth
from .business import Business
@@ -35,6 +36,7 @@ from .utilities import Utilities
class Methods(
+ Account,
Advanced,
Auth,
Business,
diff --git a/pyrogram/methods/account/__init__.py b/pyrogram/methods/account/__init__.py
new file mode 100644
index 00000000..e9065823
--- /dev/null
+++ b/pyrogram/methods/account/__init__.py
@@ -0,0 +1,27 @@
+# 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 .get_account_ttl import GetAccountTTL
+from .set_account_ttl import SetAccountTTL
+
+
+class Account(
+ GetAccountTTL,
+ SetAccountTTL
+):
+ pass
diff --git a/pyrogram/methods/account/get_account_ttl.py b/pyrogram/methods/account/get_account_ttl.py
new file mode 100644
index 00000000..b468c5da
--- /dev/null
+++ b/pyrogram/methods/account/get_account_ttl.py
@@ -0,0 +1,44 @@
+# 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 .
+
+import pyrogram
+from pyrogram import raw
+
+
+class GetAccountTTL:
+ async def get_account_ttl(
+ self: "pyrogram.Client",
+ ):
+ """Get days to live of account.
+
+ .. include:: /_includes/usable-by/users.rst
+
+ Returns:
+ ``int``: Time to live in days of the current account.
+
+ Example:
+ .. code-block:: python
+
+ # Get ttl in days
+ await app.get_account_ttl()
+ """
+ r = await self.invoke(
+ raw.functions.account.GetAccountTTL()
+ )
+
+ return r.days
diff --git a/pyrogram/methods/account/set_account_ttl.py b/pyrogram/methods/account/set_account_ttl.py
new file mode 100644
index 00000000..45cc37ee
--- /dev/null
+++ b/pyrogram/methods/account/set_account_ttl.py
@@ -0,0 +1,51 @@
+# 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 .
+
+import pyrogram
+from pyrogram import raw
+
+
+class SetAccountTTL:
+ async def set_account_ttl(
+ self: "pyrogram.Client",
+ days: int
+ ):
+ """Set days to live of account.
+
+ .. include:: /_includes/usable-by/users.rst
+
+ Parameters:
+ days (``int``):
+ Time to live in days.
+
+ Returns:
+ ``bool``: On success, True is returned.
+
+ Example:
+ .. code-block:: python
+
+ # Set ttl in days
+ await app.set_account_ttl(365)
+ """
+ r = await self.invoke(
+ raw.functions.account.SetAccountTTL(
+ ttl=raw.types.AccountDaysTTL(days=days)
+ )
+ )
+
+ return r
diff --git a/pyrogram/methods/contacts/__init__.py b/pyrogram/methods/contacts/__init__.py
index 5849ce43..cf069b2a 100644
--- a/pyrogram/methods/contacts/__init__.py
+++ b/pyrogram/methods/contacts/__init__.py
@@ -21,6 +21,7 @@ from .delete_contacts import DeleteContacts
from .get_contacts import GetContacts
from .get_contacts_count import GetContactsCount
from .import_contacts import ImportContacts
+from .search_contacts import SearchContacts
class Contacts(
@@ -28,6 +29,7 @@ class Contacts(
DeleteContacts,
ImportContacts,
GetContactsCount,
- AddContact
+ AddContact,
+ SearchContacts
):
pass
diff --git a/pyrogram/methods/contacts/search_contacts.py b/pyrogram/methods/contacts/search_contacts.py
new file mode 100644
index 00000000..5e9591a2
--- /dev/null
+++ b/pyrogram/methods/contacts/search_contacts.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 .
+
+import pyrogram
+from pyrogram import raw
+from pyrogram import types
+
+
+class SearchContacts:
+ async def search_contacts(
+ self: "pyrogram.Client",
+ query: str,
+ limit: int = 0
+ ):
+ """Returns users or channels found by name substring and auxiliary data.
+
+ .. include:: /_includes/usable-by/users.rst
+
+ Parameters:
+ query (``str``):
+ Target substring.
+
+ limit (``int``, *optional*):
+ Maximum number of users to be returned.
+
+ Returns:
+ :obj:`~pyrogram.types.FoundContacts`: On success, a list of chats is returned.
+
+ Example:
+ .. code-block:: python
+
+ await app.search_contacts("pyrogram")
+ """
+ total = limit or (1 << 31) - 1
+ limit = min(100, total)
+
+ r = await self.invoke(
+ raw.functions.contacts.Search(
+ q=query,
+ limit=limit
+ )
+ )
+
+ return types.FoundContacts._parse(self, r)
diff --git a/pyrogram/types/user_and_chats/__init__.py b/pyrogram/types/user_and_chats/__init__.py
index 7ebea855..944bb8d5 100644
--- a/pyrogram/types/user_and_chats/__init__.py
+++ b/pyrogram/types/user_and_chats/__init__.py
@@ -40,6 +40,7 @@ from .chat_reactions import ChatReactions
from .dialog import Dialog
from .emoji_status import EmojiStatus
from .folder import Folder
+from .found_contacts import FoundContacts
from .group_call_member import GroupCallMember
from .invite_link_importer import InviteLinkImporter
from .restriction import Restriction
@@ -82,6 +83,7 @@ __all__ = [
"ChatJoiner",
"EmojiStatus",
"Folder",
+ "FoundContacts",
"GroupCallMember",
"ChatReactions"
]
diff --git a/pyrogram/types/user_and_chats/found_contacts.py b/pyrogram/types/user_and_chats/found_contacts.py
new file mode 100644
index 00000000..e5342ff3
--- /dev/null
+++ b/pyrogram/types/user_and_chats/found_contacts.py
@@ -0,0 +1,75 @@
+# 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 Optional
+
+import pyrogram
+from pyrogram import raw
+from pyrogram import utils
+from pyrogram import types
+from ..object import Object
+
+
+class FoundContacts(Object):
+ """Chats found by name substring and auxiliary data.
+
+ Parameters:
+ my_results (List of :obj:`~pyrogram.types.Chat`, *optional*):
+ Personalized results.
+
+ global_results (List of :obj:`~pyrogram.types.Chat`, *optional*):
+ List of found chats in global search.
+ """
+
+ def __init__(
+ self,
+ *,
+ client: "pyrogram.Client" = None,
+ my_results: Optional["types.Chat"] = None,
+ global_results: Optional["types.Chat"] = None
+ ):
+ super().__init__(client)
+
+ self.my_results = my_results
+ self.global_results = global_results
+
+ @staticmethod
+ def _parse(client, found: "raw.types.contacts.Found") -> "FoundContacts":
+ users = {u.id: u for u in found.users}
+ chats = {c.id: c for c in found.chats}
+
+ my_results = []
+ global_results = []
+
+ for result in found.my_results:
+ peer_id = utils.get_raw_peer_id(result)
+ peer = users.get(peer_id) or chats.get(peer_id)
+
+ my_results.append(types.Chat._parse_chat(client, peer))
+
+ for result in found.results:
+ peer_id = utils.get_raw_peer_id(result)
+ peer = users.get(peer_id) or chats.get(peer_id)
+
+ global_results.append(types.Chat._parse_chat(client, peer))
+
+ return FoundContacts(
+ my_results=types.List(my_results) or None,
+ global_results=types.List(global_results) or None,
+ client=client
+ )