mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-06-18 02:56:39 +00:00
parent
bf29cddbc9
commit
fc765f6014
@ -1145,6 +1145,49 @@ class ChatMethods:
|
|||||||
else:
|
else:
|
||||||
raise ValueError('You must pass either a channel or a chat')
|
raise ValueError('You must pass either a channel or a chat')
|
||||||
|
|
||||||
|
async def get_permissions(
|
||||||
|
self: 'TelegramClient',
|
||||||
|
entity: 'hints.EntityLike',
|
||||||
|
user: 'hints.EntityLike'
|
||||||
|
) -> 'typing.Optional[custom.ParticipantPermissions]':
|
||||||
|
"""
|
||||||
|
Fetches the permissions of a user in a specific chat or channel.
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
entity (`entity`):
|
||||||
|
The channel or chat the user is participant of.
|
||||||
|
|
||||||
|
user (`entity`):
|
||||||
|
Target user.
|
||||||
|
|
||||||
|
Example
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
permissions = await client.get_permissions(chat, user)
|
||||||
|
if permissions.is_admin:
|
||||||
|
# do something
|
||||||
|
"""
|
||||||
|
entity = await self.get_input_entity(entity)
|
||||||
|
user = await self.get_input_entity(user)
|
||||||
|
if helpers._entity_type(user) != helpers._EntityType.USER:
|
||||||
|
raise ValueError('You must pass a user entity')
|
||||||
|
if helpers._entity_type(entity) == helpers._EntityType.CHANNEL:
|
||||||
|
participant = await self(functions.channels.GetParticipantRequest(
|
||||||
|
entity,
|
||||||
|
user
|
||||||
|
))
|
||||||
|
return custom.ParticipantPermissions(participant.participant, False)
|
||||||
|
elif helpers._entity_type(entity) == helpers._EntityType.CHAT:
|
||||||
|
chat = await self(functions.messages.GetFullChatRequest(
|
||||||
|
entity
|
||||||
|
))
|
||||||
|
for participant in chat.participants.participants:
|
||||||
|
if participant.user_id == user.id:
|
||||||
|
return custom.ParticipantPermissions(participant.participant, True)
|
||||||
|
raise errors.UserNotParticipantError(None)
|
||||||
|
|
||||||
|
raise ValueError('You must pass either a channel or a chat')
|
||||||
|
|
||||||
async def get_stats(
|
async def get_stats(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
entity: 'hints.EntityLike',
|
entity: 'hints.EntityLike',
|
||||||
|
@ -11,3 +11,4 @@ from .inlineresult import InlineResult
|
|||||||
from .inlineresults import InlineResults
|
from .inlineresults import InlineResults
|
||||||
from .conversation import Conversation
|
from .conversation import Conversation
|
||||||
from .qrlogin import QRLogin
|
from .qrlogin import QRLogin
|
||||||
|
from .participantpermissions import ParticipantPermissions
|
||||||
|
97
telethon/tl/custom/participantpermissions.py
Normal file
97
telethon/tl/custom/participantpermissions.py
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
from .. import types
|
||||||
|
|
||||||
|
|
||||||
|
class ParticipantPermissions:
|
||||||
|
"""
|
||||||
|
Participant permissions information
|
||||||
|
"""
|
||||||
|
def __init__(self, participant, chat):
|
||||||
|
self.participant = participant
|
||||||
|
self.is_chat: bool = chat
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_admin(self):
|
||||||
|
return self.is_creator or isinstance(self.participant, (
|
||||||
|
types.ChannelParticipantAdmin,
|
||||||
|
types.ChatParticipantAdmin
|
||||||
|
))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_creator(self):
|
||||||
|
return isinstance(self.participant, types.ChannelParticipantCreator)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_default_permissions(self):
|
||||||
|
return isinstance(self.participant, (
|
||||||
|
types.ChannelParticipant,
|
||||||
|
types.ChatParticipant,
|
||||||
|
types.ChannelParticipantSelf
|
||||||
|
))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_banned(self):
|
||||||
|
return isinstance(self.participant, types.ChannelParticipantBanned)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ban_users(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat:
|
||||||
|
return True
|
||||||
|
return self.participant.admin_rights.ban_users
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pin_messages(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat:
|
||||||
|
return True
|
||||||
|
return self.participant.admin_rights.pin_messages
|
||||||
|
|
||||||
|
@property
|
||||||
|
def add_admins(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat and not self.is_creator:
|
||||||
|
return False
|
||||||
|
return self.participant.admin_rights.add_admins
|
||||||
|
|
||||||
|
@property
|
||||||
|
def invite_users(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat:
|
||||||
|
return True
|
||||||
|
return self.participant.admin_rights.invite_users
|
||||||
|
|
||||||
|
@property
|
||||||
|
def delete_messages(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat:
|
||||||
|
return True
|
||||||
|
return self.participant.admin_rights.delete_messages
|
||||||
|
|
||||||
|
@property
|
||||||
|
def edit_messages(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat:
|
||||||
|
return True
|
||||||
|
return self.participant.admin_rights.edit_messages
|
||||||
|
|
||||||
|
@property
|
||||||
|
def post_messages(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat:
|
||||||
|
return True
|
||||||
|
return self.participant.admin_rights.post_messages
|
||||||
|
|
||||||
|
@property
|
||||||
|
def change_info(self):
|
||||||
|
if not self.is_admin:
|
||||||
|
return False
|
||||||
|
if self.is_chat:
|
||||||
|
return True
|
||||||
|
return self.participant.admin_rights.change_info
|
Loading…
Reference in New Issue
Block a user