如何获取Telegram Channel Id而不向其发送消息

时间:2017-01-17 06:55:43

标签: telegram telegram-bot

有没有办法在不向其发送消息的情况下找到电报频道ID?

现在我走这条路找到频道ID 通过在我的代码中调用此URL并获得结果为JSON:

https://api.telegram.org/bot???????/sendMessage?chat_id=@?????&text=123

但是这会导致发送消息" 123"到了不好的渠道。

谢谢大家

6 个答案:

答案 0 :(得分:5)

检查this link以获得帮助。
它正在使用网络电报网址参数信息。

从引用的链接中添加详细信息:

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

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

如果是私人频道,则网址必须类似于:
class CAbstrInstruction { /* ... */ virtual void execute() const = 0; } class CSleepInstruction { /* ... */ void execute() override const { /* your code here */ } } /* ... */ void CScriptWorker::execute (const CAbstrInstruction *pI) { pI->execute(); }
在这种情况下,频道ID为1018013852。
重要的是要知道频道的ID始终为负且长度为13个字符! 因此,请在其中添加-100,并为其指定正确的ID -1001018013852。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用网络电报查看资源管理器中该页面链接中的每个频道ID 或

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

答案 3 :(得分:0)

不需要获取Channels ID 简单发送带有Channel User的消息,如:@channel

答案 4 :(得分: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,这应该是有效的!

答案 5 :(得分:0)

修正@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