ModerationRule.from constructor

ModerationRule.from({
  1. required Guild guild,
  2. required dynamic payload,
})

Implementation

factory ModerationRule.from ({ required Guild guild, required dynamic payload }) {
  List<ModerationAction> actions = [];
  if (payload['actions'] != null) {
    for (dynamic item in payload['actions']) {
      ModerationAction action = ModerationAction(
        type: ModerationActionType.values.firstWhere((element) => element.value == item['type']),
        metadata: item['metadata'].toString() != '{}'
          ? ModerationActionMetadata(
            channel: guild.channels.cache.get(item['metadata']['channel_id']!),
            duration: item['metadata']['duration_seconds']
          )
          : null
      );

      actions.add(action);
    }
  }

  List<String> keywordFilter = [];
  for (dynamic keyword in payload['trigger_metadata']['keyword_filter']) {
    keywordFilter.add(keyword);
  }

  List<Role> roles = [];
  for (Snowflake id in payload['exempt_roles']) {
    Role? role = guild.roles.cache.get(id);
    if (role != null) {
      roles.add(role);
    }
  }

  List<GuildChannel> channels = [];
  for (Snowflake id in payload['exempt_channels']) {
    GuildChannel? channel = guild.channels.cache.get(id);
    if (channel != null) {
      channels.add(channel);
    }
  }

  return ModerationRule(
    id: payload['id'],
    guildId: payload['guild_id'],
    guild: guild,
    label: payload['name'],
    eventType: ModerationEventType.values.firstWhere((element) => element.value == payload['event_type']),
    actions: actions,
    triggerType: ModerationTriggerType.values.firstWhere((element) => element.value == payload['trigger_type']),
    triggerMetadata: ModerationTriggerMetadata(
      presets: payload['trigger_metadata'] != null && payload['trigger_metadata']['presets'] != null
        ? (['presets'] as List<int>).map((preset) {
          return ModerationPresetType.values.firstWhere((element) => element.value == preset);
        }).toList()
        : [],
      keywordFilter: keywordFilter
    ),
    enabled: payload['enabled'] ?? false,
    exemptRoles: roles,
    exemptChannels: channels,
  );
}