feat: add pre-defined groups

This commit is contained in:
Oleg A 2024-06-27 23:54:22 +03:00
parent c9339e5cc2
commit 569a52ff46
No known key found for this signature in database
GPG key ID: 5FE046817A9657C5
4 changed files with 44 additions and 35 deletions

View file

@ -0,0 +1,37 @@
from typing import Tuple, Type, Union
from pydantic import Field, TypeAdapter
from typing_extensions import Annotated
from aiogram.types import (
ChatMember,
ChatMemberAdministrator,
ChatMemberBanned,
ChatMemberLeft,
ChatMemberMember,
ChatMemberOwner,
ChatMemberRestricted,
)
ChatMemberUnion = Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]
ChatMemberCollection = Tuple[Type[ChatMember], ...]
ChatMemberAdapter = TypeAdapter(
Annotated[
ChatMemberUnion,
Field(discriminator="status"),
]
)
ADMINS: ChatMemberCollection = (ChatMemberOwner, ChatMemberAdministrator)
USERS: ChatMemberCollection = (ChatMemberMember, ChatMemberRestricted)
MEMBERS: ChatMemberCollection = ADMINS + USERS
NOT_MEMBERS: ChatMemberCollection = (ChatMemberLeft, ChatMemberBanned)

View file

@ -1,22 +0,0 @@
from typing import Union
from pydantic import Field, TypeAdapter
from typing_extensions import Annotated
from aiogram import types
ChatMemberUnion = Union[
types.ChatMemberOwner,
types.ChatMemberAdministrator,
types.ChatMemberMember,
types.ChatMemberRestricted,
types.ChatMemberLeft,
types.ChatMemberBanned,
]
ChatMemberAdapter = TypeAdapter(
Annotated[
ChatMemberUnion,
Field(discriminator="status"),
]
)

View file

@ -253,15 +253,15 @@ ChatMember tools
.. code-block::
# Version 3.x
from aiogram.utils.chat_member_adapter import ChatMemberAdapter
from aiogram.utils.chat_member import ChatMemberAdapter
chat_member = ChatMemberAdapter.validate_python(dict_data)
- Now :class:`aiogram.types.chat_member.ChatMember` and all its child classes no longer
contain methods for checking for membership in certain logical groups.
As a substitute, you can create such groups yourself and check their entry using
the :func:`isinstance` function
As a substitute, you can use pre-defined groups or create such groups yourself
and check their entry using the :func:`isinstance` function
.. code-block::
@ -277,13 +277,7 @@ ChatMember tools
# Version 3.x
ADMINS = (ChatMemberOwner, ChatMemberAdministrator)
MEMBERS = (
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
)
from aiogram.utils.chat_member import ADMINS, MEMBERS
if isinstance(chat_member, ADMINS):
print("ChatMember is chat admin")
@ -292,6 +286,6 @@ ChatMember tools
print("ChatMember is in the chat")
.. note::
This way you can independently create any group that fits the logic of your application.
You also can independently create group similar to ADMINS that fits the logic of your application.
E.g., you can create a PUNISHED group and include banned and restricted members there
E.g., you can create a PUNISHED group and include banned and restricted members there!

View file

@ -13,7 +13,7 @@ from aiogram.types import (
ChatMemberRestricted,
User,
)
from aiogram.utils.chat_member_adapter import ChatMemberAdapter
from aiogram.utils.chat_member import ChatMemberAdapter
USER = User(
id=42,