mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-11 18:01:04 +00:00
Added fields to ChatMember (#340)
* Added fields to ChatMember * Added ChatMemberStatus helper
This commit is contained in:
parent
de3c5c1a8d
commit
9f11afda5b
3 changed files with 78 additions and 0 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
||||||
|
|
|
||||||
34
tests/test_api/test_types/test_chat_member.py
Normal file
34
tests/test_api/test_types/test_chat_member.py
Normal 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue