Python读取Telegram群组消息失败:实体查找错误求助
问题:Telethon无法识别"Into the Cryptoverse"群组
尝试使用Telethon监听名为"Into the Cryptoverse"的Telegram群组新消息,代码如下:
from telethon import TelegramClient, events, sync # Remember to use your own values from my.telegram.org! api_id = "MY_API_ID" api_hash = "MY_API_HASH" client = TelegramClient('anon', api_id, api_hash) @client.on(events.NewMessage(chats='Into The Cryptoverse')) async def my_event_handler(event): print(event.raw_text) client.start() client.run_until_disconnected()
错误1:无法找到对应实体
运行程序后收到错误:
> Task exception was never retrieved future: <Task finished name='Task-57' coro=<UpdateMethods._dispatch_update() done, defined at C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\updates.py:471> exception=ValueError('Cannot find any entity corresponding to "Into The Cryptoverse"')> Traceback (most recent call last): File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\updates.py", line 511, in _dispatch_update await builder.resolve(self) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\common.py", line 99, in resolve await self._resolve(client) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\newmessage.py", line 93, in _resolve await super()._resolve(client) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\common.py", line 103, in _resolve self.chats = await _into_id_set(client, self.chats) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\common.py", line 33, in _into_id_set chat = await client.get_input_entity(chat) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\users.py", line 437, in get_input_entity await self._get_entity_from_string(peer)) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\users.py", line 574, in _get_entity_from_string raise ValueError( ValueError: Cannot find any entity corresponding to "Into The Cryptoverse" Process finished with exit code 0
错误2:用户名无效
尝试将群组名改为"Into_The_Cryptoverse"后,收到新错误:
> Task exception was never retrieved future: <Task finished name='Task-37' coro=<UpdateMethods._dispatch_update() done, defined at C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\updates.py:471> exception=UsernameInvalidError('Nobody is using this username, or the username is unacceptable. If the latter, it must match r"[a-zA-Z][\\w\\d]{3,30}[a-zA-Z\\d]" (caused by ResolveUsernameRequest)')> Traceback (most recent call last): File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\updates.py", line 511, in _dispatch_update await builder.resolve(self) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\common.py", line 99, in resolve await self._resolve(client) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\newmessage.py", line 93, in _resolve await super()._resolve(client) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\common.py", line 103, in _resolve self.chats = await _into_id_set(client, self.chats) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\events\common.py", line 33, in _into_id_set chat = await client.get_input_entity(chat) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\users.py", line 437, in get_input_entity await self._get_entity_from_string(peer)) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\users.py", line 553, in _get_entity_from_string result = await self( File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\users.py", line 30, in __call__ return await self._call(self._sender, request, ordered=ordered) File "C:\Users\balatka.da\PycharmProjects\pythonProject\venv\lib\site-packages\telethon\client\users.py", line 84, in _call result = await future telethon.errors.rpcerrorlist.UsernameInvalidError: Nobody is using this username, or the username is unacceptable. If the latter, it must match r"[a-zA-Z][\w\d]{3,30}[a-zA-Z\d]" (caused by ResolveUsernameRequest)
解决方案
- 确认账号权限与群组可见性:确保你的Telegram账号已加入目标群组,且群组不是私密/隐藏类型(私密群组无法通过名称直接搜索定位)。
- 使用群组ID或邀请链接替代名称:通过名称匹配群组容易出现误差,更可靠的方式是使用群组数字ID或邀请链接:
- 先运行以下代码获取群组实体信息:
提示:若名称获取失败,可在Telegram客户端的群组设置中找到邀请链接,提取链接中的后缀部分(例如from telethon import TelegramClient api_id = "你的API_ID" api_hash = "你的API_HASH" client = TelegramClient('anon', api_id, api_hash) async def get_group_info(): # 可填入群组名称、邀请链接后缀(如t.me/xxxx中的xxxx)或完整邀请链接 try: group = await client.get_entity('Into The Cryptoverse') print(f"群组ID: {group.id}") print(f"群组Access Hash: {group.access_hash}") except ValueError: # 若名称获取失败,改用邀请链接后缀 group = await client.get_entity('这里填邀请链接的后缀') print(f"群组ID: {group.id}") print(f"群组Access Hash: {group.access_hash}") with client: client.loop.run_until_complete(get_group_info())https://t.me/IntoTheCryptoverse中的IntoTheCryptoverse)填入代码。 - 拿到群组ID后,修改监听代码:
from telethon import TelegramClient, events, sync api_id = "你的API_ID" api_hash = "你的API_HASH" client = TelegramClient('anon', api_id, api_hash) # 替换成你获取到的群组ID TARGET_GROUP_ID = 123456789 @client.on(events.NewMessage(chats=TARGET_GROUP_ID)) async def my_event_handler(event): print(event.raw_text) client.start() client.run_until_disconnected()
- 先运行以下代码获取群组实体信息:
- 严格匹配群组名称:如果坚持使用名称,必须确保完全匹配群组的真实名称(大小写、空格都不能修改),不要自行替换空格为下划线。
内容的提问来源于stack exchange,提问作者f22daniel
相关产品推荐
相关产品推荐

