diff --git a/discord/audit_logs.py b/discord/audit_logs.py index ee073944d..d30b91be2 100644 --- a/discord/audit_logs.py +++ b/discord/audit_logs.py @@ -71,10 +71,7 @@ if TYPE_CHECKING: from .types.snowflake import Snowflake from .types.automod import AutoModerationTriggerMetadata, AutoModerationAction from .user import User - from .stage_instance import StageInstance - from .sticker import GuildSticker - from .threads import Thread - from .automod import AutoModRule, AutoModTrigger + from .webhook import Webhook TargetType = Union[ Guild, @@ -89,6 +86,8 @@ if TYPE_CHECKING: Thread, Object, AutoModRule, + ScheduledEvent, + Webhook, None, ] @@ -542,6 +541,7 @@ class AuditLogEntry(Hashable): *, users: Mapping[int, User], automod_rules: Mapping[int, AutoModRule], + webhooks: Mapping[int, Webhook], data: AuditLogEntryPayload, guild: Guild, ): @@ -549,6 +549,7 @@ class AuditLogEntry(Hashable): self.guild: Guild = guild self._users: Mapping[int, User] = users self._automod_rules: Mapping[int, AutoModRule] = automod_rules + self._webhooks: Mapping[int, Webhook] = webhooks self._from_data(data) def _from_data(self, data: AuditLogEntryPayload) -> None: @@ -750,3 +751,9 @@ class AuditLogEntry(Hashable): def _convert_target_auto_moderation(self, target_id: int) -> Union[AutoModRule, Object]: return self._automod_rules.get(target_id) or Object(target_id, type=AutoModRule) + + def _convert_target_webhook(self, target_id: int) -> Union[Webhook, Object]: + # circular import + from .webhook import Webhook + + return self._webhooks.get(target_id) or Object(target_id, type=Webhook) diff --git a/discord/guild.py b/discord/guild.py index 360938418..394842480 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -4283,6 +4283,9 @@ class Guild(Hashable): if after: predicate = lambda m: int(m['id']) > after.id + # Circular import + from .webhook import Webhook + while True: retrieve = 100 if limit is None else min(limit, 100) if retrieve < 1: @@ -4302,6 +4305,9 @@ class Guild(Hashable): ) automod_rule_map = {rule.id: rule for rule in automod_rules} + webhooks = (Webhook.from_state(data=raw_webhook, state=self._state) for raw_webhook in data.get('webhooks', [])) + webhook_map = {webhook.id: webhook for webhook in webhooks} + count = 0 for count, raw_entry in enumerate(raw_entries, 1): @@ -4313,6 +4319,7 @@ class Guild(Hashable): data=raw_entry, users=user_map, automod_rules=automod_rule_map, + webhooks=webhook_map, guild=self, ) diff --git a/discord/state.py b/discord/state.py index 0a7d5f0ab..8fb10c23d 100644 --- a/discord/state.py +++ b/discord/state.py @@ -2134,6 +2134,7 @@ class ConnectionState: entry = AuditLogEntry( users=self._users, automod_rules={}, + webhooks={}, data=data, guild=guild, )