有没有办法在不向其发送消息的情况下找到电报频道ID?
现在我走这条路找到频道ID 通过在我的代码中调用此URL并获得结果为JSON:
https://api.telegram.org/bot???????/sendMessage?chat_id=@?????&text=123
但是这会导致发送消息" 123"到了不好的渠道。
谢谢大家
答案 0 :(得分:5)
检查this link以获得帮助。
它正在使用网络电报网址参数信息。
从引用的链接中添加详细信息:
如果是公共频道,则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)
编写以下代码并运行:
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,这应该是有效的!
答案 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