self::FEATURE_LABEL_NONE, self::FEATURE_WEBHOOK => self::FEATURE_LABEL_WEBHOOK, self::FEATURE_RESPONSE => self::FEATURE_LABEL_RESPONSE, self::FEATURE_EVENT => self::FEATURE_LABEL_EVENT, self::FEATURE_REACTION => self::FEATURE_LABEL_REACTION, ]; public function __construct( protected BotServer $botServer, protected BotConversation $botConversation, ) { } public function getBotServer(): BotServer { return $this->botServer; } public function getBotConversation(): BotConversation { return $this->botConversation; } public function isEnabled(): bool { return $this->botServer->getState() !== self::STATE_DISABLED && $this->botConversation->getState() !== self::STATE_DISABLED; } public static function featureFlagsToLabels(int $flags): string { if ($flags === self::FEATURE_NONE) { return self::FEATURE_LABEL_NONE; } $features = []; foreach (self::FEATURE_MAP as $flag => $label) { if ($flags & $flag) { $features[] = $label; } } return implode(', ', $features); } public static function featureLabelsToFlags(array $labels): int { $reverseMap = array_flip(self::FEATURE_MAP); $flags = 0; foreach ($labels as $label) { if ($label === self::FEATURE_LABEL_NONE) { return self::FEATURE_NONE; } if (isset($reverseMap[$label])) { $flags += $reverseMap[$label]; } } return $flags; } }