diff --git a/disagreement/permissions.py b/disagreement/permissions.py index 4f1a00f..1f439f0 100644 --- a/disagreement/permissions.py +++ b/disagreement/permissions.py @@ -57,6 +57,15 @@ class Permissions(IntFlag): USE_EXTERNAL_SOUNDS = 1 << 45 SEND_VOICE_MESSAGES = 1 << 46 + @classmethod + def all(cls) -> "Permissions": + """Return a ``Permissions`` object with every permission bit enabled.""" + + value = 0 + for perm in cls: + value |= perm.value + return cls(value) + def permissions_value(*perms: Permissions | int | Iterable[Permissions | int]) -> int: """Return a combined integer value for multiple permissions.""" diff --git a/docs/permissions.md b/docs/permissions.md index ccc6429..5523f19 100644 --- a/docs/permissions.md +++ b/docs/permissions.md @@ -15,6 +15,12 @@ from disagreement import Permissions value = Permissions.SEND_MESSAGES | Permissions.MANAGE_MESSAGES ``` +You can also get a bitmask containing **every** permission: + +```python +all_perms = Permissions.all() +``` + ## Helper Functions ### ``permissions_value`` diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 4281311..d572266 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -32,3 +32,11 @@ def test_missing_permissions(): current, Permissions.SEND_MESSAGES, Permissions.MANAGE_MESSAGES ) assert missing == [Permissions.MANAGE_MESSAGES] + + +def test_permissions_all(): + all_value = Permissions.all() + union = Permissions(0) + for perm in Permissions: + union |= perm + assert all_value == union