Refactor type unions with ResultChatMemberUnion and ResultMenuButtonUnion

Replaced verbose type definitions of chat member and menu button unions with `ResultChatMemberUnion` and `ResultMenuButtonUnion` for improved readability and maintainability. Updated relevant methods, modules, and documentation to use the new type aliases consistently.
This commit is contained in:
JRoot Junior 2025-03-07 00:42:13 +02:00
parent f7c0e3d614
commit 28941439cf
No known key found for this signature in database
GPG key ID: 738964250D5FF6E2
11 changed files with 55 additions and 108 deletions

View file

@ -169,12 +169,6 @@ from ..types import (
ChatFullInfo,
ChatIdUnion,
ChatInviteLink,
ChatMemberAdministrator,
ChatMemberBanned,
ChatMemberLeft,
ChatMemberMember,
ChatMemberOwner,
ChatMemberRestricted,
ChatPermissions,
DateTimeUnion,
Downloadable,
@ -195,10 +189,7 @@ from ..types import (
LinkPreviewOptions,
MaskPosition,
MediaUnion,
MenuButtonCommands,
MenuButtonDefault,
MenuButtonUnion,
MenuButtonWebApp,
Message,
MessageEntity,
MessageId,
@ -208,6 +199,8 @@ from ..types import (
ReactionTypeUnion,
ReplyMarkupUnion,
ReplyParameters,
ResultChatMemberUnion,
ResultMenuButtonUnion,
SentWebAppMessage,
ShippingOption,
StarTransactions,
@ -1574,16 +1567,7 @@ class Bot:
self,
chat_id: ChatIdUnion,
request_timeout: Optional[int] = None,
) -> list[
Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]
]:
) -> list[ResultChatMemberUnion]:
"""
Use this method to get a list of administrators in a chat, which aren't bots. Returns an Array of :class:`aiogram.types.chat_member.ChatMember` objects.
@ -1604,14 +1588,7 @@ class Bot:
chat_id: ChatIdUnion,
user_id: int,
request_timeout: Optional[int] = None,
) -> Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]:
) -> ResultChatMemberUnion:
"""
Use this method to get information about a member of a chat. The method is only guaranteed to work for other users if the bot is an administrator in the chat. Returns a :class:`aiogram.types.chat_member.ChatMember` object on success.
@ -1653,7 +1630,7 @@ class Bot:
self,
chat_id: Optional[int] = None,
request_timeout: Optional[int] = None,
) -> Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]:
) -> ResultMenuButtonUnion:
"""
Use this method to get the current value of the bot's menu button in a private chat, or the default menu button. Returns :class:`aiogram.types.menu_button.MenuButton` on success.

View file

@ -66,7 +66,7 @@ class TelegramMethod(BotContextController, BaseModel, Generic[TelegramType], ABC
return {k: v for k, v in values.items() if not isinstance(v, UNSET_TYPE)}
if TYPE_CHECKING:
__returning__: ClassVar[type]
__returning__: ClassVar[Any]
__api_method__: ClassVar[str]
else:

View file

@ -1,49 +1,19 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any, Union
from typing import TYPE_CHECKING, Any
from ..types import (
ChatIdUnion,
ChatMemberAdministrator,
ChatMemberBanned,
ChatMemberLeft,
ChatMemberMember,
ChatMemberOwner,
ChatMemberRestricted,
)
from ..types import ChatIdUnion, ResultChatMemberUnion
from .base import TelegramMethod
class GetChatAdministrators(
TelegramMethod[
list[
Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]
]
]
):
class GetChatAdministrators(TelegramMethod[list[ResultChatMemberUnion]]):
"""
Use this method to get a list of administrators in a chat, which aren't bots. Returns an Array of :class:`aiogram.types.chat_member.ChatMember` objects.
Source: https://core.telegram.org/bots/api#getchatadministrators
"""
__returning__ = list[
Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]
]
__returning__ = list[ResultChatMemberUnion]
__api_method__ = "getChatAdministrators"
chat_id: ChatIdUnion

View file

@ -1,45 +1,19 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any, Union
from typing import TYPE_CHECKING, Any
from ..types import (
ChatIdUnion,
ChatMemberAdministrator,
ChatMemberBanned,
ChatMemberLeft,
ChatMemberMember,
ChatMemberOwner,
ChatMemberRestricted,
)
from ..types import ChatIdUnion, ResultChatMemberUnion
from .base import TelegramMethod
class GetChatMember(
TelegramMethod[
Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]
]
):
class GetChatMember(TelegramMethod[ResultChatMemberUnion]):
"""
Use this method to get information about a member of a chat. The method is only guaranteed to work for other users if the bot is an administrator in the chat. Returns a :class:`aiogram.types.chat_member.ChatMember` object on success.
Source: https://core.telegram.org/bots/api#getchatmember
"""
__returning__ = Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]
__returning__ = ResultChatMemberUnion
__api_method__ = "getChatMember"
chat_id: ChatIdUnion

View file

@ -1,21 +1,19 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any, Optional, Union
from typing import TYPE_CHECKING, Any, Optional
from ..types import MenuButtonCommands, MenuButtonDefault, MenuButtonWebApp
from ..types import ResultMenuButtonUnion
from .base import TelegramMethod
class GetChatMenuButton(
TelegramMethod[Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]]
):
class GetChatMenuButton(TelegramMethod[ResultMenuButtonUnion]):
"""
Use this method to get the current value of the bot's menu button in a private chat, or the default menu button. Returns :class:`aiogram.types.menu_button.MenuButton` on success.
Source: https://core.telegram.org/bots/api#getchatmenubutton
"""
__returning__ = Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]
__returning__ = ResultMenuButtonUnion
__api_method__ = "getChatMenuButton"
chat_id: Optional[int] = None

View file

@ -220,6 +220,8 @@ from .reply_keyboard_remove import ReplyKeyboardRemove
from .reply_markup_union import ReplyMarkupUnion
from .reply_parameters import ReplyParameters
from .response_parameters import ResponseParameters
from .result_chat_member_union import ResultChatMemberUnion
from .result_menu_button_union import ResultMenuButtonUnion
from .revenue_withdrawal_state import RevenueWithdrawalState
from .revenue_withdrawal_state_failed import RevenueWithdrawalStateFailed
from .revenue_withdrawal_state_pending import RevenueWithdrawalStatePending
@ -485,6 +487,8 @@ __all__ = (
"ReplyMarkupUnion",
"ReplyParameters",
"ResponseParameters",
"ResultChatMemberUnion",
"ResultMenuButtonUnion",
"RevenueWithdrawalState",
"RevenueWithdrawalStateFailed",
"RevenueWithdrawalStatePending",

View file

@ -0,0 +1,17 @@
from typing import Union
from .chat_member_administrator import ChatMemberAdministrator
from .chat_member_banned import ChatMemberBanned
from .chat_member_left import ChatMemberLeft
from .chat_member_member import ChatMemberMember
from .chat_member_owner import ChatMemberOwner
from .chat_member_restricted import ChatMemberRestricted
ResultChatMemberUnion = Union[
ChatMemberOwner,
ChatMemberAdministrator,
ChatMemberMember,
ChatMemberRestricted,
ChatMemberLeft,
ChatMemberBanned,
]

View file

@ -0,0 +1,7 @@
from typing import Union
from .menu_button_commands import MenuButtonCommands
from .menu_button_default import MenuButtonDefault
from .menu_button_web_app import MenuButtonWebApp
ResultMenuButtonUnion = Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]

View file

@ -2,7 +2,7 @@
getChatAdministrators
#####################
Returns: :obj:`list[Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]]`
Returns: :obj:`list[ResultChatMemberUnion]`
.. automodule:: aiogram.methods.get_chat_administrators
:members:
@ -19,7 +19,7 @@ As bot method
.. code-block::
result: list[Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]] = await bot.get_chat_administrators(...)
result: list[ResultChatMemberUnion] = await bot.get_chat_administrators(...)
Method as object
@ -35,7 +35,7 @@ With specific bot
.. code-block:: python
result: list[Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]] = await bot(GetChatAdministrators(...))
result: list[ResultChatMemberUnion] = await bot(GetChatAdministrators(...))

View file

@ -2,7 +2,7 @@
getChatMember
#############
Returns: :obj:`Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]`
Returns: :obj:`ResultChatMemberUnion`
.. automodule:: aiogram.methods.get_chat_member
:members:
@ -19,7 +19,7 @@ As bot method
.. code-block::
result: Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned] = await bot.get_chat_member(...)
result: ResultChatMemberUnion = await bot.get_chat_member(...)
Method as object
@ -35,7 +35,7 @@ With specific bot
.. code-block:: python
result: Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned] = await bot(GetChatMember(...))
result: ResultChatMemberUnion = await bot(GetChatMember(...))

View file

@ -2,7 +2,7 @@
getChatMenuButton
#################
Returns: :obj:`Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]`
Returns: :obj:`ResultMenuButtonUnion`
.. automodule:: aiogram.methods.get_chat_menu_button
:members:
@ -19,7 +19,7 @@ As bot method
.. code-block::
result: Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands] = await bot.get_chat_menu_button(...)
result: ResultMenuButtonUnion = await bot.get_chat_menu_button(...)
Method as object
@ -35,4 +35,4 @@ With specific bot
.. code-block:: python
result: Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands] = await bot(GetChatMenuButton(...))
result: ResultMenuButtonUnion = await bot(GetChatMenuButton(...))