Update content of files

This commit is contained in:
GitHub Action 2021-10-29 20:29:31 +00:00
parent 126948de6b
commit 804053cc8a
3 changed files with 304 additions and 388 deletions

View file

@ -1,152 +0,0 @@
<!DOCTYPE html>
<html class="">
<head>
<meta charset="utf-8">
<title>messageEntityPhone</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Message entity representing a phone number.">
<meta property="og:title" content="messageEntityPhone">
<meta property="og:image" content="">
<meta property="og:description" content="Message entity representing a phone number.">
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
<style>
</style>
</head>
<body class="preload">
<div class="dev_page_wrap">
<div class="dev_page_head navbar navbar-static-top navbar-tg">
<div class="navbar-inner">
<div class="container clearfix">
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
<ul class="nav navbar-nav">
<li><a href="//telegram.org/">Home</a></li>
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
<li class=""><a href="/api">API</a></li>
<li class=""><a href="/mtproto">Protocol</a></li>
<li class="active"><a href="/schema">Schema</a></li>
</ul>
</div>
</div>
</div>
<div class="container clearfix">
<div class="dev_page">
<div id="dev_page_content_wrap" class=" ">
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/constructor/messageEntityPhone" >messageEntityPhone</a></li></ul></div>
<h1 id="dev_page_title">messageEntityPhone</h1>
<div id="dev_page_content"><p>Message entity representing a phone number.</p>
<p><div class="clearfix">
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
<li class="dropdown">
<a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#">Layer 133 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="?layer=1">1 &ndash; Base layer</a></li><li><a href="?layer=2">2 &ndash; New userpic notifications</a></li><li><a href="?layer=3">3 &ndash; Send message can trigger link change</a></li><li><a href="?layer=4">4 &ndash; Check-in chats</a></li><li><a href="?layer=5">5 &ndash; Localized SMS, localized notifications</a></li><li><a href="?layer=6">6 &ndash; Foursquare integration</a></li><li><a href="?layer=7">7 &ndash; Added wallPaperSolid</a></li><li><a href="?layer=8">8 &ndash; Added end-to-end encryption</a></li><li><a href="?layer=9">9 &ndash; Improved big files upload perfomance</a></li><li><a href="?layer=10">10 &ndash; Improved chat participants updates</a></li><li><a href="?layer=11">11 &ndash; Improved secret chats</a></li><li><a href="?layer=12">12 &ndash; New dynamic support</a></li><li><a href="?layer=13">13 &ndash; Audio, video MIME; contacts import retry; new secret actions</a></li><li><a href="?layer=14">14 &ndash; Notify settings sync, blacklist sync</a></li><li><a href="?layer=15">15 &ndash; Modified getHistory offset behaviour</a></li><li><a href="?layer=16">16 &ndash; Split sendCode into 2 parts</a></li><li><a href="?layer=17">17 &ndash; Added custom typing, introduced message flags</a></li><li><a href="?layer=18">18 &ndash; Added usernames</a></li><li><a href="?layer=23">23 &ndash; Stickers for secret chats</a></li><li><a href="?layer=105">105 &ndash; Scheduled messages, Cloud themes</a></li><li><a href="?layer=108">108 &ndash; Login with QR code</a></li><li><a href="?layer=109">109 &ndash; Polls v2</a></li><li><a href="?layer=110">110 &ndash; People Nearby 2.0, Bank card entity</a></li><li><a href="?layer=111">111 &ndash; Folders, Broadcast Stats</a></li><li><a href="?layer=112">112 &ndash; Old featured stickers, generic dice, poll timer, poll solution</a></li><li><a href="?layer=113">113 &ndash; PSA</a></li><li><a href="?layer=114">114 &ndash; Video thumbs for GIFs</a></li><li><a href="?layer=115">115 &ndash; Peek Channel Invite</a></li><li><a href="?layer=116">116 &ndash; Group Stats, Profile Videos</a></li><li><a href="?layer=117">117 &ndash; WebRTC Phone Calls</a></li><li><a href="?layer=118">118 &ndash; Callback with 2FA, Countries list</a></li><li><a href="?layer=119">119 &ndash; Comments in channels, Threads, Anonymous Admins</a></li><li><a href="?layer=120">120 &ndash; Multipins, Message Stats, GeoLive v2</a></li><li><a href="?layer=121">121 &ndash; SVG-based Outlines for Stickers</a></li><li><a href="?layer=122">122 &ndash; Voice Chats</a></li><li><a href="?layer=123">123 &ndash; Voice Chat improvements</a></li><li><a href="?layer=124">124 &ndash; Expiring Invite links</a></li><li><a href="?layer=125">125 &ndash; Voice Chats in Broadcasts</a></li><li><a href="?layer=126">126 &ndash; Ban channels in channels</a></li><li><a href="?layer=127">127 &ndash; Payments in channels</a></li><li><a href="?layer=128">128 &ndash; Microthumbs for User/Chat profile photos</a></li><li><a href="?layer=129">129 &ndash; Video Chats</a></li><li><a href="?layer=130">130 &ndash; Custom placeholder for bot reply keyboards</a></li><li><a href="?layer=131">131 &ndash; Reset 2FA Password after a week</a></li><li><a href="?layer=132">132 &ndash; Chat themes</a></li><li><a href="?layer=133"><strong>133 &ndash; 64-bit IDs for User/Chat</strong></a></li>
<li class="divider"></li>
<li><a href="/api/layers">More...</a></li>
</ul>
</li>
</ul>
</div>
<pre class="page_scheme"><code><a href="/constructor/messageEntityPhone" class="current_page_link" >messageEntityPhone</a>#9b69e34b offset:<a href="/type/int" >int</a> length:<a href="/type/int" >int</a> = <a href="/type/MessageEntity" >MessageEntity</a>;</code></pre></p>
<h3><a class="anchor" href="#parameters" id="parameters" name="parameters"><i class="anchor-icon"></i></a>Parameters</h3>
<table class="table">
<thead>
<tr>
<th>Name</th>
<th style="text-align: center;">Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>offset</strong></td>
<td style="text-align: center;"><a href="/type/int">int</a></td>
<td>Offset of message entity within message (in UTF-8 codepoints)</td>
</tr>
<tr>
<td><strong>length</strong></td>
<td style="text-align: center;"><a href="/type/int">int</a></td>
<td>Length of message entity within message (in UTF-8 codepoints)</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
<p><a href="/type/MessageEntity">MessageEntity</a></p></div>
</div>
</div>
</div>
<div class="footer_wrap">
<div class="footer_columns_wrap footer_desktop">
<div class="footer_column footer_column_telegram">
<h5>Telegram</h5>
<div class="footer_telegram_description"></div>
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
</div>
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
<ul>
<li><a href="//telegram.org/faq">FAQ</a></li>
<li><a href="//telegram.org/blog">Blog</a></li>
<li><a href="//telegram.org/jobs">Jobs</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
<ul>
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
<li><a href="//telegram.org/dl/android">Android</a></li>
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
<ul>
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
<li><a href="//macos.telegram.org/">macOS</a></li>
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
</ul>
</div>
<div class="footer_column footer_column_platform">
<h5><a href="/">Platform</a></h5>
<ul>
<li><a href="/api">API</a></li>
<li><a href="//translations.telegram.org/">Translations</a></li>
<li><a href="//instantview.telegram.org/">Instant View</a></li>
</ul>
</div>
</div>
<div class="footer_columns_wrap footer_mobile">
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/blog">Blog</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps">Apps</a></h5>
</div>
<div class="footer_column">
<h5><a href="/">Platform</a></h5>
</div>
<div class="footer_column">
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
</div>
</div>
</div>
</div>
<script src="/js/main.js?42"></script>
<script>backToTopInit("Go up");
removePreloadInit();
</script>
</body>
</html>

View file

@ -1,236 +0,0 @@
<!DOCTYPE html>
<html class="">
<head>
<meta charset="utf-8">
<title>TL-dependent</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Main article: TL Language.
In certain cases, types may depend not only on other types (polymorphism), but also on the parameters…">
<meta property="og:title" content="TL-dependent">
<meta property="og:image" content="">
<meta property="og:description" content="Main article: TL Language.
In certain cases, types may depend not only on other types (polymorphism), but also on the parameters…">
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
<style>
</style>
</head>
<body class="preload">
<div class="dev_page_wrap">
<div class="dev_page_head navbar navbar-static-top navbar-tg">
<div class="navbar-inner">
<div class="container clearfix">
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
<ul class="nav navbar-nav">
<li><a href="//telegram.org/">Home</a></li>
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
<li class=""><a href="/api">API</a></li>
<li class="active"><a href="/mtproto">Protocol</a></li>
<li class=""><a href="/schema">Schema</a></li>
</ul>
</div>
</div>
</div>
<div class="container clearfix">
<div class="dev_page">
<div id="dev_page_content_wrap" class=" ">
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/mtproto" >Mobile Protocol</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/mtproto/TL-dependent" >TL-dependent</a></li></ul></div>
<h1 id="dev_page_title">TL-dependent</h1>
<div id="dev_page_content"><p>Main article: <a href="/mtproto/TL">TL Language</a>.</p>
<p>In certain cases, types may depend not only on other types (polymorphism), but also on the parameters of another type (dependent types). The TL language provides very limited support for this functionality: dependence is only allowed on a natural parameter whose type is designated using <code>#</code> (alias <code>nat</code>, but this is private -- TL doesnt currently support this synonym). Values of type # are serialized as 32-bit signed numbers from 0 to 2^31-1.</p>
<h2><a class="anchor" href="#example-integer-tuples-vectors" id="example-integer-tuples-vectors" name="example-integer-tuples-vectors"><i class="anchor-icon"></i></a>Example: integer tuples (vectors)</h2>
<p>Suppose we want to use induction to define the types “one integer”, “two integers”, and “three integers”. We could try to define them as follows:</p>
<pre><code>empty = Empty;
single x:int = Single;
pair x:int y:int = Pair;
triple x:int y:int z:int = Triple;
quadruple x:int y:int z:int t:int = Quadruple;
...</code></pre>
<p>or as:</p>
<pre><code>empty = Empty;
single x:int empty = Single;
pair x:int y:single = Pair;
triple x:int yz:pair = Triple;
quadruple x:int yzt:triple = Quadruple;</code></pre>
<p>or as:</p>
<pre><code>tnil = Tuple0;
tcons0 hd:int tl:Tuple0 = Tuple1;
tcons1 hd:int tl:Tuple1 = Tuple2;
tcons2 hd:int tl:Tuple2 = Tuple3;
...
tcons_n hd:int tl:Tuple_n = Tuple_(n+1)</code></pre>
<p>The first two variations lead to the same serialization. For example, <code>(2 3 9):%triple</code> and <code>(2 (3 9)):%triple</code> serialize as three 32-bit numbers: <code>2 3 9</code>. The last variation better emphasizes the inductive version of the definition, but it uses boxed types. This is good from a theoretical perspective, but it leads to “superfluous” constructor names in serialization.</p>
<p>Therefore, we will write <code>%Type-Ident</code> to indicate the bare type that corresponds to the boxed type <code>Type-Ident</code> with a single constructor. If this constructor is named <code>constructor</code>, then according to the definition %<code>Type-Ident</code> = %<code>constructor</code>. Now we can write our definition like this:</p>
<pre><code>tnil = Tuple0;
tcons_n hd:int tl:%Tuple_n = Tuple_(n+1)</code></pre>
<p>If we now abstract <em>n</em> out of the name of the type name and make it like a parameter for a polymorphic (dependent, to be more exact) type, then something like the following can be written in a suitable functional language:</p>
<pre><code>NewType Tuple (n : #) :=
| tnil = Tuple 0
| tcons n:# hd:int tl:%(Tuple n) = Tuple (S n)
EndType;</code></pre>
<p>In the TL language, it looks like this:</p>
<pre><code>tnil = Tuple 0;
tcons {n:#} hd:int tl:%(Tuple n) = Tuple (S n);</code></pre>
<p>The function <code>S : # -&gt; #</code> and the constant <code>O : #</code> (it is <code>0</code>) are the function for the next natural number (<code>S n = n + 1</code>) and the constant null. Therefore, the type <code>#</code> (alias <code>nat</code>) behaves as if it were defined in TL using the constructors</p>
<pre><code>O = nat;
S nat = nat;</code></pre>
<p>or, using syntax more typical of other functional languages,</p>
<pre><code>NewType nat :=
| O
| S nat
EndType;</code></pre>
<p>Types of all defined combinators:</p>
<pre><code>O : #
S : # -&gt; #
Tuple : # -&gt; Type
tnil : Tuple 0
tcons : forall n : #, int -&gt; Tuple n -&gt; Tuple (S n)</code></pre>
<p>or</p>
<pre><code>Tuple : forall n : #, Type;
tcons : forall n : #, forall hd : int, forall tl : Tuple n, Tuple (S n)</code></pre>
<p>Note that in this case the constructor <code>tnil</code> does not depend on the parameter <em>n</em>, while <code>tcons</code> does.</p>
<p>In an analogous manner, it is possible to define a complete binary tree of height <em>h</em> with strings in the leaf nodes:</p>
<pre><code>tleaf value:string = BinTree 0;
tnode {h:#} left:(BinTree h) right:(BinTree h) = BinTree (S h);</code></pre>
<p>Or a random tree whose leaf nodes are all a distance of <em>h</em> from the root and whose nodes are all labeled with integers:</p>
<pre><code>hleaf value:int = Tree 0;
hnode {n:#} left:(Tree n) next:(Tree (S n)) = Tree (S n)
hnil {n:#} = Tree (S n)</code></pre>
<p>Another version:</p>
<pre><code>hleaf' value:int = Tree' 0;
hnode' {n:#} children:(list (Tree' n)) = Tree' (S n)</code></pre>
<h2><a class="anchor" href="#polymorphic-dependent-types" id="polymorphic-dependent-types" name="polymorphic-dependent-types"><i class="anchor-icon"></i></a>Polymorphic dependent types</h2>
<p>Let us try to define a type <code>Tuple X n</code> whose values are <em>n</em>-tuples of type <code>X</code> values. In this way, <code>Tuple</code> will be simultaneously polymorphic and dependent:</p>
<pre><code>Tuple : Type -&gt; # -&gt; Type;</code></pre>
<p>In the familiar syntax of functional languages:</p>
<pre><code>NewType Tuple {X : Type} {n : #} :=
| vnil : Tuple X 0
| vcons {n:#} hd:X tl:%(Tuple X n) : Tuple X (S n)
EndType</code></pre>
<p>or, in TL syntax,</p>
<pre><code>vnil {X:Type} = Tuple X 0;
vcons {X:Type} {n:#} tl:(%Tuple X n) = Tuple X S n</code></pre>
<p>In the end we obtain terms for the following types:</p>
<pre><code>vnil : forall X : Type, Tuple X 0
vcons : forall X : Type, forall n : #, X -&gt; Tuple X n -&gt; Tuple X (S n)</code></pre>
<p>or</p>
<pre><code>vnil : forall X : Type, Tuple X 0
vcons : forall X : Type, forall n : #, forall hd : X, forall tl : Tuple X n, Tuple X (S n)</code></pre>
<h2><a class="anchor" href="#dependent-sums" id="dependent-sums" name="dependent-sums"><i class="anchor-icon"></i></a>Dependent sums</h2>
<p>The <code>Tuple</code> we just defined differs from the built-in <code>Vector</code> type. Specifically, the <code>Vector</code> type formally depends on a single argument (a type), but our <code>Tuple</code> depends on two (a type and a number):</p>
<pre><code>Tuple : Type -&gt; # -&gt; Type;
Vector : Type -&gt; Type;</code></pre>
<p>The built-in <code>Vector</code> could be defined in terms of our <code>Tuple</code> using “summing across all <em>n</em> : #":</p>
<pre><code>vector {X:Type} n:# v:(%Tuple X n) = Vector X;</code></pre>
<p>Nevertheless, our <code>Tuple</code> has its advantages. For example, we can define data types such as:</p>
<pre><code>matrix_10x10 a:(%Tuple (%Tuple double 10) 10) = Matrix_10x10;</code></pre>
<p>In any event, remember that during calculation of the <code>matrix_10x10</code> combinators number, all parentheses must be removed and the CRC32 of the string <code>matrix_10x10 a:%Tuple %Tuple double 10 10 = Matrix_10x10</code> must be computed.</p>
<p>Moreover, we can define arbitrarily-sized matrices:</p>
<pre><code>matrix {X:Type} m:# n:# a:(%Tuple (%Tuple X m) n) = Matrix X;</code></pre>
<p>In this case using vector would result in storing the length of a row (<em>m</em>) in each row, e.g. <em>n</em> times.</p>
<p>Note that the serializations of values of type <code>%Tuple X n</code> and <code>vector X</code> (also known as <code>%vector X</code> and <code>%Vector X</code>) nearly match when <em>n &gt; 0</em>: in both cases we obtain a single 32-bit number (equal to <em>n-1</em> or <em>n</em> depending on the version) followed by the serializations of <em>n</em> objects of type <em>X</em>. (This is slightly untrue: values of type <code>%Tuple X n</code> can only be serialized if <em>n</em> is a constant or value known from one of the preceding fields of the enclosing entry; but then this <em>n</em> wont be serialized explicitly anywhere).</p>
<h2><a class="anchor" href="#special-syntax-for-repetitions" id="special-syntax-for-repetitions" name="special-syntax-for-repetitions"><i class="anchor-icon"></i></a>Special syntax for repetitions</h2>
<p>In view of the importance of the construction presented above, it is built into the TL language in the following manner. A substructure in the form of [ <em>array-field-name</em> ":" ] [ <em>nat-ident</em> "<em>" ] "[" </em>field-descr<em> ... "]” may be used in the declaration of any combinator, where </em>nat-ident* is the name of any previously encountered field of type # (if it is not explicitly indicated, the most recent is used). In abstract, this substructure is equivalent to:</p>
<pre><code>aux_type *field-descr* ... = AuxType;
*current_constructor* ... [ *array-field-name* ":" ] (%Tuple aux_type *nat-ident*)</code></pre>
<p>For example, 10x10 matrices, vectors, and arbitrary matrices may be defined in the following way:</p>
<pre><code>matrix {X:Type} m:# n:# a:n*[ m*[ X ] ] = Matrix X;
matrix_10x10 a:10*[ 10*[ double ]] = Matrix_10x10;
vector {X:Type} # [ X ] = Vector X;</code></pre>
<p>We have already encountered the last version as a “definition” of the “built-in type” <code>Vector</code>.</p>
<p>Of course, several fields, as complex as desired, may be within the repeating part. Furthermore, besides using <em>n</em> as a repeat counter, one may use expressions of the form <em>(n+const)</em> and <em>(const+n)</em>, where <em>const</em> is a small nonnegative constant, which are shorthand for <em>S (S ( ... (S n) ... ))</em>:</p>
<pre><code>repeat_np1 n:# a:(S n)*[ key:string value:string ] = Dictionary;</code></pre>
<p>To calculate the CRC32 these expressions are converted to expressions of the form <code>(const+X)</code> without internal spaces. Additionally, the <code>*</code> in this case is not set off by spaces on the left and right.</p>
<h2><a class="anchor" href="#serialization-of-dependent-types" id="serialization-of-dependent-types" name="serialization-of-dependent-types"><i class="anchor-icon"></i></a>Serialization of dependent types</h2>
<p>Serialization of dependent types and polymorphic types is not a fundamental challenge: we have combinators with non-zero arity with Type values. For example, the type <code>Tuple double 10 : Type</code> serializes to <code>'Tuple' '%double' 10</code>. Note that at present in practice there is virtually no need to serialize types, whether dependent or not.</p>
<h2><a class="anchor" href="#optional-combinator-parameters-in-tl" id="optional-combinator-parameters-in-tl" name="optional-combinator-parameters-in-tl"><i class="anchor-icon"></i></a>Optional combinator parameters in TL</h2>
<p>Optional combinator parameters in TL must possess the following properties:</p>
<ul>
<li>
<p>Optional parameters must be precisely ythe combinators first several arguments;</p>
</li>
<li>
<p>The value of any optional parameter must be entirely determined by the combinators result type.</p>
</li>
</ul>
<p>For example, in <code>cons {X:Type} hd:X tl:(list X) = list X</code> the parameter <code>X</code> may be made optional, because it is located at the very beginning of the argument list and is unambiguously determined by the <code>list X</code> result type. Similarly, in <code>tcons {X:Type} {n:#} hd:X tl:(%Tuple X n) = Tuple X (S n)</code> the values of X and n are completely determined based on the <code>Tuple X (S n)</code> result type, therefore they made be made optional parameters.</p>
<p>It usually makes sense to move all of a constructors arguments satisfying the second condition to the beginning of the list, arrange them in the order they appear in the result types parameters, and make them optional. Given such an approach, the full version of a constructor is rarely needed -- only when we want to transmit the value of the polymorphic or dependent type as a value of type Object. In all other cases, the type of the expected value from the context is already known, which means that all optional parameters can be recovered during decomposition.</p>
<p>See also <a href="/mtproto/TL-optargs">Optional combinator parameters and their values</a>.</p></div>
</div>
</div>
</div>
<div class="footer_wrap">
<div class="footer_columns_wrap footer_desktop">
<div class="footer_column footer_column_telegram">
<h5>Telegram</h5>
<div class="footer_telegram_description"></div>
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
</div>
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
<ul>
<li><a href="//telegram.org/faq">FAQ</a></li>
<li><a href="//telegram.org/blog">Blog</a></li>
<li><a href="//telegram.org/jobs">Jobs</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
<ul>
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
<li><a href="//telegram.org/dl/android">Android</a></li>
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
<ul>
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
<li><a href="//macos.telegram.org/">macOS</a></li>
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
</ul>
</div>
<div class="footer_column footer_column_platform">
<h5><a href="/">Platform</a></h5>
<ul>
<li><a href="/api">API</a></li>
<li><a href="//translations.telegram.org/">Translations</a></li>
<li><a href="//instantview.telegram.org/">Instant View</a></li>
</ul>
</div>
</div>
<div class="footer_columns_wrap footer_mobile">
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/blog">Blog</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps">Apps</a></h5>
</div>
<div class="footer_column">
<h5><a href="/">Platform</a></h5>
</div>
<div class="footer_column">
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
</div>
</div>
</div>
</div>
<script src="/js/main.js?42"></script>
<script>backToTopInit("Go up");
removePreloadInit();
</script>
</body>
</html>

View file

@ -0,0 +1,304 @@
<!DOCTYPE html>
<html class="">
<head>
<meta charset="utf-8">
<title>Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes and More</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes and More">
<meta property="og:image" content="https://telegram.org/file/464001523/2/n3XOa4Jx1qM.15250.png/4c275a004242e5ee80">
<meta property="og:site_name" content="Telegram">
<meta property="og:description" content="">
<meta property="article:published_time" content="2021-10-29T20:18:08+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/464001523/2/n3XOa4Jx1qM.15250.png/4c275a004242e5ee80" />
<meta property="fb:app_id" content="254098051407226">
<meta property="vk:app_id" content="3782569">
<meta name="apple-itunes-app" content="app-id=686449807">
<meta name="telegram:channel" content="@telegram">
<link rel="canonical" href="https://telegram.org/blog/shared-media-join-requests-and-more" />
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
<link href="/css/telegram.css?212" rel="stylesheet" media="screen">
<style>
</style>
</head>
<body class="preload">
<div id="fb-root"></div>
<div class="tl_page_wrap">
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
<div class="navbar-inner">
<div class="container clearfix">
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">Ozbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
<ul class="nav navbar-nav">
<li class=""><a href="/">Home</a></li>
<li class=""><a href="/faq">FAQ</a></li>
<li class=""><a href="/apps">Apps</a></li>
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
</ul>
</div>
</div>
</div>
<div class="container clearfix tl_page_container ">
<div class="tl_page">
<div class="tl_contest_page_wrap">
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
<div class="side_blog">
<a href="/blog" class="side_blog_header">Recent News</a>
<div class="side_blog_entries">
<a href="/blog/shared-media-join-requests-and-more" class="side_blog_entry">
<div class="side_blog_date">Oct 29</div>
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes and More</div>
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
<div class="side_blog_date">Sep 19</div>
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
<div class="side_blog_date">Aug 31</div>
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
</a><a href="/blog/video-1000" class="side_blog_entry">
<div class="side_blog_date">Jul 30</div>
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
</a><a href="/blog/group-video-calls" class="side_blog_entry">
<div class="side_blog_date">Jun 25</div>
<div class="side_blog_title">Group Video Calls</div>
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
<div class="side_blog_date">Jun 25</div>
<div class="side_blog_title"> Animated Backgrounds</div>
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
<div class="side_blog_date">Apr 26</div>
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
</a>
</div>
</div>
</div></div>
<div id="dev_page_content_wrap" class=" ">
<div class="dev_page_bread_crumbs"></div>
<h1 id="dev_page_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes and More</h1>
<div id="dev_page_content"><!--<div class="blog_side_image_wrap">
<picture class="dev_page_tgsticker blog_side_image js-tgsticker_image" style="width:160px;"><div style="padding-top:100%"></div><source type="application/x-tgsticker" srcset="/file/464001523/1/w-RLVIRC_uk.13374/1c1cac6caab829fe46"><img src="/file/464001523/2/n3XOa4Jx1qM.15250.png/4c275a004242e5ee80" /></picture>
</div>-->
<div class="blog_wide_image">
<a href="LARGE" target="_blank"><img src="SMALL" srcset="LARGE, 1200w" title="TITLE" alt="TITLE"/></a>
</div>
<p>Today&#39;s update brings new ways to find memories in shared media with <strong>accelerated scrolling</strong> and a <strong>calendar view</strong>, an <strong>admin approval</strong> setting for invite links, <strong>global chat themes</strong> for your entire app, and more.</p>
<h3><a class="anchor" name="hyper-speed-scrolling-and-calendar-view-for-shared-media" href="#hyper-speed-scrolling-and-calendar-view-for-shared-media"><i class="anchor-icon"></i></a>Hyper-Speed Scrolling and Calendar View for Shared Media</h3>
<p>Every Telegram user has unlimited cloud storage and each chat has a Shared Media page that shows all the photos, videos, files and music that have been sent there. We&#39;ve added a new <strong>date bar</strong> on the side of the page, which you can drag up and down to scroll through shared media faster. It&#39;s like your own personal DeLorean with 1.21 gigawatts of time-travel torque.</p>
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="PHOTO" style="max-width: 400px;" title="TITLE" alt="TITLE">
<source src="VIDEO" type="video/mp4">
</video>
</div>
<p>To get a better look, pinch to <strong>zoom in and out</strong>, so you can see anywhere from 2 big thumbnails to a dozen small squares per row.</p>
<h3><a class="anchor" name="calendar-view-for-shared-media" href="#calendar-view-for-shared-media"><i class="anchor-icon"></i></a>Calendar View for Shared Media</h3>
<p>To quickly find media from a specific time, tap on the date bar to open a <strong>calendar interface</strong> with media previews for each day then tap to see all the media from that date.</p>
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="PHOTO" style="max-width: 400px;" title="TITLE" alt="TITLE">
<source src="VIDEO" type="video/mp4">
</video>
</div>
<p>In addition to the new tools for jumping between past and present, you can <strong>filter shared media</strong> to show only photos, only videos, or both.</p>
<blockquote>
<p>To view shared media, simply tap the header at the top of your screen in any chat and scroll down. </p>
</blockquote>
<h3><a class="anchor" name="join-requests-for-groups-and-channels" href="#join-requests-for-groups-and-channels"><i class="anchor-icon"></i></a>Join Requests for Groups and Channels</h3>
<p>Invite links let you give users the opportunity to join your group or channel on their own time whether you share the link privately or turn it into a <a href="https://telegram.org/blog/autodelete-inv2#expiring-invite-links">QR code</a> on a billboard is up to you. When you create <strong>additional invite links</strong> for your chat, there is a now a <strong>Request Admin Approval</strong> setting, which gives admins more control over who is able to join and see the chat.</p>
<p>When a user opens a link with Admin Approval turned on, they will see a button to send a <strong>join request</strong> that admins can manage from a new bar at the top of the chat. From there, admins can view an applicant&#39;s public <strong>profile pictures</strong> and <strong>bio</strong>, then approve or dismiss their request.</p>
<blockquote>
<p>For example, you could post an invite link to your poetry channel on social media then approve only your close friends to see your writing.</p>
</blockquote>
<div class="blog_image_wrap blog_medium_image_wrap">
<a href="LARGE" target="_blank"><img src="SMALL" title="TITLE" alt="TITLE" srcset="LARGE , 2x" /></a>
</div>
<blockquote>
<p>Applicants can also be managed from the Chat&#39;s Profile &gt; Edit &gt; Member Requests. </p>
</blockquote>
<h3><a class="anchor" name="unique-names-for-invite-links" href="#unique-names-for-invite-links"><i class="anchor-icon"></i></a>Unique Names for Invite Links</h3>
<p>Admin Approval can be applied to <strong>any link</strong> in the &#39;Additional Invite Links&#39; section we&#39;ve also added the ability to give all of those links <strong>unique names</strong>, so you can label them for better organization.</p>
<div class="blog_image_wrap blog_medium_image_wrap">
<a href="LARGE" target="_blank"><img src="SMALL" title="TITLE" alt="TITLE" srcset="LARGE , 2x" /></a>
</div>
<h3><a class="anchor" name="global-chat-themes" href="#global-chat-themes"><i class="anchor-icon"></i></a>Global Chat Themes</h3>
<p>Our last update introduced <a href="https://telegram.org/blog/chat-themes-interactive-emoji-read-receipts#chat-themes">8 new themes</a> that you could set for individual chats and now they&#39;re available for your <strong>entire app</strong>. The Chat Settings <em>(Android)</em> and Appearance <em>(iOS)</em> pages have been <strong>fully redesigned</strong>, giving these themes center stage. Built by the Telegram Team, every theme has a <strong>Day</strong> and <strong>Night mode</strong>, colorful animated background and gradient message bubbles.</p>
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="PHOTO" style="max-width: 400px;" title="TITLE" alt="TITLE">
<source src="VIDEO" type="video/mp4">
</video>
</div>
<p>Like all themes, you can <strong>personalize</strong> these designs and tweak the colors or change the pattern. For more options and custom settings, tap Chat Themes to <strong>edit</strong> and <strong>share</strong> your creations.</p>
<p>• Apply one of 8 new preset themes to your entire app each theme has a Day and Night mode, colorful animated backgrounds and gradient message bubbles.<br>• Personalize these themes and find custom theme options in Appearance Settings &gt; Chat Themes.</p>
<h3><a class="anchor" name="transit-time-for-shared-locations-on-ios" href="#transit-time-for-shared-locations-on-ios"><i class="anchor-icon"></i></a>Transit Time for Shared Locations on iOS</h3>
<p>You can show where you are or where you&#39;re headed by sending a location from the attachment menu <img class="emoji" src="//telegram.org/img/emoji/40/F09F938E.png" width="20" height="20" alt="📎" /> in the message bar. Tapping a shared location pulls up a map of the area which now shows you the <strong>travel time</strong> to get there <strong>by foot</strong>, <strong>car</strong>, or <strong>public transport</strong>. To see <strong>detailed directions</strong> or get a taxi to their location, tap on the travel time to open the location in your preferred app.</p>
<div class="blog_image_wrap blog_medium_image_wrap">
<a href="LARGE" target="_blank"><img src="SMALL" title="TITLE" alt="TITLE" srcset="LARGE , 2x" /></a>
</div>
<blockquote>
<p>Transit times are shown for both static and live locations so you can see how long it will take to meet your friends while they&#39;re on the move.</p>
</blockquote>
<p>• Tap a user&#39;s shared Location or Live Location to see how long it will take you to reach them by foot, car or public transport.<br>• Tap on the travel time to open the location in another app. </p>
<h3><a class="anchor" name="instant-media-captions-for-ios" href="#instant-media-captions-for-ios"><i class="anchor-icon"></i></a>Instant Media Captions for iOS</h3>
<p>The text you type in the message bar now automatically <strong>converts to a caption</strong> when you attach media, so you&#39;ll never have to retype or cut and paste what you just wrote. This also works with <strong>Cloud Drafts</strong> so you can type out the message on your computer, then simply attach the photo from your phone and send it all together.</p>
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="PHOTO" style="max-width: 400px;" title="TITLE" alt="TITLE">
<source src="VIDEO" type="video/mp4">
</video>
</div>
<h3><a class="anchor" name="more-interactive-emoji" href="#more-interactive-emoji"><i class="anchor-icon"></i></a>More Interactive Emoji</h3>
<p>• Send one <img class="emoji" src="//telegram.org/img/emoji/40/F09F91BB.png" width="20" height="20" alt="👻" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09F918E.png" width="20" height="20" alt="👎" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09FA4AE.png" width="20" height="20" alt="🤮" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09F9882.png" width="20" height="20" alt="😂" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09F92B8.png" width="20" height="20" alt="💸" /> or <img class="emoji" src="//telegram.org/img/emoji/40/F09F8E83.png" width="20" height="20" alt="🎃" /> to any private chat, then tap on the animated emoji to launch a fullscreen effect.<br>• If your chat partner also has the chat open, you will both see the effects and feel the vibrations simultaneously.</p>
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="PHOTO" style="max-width: 400px;" title="TITLE" alt="TITLE">
<source src="VIDEO" type="video/mp4">
</video>
</div>
<blockquote>
<p>If your chat partner also has the chat open, you will both see the effects and feel the vibrations simultaneously.</p>
</blockquote>
<p>As you know from our previous update, this also works with <img class="emoji" src="//telegram.org/img/emoji/40/F09F8E86.png" width="20" height="20" alt="🎆" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09F8E89.png" width="20" height="20" alt="🎉" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09F8E88.png" width="20" height="20" alt="🎈" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09F918D.png" width="20" height="20" alt="👍" /> <img class="emoji" src="//telegram.org/img/emoji/40/F09F92A9.png" width="20" height="20" alt="💩" /> and <img class="emoji" src="//telegram.org/img/emoji/40/E29DA4.png" width="20" height="20" alt="❤️" />.</p>
<!--
###Video
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="PHOTO" style="max-width: 400px;" title="TITLE" alt="TITLE">
<source src="VIDEO" type="video/mp4">
</video>
</div>
###Image
<div class="blog_image_wrap blog_medium_image_wrap">
<a href="LARGE" target="_blank"><img src="SMALL" title="TITLE" alt="TITLE" srcset="LARGE , 2x" /></a>
</div>
-->
</div>
</div>
<div class="tl_main_share clearfix">
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fshared-media-join-requests-and-more&text=Hyper-Speed%20Scrolling%20and%20Calendar%20View%20for%20Shared%20Media%2C%20Join%20Requests%2C%20Global%20Chat%20Themes%20and%20More" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes and More" data-url="https://telegram.org/blog/shared-media-join-requests-and-more"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes and More" data-url="https://telegram.org/blog/shared-media-join-requests-and-more" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
</div>
</div>
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
<h3 class="tl_main_recent_news_header">
<a href="/blog">Other News</a>
</h3>
<div class="tl_main_recent_news_cards clearfix">
<a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
<div class="dev_blog_card_alltext_wrap">
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
<div class="dev_blog_card_lead">Today&#39;s update lets you set different themes for individual chats, share your feelings with…</div>
</div>
<div class="dev_blog_card_date">Sep 19, 2021</div>
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
<div class="dev_blog_card_alltext_wrap">
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
</div>
<div class="dev_blog_card_date">Aug 31, 2021</div>
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
<div class="dev_blog_card_alltext_wrap">
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
</div>
<div class="dev_blog_card_date">Jul 30, 2021</div>
</div></a><a class="dev_blog_card_link_wrap" href="/blog/group-video-calls"><div class="dev_blog_card_wrap">
<img class="dev_blog_card_image" src="https://telegram.org/file/464001231/2/Q0OFpRBNruI.71986/42d2a05bd0d1bd091b" />
<div class="dev_blog_card_alltext_wrap">
<h4 class="dev_blog_card_title">Group Video Calls</h4>
<div class="dev_blog_card_lead">Today&#39;s update lets you turn on your camera or share your screen during Voice Chats in groups on all devices, including tablets and desktops. This brings voice chats to a whole new…</div>
</div>
<div class="dev_blog_card_date">Jun 25, 2021</div>
</div></a>
</div>
</div>
</div>
</div>
</div>
<div class="footer_wrap">
<div class="footer_columns_wrap footer_desktop">
<div class="footer_column footer_column_telegram">
<h5>Telegram</h5>
<div class="footer_telegram_description"></div>
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
</div>
<div class="footer_column">
<h5><a href="/faq">About</a></h5>
<ul>
<li><a href="/faq">FAQ</a></li>
<li><a href="/blog">Blog</a></li>
<li><a href="/jobs">Jobs</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
<ul>
<li><a href="/dl/ios">iPhone/iPad</a></li>
<li><a href="/dl/android">Android</a></li>
<li><a href="/dl/wp">Windows Phone</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
<ul>
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
<li><a href="//macos.telegram.org/">macOS</a></li>
<li><a href="/dl/web">Web-browser</a></li>
</ul>
</div>
<div class="footer_column footer_column_platform">
<h5><a href="//core.telegram.org/">Platform</a></h5>
<ul>
<li><a href="//core.telegram.org/api">API</a></li>
<li><a href="//translations.telegram.org/">Translations</a></li>
<li><a href="//instantview.telegram.org/">Instant View</a></li>
</ul>
</div>
</div>
<div class="footer_columns_wrap footer_mobile">
<div class="footer_column">
<h5><a href="/faq">About</a></h5>
</div>
<div class="footer_column">
<h5><a href="/blog">Blog</a></h5>
</div>
<div class="footer_column">
<h5><a href="/apps">Apps</a></h5>
</div>
<div class="footer_column">
<h5><a href="//core.telegram.org/">Platform</a></h5>
</div>
<div class="footer_column">
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
</div>
</div>
</div>
<script src="/js/main.js?42"></script>
<script src="/js/tgsticker.js?24"></script>
<script>mainInitTgStickers({"maxDeviceRatio":2,"cachingModulo":4});
initScrollVideos(true);
twitterCustomShareInit();
blogSideImageInit();
backToTopInit("Go up");
removePreloadInit();
</script>
</body>
</html>