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

Telethon技术问题:如何将频道中的消息标记为未读?

如何在Telethon中将个人频道的转发消息标记为未读

由于同一账号下发送的消息默认会被标记为已读,要实现转发后标记为未读,可以通过Telethon提供的mark_unread方法直接调用Telegram API修改消息状态,具体步骤如下:

核心方法:使用mark_unread标记未读

Telethon的Client类内置了mark_unread方法,可指定聊天对象和消息范围来设置未读状态。

基础用法示例

from telethon import TelegramClient

# 替换为你的API信息和会话名称
api_id = 123456
api_hash = 'your_api_hash_here'
client = TelegramClient('my_session', api_id, api_hash)

async def mark_my_channel_unread(channel_id, target_msg_id=None):
    async with client:
        # 获取个人频道的实体对象
        my_channel = await client.get_entity(channel_id)
        # 标记指定消息(及之前所有消息)为未读;若不填target_msg_id则标记整个频道为未读
        await client.mark_unread(
            entity=my_channel,
            unread=True,
            max_id=target_msg_id
        )

# 调用函数:假设个人频道ID为-1001234567890
client.loop.run_until_complete(mark_my_channel_unread(-1001234567890))

结合转发流程的实时标记

如果要在转发完成后立即将新消息标记为未读,可以把标记逻辑嵌入转发函数:

async def forward_and_mark_unread(source_channel_id, my_channel_id):
    async with client:
        # 从源频道获取最新一条消息(可根据需求调整limit数量)
        source_msgs = await client.get_messages(source_channel_id, limit=1)
        if source_msgs:
            # 转发消息到个人频道
            forwarded_msg = await client.forward_messages(my_channel_id, source_msgs[0])
            # 标记这条刚转发的消息为未读
            await client.mark_unread(
                entity=my_channel_id,
                unread=True,
                max_id=forwarded_msg.id
            )

# 调用转发并标记函数
client.loop.run_until_complete(forward_and_mark_unread(-1009876543210, -1001234567890))

注意事项

  • 确保你拥有目标个人频道的管理权限(自己创建的频道默认满足)。
  • max_id参数用于指定未读状态的截止消息ID,设置后该ID及之前的所有消息都会被标记为未读;若省略此参数,整个频道的消息都会被设为未读。
  • 该操作通过Telegram API执行,状态会同步到同一账号登录的所有设备。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:45:12