|
29 | 29 | import os
|
30 | 30 | import sys
|
31 | 31 | from collections.abc import Sequence
|
| 32 | +from functools import partial |
32 | 33 | from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar
|
33 | 34 |
|
34 | 35 | from ..channel import _threaded_guild_channel_factory
|
|
53 | 54 | "role_select",
|
54 | 55 | "mentionable_select",
|
55 | 56 | "channel_select",
|
| 57 | + "StringSelect", |
| 58 | + "UserSelect", |
| 59 | + "RoleSelect", |
| 60 | + "MentionableSelect", |
| 61 | + "ChannelSelect", |
56 | 62 | )
|
57 | 63 |
|
58 | 64 | if TYPE_CHECKING:
|
@@ -717,6 +723,25 @@ def uses_label(self) -> bool:
|
717 | 723 | return bool(self.label or self.description or (self.required is not None))
|
718 | 724 |
|
719 | 725 |
|
| 726 | +if TYPE_CHECKING: |
| 727 | + StringSelect = Select[V, str] |
| 728 | + """A typed alias for :class:`Select` for string values.""" |
| 729 | + UserSelect = Select[V, User | Member] |
| 730 | + """A typed alias for :class:`Select` for user-like values.""" |
| 731 | + RoleSelect = Select[V, Role] |
| 732 | + """A typed alias for :class:`Select` for role values.""" |
| 733 | + MentionableSelect = Select[V, User | Member | Role] |
| 734 | + """A typed alias for :class:`Select` for mentionable (role and user-like) values.""" |
| 735 | + ChannelSelect = Select[V, GuildChannel | Thread] |
| 736 | + """A typed alias for :class:`Select` for channel values.""" |
| 737 | +else: |
| 738 | + StringSelect: Select[V, str] = partial(Select, select_type=ComponentType.string_select) |
| 739 | + UserSelect: Select[V, User | Member] = partial(Select, select_type=ComponentType.user_select) |
| 740 | + RoleSelect: Select[V, Role] = partial(Select, select_type=ComponentType.role_select) |
| 741 | + MentionableSelect: Select[V, Role | User | Member] = partial(Select, select_type=ComponentType.mentionable_select) |
| 742 | + ChannelSelect: Select[V, GuildChannel | Thread] = partial(Select, select_type=ComponentType.channel_select) |
| 743 | + |
| 744 | + |
720 | 745 | _select_types = (
|
721 | 746 | ComponentType.string_select,
|
722 | 747 | ComponentType.user_select,
|
@@ -877,7 +902,7 @@ def string_select(
|
877 | 902 | disabled: bool = False,
|
878 | 903 | row: int | None = None,
|
879 | 904 | id: int | None = None,
|
880 |
| -) -> Callable[[ItemCallbackType[Select[V, str]]], Select[V, str]]: |
| 905 | +) -> Callable[[ItemCallbackType[StringSelect[V]]], StringSelect[V]]: |
881 | 906 | """A shortcut for :meth:`discord.ui.select` with select type :attr:`discord.ComponentType.string_select`.
|
882 | 907 |
|
883 | 908 | .. versionadded:: 2.3
|
@@ -905,7 +930,7 @@ def user_select(
|
905 | 930 | row: int | None = None,
|
906 | 931 | id: int | None = None,
|
907 | 932 | default_values: Sequence[SelectDefaultValue | Snowflake] | None = None,
|
908 |
| -) -> Callable[[ItemCallbackType[Select[V, User | Member]]], Select[V, User | Member]]: |
| 933 | +) -> Callable[[ItemCallbackType[UserSelect[V]]], UserSelect[V]]: |
909 | 934 | """A shortcut for :meth:`discord.ui.select` with select type :attr:`discord.ComponentType.user_select`.
|
910 | 935 |
|
911 | 936 | .. versionadded:: 2.3
|
@@ -933,7 +958,7 @@ def role_select(
|
933 | 958 | row: int | None = None,
|
934 | 959 | id: int | None = None,
|
935 | 960 | default_values: Sequence[SelectDefaultValue | Snowflake] | None = None,
|
936 |
| -) -> Callable[[ItemCallbackType[Select[V, Role]]], Select[V, Role]]: |
| 961 | +) -> Callable[[ItemCallbackType[RoleSelect[V]]], RoleSelect[V]]: |
937 | 962 | """A shortcut for :meth:`discord.ui.select` with select type :attr:`discord.ComponentType.role_select`.
|
938 | 963 |
|
939 | 964 | .. versionadded:: 2.3
|
@@ -962,7 +987,7 @@ def mentionable_select(
|
962 | 987 | id: int | None = None,
|
963 | 988 | default_values: Sequence[SelectDefaultValue | Snowflake] | None = None,
|
964 | 989 | ) -> Callable[
|
965 |
| - [ItemCallbackType[Select[V, Role | User | Member]]], Select[V, Role | User | Member] |
| 990 | + [ItemCallbackType[MentionableSelect[V]]], MentionableSelect[V], |
966 | 991 | ]:
|
967 | 992 | """A shortcut for :meth:`discord.ui.select` with select type :attr:`discord.ComponentType.mentionable_select`.
|
968 | 993 |
|
@@ -993,8 +1018,8 @@ def channel_select(
|
993 | 1018 | id: int | None = None,
|
994 | 1019 | default_values: Sequence[SelectDefaultValue | Snowflake] | None = None,
|
995 | 1020 | ) -> Callable[
|
996 |
| - [ItemCallbackType[Select[V, GuildChannel | Thread]]], |
997 |
| - Select[V, GuildChannel | Thread], |
| 1021 | + [ItemCallbackType[ChannelSelect[V]]], |
| 1022 | + ChannelSelect[V], |
998 | 1023 | ]:
|
999 | 1024 | """A shortcut for :meth:`discord.ui.select` with select type :attr:`discord.ComponentType.channel_select`.
|
1000 | 1025 |
|
|
0 commit comments