morny-book/command/user.md

81 lines
4.6 KiB
Markdown
Raw Normal View History

2023-01-14 19:09:30 +08:00
# /user
<small>`<userid>` | *<u>reply_to</u>*</small>
> 获取指定或回复的用户相关信息
**`/user`** 命令可以让你获取到一个用户的相关资料包括用户设定的姓名id用户所处的 telegram dc用户语言<small>可能有</small>等等。
## 使用
**`/user`** 命令可以接受以下的调用**参数**
-**`/user`** 命令附加一个**参数**,参数为**用户 id**。**`/user`** 返回的用户信息将是这个 id 的用户的信息。
- **不**是 **username**,而是纯数字的 **id**
- 出于 api 限制,如果 **Morny** 没有见过这个用户,则只能返回 `[Unavailable] user not found.`
- 使用 **`/user`** 命令时**回复**一个用户,则 **`/user`** 会返回**被回复用户**的信息。
- 如果回复了一个用户,但也附加了一个用户 id 作为参数,则 **`/user`** 将会返回参数中指定的用户而非被回复的用户。
- 如果回复的用户使用了***以频道身份发言***或者根本就是一个**频道**,则 **`/user`** 无法处理频道相关的信息,只会返回 `$__channel_identify` 作为替代信息。
- 如果**没有**上面**任何**的指定,则 **`/user`** 将会返回**你<small>发送者</small>自己**的信息。
如果 **Morny** 成功找到了用户,则将会回复给你一个消息,包含了 **Morny** 获取到的这个用户的<small>~~部分~~</small>信息。
```text
userid :
- 793274677
username :
- Eyre_S
datacenter : cdn5
display name :
- さつき
- アンニエ
language-code :
- zh-hant
```
## 特别的注意事项
### username
不是所有用户都有 username。没有的话这一部分将会不出现在回复当中。
### display name
分为<b><ruby>姓氏<rt>last name</rt></ruby></b><b><ruby>名字<rt>first name</rt></ruby></b>两个单独的字段。
**Telegram** 使用的是 **名 - 姓** 的排列方式<small>而且并不给用户设定自己的姓名如何排列的</small>,因此,**Morny** 的返回当中,两行的排列也是第一行**名**,第二行**姓**。
<b><ruby>姓氏<rt>last name</rt></ruby></b> 是有可能为**空**的。这时,**Morny** 返回中的**第二行**也将会**不存在**。
### 关于 telegram dc 的获取
[《Telegram DC 之都市传说》]: https://dev.moe/2564
**Morny** 实现中,目前根据用户的 **web 用户页面**中用户上传的**头像图片**所在 **cdn** 来判断用户所处 **dc**
也就是说,**Morny** **`/user`** 想要得到**用户**的 **dc** 需要用户同时满足以下的**需求**
- 用户有**设置 <ruby>用户名<rt>username</rt></ruby>** <small>一个可以使用字母数字和下划线的需要用户设置的名号,这可以用于让其它用户通过 `@username` 来寻找和 @ 这个用户</small>。这使得 **Morny** 能够通过 `https://t.me/username` 这样的用户 web 页面找到这个用户。
- 用户有为自己上传并**设置头像图片**。这个上传的头像图片将成为 **Morny** 可以判断用户所处 dc 的依据。
- 用户需要**设置**自己的**头像**为**所有人可见**,只有这样,**Monry** 才能通过用户的 web 页面<small>`https://t.me/username`</small>获取到用户头像图片,才能通过头像图片判断用户 dc。
而同时,出于 API 限制,获取到的 telegram dc 并不一定准确<small>还是能保证绝大部分可能99%的准确性的</small>。具体可以参考别的 dalao 发送的文章[《Telegram DC 之都市传说》]。<small>这篇文章就懒了不赘述这些技术问题了。</small>
### language-code
Telegram Bot API 确实会返回一个 language-code 字段。虽然 Morny 开发者也其实并不知道这个字段是怎么得到的。
目前的猜测是Telegram 服务器将会根据用户的客户端使用/使用过的语言包当中所设置的基础语言来作为用户使用的语言记录下来,并返回给 bot提供 bot 可以自适应用户语言提供服务的支持。
这个字段有时候也会缺失。
---
## 你知道吗
- 如果要向别人发送你自己的信息,你还可以使用 **Morny** 的另一个内联查询功能:*Get My Information*<small>页面还没写,链接待补充</small>。其输出格式与 **`/user`** 命令无异,使得你可以更方便的查询并发送自己的个人信息,甚至不需要你所在的群组/频道有 Morny 存在。
- **Morny** 本来是想要使用 MTProto 方式来更加 native 也能够更加准确的获知用户所处 dc 的。而后,则最终因为 MTProto 的研究失败以及赶工,最终使用了 Web CDN 方式。
- 编辑这个页面花费了 **1:11** <small>1小时11分钟</small>