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 typing import TYPE_CHECKING, Optional, Union
from .base import TelegramObject from .base import TelegramObject
from ...utils import helper
if TYPE_CHECKING: # pragma: no cover if TYPE_CHECKING: # pragma: no cover
from .user import User from .user import User
@ -65,3 +66,25 @@ class ChatMember(TelegramObject):
inline bots""" inline bots"""
can_add_web_page_previews: Optional[bool] = None can_add_web_page_previews: Optional[bool] = None
"""Restricted only. True, if the user is allowed to add web page previews to their messages""" """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 | | `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 ## Location
- `from aiogram.types import ChatMember` - `from aiogram.types import ChatMember`
- `from aiogram.api.types import ChatMember` - `from aiogram.api.types import ChatMember`
- `from aiogram.api.types.chat_member import ChatMember` - `from aiogram.api.types.chat_member import ChatMember`
- `from aiogram.api.types.chat_member import ChatMemberStatus`
## Related pages: ## 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