【问题标题】:How to get a Telegram Channel Id without sending a message to it如何在不向其发送消息的情况下获取电报频道 ID
【发布时间】:2017-06-01 03:18:30
【问题描述】:

有什么方法可以在不发送消息的情况下找到电报频道 ID 吗?

现在我走这条路,通过在我的代码中调用此 URL 来查找频道 ID,并获取 JSON 作为结果: https://api.telegram.org/bot???????/sendMessage?chat_id=@?????&text=123

但是,这导致将消息“123”发送到不好的频道。

【问题讨论】:

标签: telegram telegram-bot


【解决方案1】:

修复@scruel 的答案:

In [1]: api_id = ...                                                                                                                                  

In [2]: api_hash = '...'                                                                                                     

In [3]: channelLink = 'https://t.me/BTCST_Community_EN'                                                                                                   

In [4]: from telethon import TelegramClient, events                                                                                                       

In [5]: client = TelegramClient('test', api_id, api_hash)                                                                                                 

In [6]: client.start()                                                                                                                                    
Out[6]: <telethon.client.telegramclient.TelegramClient at 0x7fc90c352290>

In [7]: entity = await client.get_entity(channelLink)                                                                                                     

In [8]: channelId = '-100' + str(entity.id)                                                                                                               

In [9]: channelId                                                                                                                                        
Out[9]: '-1001236496320'

这里有一个 CLI 工具可以做到这一点:

#!env/bin/python

import sys
import asyncio

from telethon import TelegramClient

import config

async def channel_id_from_link(client, channel_link):
    return "-100" + str((await client.get_entity(channel_link)).id)

async def main(channel_link):
    async with TelegramClient(
        "test", config.api_id, config.api_hash
    ) as client:
        channel_id = await channel_id_from_link(client, channel_link)

    return channel_id

if __name__ == "__main__":
    channel_link = sys.argv[1]
    channel_id = asyncio.run(main(channel_link))
    print(channel_id)

测试:

> ./TelegramChannelId.py https://t.me/binance_api_english
-1001134190352

【讨论】:

    【解决方案2】:
    1. 获取您的频道链接

    2. 安装python库telethon

    3. 获取您的 api_id 和 api_hash here

    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)
      

    顺便说一句,如果你将它用于电报机器人,只需在打印的 id 前添加 -100,这应该可以工作!

    【讨论】:

    • 我收到AttributeError: 'coroutine' object has no attribute 'channel_id'
    【解决方案3】:

    查看this link 寻求帮助。
    它正在使用网络电报 url 参数信息。

    从参考链接添加详细信息:

    1. 登录web telegram
    2. 点击目标频道,您将在浏览器中找到显示的网址。

    如果是公共频道,ID是频道的@name。

    如果是私人频道,则网址必须类似于:
    https://web.telegram.org/#/im?p=c1018013852_555990343349619165
    在这种情况下,频道 ID 为 1018013852。
    请务必了解频道 ID 始终为负数且长度为 13 个字符!
    所以添加 -100,得到正确的 ID -1001018013852。

    【讨论】:

      【解决方案4】:

      不需要获得Channels ID。
      使用Channel User 简单发送消息喜欢:@channel

      【讨论】:

      • 如果没有Channel ID,很多事情都无法完成。例如,如果您想第一次使用 Telegram Robot 向您的频道发送消息。此外,私人频道没有用户名。
      【解决方案5】:

      您可以使用 Web Telegram 在资源管理器中查看该页面链接中的每个频道 ID

      只需将您频道中的消息转发到此机器人:(https://telegram.me/getidsbot)

      【讨论】:

      【解决方案6】:

      是的,只需将频道消息转发给您的机器人并获取message.forward_from_chat.id

      【讨论】:

        猜你喜欢
        • 2021-07-01
        • 2021-06-11
        • 2021-11-23
        • 1970-01-01
        • 2016-05-03
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 2016-09-08
        相关资源
        最近更新 更多