# versionadded declared in docs gen file
from enum import IntEnum
from typing import TYPE_CHECKING, List, Optional, TypeVar
from ...utils.attrs_utils import DictSerializerMixin, convert_list, define, field
from .channel import Channel
from .misc import Snowflake
from .user import User
from .webhook import Webhook
__all__ = (
"AuditLogEntry",
"AuditLogEvents",
"AuditLogs",
"AuditLogChange",
"OptionalAuditEntryInfo",
)
_T = TypeVar("_T")
if TYPE_CHECKING:
from .guild import Integration, ScheduledEvents
from .gw import AutoModerationRule
[docs]class AuditLogEvents(IntEnum):
"""
A class object representing the different types of AuditLogEvents.
.. note::
There is no official name for AuditLogEvents type 151, however it does represent the server owner sets up the guild for monetization/server subscriptions.
:ivar int GUILD_UPDATE: 1 - Server settings were updated
:ivar int CHANNEL_CREATE: 10 - Channel was created
:ivar int CHANNEL_UPDATE: 11 - Channel settings were updated
:ivar int CHANNEL_DELETE: 12 - Channel was deleted
:ivar int CHANNEL_OVERWRITE_CREATE: 13 - Permission overwrite was added to a channel
:ivar int CHANNEL_OVERWRITE_UPDATE: 14 - Permission overwrite was updated for a channel
:ivar int CHANNEL_OVERWRITE_DELETE: 15 - Permission overwrite was deleted from a channel
:ivar int MEMBER_KICK: 20 - Member was removed from server
:ivar int MEMBER_PRUNE: 21 - Members were pruned from server
:ivar int MEMBER_BAN_ADD: 22 - Member was banned from server
:ivar int MEMBER_BAN_REMOVE: 23 - Server ban was lifted for a member
:ivar int MEMBER_UPDATE: 24 - Member was updated in server
:ivar int MEMBER_ROLE_UPDATE: 25 - Member was added or removed from a role
:ivar int MEMBER_MOVE: 26 - Member was moved to a different voice channel
:ivar int MEMBER_DISCONNECT: 27 - Member was disconnected from a voice channel
:ivar int BOT_ADD: 28 - Bot user was added to server
:ivar int ROLE_CREATE: 30 - Role was created
:ivar int ROLE_UPDATE: 31 - Role was updated
:ivar int ROLE_DELETE: 32 - Role was deleted
:ivar int INVITE_CREATE: 40 - Server invite was created
:ivar int INVITE_UPDATE: 41 - Server invite was updated
:ivar int INVITE_DELETE: 42 - Server invite was deleted
:ivar int WEBHOOK_CREATE: 50 - Webhook was created
:ivar int WEBHOOK_UPDATE: 51 - Webhook properties or channel were updated
:ivar int WEBHOOK_DELETE: 52 - Webhook was deleted
:ivar int EMOJI_CREATE: 60 - Emoji was created
:ivar int EMOJI_UPDATE: 61 - Emoji name was updated
:ivar int EMOJI_DELETE: 62 - Emoji was deleted
:ivar int MESSAGE_DELETE: 72 - Single message was deleted
:ivar int MESSAGE_BULK_DELETE: 73 - Multiple messages were deleted
:ivar int MESSAGE_PIN: 74 - Message was pinned to a channel
:ivar int MESSAGE_UNPIN: 75 - Message was unpinned from a channel
:ivar int INTEGRATION_CREATE: 80 - App was added to server
:ivar int INTEGRATION_UPDATE: 81 - App was updated (as an example, its scopes were updated)
:ivar int INTEGRATION_DELETE: 82 - App was removed from server
:ivar int STAGE_INSTANCE_CREATE: 83 - Stage instance was created (stage channel becomes live)
:ivar int STAGE_INSTANCE_UPDATE: 84 - Stage instance details were updated
:ivar int STAGE_INSTANCE_DELETE: 85 - Stage instance was deleted (stage channel no longer live)
:ivar int STICKER_CREATE: 90 - Sticker was created
:ivar int STICKER_UPDATE: 91 - Sticker details were updated
:ivar int STICKER_DELETE: 92 - Sticker was deleted
:ivar int GUILD_SCHEDULED_EVENT_CREATE: 100 - Event was created
:ivar int GUILD_SCHEDULED_EVENT_UPDATE: 101 - Event was updated
:ivar int GUILD_SCHEDULED_EVENT_DELETE: 102 - Event was cancelled
:ivar int THREAD_CREATE: 110 - Thread was created in a channel
:ivar int THREAD_UPDATE: 111 - Thread was updated
:ivar int THREAD_DELETE: 112 - Thread was deleted
:ivar int APPLICATION_COMMAND_PERMISSION_UPDATE: 121 - Permissions were updated for a command
:ivar int AUTO_MODERATION_RULE_CREATE: 140 - Auto Moderation rule was created
:ivar int AUTO_MODERATION_RULE_UPDATE: 141 - Auto Moderation rule was updated
:ivar int AUTO_MODERATION_RULE_DELETE: 142 - Auto Moderation rule was deleted
:ivar int AUTO_MODERATION_BLOCK_MESSAGE: 143 - Message was blocked by AutoMod (according to a rule)
:ivar int AUTO_MODERATION_FLAG_TO_CHANNEL: 144 - Message was flagged by AutoMod (according to a rule)
:ivar int AUTO_MODERATION_USER_COMMUNICATION_DISABLED: 145 - Member was timed out by AutoMod (according to a rule)
:ivar int GUILD_MONETIZATION_SETUP: 151 - Monetization was set up in the server.
"""
# guild related
GUILD_UPDATE = 1
# channel related
CHANNEL_CREATE = 10
CHANNEL_UPDATE = 11
CHANNEL_DELETE = 12
CHANNEL_OVERWRITE_CREATE = 13
CHANNEL_OVERWRITE_UPDATE = 14
CHANNEL_OVERWRITE_DELETE = 15
# member related
MEMBER_KICK = 20
MEMBER_PRUNE = 21
MEMBER_BAN_ADD = 22
MEMBER_BAN_REMOVE = 23
MEMBER_UPDATE = 24
MEMBER_ROLE_UPDATE = 25
MEMBER_MOVE = 26
MEMBER_DISCONNECT = 27
BOT_ADD = 28
# role related
ROLE_CREATE = 30
ROLE_UPDATE = 31
ROLE_DELETE = 32
# invite related
INVITE_CREATE = 40
INVITE_UPDATE = 41
INVITE_DELETE = 42
# webhook related
WEBHOOK_CREATE = 50
WEBHOOK_UPDATE = 51
WEBHOOK_DELETE = 52
# emoji related
EMOJI_CREATE = 60
EMOJI_UPDATE = 61
EMOJI_DELETE = 62
# message related
MESSAGE_DELETE = 72
MESSAGE_BULK_DELETE = 73
MESSAGE_PIN = 74
MESSAGE_UNPIN = 75
# integration related
INTEGRATION_CREATE = 80
INTEGRATION_UPDATE = 81
INTEGRATION_DELETE = 82
# stage instance related
STAGE_INSTANCE_CREATE = 83
STAGE_INSTANCE_UPDATE = 84
STAGE_INSTANCE_DELETE = 85
# sticker related
STICKER_CREATE = 90
STICKER_UPDATE = 91
STICKER_DELETE = 92
# guild scheduled event related
GUILD_SCHEDULED_EVENT_CREATE = 100
GUILD_SCHEDULED_EVENT_UPDATE = 101
GUILD_SCHEDULED_EVENT_DELETE = 102
# thread related
THREAD_CREATE = 110
THREAD_UPDATE = 111
THREAD_DELETE = 112
# app-command permissions related
APPLICATION_COMMAND_PERMISSION_UPDATE = 121
# auto mod related
AUTO_MODERATION_RULE_CREATE = 140
AUTO_MODERATION_RULE_UPDATE = 141
AUTO_MODERATION_RULE_DELETE = 142
AUTO_MODERATION_BLOCK_MESSAGE = 143
AUTO_MODERATION_FLAG_TO_CHANNEL = 144
AUTO_MODERATION_USER_COMMUNICATION_DISABLED = 145
# monetization related
GUILD_MONETIZATION_SETUP = 151
[docs]@define()
class AuditLogChange(DictSerializerMixin):
"""
A class object representing an AuditLogChange.
:ivar Optional[_T] new_value: New value of the key
:ivar Optional[_T] old_value: Old value of the key
:ivar str key: Name of the changed entity, with a few `exceptions <https://discord.com/developers/docs/resources/audit-log#audit-log-change-object-audit-log-change-exceptions>`_
"""
new_value: Optional[_T] = field(default=None)
old_value: Optional[_T] = field(default=None)
key: str = field()
[docs]@define()
class OptionalAuditEntryInfo(DictSerializerMixin):
"""
A class object representing OptionalAuditEntryInfo.
:ivar Snowflake application_id: ID of the app whose permissions were targeted. Used in event :attr:`AuditLogEvents.APPLICATION_COMMAND_PERMISSION_UPDATE`.
:ivar str auto_moderation_rule_name: Name of the Auto Moderation rule that was triggered. Used in events :attr:`AuditLogEvents.AUTO_MODERATION_BLOCK_MESSAGE`, :attr:`AuditLogEvents.AUTO_MODERATION_FLAG_TO_CHANNEL` & :attr:`AuditLogEvents.AUTO_MODERATION_USER_COMMUNICATION_DISABLED`.
:ivar str auto_moderation_rule_trigger_type: Trigger type of the Auto Moderation rule that was triggered. Used in events :attr:`AuditLogEvents.AUTO_MODERATION_BLOCK_MESSAGE`, :attr:`AuditLogEvents.AUTO_MODERATION_FLAG_TO_CHANNEL` & :attr:`AuditLogEvents.AUTO_MODERATION_USER_COMMUNICATION_DISABLED`.
:ivar Snowflake channel_id: Channel in which the entities were targeted. Used in events :attr:`AuditLogEvents.MEMBER_MOVE`, :attr:`AuditLogEvents.MESSAGE_PIN`, :attr:`AuditLogEvents.MESSAGE_UNPIN`, :attr:`AuditLogEvents.MESSAGE_DELETE`, :attr:`AuditLogEvents.STAGE_INSTANCE_CREATE`, :attr:`AuditLogEvents.STAGE_INSTANCE_UPDATE`, :attr:`AuditLogEvents.STAGE_INSTANCE_DELETE`, :attr:`AuditLogEvents.AUTO_MODERATION_BLOCK_MESSAGE`, :attr:`AuditLogEvents.AUTO_MODERATION_FLAG_TO_CHANNEL` & :attr:`AuditLogEvents.AUTO_MODERATION_USER_COMMUNICATION_DISABLED`.
:ivar str count: Number of entities that were targeted. Used in events :attr:`AuditLogEvents.MESSAGE_DELETE`, :attr:`AuditLogEvents.MESSAGE_BULK_DELETE`, :attr:`AuditLogEvents.MEMBER_DISCONNECT` & :attr:`AuditLogEvents.MEMBER_MOVE`
:ivar str delete_member_days: Number of days after which inactive members were kicked. Used in event :attr:`AuditLogEvents.MEMBER_PRUNE`
:ivar Snowflake id: ID of the overwritten entity. Used in events :attr:`AuditLogEvents.CHANNEL_OVERWRITE_CREATE`, :attr:`AuditLogEvents.CHANNEL_OVERWRITE_UPDATE` & :attr:`AuditLogEvents.CHANNEL_OVERWRITE_DELETE`
:ivar str members_removed: Number of members removed by the prune. Used in event :attr:`AuditLogEvents.MEMBER_PRUNE`
:ivar Snowflake message_id: ID of the message that was targeted. Used in events :attr:`AuditLogEvents.MESSAGE_PIN` & :attr:`AuditLogEvents.MESSAGE_UNPIN`
:ivar Optional[str] role_name: Name of the role if type is "0" (not present if type is "1"). Used in events :attr:`AuditLogEvents.CHANNEL_OVERWRITE_CREATE`, :attr:`AuditLogEvents.CHANNEL_OVERWRITE_UPDATE` & :attr:`AuditLogEvents.CHANNEL_OVERWRITE_DELETE`
:ivar str type: Type of overwritten entity - role ("0") or member ("1"). Used in events :attr:`AuditLogEvents.CHANNEL_OVERWRITE_CREATE`, :attr:`AuditLogEvents.CHANNEL_OVERWRITE_UPDATE` & :attr:`AuditLogEvents.CHANNEL_OVERWRITE_DELETE`
"""
application_id: Snowflake = field(converter=Snowflake)
channel_id: Snowflake = field(converter=Snowflake)
auto_moderation_rule_name: str = field()
auto_moderation_rule_trigger_type: str = field()
count: str = field()
delete_member_days: str = field()
id: Snowflake = field(converter=Snowflake)
members_removed: str = field()
message_id: Snowflake = field(converter=Snowflake)
role_name: Optional[str] = field(default=None)
type: str = field()
[docs]@define()
class AuditLogEntry(DictSerializerMixin):
"""
A class object representing an AuditLogEntry.
:ivar Optional[str] target_id: ID of the affected entity (webhook, user, role, etc.)
:ivar Optional[List[AuditLogChange]] changes: Changes made to the target_id
:ivar Optional[Snowflake] user_id: User or app that made the changes
:ivar Snowflake id: ID of the entry
:ivar AuditLogEvents action_type: Type of action that occurred
:ivar OptionalAuditEntryInfo options: Additional info for certain event types
:ivar str reason: Reason for the change (1-512 characters)
"""
target_id: Optional[str] = field(default=None)
changes: Optional[List[AuditLogChange]] = field(
converter=convert_list(AuditLogChange), default=None
)
user_id: Optional[Snowflake] = field(converter=Snowflake, default=None)
id: Snowflake = field(converter=Snowflake)
action_type: AuditLogEvents = field(converter=AuditLogEvents)
options: Optional[OptionalAuditEntryInfo] = field(
converter=OptionalAuditEntryInfo, default=None
)
reason: Optional[str] = field(default=None)
[docs]@define()
class AuditLogs(DictSerializerMixin):
"""
A class object representing the audit logs of a guild.
:ivar List[AuditLogEntry] audit_log_entries: List of audit log entries, sorted from most to least recent.
:ivar List[AutoModerationRule] auto_moderation_rules: List of auto moderation rules referenced in the audit log.
:ivar List[ScheduledEvents] guild_scheduled_events: List of guild scheduled events referenced in the audit log
:ivar List[Integration] integrations: List of partial integration objects
:ivar List[Channel] threads: List of threads referenced in the audit log
:ivar List[User] users: List of users referenced in the audit log
:ivar List[Webhook] webhooks: List of webhooks referenced in the audit log
"""
audit_log_entries: List[AuditLogEntry] = field(
converter=convert_list(AuditLogEntry), default=None
)
auto_moderation_rules: List["AutoModerationRule"] = field(default=None)
guild_scheduled_events: List["ScheduledEvents"] = field(default=None)
integrations: List["Integration"] = field(default=None)
threads: List[Channel] = field(converter=convert_list(Channel), default=None)
users: List[User] = field(converter=convert_list(User), default=None)
webhooks: List[Webhook] = field(converter=convert_list(Webhook), default=None)
def __attrs_post__init(self):
if self.guild_scheduled_events:
from .guild import ScheduledEvents
self.guild_scheduled_events = [
ScheduledEvents(**event) for event in self.guild_scheduled_events
]
if self.integrations:
from .guild import Integration
self.integrations = [Integration(**integration) for integration in self.integrations]
if self.auto_moderation_rules:
from .gw import AutoModerationRule
self.auto_moderation_rules = [
AutoModerationRule(**rule) for rule in self.auto_moderation_rules
]