机器人 API 对话 ID

对等id字段»(即用户、聊天、频道、秘密聊天)包含四个不同的唯一 64 位 ID 序列,用于识别特定用户、聊天、频道或秘密聊天。

用户、聊天、频道和秘密聊天的 ID 序列存在重叠,因此最好按照以下规定将对等 ID 转换为机器人 API 对话 ID。

机器人 API 对话 ID 是一个唯一的 64 位对等 ID 序列,它由用户 ID、聊天 ID、频道 ID 和秘密聊天 ID 序列派生而来,确保所有 ID 序列的唯一性。
机器人 API 对话 ID 已在机器人 API和底层tdlib库中用于识别对等节点。

如上所述,机器人 API 对话 ID 的有效位数可能超过 32 位,某些编程语言在解析此类 ID 时可能会遇到困难或出现隐性缺陷。但是,由于底层 MTProto ID 的范围(如下所述),其有效位数最多为 52 位,因此可以使用 64 位整数甚至双精度浮点数类型来安全地存储此标识符。

更具体地说,机器人 API 对话 ID 的范围从-4000000000000到1099511627775。

即使您决定使用单独的数据库来存储有关对等方的信息,将对等方 ID 转换为机器人对话 API ID 也是一个好主意,因为这将使 ID 对您和您的用户来说更具视觉识别性,并保证与机器人 API 的兼容性,并且由于下面指定的范围检查,您的客户端只需使用其 ID 即可轻松识别对等方的类型。

示例实现:tdlib(机器人 API),MadelineProto。

用户ID

MTProto API 中的用户1ID 范围从到0xffffffffff(包含)。

MTProto 用户 ID 与 bot API 用户对话 ID 相等,反之亦然,您无需对它们进行任何转换,只需验证它们是否在上述指定的范围内即可。

$botApiUserId = $userId;$userId = $botApiUserId;

聊天 ID

MTProto API 中的聊天1ID 范围从到999999999999(包含)。

要将 MTProto 聊天 ID 转换为机器人 API 聊天对话 ID,请将其设为负数(反之亦然)。

转换之前,务必验证它们是否在上述指定的范围内(反之亦然,机器人 API 聊天对话 ID 的转换范围为包含-999999999999到-1)。

$botApiChatId = -$chatId;$chatId = -$botApiChatId;

超级群组/频道 ID

MTProto API 中的超级组/通道ID 共享相同的序列,其范围从1到997852516352(包含 )。

要将 MTProto 通道 ID 转换为机器人 API 通道对话 ID,请添加1000000000000并将其设为负数(反之亦然)。

转换之前,务必验证它们是否属于上述指定的范围(反之亦然,机器人 API 通道对话 ID 的转换范围为包含-1997852516352到-1000000000001)。

$botApiChannelId = -(1000000000000 + $channelId);$channelId = -$botApiChannelId - 1000000000000;

注意:上述范围不适用于monoforums »,monoforums 是一种特殊的论坛,用于直接频道消息,由设置了标志的频道构造器表示monoforum:请参阅此处 »了解 monoforums 使用的范围。

Monoforum IDs

Monoforums »是一种特殊的论坛,用于直接频道消息,由设置了标志的频道构造器表示monoforum。

单体论坛的 MTProto ID 范围从1002147483649到3000000000000。

要将 MTProto 单论坛 ID 转换为机器人 API 单论坛 ID,请添加并将其设为负数(反之亦然):此过程与超级组/频道 ID1000000000000相同,唯一的区别是源 MTProto 范围。

转换之前,务必验证它们是否落在上述指定的范围内(反之亦然,机器人 API 单体论坛对话 ID 的转换范围为包含-2002147483649到-4000000000000)。

$botApiMonoForumId = -(1000000000000 + $monoForumId);$monoForumId = -$botApiMonoForumId - 1000000000000;

秘密聊天ID

MTProto API 中的秘密聊天 ID-2147483648范围从1 到 22147483647(包含 1 和 2),将秘密聊天 ID 视为有符号小端 32 位整数。

要将 MTProto 聊天 ID 转换为机器人 API 聊天密钥 ID,请减去2000000000000。

转换之前,务必验证它们是否在上述指定的范围内(反之亦然,机器人 API 秘密聊天对话 ID 的转换范围为包含-2002147483648到-1997852516353)。

$botApiSecretChatId = $secretChatId - 2000000000000;$secretChatId = $botApiSecretChatId + 2000000000000;

注意:虽然机器人 API 的官方实例不支持秘密聊天,但底层tdlib库支持秘密聊天,并使用上面提到的格式作为秘密聊天 ID。