morny-book/command/user.md
2023-01-14 19:09:30 +08:00

4.6 KiB
Raw Blame History

/user

<userid> | reply_to

获取指定或回复的用户相关信息

/user 命令可以让你获取到一个用户的相关资料包括用户设定的姓名id用户所处的 telegram dc用户语言可能有等等。

使用

/user 命令可以接受以下的调用参数

  • /user 命令附加一个参数,参数为用户 id/user 返回的用户信息将是这个 id 的用户的信息。
    • username,而是纯数字的 id
    • 出于 api 限制,如果 Morny 没有见过这个用户,则只能返回 [Unavailable] user not found.
  • 使用 /user 命令时回复一个用户,则 /user 会返回被回复用户的信息。
    • 如果回复了一个用户,但也附加了一个用户 id 作为参数,则 /user 将会返回参数中指定的用户而非被回复的用户。
    • 如果回复的用户使用了以频道身份发言或者根本就是一个频道,则 /user 无法处理频道相关的信息,只会返回 $__channel_identify 作为替代信息。
  • 如果没有上面任何的指定,则 /user 将会返回发送者自己的信息。

如果 Morny 成功找到了用户,则将会回复给你一个消息,包含了 Morny 获取到的这个用户的部分信息。

userid :
- 793274677
username :
- Eyre_S
datacenter : cdn5
display name :
- さつき
- アンニエ
language-code :
- zh-hant

特别的注意事项

username

不是所有用户都有 username。没有的话这一部分将会不出现在回复当中。

display name

分为姓氏last name名字first name两个单独的字段。

Telegram 使用的是 名 - 姓 的排列方式而且并不给用户设定自己的姓名如何排列的,因此,Morny 的返回当中,两行的排列也是第一行,第二行

姓氏last name 是有可能为的。这时,Morny 返回中的第二行也将会不存在

关于 telegram dc 的获取

Morny 实现中,目前根据用户的 web 用户页面中用户上传的头像图片所在 cdn 来判断用户所处 dc

也就是说,Morny /user 想要得到用户dc 需要用户同时满足以下的需求

  • 用户有设置 用户名username 一个可以使用字母数字和下划线的需要用户设置的名号,这可以用于让其它用户通过 @username 来寻找和 @ 这个用户。这使得 Morny 能够通过 https://t.me/username 这样的用户 web 页面找到这个用户。
  • 用户有为自己上传并设置头像图片。这个上传的头像图片将成为 Morny 可以判断用户所处 dc 的依据。
    • 用户需要设置自己的头像所有人可见,只有这样,Monry 才能通过用户的 web 页面https://t.me/username获取到用户头像图片,才能通过头像图片判断用户 dc。

而同时,出于 API 限制,获取到的 telegram dc 并不一定准确还是能保证绝大部分可能99%的准确性的。具体可以参考别的 dalao 发送的文章《Telegram DC 之都市传说》这篇文章就懒了不赘述这些技术问题了。

language-code

Telegram Bot API 确实会返回一个 language-code 字段。虽然 Morny 开发者也其实并不知道这个字段是怎么得到的。

目前的猜测是Telegram 服务器将会根据用户的客户端使用/使用过的语言包当中所设置的基础语言来作为用户使用的语言记录下来,并返回给 bot提供 bot 可以自适应用户语言提供服务的支持。

这个字段有时候也会缺失。


你知道吗

  • 如果要向别人发送你自己的信息,你还可以使用 Morny 的另一个内联查询功能:Get My Information页面还没写,链接待补充。其输出格式与 /user 命令无异,使得你可以更方便的查询并发送自己的个人信息,甚至不需要你所在的群组/频道有 Morny 存在。

  • Morny 本来是想要使用 MTProto 方式来更加 native 也能够更加准确的获知用户所处 dc 的。而后,则最终因为 MTProto 的研究失败以及赶工,最终使用了 Web CDN 方式。

  • 编辑这个页面花费了 1:11 1小时11分钟