Added fields to ChatMember (#340)

* Added fields to ChatMember
* Added ChatMemberStatus helper
This commit is contained in:
lyteloli 2020-05-29 22:28:12 +03:00 committed by GitHub
parent de3c5c1a8d
commit 9f11afda5b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 78 additions and 0 deletions

View file

@ -4,6 +4,7 @@ import datetime
from typing import TYPE_CHECKING, Optional, Union
from .base import TelegramObject
from ...utils import helper
if TYPE_CHECKING: # pragma: no cover
from .user import User
@ -65,3 +66,25 @@ class ChatMember(TelegramObject):
inline bots"""
can_add_web_page_previews: Optional[bool] = None
"""Restricted only. True, if the user is allowed to add web page previews to their messages"""
@property
def is_chat_admin(self) -> bool:
return self.status in {ChatMemberStatus.CREATOR, ChatMemberStatus.ADMINISTRATOR}
@property
def is_chat_member(self) -> bool:
return self.status not in {ChatMemberStatus.LEFT, ChatMemberStatus.KICKED}
class ChatMemberStatus(helper.Helper):
"""
Chat member status
"""
mode = helper.HelperMode.lowercase
CREATOR = helper.Item() # creator
ADMINISTRATOR = helper.Item() # administrator
MEMBER = helper.Item() # member
RESTRICTED = helper.Item() # restricted
LEFT = helper.Item() # left
KICKED = helper.Item() # kicked

View file

@ -30,12 +30,33 @@ This object contains information about one member of a chat.
| `can_add_web_page_previews` | `#!python Optional[bool]` | Optional. Restricted only. True, if the user is allowed to add web page previews to their messages |
## Extensions
| Name | Type | Description |
| - | - | - |
| `is_chat_admin` | `#!python bool` | True if the user is administrator or creator of the chat |
| `is_chat_member` | `#!python bool` | True if the user is member of the chat |
## ChatMemberStatus helper
This object helps to describe user's status.
#### Attributes:
- CREATOR
- ADMINISTRATOR
- MEMBER
- RESTRICTED
- LEFT
- KICKED
## Location
- `from aiogram.types import ChatMember`
- `from aiogram.api.types import ChatMember`
- `from aiogram.api.types.chat_member import ChatMember`
- `from aiogram.api.types.chat_member import ChatMemberStatus`
## Related pages:

View file

@ -0,0 +1,34 @@
import pytest
from aiogram.api.types import ChatMember, User
user = User(id=42, is_bot=False, first_name="User", last_name=None)
class TestChatMember:
@pytest.mark.parametrize(
"status,result",
[
["administrator", True],
["creator", True],
["member", False]
]
)
def test_is_chat_admin(self, status: str, result: bool):
chat_member = ChatMember(user=user, status=status)
assert chat_member.is_chat_admin == result
@pytest.mark.parametrize(
"status,result",
[
["administrator", True],
["creator", True],
["member", True],
["restricted", True],
["kicked", False],
["left", False]
]
)
def test_is_chat_member(self, status: str, result: bool):
chat_member = ChatMember(user=user, status=status)
assert chat_member.is_chat_member == result