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

	$compatibleFields = array_merge(
		$message->toArray(),
		$this->sendingConfig->toArray(),
	);
	$compatibleChatFields = $chat->toArray();

	foreach (GetModuleEvents('im', self::EVENT_BEFORE_CHAT_MESSAGE_ADD, true) as $event)
	{
		$eventResult = ExecuteModuleEventEx($event, [$compatibleFields, $compatibleChatFields]);
		if ($eventResult === false || isset($eventResult['result']) && $eventResult['result'] === false)
		{
			$reason = $this->detectReasonSendError($chat->getType(), $eventResult['reason'] ?? '');
			return $result->addError(new ChatError(ChatError::FROM_OTHER_MODULE, $reason));
		}

		if (isset($eventResult['fields']) && is_array($eventResult['fields']))
		{
			unset(
				$eventResult['fields']['MESSAGE_ID'],
				$eventResult['fields']['CHAT_ID'],
				$eventResult['fields']['AUTHOR_ID'],
				$eventResult['fields']['FROM_USER_ID']
			);
			$message->fill($eventResult['fields']);
			$this->sendingConfig->fill($eventResult['fields']);
		}
	}

	return $result;
}