You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实时Telegram消息存储开发求助:无法捕获指定群组/频道消息

解决Telegram消息捕获无输出问题及私有频道处理方案

修正后的可运行代码

import asyncio
from telethon import TelegramClient, events
from datetime import datetime

# 替换为你从my.telegram.org获取的真实API信息
api_id = 226671  # 注意这里必须是整数,不能用字符串
api_hash = '7610eaa49ddtyr546dcfa47d7f46434'
# 目标频道标识:可以是公开频道username、私有频道ID或邀请链接
channel_identifier = 'FOREXSIGNALXAUUSDONE'

client = TelegramClient('session_1', api_id, api_hash)

@client.on(events.NewMessage(chats=channel_identifier))
async def handle_new_message(event):
    # 格式化消息时间并打印具体内容,方便验证
    message_time = datetime.fromtimestamp(event.date.timestamp()).strftime('%Y-%m-%d %H:%M:%S')
    print(f"[{message_time}] 收到消息: {event.message.text}")
    
    # 如需存储消息,可在此处写入文件或数据库
    # 示例:写入本地文本文件
    # with open('telegram_messages.txt', 'a', encoding='utf-8') as f:
    #     f.write(f"[{message_time}] {event.message.text}\n\n")

async def main():
    # 首次运行会提示输入手机号和验证码完成登录
    await client.start()
    print("客户端已启动,开始监听目标频道消息...")
    await client.run_until_disconnected()

if __name__ == "__main__":
    asyncio.run(main())

原代码的问题点

  • api_id被写成字符串类型,Telethon要求该参数为整数
  • 直接打印整个event对象,输出内容冗余且不易观察有效信息,改为打印消息文本更直观
  • 未规范使用异步入口,用asyncio.run()包裹主逻辑能确保事件循环正确初始化
  • 首次启动未明确处理登录验证流程,修正后的代码会引导你完成手机号+验证码的登录

私有频道消息捕获方法

私有频道没有公开的username,必须满足两个前提:你的Telegram账号是该频道的成员,且获取到频道的唯一标识(ID)。

1. 获取私有频道ID

运行以下代码获取频道信息(替换邀请链接为目标私有频道的真实链接):

import asyncio
from telethon import TelegramClient

api_id = 226671
api_hash = '7610eaa49ddtyr546dcfa47d7f46434'
client = TelegramClient('session_get_id', api_id, api_hash)

async def get_private_channel_info():
    await client.start()
    # 替换为私有频道的邀请链接或你已知的标识
    channel = await client.get_entity('https://t.me/joinchat/xxxxxxxxx')
    print(f"私有频道ID: {channel.id}")
    print(f"频道Access Hash: {channel.access_hash}")

asyncio.run(get_private_channel_info())

2. 调整监听代码

将channel_identifier替换为获取到的私有频道ID(整数类型),例如:

channel_identifier = -1001234567890  # 替换为你的私有频道ID

3. 注意事项

  • 保留生成的session文件(如session_1.session),文件存储了登录状态和频道权限,删除后需重新验证频道访问权限
  • 确保你的账号未被踢出私有频道,否则会失去消息监听权限

调试检查项

  1. 确认API ID和Hash与my.telegram.org上的信息完全一致
  2. 首次运行代码时,按提示完成手机号和验证码的登录流程
  3. 手动在目标频道发送测试消息,验证是否能触发打印输出
  4. 若仍无输出,可先运行client.get_entity(channel_identifier)确认是否成功获取到频道实体

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:13:15