public Mono<MessageAndRecipientIds> cloneAndSaveMessage(
            boolean queryRecipientIds,
            @NotNull Long senderId,
            @Nullable byte[] senderIp,
            @NotNull Long referenceId,
            @NotNull Boolean isGroupMessage,
            @NotNull Boolean isSystemMessage,
            @NotNull Long targetId) {
        return queryMessage(referenceId).flatMap(message -> saveMessage(queryRecipientIds,
                null,
                node.nextLargeGapId(ServiceType.MESSAGE),
                senderId,
                senderIp,
                targetId,
                isGroupMessage,
                isSystemMessage,
                message.getText(),
                message.getRecords(),
                message.getBurnAfter(),
                message.getDeliveryDate(),
                referenceId,
                null));
    }
@return {@link reactor.core.publisher.MonoEmpty} if {@link MessageProperties#persistMessage}
        is false and no recipient.
        <p>
        {@link MessageAndRecipientIds#message} is null if
        {@link MessageProperties#persistMessage} is false.
turms-service/src/main/java/im/turms/service/domain/message/service/MessageService.java