diff options
| author | Nadir Chowdhury <[email protected]> | 2021-04-19 01:32:52 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-04-18 20:32:52 -0400 |
| commit | 631a0b1e13f9fd71941f402a7ba7bfdee6d66f96 (patch) | |
| tree | c16ab66dd4fe8e28eeec8b7166862fb473534414 /discord/flags.py | |
| parent | Fix up _unique and valid_icon_size implementations (diff) | |
| download | discord.py-631a0b1e13f9fd71941f402a7ba7bfdee6d66f96.tar.xz discord.py-631a0b1e13f9fd71941f402a7ba7bfdee6d66f96.zip | |
Add support for ApplicationFlags
Diffstat (limited to 'discord/flags.py')
| -rw-r--r-- | discord/flags.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/discord/flags.py b/discord/flags.py index 5e182f8f..bb3d5a3f 100644 --- a/discord/flags.py +++ b/discord/flags.py @@ -34,11 +34,13 @@ __all__ = ( 'PublicUserFlags', 'Intents', 'MemberCacheFlags', + 'ApplicationFlags', ) FV = TypeVar('FV', bound='flag_value') BF = TypeVar('BF', bound='BaseFlags') + class flag_value(Generic[BF]): def __init__(self, func: Callable[[Any], int]): self.flag = func(None) @@ -63,16 +65,20 @@ class flag_value(Generic[BF]): def __repr__(self): return f'<flag_value flag={self.flag!r}>' + class alias_flag_value(flag_value): pass + def fill_with_flags(*, inverted: bool = False): def decorator(cls: Type[BF]): + # fmt: off cls.VALID_FLAGS = { name: value.flag for name, value in cls.__dict__.items() if isinstance(value, flag_value) } + # fmt: on if inverted: max_bits = max(cls.VALID_FLAGS.values()).bit_length() @@ -81,8 +87,10 @@ def fill_with_flags(*, inverted: bool = False): cls.DEFAULT_VALUE = 0 return cls + return decorator + # n.b. flags must inherit from this and use the decorator above class BaseFlags: VALID_FLAGS: ClassVar[Dict[str, int]] @@ -136,6 +144,7 @@ class BaseFlags: else: raise TypeError(f'Value to set for {self.__class__.__name__} must be a bool.') + @fill_with_flags(inverted=True) class SystemChannelFlags(BaseFlags): r"""Wraps up a Discord system channel flag value. @@ -270,6 +279,7 @@ class MessageFlags(BaseFlags): """ return 16 + @fill_with_flags() class PublicUserFlags(BaseFlags): r"""Wraps up the Discord User Public flags. @@ -808,6 +818,7 @@ class Intents(BaseFlags): """ return 1 << 14 + @fill_with_flags() class MemberCacheFlags(BaseFlags): """Controls the library's cache policy when it comes to members. @@ -936,3 +947,74 @@ class MemberCacheFlags(BaseFlags): @property def _voice_only(self): return self.value == 1 + + +@fill_with_flags() +class ApplicationFlags(BaseFlags): + r"""Wraps up the Discord Application flags. + + .. container:: operations + + .. describe:: x == y + + Checks if two ApplicationFlags are equal. + .. describe:: x != y + + Checks if two ApplicationFlags are not equal. + .. describe:: hash(x) + + Return the flag's hash. + .. describe:: iter(x) + + Returns an iterator of ``(name, value)`` pairs. This allows it + to be, for example, constructed as a dict or a list of pairs. + Note that aliases are not shown. + + .. versionadded:: 2.0 + + Attributes + ----------- + value: :class:`int` + The raw value. You should query flags via the properties + rather than using this raw value. + """ + + @flag_value + def gateway_presence(self): + """:class:`bool`: Returns ``True`` if the application is verified and is allowed to + receive presence information over the gateway. + """ + return 1 << 12 + + @flag_value + def gateway_presence_limited(self): + """:class:`bool`: Returns ``True`` if the application is allowed to receive limited + presence information over the gateway. + """ + return 1 << 13 + + @flag_value + def gateway_guild_members(self): + """:class:`bool`: Returns ``True`` if the application is verified and is allowed to + receive guild members information over the gateway. + """ + return 1 << 14 + + @flag_value + def gateway_guild_members_limited(self): + """:class:`bool`: Returns ``True`` if the application is allowed to receive limited + guild members information over the gateway. + """ + return 1 << 15 + + @flag_value + def verification_pending_guild_limit(self): + """:class:`bool`: Returns ``True`` if the application is currently pending verification + and has hit the guild limit. + """ + return 1 << 16 + + @flag_value + def embedded(self): + """:class:`bool`: Returns ``True`` if the application is embedded within the Discord client.""" + return 1 << 17 |