diff --git a/CHANGELOG.md b/CHANGELOG.md index 38725e4141..cbd66700f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,6 +103,8 @@ These changes are available on the `master` branch, but have not yet been releas ([#2739](https://github.com/Pycord-Development/pycord/pull/2739)) - Fixed missing `None` type hints in `Select.__init__`. ([#2746])(https://github.com/Pycord-Development/pycord/pull/2746) +- Fixed `TypeError` when using `Flag` with python 3.11+ + ([#2759])(https://github.com/Pycord-Development/pycord/pull/2759) ### Changed diff --git a/discord/ext/commands/flags.py b/discord/ext/commands/flags.py index 54e7e0c37c..f8afabf56a 100644 --- a/discord/ext/commands/flags.py +++ b/discord/ext/commands/flags.py @@ -31,12 +31,12 @@ from dataclasses import dataclass, field from typing import TYPE_CHECKING, Any, Iterator, Literal, Pattern, TypeVar, Union -from discord.utils import MISSING, MissingField, maybe_coroutine, resolve_annotation - -if sys.version_info >= (3, 11): - _MISSING = MissingField -else: - _MISSING = MISSING +from discord.utils import ( + MISSING, + maybe_coroutine, + missing_field_factory, + resolve_annotation, +) from .converter import run_converters from .errors import ( @@ -86,13 +86,13 @@ class Flag: Whether multiple given values overrides the previous value. """ - name: str = _MISSING + name: str = missing_field_factory() aliases: list[str] = field(default_factory=list) - attribute: str = _MISSING - annotation: Any = _MISSING - default: Any = _MISSING - max_args: int = _MISSING - override: bool = _MISSING + attribute: str = missing_field_factory() + annotation: Any = missing_field_factory() + default: Any = missing_field_factory() + max_args: int = missing_field_factory() + override: bool = missing_field_factory() cast_to_dict: bool = False @property diff --git a/discord/utils.py b/discord/utils.py index 363d339391..7aca0865b9 100644 --- a/discord/utils.py +++ b/discord/utils.py @@ -119,7 +119,10 @@ def __repr__(self) -> str: # field(default=MISSING) produces the same error, but passing a lambda to # default_factory produces the same behavior as default=MISSING and does not raise an # error. -MissingField = field(default_factory=lambda: MISSING) + + +def missing_field_factory() -> field: + return field(default_factory=lambda: MISSING) class _cached_property: