mirror of
https://github.com/TeamPGM/pyrogram.git
synced 2024-11-16 04:35:24 +00:00
Make privacy rules like in gui
This commit is contained in:
parent
7f8c92ace8
commit
5dbc20c9c5
@ -26,14 +26,11 @@ class StoriesPrivacyRules(AutoName):
|
|||||||
PUBLIC = auto()
|
PUBLIC = auto()
|
||||||
"Public stories"
|
"Public stories"
|
||||||
|
|
||||||
CLOSE_FRIENDS = auto()
|
|
||||||
"Close friends stories"
|
|
||||||
|
|
||||||
CONTACTS = auto()
|
CONTACTS = auto()
|
||||||
"Contacts only stories"
|
"Contacts only stories"
|
||||||
|
|
||||||
PRIVATE = auto()
|
CLOSE_FRIENDS = auto()
|
||||||
"Private stories"
|
"Close friends stories"
|
||||||
|
|
||||||
NO_CONTACTS = auto()
|
SELECTED_USERS = auto()
|
||||||
"Hide stories from contacts"
|
"Selected users stories"
|
||||||
|
@ -38,10 +38,8 @@ class EditStory:
|
|||||||
supports_streaming: bool = True,
|
supports_streaming: bool = True,
|
||||||
file_name: str = None,
|
file_name: str = None,
|
||||||
privacy: "enums.StoriesPrivacyRules" = None,
|
privacy: "enums.StoriesPrivacyRules" = None,
|
||||||
allowed_users: List[int] = None,
|
allowed_users: List[Union[int, str]] = None,
|
||||||
denied_users: List[int] = None,
|
disallowed_users: List[Union[int, str]] = None,
|
||||||
allowed_chats: List[int] = None,
|
|
||||||
denied_chats: List[int] = None,
|
|
||||||
parse_mode: "enums.ParseMode" = None,
|
parse_mode: "enums.ParseMode" = None,
|
||||||
caption_entities: List["types.MessageEntity"] = None,
|
caption_entities: List["types.MessageEntity"] = None,
|
||||||
progress: Callable = None,
|
progress: Callable = None,
|
||||||
@ -88,17 +86,16 @@ class EditStory:
|
|||||||
Story privacy.
|
Story privacy.
|
||||||
Defaults to :obj:`~pyrogram.enums.StoriesPrivacyRules.PUBLIC`
|
Defaults to :obj:`~pyrogram.enums.StoriesPrivacyRules.PUBLIC`
|
||||||
|
|
||||||
allowed_chats (List of ``int``, *optional*):
|
|
||||||
List of chat_id which participant allowed to view the story.
|
|
||||||
|
|
||||||
denied_chats (List of ``int``, *optional*):
|
|
||||||
List of chat_id which participant denied to view the story.
|
|
||||||
|
|
||||||
allowed_users (List of ``int``, *optional*):
|
allowed_users (List of ``int``, *optional*):
|
||||||
List of user_id whos allowed to view the story.
|
List of user_id or chat_id of chat users who are allowed to view stories.
|
||||||
|
Note: chat_id available only with :obj:`~pyrogram.enums.StoriesPrivacyRules.SELECTED_USERS`.
|
||||||
|
Works with :obj:`~pyrogram.enums.StoriesPrivacyRules.CLOSE_FRIENDS`
|
||||||
|
and :obj:`~pyrogram.enums.StoriesPrivacyRules.SELECTED_USERS` only
|
||||||
|
|
||||||
denied_users (List of ``int``, *optional*):
|
disallowed_users (List of ``int``, *optional*):
|
||||||
List of user_id whos denied to view the story.
|
List of user_id whos disallow to view the stories.
|
||||||
|
Note: Works with :obj:`~pyrogram.enums.StoriesPrivacyRules.PUBLIC`
|
||||||
|
and :obj:`~pyrogram.enums.StoriesPrivacyRules.CONTACTS` only
|
||||||
|
|
||||||
parse_mode (:obj:`~pyrogram.enums.ParseMode`, *optional*):
|
parse_mode (:obj:`~pyrogram.enums.ParseMode`, *optional*):
|
||||||
By default, texts are parsed using both Markdown and HTML styles.
|
By default, texts are parsed using both Markdown and HTML styles.
|
||||||
@ -126,7 +123,7 @@ class EditStory:
|
|||||||
|
|
||||||
# Send new photo story
|
# Send new photo story
|
||||||
photo_id = "abcd12345"
|
photo_id = "abcd12345"
|
||||||
await app.send_story(photo=photo_id, caption='Hello guys.')
|
await app.edit_story(meida=photo_id, caption='Hello guys.')
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
ValueError: In case of invalid arguments.
|
ValueError: In case of invalid arguments.
|
||||||
@ -198,18 +195,41 @@ class EditStory:
|
|||||||
file=file,
|
file=file,
|
||||||
)
|
)
|
||||||
|
|
||||||
if allowed_chats:
|
privacy_rules = []
|
||||||
chats = [await self.resolve_peer(chat_id) for chat_id in allowed_chats]
|
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueAllowChatParticipants(chats=chats))
|
if privacy:
|
||||||
if denied_chats:
|
if privacy == enums.StoriesPrivacyRules.PUBLIC:
|
||||||
chats = [await self.resolve_peer(chat_id) for chat_id in denied_chats]
|
privacy_rules.append(raw.types.InputPrivacyValueAllowAll())
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueDisallowChatParticipants(chats=chats))
|
if disallowed_users:
|
||||||
if allowed_users:
|
users = [await self.resolve_peer(user_id) for user_id in disallowed_users]
|
||||||
users = [await self.resolve_peer(user_id) for user_id in allowed_users]
|
privacy_rules.append(raw.types.InputPrivacyValueDisallowUsers(users=users))
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueAllowUsers(users=users))
|
elif privacy == enums.StoriesPrivacyRules.CONTACTS:
|
||||||
if denied_users:
|
privacy_rules = [raw.types.InputPrivacyValueAllowContacts()]
|
||||||
users = [await self.resolve_peer(user_id) for user_id in denied_users]
|
if disallowed_users:
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueDisallowUsers(users=users))
|
users = [await self.resolve_peer(user_id) for user_id in disallowed_users]
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueDisallowUsers(users=users))
|
||||||
|
elif privacy == enums.StoriesPrivacyRules.CLOSE_FRIENDS:
|
||||||
|
privacy_rules = [raw.types.InputPrivacyValueAllowCloseFriends()]
|
||||||
|
if allowed_users:
|
||||||
|
users = [await self.resolve_peer(user_id) for user_id in allowed_users]
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowUsers(users=users))
|
||||||
|
elif privacy == enums.StoriesPrivacyRules.SELECTED_USERS:
|
||||||
|
_allowed_users = []
|
||||||
|
_allowed_chats = []
|
||||||
|
|
||||||
|
for user in allowed_users:
|
||||||
|
peer = await self.resolve_peer(user)
|
||||||
|
if isinstance(peer, raw.types.InputPeerUser):
|
||||||
|
_allowed_users.append(peer)
|
||||||
|
elif isinstance(peer, raw.types.InputPeerChat):
|
||||||
|
_allowed_chats.append(peer)
|
||||||
|
|
||||||
|
if _allowed_users:
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowUsers(users=_allowed_users))
|
||||||
|
if _allowed_chats:
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowChatParticipants(chats=_allowed_chats))
|
||||||
|
else:
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowAll())
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
@ -38,10 +38,8 @@ class SendStory:
|
|||||||
supports_streaming: bool = True,
|
supports_streaming: bool = True,
|
||||||
file_name: str = None,
|
file_name: str = None,
|
||||||
privacy: "enums.StoriesPrivacyRules" = None,
|
privacy: "enums.StoriesPrivacyRules" = None,
|
||||||
allowed_users: List[int] = None,
|
allowed_users: List[Union[int, str]] = None,
|
||||||
denied_users: List[int] = None,
|
disallowed_users: List[Union[int, str]] = None,
|
||||||
allowed_chats: List[int] = None,
|
|
||||||
denied_chats: List[int] = None,
|
|
||||||
pinned: bool = None,
|
pinned: bool = None,
|
||||||
protect_content: bool = None,
|
protect_content: bool = None,
|
||||||
parse_mode: "enums.ParseMode" = None,
|
parse_mode: "enums.ParseMode" = None,
|
||||||
@ -59,7 +57,6 @@ class SendStory:
|
|||||||
chat_id (``int`` | ``str``):
|
chat_id (``int`` | ``str``):
|
||||||
Unique identifier (int) or username (str) of the target chat.
|
Unique identifier (int) or username (str) of the target chat.
|
||||||
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
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).
|
|
||||||
|
|
||||||
media (``str`` | ``BinaryIO``):
|
media (``str`` | ``BinaryIO``):
|
||||||
Video or photo to send.
|
Video or photo to send.
|
||||||
@ -94,17 +91,16 @@ class SendStory:
|
|||||||
Story privacy.
|
Story privacy.
|
||||||
Defaults to :obj:`~pyrogram.enums.StoriesPrivacyRules.PUBLIC`
|
Defaults to :obj:`~pyrogram.enums.StoriesPrivacyRules.PUBLIC`
|
||||||
|
|
||||||
allowed_chats (List of ``int``, *optional*):
|
|
||||||
List of chat_id which participant allowed to view the story.
|
|
||||||
|
|
||||||
denied_chats (List of ``int``, *optional*):
|
|
||||||
List of chat_id which participant denied to view the story.
|
|
||||||
|
|
||||||
allowed_users (List of ``int``, *optional*):
|
allowed_users (List of ``int``, *optional*):
|
||||||
List of user_id whos allowed to view the story.
|
List of user_id or chat_id of chat users who are allowed to view stories.
|
||||||
|
Note: chat_id available only with :obj:`~pyrogram.enums.StoriesPrivacyRules.SELECTED_USERS`.
|
||||||
|
Works with :obj:`~pyrogram.enums.StoriesPrivacyRules.CLOSE_FRIENDS`
|
||||||
|
and :obj:`~pyrogram.enums.StoriesPrivacyRules.SELECTED_USERS` only
|
||||||
|
|
||||||
denied_users (List of ``int``, *optional*):
|
disallowed_users (List of ``int``, *optional*):
|
||||||
List of user_id whos denied to view the story.
|
List of user_id whos disallow to view the stories.
|
||||||
|
Note: Works with :obj:`~pyrogram.enums.StoriesPrivacyRules.PUBLIC`
|
||||||
|
and :obj:`~pyrogram.enums.StoriesPrivacyRules.CONTACTS` only
|
||||||
|
|
||||||
pinned (``bool``, *optional*):
|
pinned (``bool``, *optional*):
|
||||||
if True, the story will be pinned.
|
if True, the story will be pinned.
|
||||||
@ -138,20 +134,14 @@ class SendStory:
|
|||||||
Example:
|
Example:
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
# Send new photo story
|
# Send new story
|
||||||
photo_id = "abcd12345"
|
await app.send_story(media=file_id, caption='Hello guys.')
|
||||||
await app.send_story(photo=photo_id, caption='Hello guys.')
|
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
ValueError: In case of invalid arguments.
|
ValueError: In case of invalid arguments.
|
||||||
"""
|
"""
|
||||||
# TODO: media_areas
|
# TODO: media_areas
|
||||||
|
|
||||||
if privacy:
|
|
||||||
privacy_rules = [types.StoriesPrivacyRules(type=privacy)]
|
|
||||||
else:
|
|
||||||
privacy_rules = [types.StoriesPrivacyRules(type=enums.StoriesPrivacyRules.PUBLIC)]
|
|
||||||
|
|
||||||
message, entities = (await utils.parse_text_entities(self, caption, parse_mode, caption_entities)).values()
|
message, entities = (await utils.parse_text_entities(self, caption, parse_mode, caption_entities)).values()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -214,18 +204,41 @@ class SendStory:
|
|||||||
file=file,
|
file=file,
|
||||||
)
|
)
|
||||||
|
|
||||||
if allowed_chats:
|
privacy_rules = []
|
||||||
chats = [await self.resolve_peer(chat_id) for chat_id in allowed_chats]
|
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueAllowChatParticipants(chats=chats))
|
if privacy:
|
||||||
if denied_chats:
|
if privacy == enums.StoriesPrivacyRules.PUBLIC:
|
||||||
chats = [await self.resolve_peer(chat_id) for chat_id in denied_chats]
|
privacy_rules.append(raw.types.InputPrivacyValueAllowAll())
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueDisallowChatParticipants(chats=chats))
|
if disallowed_users:
|
||||||
if allowed_users:
|
users = [await self.resolve_peer(user_id) for user_id in disallowed_users]
|
||||||
users = [await self.resolve_peer(user_id) for user_id in allowed_users]
|
privacy_rules.append(raw.types.InputPrivacyValueDisallowUsers(users=users))
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueAllowUsers(users=users))
|
elif privacy == enums.StoriesPrivacyRules.CONTACTS:
|
||||||
if denied_users:
|
privacy_rules = [raw.types.InputPrivacyValueAllowContacts()]
|
||||||
users = [await self.resolve_peer(user_id) for user_id in denied_users]
|
if disallowed_users:
|
||||||
privacy_rules.append(raw.types.InputPrivacyValueDisallowUsers(users=users))
|
users = [await self.resolve_peer(user_id) for user_id in disallowed_users]
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueDisallowUsers(users=users))
|
||||||
|
elif privacy == enums.StoriesPrivacyRules.CLOSE_FRIENDS:
|
||||||
|
privacy_rules = [raw.types.InputPrivacyValueAllowCloseFriends()]
|
||||||
|
if allowed_users:
|
||||||
|
users = [await self.resolve_peer(user_id) for user_id in allowed_users]
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowUsers(users=users))
|
||||||
|
elif privacy == enums.StoriesPrivacyRules.SELECTED_USERS:
|
||||||
|
_allowed_users = []
|
||||||
|
_allowed_chats = []
|
||||||
|
|
||||||
|
for user in allowed_users:
|
||||||
|
peer = await self.resolve_peer(user)
|
||||||
|
if isinstance(peer, raw.types.InputPeerUser):
|
||||||
|
_allowed_users.append(peer)
|
||||||
|
elif isinstance(peer, raw.types.InputPeerChat):
|
||||||
|
_allowed_chats.append(peer)
|
||||||
|
|
||||||
|
if _allowed_users:
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowUsers(users=_allowed_users))
|
||||||
|
if _allowed_chats:
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowChatParticipants(chats=_allowed_chats))
|
||||||
|
else:
|
||||||
|
privacy_rules.append(raw.types.InputPrivacyValueAllowAll())
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
@ -38,7 +38,6 @@ from .poll_option import PollOption
|
|||||||
from .reaction import Reaction
|
from .reaction import Reaction
|
||||||
from .sticker import Sticker
|
from .sticker import Sticker
|
||||||
from .stripped_thumbnail import StrippedThumbnail
|
from .stripped_thumbnail import StrippedThumbnail
|
||||||
from .stories_privacy_rules import StoriesPrivacyRules
|
|
||||||
from .story import Story
|
from .story import Story
|
||||||
from .story_deleted import StoryDeleted
|
from .story_deleted import StoryDeleted
|
||||||
from .story_skipped import StorySkipped
|
from .story_skipped import StorySkipped
|
||||||
@ -57,7 +56,7 @@ __all__ = [
|
|||||||
"Animation", "Audio", "Contact", "Document", "ForumTopic", "ForumTopicCreated",
|
"Animation", "Audio", "Contact", "Document", "ForumTopic", "ForumTopicCreated",
|
||||||
"ForumTopicClosed", "ForumTopicReopened", "ForumTopicEdited", "GeneralTopicHidden",
|
"ForumTopicClosed", "ForumTopicReopened", "ForumTopicEdited", "GeneralTopicHidden",
|
||||||
"GeneralTopicUnhidden", "Game", "Location", "Message", "MessageEntity", "Photo", "Thumbnail",
|
"GeneralTopicUnhidden", "Game", "Location", "Message", "MessageEntity", "Photo", "Thumbnail",
|
||||||
"StrippedThumbnail", "Story", "StoryDeleted", "StorySkipped", "StoryViews", "StoriesPrivacyRules", "Poll", "PollOption", "Sticker",
|
"StrippedThumbnail", "Story", "StoryDeleted", "StorySkipped", "StoryViews", "Poll", "PollOption", "Sticker",
|
||||||
"Venue", "Video", "VideoNote", "Voice", "WebPage", "Dice", "Reaction", "WebAppData",
|
"Venue", "Video", "VideoNote", "Voice", "WebPage", "Dice", "Reaction", "WebAppData",
|
||||||
"MessageReactions", "MessageStory"
|
"MessageReactions", "MessageStory"
|
||||||
]
|
]
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
# Pyrogram - Telegram MTProto API Client Library for Python
|
|
||||||
# Copyright (C) 2017-present Dan <https://github.com/delivrance>
|
|
||||||
#
|
|
||||||
# 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 <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
from pyrogram import enums, raw
|
|
||||||
from ..object import Object
|
|
||||||
|
|
||||||
class StoriesPrivacyRules(Object):
|
|
||||||
"""A story privacy rules.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
type (:obj:`~pyrogram.enums.StoriesPrivacyRules`):
|
|
||||||
Story privacy type.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self, *,
|
|
||||||
type: "enums.StoriesPrivacyRules"
|
|
||||||
):
|
|
||||||
super().__init__()
|
|
||||||
self.type = type
|
|
||||||
|
|
||||||
def write(self):
|
|
||||||
if self.type == enums.StoriesPrivacyRules.PUBLIC:
|
|
||||||
return raw.types.InputPrivacyValueAllowAll().write()
|
|
||||||
if self.type == enums.StoriesPrivacyRules.CLOSE_FRIENDS:
|
|
||||||
return raw.types.InputPrivacyValueAllowCloseFriends().write()
|
|
||||||
if self.type == enums.StoriesPrivacyRules.CONTACTS:
|
|
||||||
return raw.types.InputPrivacyValueAllowContacts().write()
|
|
||||||
if self.type == enums.StoriesPrivacyRules.NO_CONTACTS:
|
|
||||||
return raw.types.InputPrivacyValueDisallowContacts().write()
|
|
||||||
if self.type == enums.StoriesPrivacyRules.PRIVATE:
|
|
||||||
return raw.types.InputPrivacyValueDisallowAll().write()
|
|
Loading…
Reference in New Issue
Block a user