diff --git a/app/Traits/HasNotificationSettings.php b/app/Traits/HasNotificationSettings.php new file mode 100644 index 000000000..64ea85a55 --- /dev/null +++ b/app/Traits/HasNotificationSettings.php @@ -0,0 +1,71 @@ + $this->emailNotificationSettings, + 'discord' => $this->discordNotificationSettings, + 'telegram' => $this->telegramNotificationSettings, + 'slack' => $this->slackNotificationSettings, + default => null, + }; + } + + /** + * Check if a notification channel is enabled + */ + public function isNotificationEnabled(string $channel): bool + { + $settings = $this->getNotificationSettings($channel); + + return $settings?->isEnabled() ?? false; + } + + /** + * Get all enabled notification channels for an event + */ + public function getEnabledChannels(string $event): array + { + $alwaysSendEvents = [ + 'server_force_enabled', + 'server_force_disabled', + 'general', + ]; + + $channels = []; + + $channelMap = [ + 'email' => EmailChannel::class, + 'discord' => DiscordChannel::class, + 'telegram' => TelegramChannel::class, + 'slack' => SlackChannel::class, + ]; + + foreach ($channelMap as $channel => $channelClass) { + if (in_array($event, $alwaysSendEvents)) { + if ($this->isNotificationEnabled($channel)) { + $channels[] = $channelClass; + } + } else { + if ($this->isNotificationEnabled($channel) && $this->isNotificationTypeEnabled($channel, $event)) { + $channels[] = $channelClass; + } + } + } + + return $channels; + } +}