-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbasics.html
163 lines (140 loc) · 12.1 KB
/
basics.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<!DOCTYPE html>
<html class="writer-html5" lang="ru" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Основы — документация Tdproto docs </title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="shortcut icon" href="_static/favicon.svg"/>
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="genindex.html" />
<link rel="search" title="Поиск" href="search.html" />
<link rel="next" title="Как создать бота" href="bot_howto.html" />
<link rel="prev" title="Документация Tdproto" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
Tdproto docs
<img src="_static/logo.svg" class="logo" alt="Логотип"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Поиск в документации" aria-label="Поиск в документации" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Основы</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#jid">JID</a></li>
<li class="toctree-l2"><a class="reference internal" href="#is-archive-field">Поле <code class="docutils literal notranslate"><span class="pre">is_archive</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#can-fields">Поля <code class="docutils literal notranslate"><span class="pre">can_*</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#features-json"><code class="docutils literal notranslate"><span class="pre">/features.json</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="bot_howto.html">Как создать бота</a></li>
<li class="toctree-l1"><a class="reference internal" href="team_paths.html">Пути относящиеся к командам</a></li>
<li class="toctree-l1"><a class="reference internal" href="chat_paths.html">Пути относящиеся в чатам</a></li>
<li class="toctree-l1"><a class="reference internal" href="task_paths.html">Пути относящиеся к задачам</a></li>
<li class="toctree-l1"><a class="reference internal" href="group_paths.html">Пути относящиеся к группам</a></li>
<li class="toctree-l1"><a class="reference internal" href="misc_paths.html">Остальные пути</a></li>
<li class="toctree-l1"><a class="reference internal" href="websocket.html">Документация Websocket</a></li>
<li class="toctree-l1"><a class="reference internal" href="events.html">События клиента</a></li>
<li class="toctree-l1"><a class="reference internal" href="events.html#server-events">События сервера</a></li>
<li class="toctree-l1"><a class="reference internal" href="data_index.html">Индекс Enum</a></li>
<li class="toctree-l1"><a class="reference internal" href="data_index.html#type-aliases">Псевдонимы типов</a></li>
<li class="toctree-l1"><a class="reference internal" href="data_index.html#json-objects-index">Индекс JSON объектов</a></li>
<li class="toctree-l1"><a class="reference internal" href="data_index.html#http-queries">HTTP Queries</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Меню навигации для мобильных устройств" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Tdproto docs</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Основы</li>
<li class="wy-breadcrumbs-aside">
<a style="color:red;font-size:36px;" href="https://tada-team.github.io/tdproto-docs-en/basics">🇺🇸</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="basics">
<h1>Основы<a class="headerlink" href="#basics" title="Permalink to this heading"></a></h1>
<section id="jid">
<h2>JID<a class="headerlink" href="#jid" title="Permalink to this heading"></a></h2>
<p>Работа ведется в командах. Внутри команды есть контакты, задачи, групповые чаты. Контакт из одной команды не может просто так общаться с контактом из другой.</p>
<p>Каждый пользователь в команде имеет идентификатор вида <code class="docutils literal notranslate"><span class="pre">d-<UID></span></code> . По историческим причинам он называется <code class="docutils literal notranslate"><span class="pre">JID</span></code> .</p>
<p>В скольких командах состоит пользователь, столько у него и <code class="docutils literal notranslate"><span class="pre">JID</span></code> . Если пользователь состоит в 3 командах, у него 3 <code class="docutils literal notranslate"><span class="pre">JID</span></code> . Если пользователь новый, то <code class="docutils literal notranslate"><span class="pre">JID</span></code> у него еще нет.</p>
</section>
<section id="is-archive-field">
<h2>Поле <code class="docutils literal notranslate"><span class="pre">is_archive</span></code><a class="headerlink" href="#is-archive-field" title="Permalink to this heading"></a></h2>
<p>Из системы ничего не удаляется, просто выставляется флаг <code class="docutils literal notranslate"><span class="pre">is_archive</span></code> . Исключение: устройства.</p>
</section>
<section id="can-fields">
<h2>Поля <code class="docutils literal notranslate"><span class="pre">can_*</span></code><a class="headerlink" href="#can-fields" title="Permalink to this heading"></a></h2>
<p>Если известно, кто запрашивает объект, у него появляются дополнительные поля <code class="docutils literal notranslate"><span class="pre">can_ЧТО-НИБУДЬ</span></code> . Они означают, «могу ли я, <em>запрашивающий</em>, делать с этим объектом ЧТО-НИБУДЬ».</p>
<p>Примеры:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">{"can_send_message":</span> <span class="pre">false}</span></code> в своем профиле означает, что я НЕ могу послать себе сообщение.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">{"can_add_to_team":</span> <span class="pre">true}</span></code> в команде означает, что я МОГУ добавлять новых участников в команду (вероятно я администратор, а может владелец)</p></li>
</ul>
<p>В реальности этих полей в базе не существует — они вычисляются на лету.</p>
<p>Для чего это надо: чтобы логика была по-максимуму в одном месте.</p>
<p>Например, мы решаем, что теперь можно слать себе сообщения. Немного изменяем сервер, и если приложения проверяли не «это я себе пишу, или не себе пишу», а тупо смотрели на флаг <code class="docutils literal notranslate"><span class="pre">can_send_message</span></code> , то больше никаких изменений вносить не надо: оба мобильных клиента и веб-клиент сразу меняют свою логику.</p>
<p>Второй пример: мы можем когда-нибудь завести новую сущность «администратор с настраиваемыми правами». При использовании флагов <code class="docutils literal notranslate"><span class="pre">can_*</span></code> можно про это не думать: в старых приложениях ничего не сломается.</p>
</section>
<section id="features-json">
<h2><code class="docutils literal notranslate"><span class="pre">/features.json</span></code><a class="headerlink" href="#features-json" title="Permalink to this heading"></a></h2>
<p>В корне есть файл <code class="docutils literal notranslate"><span class="pre">features.json</span></code> с полями, которые зависят от инсталляции. На разных нодах могут быть включены разные возможности.</p>
<p>Файл не является частью API. У API может меняться версия, старые версии могут отключаться, меняться способ авторизации. А этот файл будет на этом месте всё время.</p>
<p>Также есть обёртка <code class="docutils literal notranslate"><span class="pre">features.js</span></code> . Достаточно включить её как скрипт, и она создаст window.FEATURES.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Нижняя область">
<a href="index.html" class="btn btn-neutral float-left" title="Документация Tdproto" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Предыдущая</a>
<a href="bot_howto.html" class="btn btn-neutral float-right" title="Как создать бота" accesskey="n" rel="next">Следующая <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<li><a href="https://github.com/tada-team/tdproto-sphinx/">Project Homepage</a> »</li>
<p>© Copyright .</p>
</div>
Собрано при помощи <a href="https://www.sphinx-doc.org/">Sphinx</a> с использованием
<a href="https://github.com/readthedocs/sphinx_rtd_theme">темы,</a>
предоставленной <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>