Implement AutoMod

This commit is contained in:
Alex Nørgaard
2022-06-27 05:47:52 +01:00
committed by GitHub
parent 7ad00750c6
commit 5426d19dc7
12 changed files with 1279 additions and 2 deletions

View File

@ -73,6 +73,7 @@ from .scheduled_event import ScheduledEvent
from .stage_instance import StageInstance
from .threads import Thread, ThreadMember
from .sticker import GuildSticker
from .automod import AutoModRule, AutoModAction
if TYPE_CHECKING:
from .abc import PrivateChannel
@ -84,6 +85,7 @@ if TYPE_CHECKING:
from .gateway import DiscordWebSocket
from .app_commands import CommandTree
from .types.automod import AutoModerationRule, AutoModerationActionExecution
from .types.snowflake import Snowflake
from .types.activity import Activity as ActivityPayload
from .types.channel import DMChannel as DMChannelPayload
@ -1079,6 +1081,46 @@ class ConnectionState:
guild.stickers = tuple(map(lambda d: self.store_sticker(guild, d), data['stickers']))
self.dispatch('guild_stickers_update', guild, before_stickers, guild.stickers)
def parse_auto_moderation_rule_create(self, data: AutoModerationRule) -> None:
guild = self._get_guild(int(data['guild_id']))
if guild is None:
_log.debug('AUTO_MODERATION_RULE_CREATE referencing an unknown guild ID: %s. Discarding.', data['guild_id'])
return
rule = AutoModRule(data=data, guild=guild, state=self)
self.dispatch('automod_rule_create', rule)
def parse_auto_moderation_rule_update(self, data: AutoModerationRule) -> None:
guild = self._get_guild(int(data['guild_id']))
if guild is None:
_log.debug('AUTO_MODERATION_RULE_UPDATE referencing an unknown guild ID: %s. Discarding.', data['guild_id'])
return
rule = AutoModRule(data=data, guild=guild, state=self)
self.dispatch('automod_rule_update', rule)
def parse_auto_moderation_rule_delete(self, data: AutoModerationRule) -> None:
guild = self._get_guild(int(data['guild_id']))
if guild is None:
_log.debug('AUTO_MODERATION_RULE_DELETE referencing an unknown guild ID: %s. Discarding.', data['guild_id'])
return
rule = AutoModRule(data=data, guild=guild, state=self)
self.dispatch('automod_rule_delete', rule)
def parse_auto_moderation_action_execution(self, data: AutoModerationActionExecution) -> None:
guild = self._get_guild(int(data['guild_id']))
if guild is None:
_log.debug('AUTO_MODERATION_ACTION_EXECUTION referencing an unknown guild ID: %s. Discarding.', data['guild_id'])
return
execution = AutoModAction(data=data, state=self)
self.dispatch('automod_action', execution)
def _get_create_guild(self, data: gw.GuildCreateEvent) -> Guild:
if data.get('unavailable') is False:
# GUILD_CREATE with unavailable in the response