• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/SendingService.php
  • Класс: BitrixImV2MessageSendSendingService
  • Вызов: SendingService::fireEventBeforeSend
public function fireEventBeforeSend(Chat $chat, Message $message): Result
{
	$result = new Result;

	$event = new Event('im', static::EVENT_BEFORE_MESSAGE_ADD, [
		'message' => $message->toArray(),
		'parameters' => $this->sendingConfig->toArray(),
	]);
	$event->send();

	foreach ($event->getResults() as $eventResult)
	{
		$eventParams = $eventResult->getParameters();
		if ($eventResult->getType() === EventResult::SUCCESS)
		{
			if ($eventParams)
			{
				if (isset($eventParams['message']) && is_array($eventParams['message']))
				{
					unset(
						$eventParams['message']['MESSAGE_ID'],
						$eventParams['message']['CHAT_ID'],
						$eventParams['message']['AUTHOR_ID'],
						$eventParams['message']['FROM_USER_ID']
					);
					$message->fill($eventParams['message']);
				}
				if (isset($eventParams['parameters']) && is_array($eventParams['parameters']))
				{
					$this->sendingConfig->fill($eventParams['parameters']);
				}
			}
		}
		elseif ($eventResult->getType() === EventResult::ERROR)
		{
			if ($eventParams && isset($eventParams['error']))
			{
				if ($eventParams['error'] instanceof MainError)
				{
					$result->addError($eventParams['error']);
				}
				elseif (is_string($eventParams['error']))
				{
					$result->addError(new ChatError(ChatError::BEFORE_SEND_EVENT, $eventParams['error']));
				}
			}
			else
			{
				$result->addError(new ChatError(ChatError::BEFORE_SEND_EVENT));
			}
		}
	}

	return $result;
}