aiogram 中的 MessageOriginChat 类型详解:掌握“以聊天名义转发“的消息来源机制
后端即时通讯API设计【免费下载链接】aiogramaiogram is a modern and fully asynchronous framework for Telegram Bot API written in Python using asyncio项目地址https://gitcode.com/gh_mirrors/ai/aiogram点击查看免费下载导读本文围绕 aiogram 的 API 参考文档 message_origin_chat.rst 所对应的核心类型MessageOriginChat讲解其字段结构、判别机制与实战用法。Telegram 消息转发场景中当一条消息最初是以某个群组聊天的名义发出例如匿名管理员发言并被转发到其他群聊时aiogram 就会在消息的forward_origin字段中给出MessageOriginChat对象。读完本文你将掌握如何判断转发来源、读取发送方聊天与作者签名并理解它与MessageOriginUser、MessageOriginChannel等兄弟类型的差异。一、MessageOriginChat 是什么MessageOriginChat是 Telegram Bot API 中MessageOrigin对象的四种具体实现之一。它的语义在源码 docstring 中定义得非常明确The message was originally sent on behalf of a chat to a group chat.即一条消息最初以某个聊天chat的名义发送到一个群聊中随后这条消息被转发时它的来源会被描述为MessageOriginChat。典型场景包括群组中匿名管理员发送的消息转发后来源就是该群组本身以频道channel名义发送到关联讨论群的消息转发后来源也可能是该聊天。在 aiogram 的类型体系中它继承自 aiogram/types/message_origin.py 中的抽象基类MessageOrigin继承自TelegramObject是一个基于 pydantic 的数据模型可以直接用于类型校验、序列化和类型推断。二、字段结构与源码解读MessageOriginChat的完整字段定义位于 aiogram/types/message_origin_chat.py共包含 4 个字段字段名类型必填说明typeLiteral[MessageOriginType.CHAT]是有默认值消息来源类型恒为chatdateDateTime是消息最初发送的时间Unix 时间戳sender_chatChat是最初发送该消息的聊天author_signaturestr \| None否默认None当消息最初由匿名聊天管理员发送时记录原作者签名1.type判别字段type: Literal[MessageOriginType.CHAT] MessageOriginType.CHAT Type of the message origin, always chattype是一个Literal类型值恒为chat且带有默认值。它既是 Telegram 响应的固定标识也是 aiogram 用于区分四种来源类型的判别器discriminator具体机制见第三节。2.date原始发送时间date: DateTime Date the message was sent originally in Unix time表示消息最初被发送的 Unix 时间。值得注意这里的DateTime并非普通datetime而是 aiogram/types/custom.py 中定义的带自定义序列化器的类型DateTime Annotated[ datetime, PlainSerializer( func_datetime_serializer, return_typeint, when_usedunless-none, ), ]也就是说在 aiogram 内部它以 Pythondatetime对象形式存在方便开发者直接进行时间运算而当需要把对象序列化回 Telegram Bot API 的请求/响应结构时会通过_datetime_serializer在非 Windows 平台即round(value.timestamp())自动转换为 Unix 时间戳整数。3.sender_chat最初发送消息的聊天sender_chat: Chat Chat that sent the message originally保存最初发出这条消息的Chat对象aiogram/types/chat.py 中定义的完整聊天模型。由于是完整对象你可以直接访问其id、type、title、username等属性无需额外调用getChat。例如判断是否来自某个特定群组或提取群组标题作为展示文案。4.author_signature匿名管理员的签名author_signature: str | None None *Optional*. For messages originally sent by an anonymous chat administrator, original message author signature可选字段仅在消息最初由匿名聊天管理员发送时存在保存管理员设置的公开签名例如自定义署名。在渲染转发自 ……样式文案时如果存在author_signature优先展示它会更贴近 Telegram 客户端的行为。三、MessageOrigin 类型家族与判别机制MessageOriginChat并不是孤立存在的类型。它的基类 aiogram/types/message_origin.py 明确列出了四种可能的来源MessageOriginUser消息最初由已知用户发送MessageOriginHiddenUser消息最初由隐藏用户发送MessageOriginChat消息最初以聊天名义发送本文主题MessageOriginChannel消息最初发送到频道。四种类型共享两个字段type与date其余字段各不相同例如MessageOriginUser有sender_user见 aiogram/types/message_origin_user.pyMessageOriginChannel有chat与message_id见 aiogram/types/message_origin_channel.py而MessageOriginChat独有sender_chat。类型区分的枚举定义在 aiogram/enums/message_origin_type.pyclass MessageOriginType(str, Enum): USER user HIDDEN_USER hidden_user CHAT chat CHANNEL channel为了让 pydantic 能够根据响应的type字符串自动解析成正确的子类aiogram 在 aiogram/types/message_origin_union.py 中定义了带判别字段的联合类型MessageOriginUnion: TypeAlias Annotated[ MessageOriginUser | MessageOriginHiddenUser | MessageOriginChat | MessageOriginChannel, Field(discriminatortype), ]Field(discriminatortype)意味着当收到 Telegram 推送的forward_origin数据且type chat时pydantic 会自动将其反序列化为MessageOriginChat实例。你完全不需要手动判断构造哪种类型。四、实战通过 forward_origin 读取转发来源MessageOriginChat最常见的出现位置是消息对象的forward_origin字段。在 aiogram/types/message.py 中定义如下forward_origin: MessageOriginUnion | None None *Optional*. Information about the original message for forwarded messages一个典型的处理示例——在 aiogram 的处理器中判断转发来源并分别处理from aiogram import Router from aiogram.types import Message from aiogram.types.message_origin_chat import MessageOriginChat from aiogram.types.message_origin_channel import MessageOriginChannel from aiogram.types.message_origin_user import MessageOriginUser router Router() router.message() async def handle_forward(message: Message) - None: origin message.forward_origin if origin is None: return if isinstance(origin, MessageOriginChat): # 消息最初以某个聊天的名义发送例如匿名管理员发言被转发 chat origin.sender_chat await message.answer( f转发自聊天{chat.title or chat.id}{chat.type} f匿名签名{origin.author_signature or 无} ) elif isinstance(origin, MessageOriginChannel): await message.answer(f转发自频道原消息 ID{origin.message_id}) elif isinstance(origin, MessageOriginUser): await message.answer(f转发自用户{origin.sender_user.full_name}) else: await message.answer(转发自隐藏用户)由于forward_origin的运行时类型已经由判别器保证isinstance判断是稳妥且符合 aiogram 惯例的做法。同时origin.date是可直接参与时间运算的datetime对象例如计算消息被转发的年龄from datetime import datetime, timezone elapsed datetime.now(timezone.utc) - origin.date五、与旧字段的对比API 7.0 的演进在 Telegram Bot API 7.02023 年 12 月 29 日更新之前转发消息的来源信息分散在多个顶层字段中。aiogram 在 aiogram/types/message.py 中将这些旧字段标记为deprecatedforward_date原消息发送时间forward_from原消息发送者forward_from_chat从频道或匿名管理员转发时的来源聊天forward_from_message_id频道原消息 IDforward_sender_name原消息发送者名称。这些字段在 pydantic 定义上均标注了json_schema_extra{deprecated: True}提示开发者迁移到新的forward_origin字段。相比旧的分散式设计MessageOrigin家族通过统一的判别字段把来源类型 来源详情 原始时间封装为一个自包含对象类型安全性更高代码也更易读。MessageOriginChat正是这一演进中承接来自聊天/匿名管理员转发场景的载体。六、源码位置与进一步阅读类型定义aiogram/types/message_origin_chat.py基类与类型家族说明aiogram/types/message_origin.py判别联合类型aiogram/types/message_origin_union.py来源类型枚举aiogram/enums/message_origin_type.py使用场景字段转发消息来源aiogram/types/message.py时间戳序列化实现aiogram/types/custom.py类型导出入口aiogram/types/init.py此外官方 API 参考文档中与本文主题相关的页面还有 message_origin_chat.rst 的兄弟页面MessageOriginUser、MessageOriginHiddenUser、MessageOriginChannel以及MessageOriginType枚举页均位于 docs/api/types 与 docs/api/enums 目录下可作为完整理解消息来源机制的对照阅读材料。小结MessageOriginChat是 aiogram 中描述以聊天名义发送后转发场景的标准类型type恒为chat用于判别date保存原始时间sender_chat提供完整聊天对象author_signature补充匿名管理员的签名信息。配合MessageOriginUnion的判别器机制aiogram 会自动完成类型解析开发者只需在处理器中对message.forward_origin做isinstance分支即可优雅地处理四种来源。结合 API 7.0 后旧字段的废弃背景尽早切换到forward_origin方案会让代码更健壮、更面向未来。赞分享后端即时通讯API设计【免费下载链接】aiogramaiogram is a modern and fully asynchronous framework for Telegram Bot API written in Python using asyncio项目地址https://gitcode.com/gh_mirrors/ai/aiogram点击查看免费下载相关推荐Frosted Glass Lite 主题实测树莓派帧率提升 60% 的切换指南Frosted Glass Lite 主题实测树莓派帧率提升 60% 的切换指南 滑到第 5 张卡片仪表盘开始一顿一顿再往下滑就找不回刚才的位置。如果你的后端即时通讯API设计aiogram 中 ChatBoostAdded 类型详解捕获用户为聊天加 Boost 的服务消息aiogram 中 ChatBoostAdded 类型详解捕获用户为聊天加 Boost 的服务消息 导读 ChatBoostAdded 是 aiogram 中后端即时通讯API设计Zcash 2.0.6-rc1 版本技术解析Equihash 参数进共识层、CChainParams 去全局化与 getrawtransaction spentindex 增强Zcash 2.0.6 rc1 版本技术解析Equihash 参数进共识层、CChainParams 去全局化与 getrawtransaction spen后端即时通讯API设计上一篇全能音乐歌词解决方案163MusicLyrics提升音乐管理效率的终极工具下一篇TradingAgents-CN多智能体协作的智能交易决策系统技术详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ModLens工业视觉工具:轻量级模板匹配与JSON驱动识别实战

ModLens工业视觉工具:轻量级模板匹配与JSON驱动识别实战

1. 项目概述:ModLens 是什么,为什么值得花时间搞懂它ModLens 这个名字乍一听像某个开源视觉库的代号,但实际它不是 OpenCV 的分支,也不是 PyTorch Vision 的插件——它是一个面向工业级图像识别场景的轻量级前端驱动型视觉分析工具…

2026/10/13 9:34:21 阅读更多 →
go-zero-looklook 订单服务实战解析:从下单 API 到 Asynq 延迟关单的完整链路

go-zero-looklook 订单服务实战解析:从下单 API 到 Asynq 延迟关单的完整链路

后端微服务 【免费下载链接】go-zero-looklook 🔥基于go-zero(go zero) 微服务全技术栈开发最佳实践项目。Develop best practice projects based on the full technology stack of go zero (go zero) microservices. 项目地址: https://gitcode.com/gh_…

2026/10/13 9:33:16 阅读更多 →
Codex CLI 半年实战:新特性、省 Token 技巧与高频报错排查指南

Codex CLI 半年实战:新特性、省 Token 技巧与高频报错排查指南

如果你跟我一样,每天打开终端的第一件事就是敲codex,那你应该能明显感觉到:这半年,Codex 几乎是换了一个产品。我从 2025 年年中开始重度使用 OpenAI Codex 的 CLI 版本,从最开始只能在本机跑点小脚本,到后…

2026/10/13 9:33:16 阅读更多 →

最新新闻

FFMpeg 4.1音频检测实战:命令详解与批处理自动化

FFMpeg 4.1音频检测实战:命令详解与批处理自动化

做内容生产这一年多,我处理过最多的活儿不是剪辑,而是给一堆音频素材做体检。尤其是接手播客剪辑、视频课程批量转码这类项目时,几十个甚至上百个文件摆在面前,里面哪个有静音、哪个音量忽大忽小、哪个爆音了,光靠耳朵…

2026/10/13 10:15:43 阅读更多 →
DDR Training失败怎么办?从硬件到软件的完整排查指南

DDR Training失败怎么办?从硬件到软件的完整排查指南

做嵌入式硬件开发的人,大概都遇到过这样的噩梦:新板子打回来,上电,串口没有任何输出,系统起不来。查电源,电压都对;查时钟,晶振在振;查复位,复位释放了。最后…

2026/10/13 10:15:43 阅读更多 →
基于CNN的音乐推荐系统设计与实现|大数据专业项目|毕设项目|大数据专业设计|毕设

基于CNN的音乐推荐系统设计与实现|大数据专业项目|毕设项目|大数据专业设计|毕设

一、項目介绍 摘 要 在数字音乐蓬勃发展的当下,音乐库规模急剧膨胀,用户高效获取心仪音乐面临挑战,个性化音乐推荐系统的重要性日益凸显。然而,传统音乐推荐系统存在推荐效果参差不齐、冷启动等诸多问题。卷积神经网络&#xff0…

2026/10/13 10:15:43 阅读更多 →
Meta为Personal Agent推出一个新协议PAP

Meta为Personal Agent推出一个新协议PAP

Meta为Personal Agent推出一个新协议PAP1-PAP(Personal Agent Protocol)是一套由Meta和Sierra联合发起的开放标准,它规定了个人AI助理在代表你与商家打交道时,应该如何证明自己的身份、获得你的授权,以及能做什么、不能…

2026/10/13 10:15:43 阅读更多 →
无代码平台:企业数字化转型的新引擎

无代码平台:企业数字化转型的新引擎

1. 无代码平台行业现状与核心价值无代码平台正在重塑企业数字化建设的游戏规则。过去需要专业开发团队耗时数月才能完成的应用搭建,现在业务人员通过拖拽组件就能在几小时内实现。根据最新行业调研数据,2023年全球无代码开发平台市场规模已达到138亿美元…

2026/10/13 10:15:43 阅读更多 →
page_alloc alloc_pages_bulk_noprof

page_alloc alloc_pages_bulk_noprof

alloc_pages_bulk_noprof() 是内核提供的批量页面分配接口。它的核心设计目标是减少锁竞争和函数调用开销:通过一次持有 PCP(Per-CPU Pages)锁,连续分配多个页面填充到调用方提供的数组中,而不是反复调用单页分配接口。…

2026/10/13 10:14:40 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →