aiogram 中 BotCommandScopeChatMember 详解:为群组特定成员定制 Bot 命令作用域
后端即时通讯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点击查看免费下载导读BotCommandScopeChatMember是 aiogram 中用于表示Bot 命令作用域覆盖某个群组/超级群组中特定成员的类型对象是 Telegram Bot API 命令菜单bot commands精细化权限控制的最后一环。本文将以 docs/api/types/bot_command_scope_chat_member.rst 对应的源码实现为主线结合setMyCommands/getMyCommands的实际调用链讲解该作用域的三个字段、它与另外六种作用域的关系、pydantic 判别式联合的序列化原理以及将命令仅暴露给单个用户的可运行示例。读完本文你将掌握如何让一个群里的某个成员看到专属命令菜单而其他人不受影响。一、类型定位七种 Bot 命令作用域之一在 Telegram Bot API 中作用域BotCommandScope定义了 Bot 命令列表对哪些用户生效。aiogram 的基类 bot_command_scope.py 明确列出当前支持的7 种作用域作用域类type值生效范围BotCommandScopeDefaultdefault所有用户默认BotCommandScopeAllPrivateChatsall_private_chats所有私聊BotCommandScopeAllGroupChatsall_group_chats所有群组/超级群组BotCommandScopeAllChatAdministratorsall_chat_administrators所有群聊管理员BotCommandScopeChatchat单个聊天内的所有用户BotCommandScopeChatAdministratorschat_administrators单个聊天内的管理员BotCommandScopeChatMemberchat_member单个聊天内的单个成员BotCommandScopeChatMember是其中粒度最细的一档它把命令菜单精确到哪个群 哪个人而本文的关联文档 bot_command_scope_chat_member.rst 正是该类型在 API 参考中的正式条目通过 Sphinxautomodule指令自动生成类与字段文档。二、字段详解type、chat_id、user_idBotCommandScopeChatMember的全部内容实现在 aiogram/types/bot_command_scope_chat_member.py共三个字段且三个字段均为必填class BotCommandScopeChatMember(BotCommandScope): type: Literal[BotCommandScopeType.CHAT_MEMBER] BotCommandScopeType.CHAT_MEMBER chat_id: ChatIdUnion user_id: int2.1type作用域类型固定为chat_member字段声明为Literal[BotCommandScopeType.CHAT_MEMBER]且默认值就是BotCommandScopeType.CHAT_MEMBER即字符串chat_member。该枚举定义在 aiogram/enums/bot_command_scope_type.py 中与 Telegram API 文档保持一致。由于是Literal类型且带默认值实际使用时无需手动传入typeaiogram 会自动补全。这一点与后面要讲的判别式序列化直接相关。2.2chat_id目标群组标识chat_id的类型是ChatIdUnion其定义在 aiogram/types/chat_id_union.pyChatIdUnion: TypeAlias int | str即可以传入数字 ID群组/超级群组的唯一数字标识如-1001234567890字符串用户名目标超级群组的username形式仅超级群组支持以用户名定位。需要特别注意的是 Telegram API 的硬性限制频道私信Channel Direct Messages聊天和频道Channel聊天不受支持即chat_id不能指向频道类聊天。2.3user_id目标用户标识user_id是目标用户的唯一数字标识int。该用户必须是该群组/超级群组的成员——作用域天然只对群内成员有意义如果对非成员指定命令命令菜单不会对其生效。三、源码级原理判别式联合与序列化aiogram 并非把BotCommandScopeChatMember当作孤立的模型而是通过 pydantic 的**判别式联合discriminated union**把它和其他六种作用域统一收口。定义在 aiogram/types/bot_command_scope_union.pyBotCommandScopeUnion: TypeAlias Annotated[ BotCommandScopeDefault | BotCommandScopeAllPrivateChats | BotCommandScopeAllGroupChats | BotCommandScopeAllChatAdministrators | BotCommandScopeChat | BotCommandScopeChatAdministrators | BotCommandScopeChatMember, Field(discriminatortype), ]这里Field(discriminatortype)意味着当SetMyCommands.scope字段类型为BotCommandScopeUnion被序列化或反序列化时pydantic 会以type字段的值作为判别键自动路由到正确的子类。因此你构造BotCommandScopeChatMember(chat_id..., user_id...)时type自动为chat_member序列化后得到{type: chat_member, chat_id: ..., user_id: ...}收到 Telegram 返回的数据时type: chat_member也会被正确还原为BotCommandScopeChatMember实例。所有作用域类型都在 aiogram/types/init.py 中统一导出因此使用方直接from aiogram.types import BotCommandScopeChatMember即可无需关心模块内部路径。四、实战为群内单个成员定制命令菜单BotCommandScopeChatMember的典型应用场景是setMyCommands/getMyCommands这两个 API。在 aiogram 中它们分别对应 SetMyCommands 与 GetMyCommands 两个方法类并通过Bot实例封装为便捷方法见 aiogram/client/bot.py 的bot.set_my_commands(...)与 aiogram/client/bot.py 的bot.get_my_commands(...)。4.1 只给某个成员设置专属命令假设你的 Bot 管理着一个超级群组ID-1001234567890你希望只有用户 ID 为76543210的成员能看到/admin命令菜单其余成员不受影响import asyncio from aiogram import Bot from aiogram.types import BotCommand, BotCommandScopeChatMember async def main() - None: bot Bot(tokenYOUR_BOT_TOKEN) ok: bool await bot.set_my_commands( commands[ BotCommand(commandadmin, description打开管理面板), BotCommand(commandstats, description查看群统计), ], scopeBotCommandScopeChatMember( chat_id-1001234567890, # 目标超级群组数字 ID user_id76543210, # 目标成员 ), # language_code 可省略或指定为 zh / en 等两个字母的 ISO 639-1 代码 language_codezh, ) print(设置成功 if ok else 设置失败) await bot.session.close() if __name__ __main__: asyncio.run(main())要点说明commandsBotCommand列表最多 100 条。每条命令的command字段限 1–32 字符只能包含小写英文字母、数字和下划线description限 1–256 字符见 aiogram/types/bot_command.py。language_code可选参数两个字母的 ISO 639-1 语言代码。若省略该作用域命令会应用于该群内没有专属语言命令的所有相关用户指定后仅对该语言用户生效可实现多语言命令菜单并存。scope由于BotCommandScopeUnion的判别式机制直接把BotCommandScopeChatMember实例传入即可。4.2 查询某个成员当前看到的命令与之对应用getMyCommands可以反查某作用域下已设置的命令列表from aiogram.types import BotCommandScopeChatMember commands await bot.get_my_commands( scopeBotCommandScopeChatMember( chat_id-1001234567890, user_id76543210, ), ) # 返回 list[BotCommand]若未设置返回空列表当scope参数缺省时两者都默认使用BotCommandScopeDefault作用于所有用户这是 Telegram API 的默认行为定义见 SetMyCommands 与 GetMyCommands 的字段说明。4.3 与命令作用域的组合使用实际项目中常把多级作用域叠加使用实现默认全员可见 特定成员额外可见的菜单策略from aiogram.types import ( BotCommand, BotCommandScopeChatMember, BotCommandScopeDefault, ) # 第一步对全员设置通用命令 await bot.set_my_commands( commands[BotCommand(commandstart, description开始)], scopeBotCommandScopeDefault(), ) # 第二步仅对某群内的某成员追加管理命令 await bot.set_my_commands( commands[BotCommand(commandadmin, description管理面板)], scopeBotCommandScopeChatMember(chat_id-1001234567890, user_id76543210), )此时该成员的命令菜单为通用命令 专属命令的并集而其他成员只看到通用命令——这正是 Telegram 命令作用域从默认到具体逐级覆盖机制的实际应用。五、使用限制与注意事项结合 aiogram/types/bot_command_scope_chat_member.py 中字段注释与 Telegram API 约束使用时有几点需要牢记不支持频道chat_id不能是频道Channel或频道私信Channel Direct Messages聊天仅限普通群组/超级群组user_id必须是群成员作用域对象本身不做成员校验若目标用户不在群内命令不会对其生效三个字段全必填构造时必须同时提供chat_id与user_idtype有默认值可省略缺少任一必填字段会导致 pydantic 校验失败数字 ID 与用户名二选一chat_id用int传数字 ID、用str传username注意字符串形式只对超级群组有效命令数上限单个setMyCommands调用最多 100 条命令超限会请求失败。六、测试与验证aiogram 仓库为setMyCommands/getMyCommands提供了 MockedBot 级别的 API 测试可作为验证调用链的参考tests/test_api/test_methods/test_set_my_commands.py通过bot.add_result_for(SetMyCommands, okTrue, ...)模拟响应并断言bot.set_my_commands(commands[])返回Truetests/test_api/test_methods/test_get_my_commands.py验证bot.get_my_commands()返回list[BotCommand]。从源码结构可以看出Bot.set_my_commands内部实际是构造SetMyCommands方法对象并交给请求中间件执行aiogram/client/bot.pyscope对象在序列化时由BotCommandScopeUnion的判别式字段保证正确输出type: chat_member。因此当你传入BotCommandScopeChatMember时最终发给 Telegram 的 JSON 载荷形如{ commands: [{command: admin, description: 打开管理面板}], scope: { type: chat_member, chat_id: -1001234567890, user_id: 76543210 }, language_code: zh }结语BotCommandScopeChatMember是 aiogram 命令作用域体系中精度最高的类型通过chat_idint | str锁定群组、user_id锁定成员、type固定为chat_member配合BotCommandScopeUnion的判别式联合它在setMyCommands/getMyCommands调用链中实现一人一菜单的精准控制。无论是搭建带管理后台的社群 Bot还是实现按成员等级展示命令的复杂菜单体系掌握该作用域都是不可或缺的一环。赞分享后端即时通讯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 中的 BotCommandScopeChatAdministrators为指定群组管理员单独设置机器人命令作用域aiogram 中的 BotCommandScopeChatAdministrators为指定群组管理员单独设置机器人命令作用域 BotCommandScop后端即时通讯API设计aiogram 中使用 setChatAdministratorCustomTitle为超级群组管理员设置自定义头衔的完整指南aiogram 中使用 setChatAdministratorCustomTitle为超级群组管理员设置自定义头衔的完整指南 本文围绕 aiogram 框架后端即时通讯API设计Karmada karmadactl taint 命令详解为成员集群打污点并控制联邦调度Karmada karmadactl taint 命令详解为成员集群打污点并控制联邦调度 本文围绕 Karmada 的 karmadactl taint 命令音视频桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

7.89GB 文件不等于 8GB 显存能跑:Saluki 27B 部署前没人告诉你的内存真相

7.89GB 文件不等于 8GB 显存能跑:Saluki 27B 部署前没人告诉你的内存真相

7.89GB 文件不等于 8GB 显存能跑:Saluki 27B 部署前没人告诉你的内存真相 【免费下载链接】Underdog-Saluki-27B-1.0 项目地址: https://ai.gitcode.com/hf_mirrors/ConwayResearch/Underdog-Saluki-27B-1.0 Underdog-Saluki-27B-1.0 发布后,&qu…

2026/10/12 21:36:36 阅读更多 →
winapp CLI快速上手:10分钟从零跑通第一个带Windows包身份的应用

winapp CLI快速上手:10分钟从零跑通第一个带Windows包身份的应用

【免费下载链接】winappCli winapp, the Windows App Development CLI, is a single command-line interface for managing Windows SDKs, packaging, generating app identity, manifests, certificates, and using build tools with any app framework. 项目地址&#xff1a…

2026/10/12 21:36:36 阅读更多 →
大模型落地实战:从模型选型到工程化部署的完整指南

大模型落地实战:从模型选型到工程化部署的完整指南

这两年做AI应用落地的人,应该都感受到了一股明显的风向变化。从年初各路模型轮番登场,到年中大家开始冷静下来讨论ROI,再到最近“人工智能大模型”21条措施正式落地,整个行业的节奏一下子从“拼参数”切换到了“拼落地”。这21条措…

2026/10/12 21:36:36 阅读更多 →

最新新闻

第6章:Spring AI 2.0 ChatClient 门面

第6章:Spring AI 2.0 ChatClient 门面

上章思考题答案 用户原话里的 {orderId} 若放进 SystemPromptTemplate 再渲染,StringTemplate 会把它当成变量。缺这个键时,ValidationMode.THROW 抛 IllegalStateException,正常咨询被拒绝。用户原话应走 UserMessage 或 ChatClient.user&a…

2026/10/14 0:03:43 阅读更多 →
【车载定位】基于扩展卡尔曼滤波 EKF,分别利用 TDOA、AOA 以及 TDOA+AOA 融合观测,搭配近恒速 NCV / 近恒位置 NCP运动模型对车辆轨迹估计附Matlab代码

【车载定位】基于扩展卡尔曼滤波 EKF,分别利用 TDOA、AOA 以及 TDOA+AOA 融合观测,搭配近恒速 NCV / 近恒位置 NCP运动模型对车辆轨迹估计附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &…

2026/10/14 0:03:43 阅读更多 →
人工智能期末复习:用习题集构建考点地图,高效备考不挂科

人工智能期末复习:用习题集构建考点地图,高效备考不挂科

简介:这份资源汇集人工智能课程各章小结与经典习题解答,适合正在系统学习人工智能基础、准备期末考试的本科生或自学者使用。内容覆盖人工智能的概念与发展阶段、研究学派与研究领域、知识与知识表示(谓词逻辑、产生式规则、框架、语义网络&a…

2026/10/14 0:03:43 阅读更多 →
wandb-core 中的 Wire 依赖注入:从贡献指南到 go:generate 自动装配实战

wandb-core 中的 Wire 依赖注入:从贡献指南到 go:generate 自动装配实战

机器学习深度学习数据可视化可观测性 【免费下载链接】wandb The AI developer platform. Use Weights & Biases to train and fine-tune models, and manage models from experimentation to production. 项目地址: https://gitcode.com/gh_mirrors/wa/wandb 点…

2026/10/14 0:03:43 阅读更多 →
微博评论文本情感分析:从数据清洗到三模型对比的完整实践

微博评论文本情感分析:从数据清洗到三模型对比的完整实践

简介:面向毕业设计场景,资源围绕微博评论文本情感分析,完整覆盖支持向量机、朴素贝叶斯与AdaBoost三种机器学习算法的建模流程,适合计算机相关专业本科生用于课程设计或毕业设计参考。压缩包共70个文件,约6.05MB&#…

2026/10/14 0:03:43 阅读更多 →
小型超市仓库管理系统

小型超市仓库管理系统

小型超市仓库管理系统选题背景与意义 随着我国城镇化进程的不断推进以及居民消费水平的持续提升,小型超市作为连接城市社区与消费者的重要商业节点,在日常生活中的作用日益凸显。尤其是在一二线城市周边的居民区、城乡结合部及中小城镇,小型超…

2026/10/14 0:02:42 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

2026/10/13 16:22:04 阅读更多 →
影刀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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →