电报API(不是Bot!):如何通过链接获取聊天/频道ID?

时间:2017-08-20 16:02:28

标签: c# api telegram

我正在C#上使用库TLSharp并编写Telegram客户端,有时候我卡住了。

我有一个指向聊天/频道的链接,例如https://t.me/joinchat/some-string,我希望获得有关聊天/频道的信息或加入它。但你只能使用chat_id这样做,我不知道该怎么做。

首先,我考虑了contacts.resolveUsername并从链接传递“some-string”。但它不起作用,说用户名无效。

有没有办法获得团体的身份证?它是否有意使得获取有关群组的信息变得如此复杂?

由于

2 个答案:

答案 0 :(得分:0)

好吧,我找到了解决方案(部分,见末尾)。我正在使用this架构,让你知道。

  1. 首先,我们需要发送RPC messages.checkChatInvite ,并将参数 hash 设置为链接的最后一部分(在我的情况下为“some-string”) )。

  2. TLChatInvite 类型的回复到达。它将包含有关该组的主要信息:它的类型(聊天或频道?),参与者数量,如果幸运的话,他们自己也是Vector。

  3. (以下这点是我的问题)

    1. 使用相同的参数哈希调用RPC messages.importChatInvite 。它返回 TLUpdates TLUpdatesCombined 对象,它将包含 TLChat 对象的向量。我们将需要使用第一个(不要忘记检查向量是否空虚,以防万一)。
    2. 但是, messages.importChatInvite 将使当前用户加入该组。如何在没有加入它的情况下获取组的ID我还没有得到任何线索。虽然,这件事适合我的客户。

      坦率地说,我很失望,因为这么琐碎的事情花了那么多时间。

答案 1 :(得分:0)

  1. 获取频道链接
  2. 安装python库telethon
  3. 通过here获取您的api_id和api_hash。
  4. 编写以下代码并运行:

    from telethon import TelegramClient
    api_id=
    api_hash=
    channel_link = 'your_channel_link'
    client = TelegramClient(session_name, api_id, api_hash,
                            update_workers=4, spawn_read_thread=False)
    client.start()
    entity = client.get_input_entity(channel_link )
    print(entity.channel_id)
    
  5. 顺便说一句,如果你将它用于电报机器人,只需在打印的id之前和-100,这应该是有效的!

    如果您想知道如何编码,可以查看所有的远程源代码。