You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改Telethon脚本实现读取指定频道内全部消息

解决Telethon只能读取自身/提及消息的问题

你的问题核心在于使用bot token登录Telethon——Telegram的官方bot账号在频道中默认只能接收@它的消息、命令消息,或是自己发送的内容,无法直接获取频道内所有普通消息。要实现读取频道全部消息,有两种可行方案:

方案一:使用用户账号会话登录(推荐)

这种方式只要你的个人账号是目标频道的成员(无需管理员权限),就能获取所有消息。步骤如下:

  1. 移除代码中的bot_token,改用用户账号登录:
from telethon import TelegramClient, events

api_id = 242...  # 替换为你的api_id
api_hash = '8a06ca620417c9964a058e0dc...'  # 替换为你的api_hash
channelId = -36744...  # 目标频道ID

# 初始化客户端,'user_session'是会话文件名称,首次运行会提示输入手机号和验证码
client = TelegramClient('user_session', api_id, api_hash)

@client.on(events.NewMessage(chats=[channelId]))
async def my_event_handler(event):
    # 现在可以获取所有频道消息了
    print(f"消息内容: {event.text}")
    print(f"发送者: {await event.get_sender()}")  # 可选:获取发送者信息

async def main():
    await client.start()  # 首次运行会引导你完成登录
    await client.run_until_disconnected()

if __name__ == '__main__':
    import asyncio
    asyncio.run(main())
  1. 首次运行脚本时,Telethon会提示你输入手机号和Telegram收到的验证码,完成后会生成一个user_session.session文件,后续运行无需重复验证。

方案二:将Bot设置为频道管理员(限可管理的频道)

如果必须使用bot账号,需要把bot添加为目标频道的管理员,并开启**"读取消息"**权限:

  • 打开频道设置 → 管理员 → 添加你的bot
  • 给bot勾选"读取消息"(以及你需要的其他权限)
  • 修改代码保持bot登录,但确保频道权限正确:
from telethon import TelegramClient, events

api_id = 242...
api_hash = '8a06ca620417c9964a058e0dc...'
bot_token = '1474729480:AAEhUPmVX_m...'
channelId = -36744...

client = TelegramClient('bot', api_id, api_hash).start(bot_token=bot_token)

@client.on(events.NewMessage(chats=[channelId]))
async def my_event_handler(event):
    text = event.text
    print(text)

client.run_until_disconnected()

注意:这种方式依赖频道管理员权限,部分公共频道可能不允许添加bot为管理员,因此方案一更通用。

额外提示

  • 确保你的api_id和api_hash是从Telegram开发者平台正确获取的,不要泄露给他人。
  • 如果需要读取历史消息(不是实时新消息),可以使用client.get_messages(channelId, limit=100)方法批量获取历史内容。

内容的提问来源于stack exchange,提问作者fbathrrr

火山引擎 最新活动