Source code for voltage.permissions
# Thanks Jan <3
from __future__ import annotations
from typing import TYPE_CHECKING, Union
# Internal Imports
from .flag import FlagBase, FlagValue
if TYPE_CHECKING:
from .types import OverrideFieldPayload
# https://github.com/revoltchat/revolt.js/blob/master/src/permissions/definitions.ts
class PermissionsFlags(FlagBase):
"""A class which represents a channel permissions object.
Methods
-------
none: :class:`PermissionsFlags`
Returns a new :class:`PermissionsFlags` object with all permissions set to ``False``.
all: :class:`ChannelPermissions`
Returns a new :class:`PermissionsFlags` object with all permissions set to ``True``.
"""
@classmethod
def none(cls) -> PermissionsFlags:
return cls.new_with_flags(0b0)
@classmethod
def all(cls) -> PermissionsFlags:
return cls.new_with_flags(0xFFFFFFFFFF)
@FlagValue
def manage_channels(self):
"""Whether the manage channels permission is granted."""
return 1 << 0
@FlagValue
def manage_server(self):
"""Whether the manager server permission is granted."""
return 1 << 1
@FlagValue
def manage_permissions(self):
"""Whether the manage permissions permission is granted."""
return 1 << 2
@FlagValue
def manage_role(self):
"""Whether the manage role permission is granted."""
return 1 << 3
@FlagValue
def kick_members(self):
"""Whether the kick members permission is granted."""
return 1 << 6
@FlagValue
def ban_members(self):
"""Whether the ban members permission is granted."""
return 1 << 7
@FlagValue
def timeout_members(self):
"""Whether the timeout members permission is granted."""
return 1 << 8
@FlagValue
def assign_roles(self):
"""Whether the assign roles permission is granted."""
return 1 << 9
@FlagValue
def change_nickname(self):
"""Whether the change nickname permission is granted."""
return 1 << 10
@FlagValue
def manage_nicknames(self):
"""Whether the manager nicknames permission is granted."""
return 1 << 11
@FlagValue
def change_avatar(self):
"""Whether the change avatar permission is granted."""
return 1 << 12
@FlagValue
def remove_avatars(self):
"""Whether the remove avatars permission is granted."""
return 1 << 13
@FlagValue
def view_channel(self):
"""Whether the view channel permission is granted."""
return 1 << 20
@FlagValue
def read_message_history(self):
"""Whether the read message history permission is granted."""
return 1 << 21
@FlagValue
def send_message(self):
"""Whether the send message permission is granted."""
return 1 << 22
@FlagValue
def manage_messages(self):
"""Whether the manage messages permission is granted."""
return 1 << 23
@FlagValue
def manage_webhooks(self):
"""Whether the manage webhooks permission is granted."""
return 1 << 24
@FlagValue
def invite_others(self):
"""Whether the invite others permission is granted."""
return 1 << 25
@FlagValue
def send_embeds(self):
"""Whether the send embeds permission is granted."""
return 1 << 26
@FlagValue
def upload_files(self):
"""Whether the upload files permission is granted."""
return 1 << 27
@FlagValue
def masquerade(self):
"""Whether the masquerade permission is granted."""
return 1 << 28
@FlagValue
def connect(self):
"""Whether the connect permission is granted."""
return 1 << 30
@FlagValue
def speak(self):
"""Whether the speak permission is granted."""
return 1 << 31
@FlagValue
def video(self):
"""Whether the video permission is granted."""
return 1 << 31
@FlagValue
def mute_members(self):
"""Whether the mute members permission is granted."""
return 1 << 32
@FlagValue
def defen_members(self):
"""Whether the defen members permission is granted."""
return 1 << 33
@FlagValue
def move_members(self):
"""Whether the move members permission is granted."""
return 1 << 34
[docs]class Permissions:
"""A class which represents a member's permissions."""
def __init__(self, flags: Union[OverrideFieldPayload, int]):
data: OverrideFieldPayload = {"a": flags, "d": 0} if isinstance(flags, int) else flags
self.allow = PermissionsFlags.new_with_flags(data["a"])
self.deny = PermissionsFlags.new_with_flags(data["d"])
self.actual = PermissionsFlags.new_with_flags(data["a"] - data["d"])
for name in dir(self.actual):
if isinstance((val := getattr(self.actual, name)), bool):
setattr(self, name, val)
[docs] def to_dict(self) -> OverrideFieldPayload:
"""Turns a permission object to a dictionary for api sending purposes."""
return {"a": self.allow.flags, "d": self.deny.flags}
[docs] @classmethod
def from_flags(cls, allow: PermissionsFlags, deny: PermissionsFlags) -> Permissions:
"""Creates a Permissions object from two PermissionsFlags.
Also note :meth:`PermissionsFlags.none()`
Attributes
----------
allow: :class:`PermissionsFlags`
The allowed permissions.
deny: :class:`PermissionsFlags`
The denied permissions.
"""
flags: OverrideFieldPayload = {"a": allow.flags, "d": deny.flags}
return cls(flags)