|
|
@ -24,7 +24,7 @@ DEALINGS IN THE SOFTWARE. |
|
|
|
|
|
|
|
from __future__ import annotations |
|
|
|
|
|
|
|
from typing import TYPE_CHECKING, Any, Callable, ClassVar, Dict, Generator, List, Optional, Tuple, Union |
|
|
|
from typing import TYPE_CHECKING, Any, Callable, ClassVar, Dict, Generator, List, Optional, Tuple, Type, TypeVar, Union |
|
|
|
|
|
|
|
from . import enums, utils |
|
|
|
from .asset import Asset |
|
|
@ -57,18 +57,6 @@ if TYPE_CHECKING: |
|
|
|
from .user import User |
|
|
|
|
|
|
|
|
|
|
|
def _transform_verification_level(entry: AuditLogEntry, data: int) -> enums.VerificationLevel: |
|
|
|
return enums.try_enum(enums.VerificationLevel, data) |
|
|
|
|
|
|
|
|
|
|
|
def _transform_default_notifications(entry: AuditLogEntry, data: int) -> enums.NotificationLevel: |
|
|
|
return enums.try_enum(enums.NotificationLevel, data) |
|
|
|
|
|
|
|
|
|
|
|
def _transform_explicit_content_filter(entry: AuditLogEntry, data: int) -> enums.ContentFilter: |
|
|
|
return enums.try_enum(enums.ContentFilter, data) |
|
|
|
|
|
|
|
|
|
|
|
def _transform_permissions(entry: AuditLogEntry, data: str) -> Permissions: |
|
|
|
return Permissions(int(data)) |
|
|
|
|
|
|
@ -124,18 +112,6 @@ def _transform_overwrites( |
|
|
|
return overwrites |
|
|
|
|
|
|
|
|
|
|
|
def _transform_channeltype(entry: AuditLogEntry, data: int) -> enums.ChannelType: |
|
|
|
return enums.try_enum(enums.ChannelType, data) |
|
|
|
|
|
|
|
|
|
|
|
def _transform_voiceregion(entry: AuditLogEntry, data: int) -> enums.VoiceRegion: |
|
|
|
return enums.try_enum(enums.VoiceRegion, data) |
|
|
|
|
|
|
|
|
|
|
|
def _transform_video_quality_mode(entry: AuditLogEntry, data: int) -> enums.VideoQualityMode: |
|
|
|
return enums.try_enum(enums.VideoQualityMode, data) |
|
|
|
|
|
|
|
|
|
|
|
def _transform_icon(entry: AuditLogEntry, data: Optional[str]) -> Optional[Asset]: |
|
|
|
if data is None: |
|
|
|
return None |
|
|
@ -145,10 +121,10 @@ def _transform_icon(entry: AuditLogEntry, data: Optional[str]) -> Optional[Asset |
|
|
|
def _transform_avatar(entry: AuditLogEntry, data: Optional[str]) -> Optional[Asset]: |
|
|
|
if data is None: |
|
|
|
return None |
|
|
|
return Asset._from_avatar(entry._state, entry._target_id, data) |
|
|
|
return Asset._from_avatar(entry._state, entry._target_id, data) # type: ignore |
|
|
|
|
|
|
|
|
|
|
|
def _guild_hash_transformer(path: str) -> Callable[['AuditLogEntry', Optional[str]], Optional[Asset]]: |
|
|
|
def _guild_hash_transformer(path: str) -> Callable[[AuditLogEntry, Optional[str]], Optional[Asset]]: |
|
|
|
def _transform(entry: AuditLogEntry, data: Optional[str]) -> Optional[Asset]: |
|
|
|
if data is None: |
|
|
|
return None |
|
|
@ -157,6 +133,16 @@ def _guild_hash_transformer(path: str) -> Callable[['AuditLogEntry', Optional[st |
|
|
|
return _transform |
|
|
|
|
|
|
|
|
|
|
|
T = TypeVar('T', bound=enums.Enum) |
|
|
|
|
|
|
|
|
|
|
|
def _enum_transformer(enum: Type[T]) -> Callable[[AuditLogEntry, int], T]: |
|
|
|
def _transform(entry: AuditLogEntry, data: int) -> T: |
|
|
|
return enums.try_enum(enum, data) |
|
|
|
|
|
|
|
return _transform |
|
|
|
|
|
|
|
|
|
|
|
class AuditLogDiff: |
|
|
|
def __len__(self) -> int: |
|
|
|
return len(self.__dict__) |
|
|
@ -183,8 +169,8 @@ Transformer = Callable[["AuditLogEntry", Any], Any] |
|
|
|
class AuditLogChanges: |
|
|
|
# fmt: off |
|
|
|
TRANSFORMERS: ClassVar[Dict[str, Tuple[Optional[str], Optional[Transformer]]]] = { |
|
|
|
'verification_level': (None, _transform_verification_level), |
|
|
|
'explicit_content_filter': (None, _transform_explicit_content_filter), |
|
|
|
'verification_level': (None, _enum_transformer(enums.VerificationLevel)), |
|
|
|
'explicit_content_filter': (None, _enum_transformer(enums.ContentFilter)), |
|
|
|
'allow': (None, _transform_permissions), |
|
|
|
'deny': (None, _transform_permissions), |
|
|
|
'permissions': (None, _transform_permissions), |
|
|
@ -205,11 +191,12 @@ class AuditLogChanges: |
|
|
|
'icon_hash': ('icon', _transform_icon), |
|
|
|
'avatar_hash': ('avatar', _transform_avatar), |
|
|
|
'rate_limit_per_user': ('slowmode_delay', None), |
|
|
|
'default_message_notifications': ('default_notifications', _transform_default_notifications), |
|
|
|
'region': (None, _transform_voiceregion), |
|
|
|
'rtc_region': (None, _transform_voiceregion), |
|
|
|
'video_quality_mode': (None, _transform_video_quality_mode), |
|
|
|
'type': (None, _transform_channeltype), |
|
|
|
'default_message_notifications': ('default_notifications', _enum_transformer(enums.NotificationLevel)), |
|
|
|
'region': (None, _enum_transformer(enums.VoiceRegion)), |
|
|
|
'rtc_region': (None, _enum_transformer(enums.VoiceRegion)), |
|
|
|
'video_quality_mode': (None, _enum_transformer(enums.VideoQualityMode)), |
|
|
|
'privacy_level': (None, _enum_transformer(enums.StagePrivacyLevel)), |
|
|
|
'type': (None, _enum_transformer(enums.ChannelType)), |
|
|
|
} |
|
|
|
# fmt: on |
|
|
|
|
|
|
@ -308,6 +295,10 @@ class _AuditLogProxyPinAction: |
|
|
|
message_id: int |
|
|
|
|
|
|
|
|
|
|
|
class _AuditLogProxyStageInstanceAction: |
|
|
|
channel: abc.GuildChannel |
|
|
|
|
|
|
|
|
|
|
|
class AuditLogEntry(Hashable): |
|
|
|
r"""Represents an Audit Log entry. |
|
|
|
|
|
|
@ -404,6 +395,10 @@ class AuditLogEntry(Hashable): |
|
|
|
role = Object(id=instance_id) |
|
|
|
role.name = self.extra.get('role_name') # type: ignore |
|
|
|
self.extra: Role = role |
|
|
|
elif self.action.name.startswith('stage_instance'): |
|
|
|
channel_id = int(self.extra['channel_id']) |
|
|
|
elems = {'channel': self.guild.get_channel(channel_id) or Object(id=channel_id)} |
|
|
|
self.extra: _AuditLogProxyStageInstanceAction = type('_AuditLogProxy', (), elems)() |
|
|
|
|
|
|
|
# fmt: off |
|
|
|
self.extra: Union[ |
|
|
@ -411,6 +406,7 @@ class AuditLogEntry(Hashable): |
|
|
|
_AuditLogProxyMemberMoveOrMessageDelete, |
|
|
|
_AuditLogProxyMemberDisconnect, |
|
|
|
_AuditLogProxyPinAction, |
|
|
|
_AuditLogProxyStageInstanceAction, |
|
|
|
Member, User, None, |
|
|
|
Role, |
|
|
|
] |
|
|
|