From b0819284523a199925f31a1e8559edd20df63be7 Mon Sep 17 00:00:00 2001 From: wulan17 Date: Fri, 2 Aug 2024 19:20:40 +0700 Subject: [PATCH] pyrofork: Add get_scheduled_messages method Signed-off-by: wulan17 --- compiler/docs/compiler.py | 1 + pyrogram/methods/messages/__init__.py | 2 + .../messages/get_scheduled_messages.py | 83 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 pyrogram/methods/messages/get_scheduled_messages.py diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index 215ec8e6..2df00161 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -195,6 +195,7 @@ def pyrogram_api(): delete_messages get_available_effects get_messages + get_scheduled_messages get_media_group get_chat_history get_chat_history_count diff --git a/pyrogram/methods/messages/__init__.py b/pyrogram/methods/messages/__init__.py index ed2a352a..d4874e89 100644 --- a/pyrogram/methods/messages/__init__.py +++ b/pyrogram/methods/messages/__init__.py @@ -39,6 +39,7 @@ from .get_discussion_replies import GetDiscussionReplies from .get_discussion_replies_count import GetDiscussionRepliesCount from .get_media_group import GetMediaGroup from .get_messages import GetMessages +from .get_scheduled_messages import GetScheduledMessages from .read_chat_history import ReadChatHistory from .retract_vote import RetractVote from .search_global import SearchGlobal @@ -81,6 +82,7 @@ class Messages( GetAvailableEffects, GetMediaGroup, GetMessages, + GetScheduledMessages, SendAudio, SendChatAction, SendContact, diff --git a/pyrogram/methods/messages/get_scheduled_messages.py b/pyrogram/methods/messages/get_scheduled_messages.py new file mode 100644 index 00000000..532627d1 --- /dev/null +++ b/pyrogram/methods/messages/get_scheduled_messages.py @@ -0,0 +1,83 @@ +# Pyrofork - Telegram MTProto API Client Library for Python +# Copyright (C) 2022-present Mayuri-Chan +# +# This file is part of Pyrofork. +# +# Pyrofork 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. +# +# Pyrofork 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 Pyrofork. If not, see . + +import logging +from typing import Union, List, Iterable + +import pyrogram +from pyrogram import raw +from pyrogram import types +from pyrogram import utils + +log = logging.getLogger(__name__) + +class GetScheduledMessages: + async def get_scheduled_messages( + self: "pyrogram.Client", + chat_id: Union[int, str], + message_ids: Union[int, Iterable[int]] + ) -> Union["types.Message", List["types.Message"]]: + """Get one or more scheduled messages from a chat by using message identifiers. + + You can retrieve up to 200 messages at once. + + .. include:: /_includes/usable-by/users-bots.rst + + Parameters: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For your personal cloud (Saved Messages) you can simply use "me" or "self". + For a contact that exists in your Telegram address book you can use his phone number (str). + You can also use chat public link in form of *t.me/* (str). + + message_ids (``int`` | Iterable of ``int``): + Pass a single message identifier or an iterable of message ids (as integers) to get the content of the + message themselves. + + Returns: + :obj:`~pyrogram.types.Message` | List of :obj:`~pyrogram.types.Message`: In case *message_ids* was not + a list, a single message is returned, otherwise a list of messages is returned. + + Example: + .. code-block:: python + + # Get one scheduled message + await app.get_scheduled_message(chat_id, 12345) + + # Get more than one scheduled message (list of messages) + await app.get_scheduled_message(chat_id, [12345, 12346]) + + Raises: + ValueError: In case of invalid arguments. + """ + + if message_ids is None: + raise ValueError("No argument supplied. Pass message_ids") + + peer = await self.resolve_peer(chat_id) + + is_iterable = not isinstance(message_ids, int) + ids = list(message_ids) if is_iterable else [message_ids] + + rpc = raw.functions.messages.GetScheduledMessages(peer=peer, id=ids) + + r = await self.invoke(rpc, sleep_threshold=-1) + + messages = await utils.parse_messages(self, r) + + return messages if is_iterable else messages[0] if messages else None