(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{441:function(t,s,a){"use strict";a.r(s);var e=a(55),n=Object(e.a)({},function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"nonebot-permission"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#nonebot-permission","aria-hidden":"true"}},[t._v("#")]),t._v(" nonebot.permission")]),t._v(" "),a("p",[t._v("NoneBot 支持为命令和自然语言处理器设置触发条件,此条件为一个类型为 "),a("code",[t._v("PermissionPolicy_T")]),t._v(" 的可调用对象:")]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 同步: 返回值恒为假,即表示所有消息和发送者都没有权限")]),t._v("\ndisabled"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" PermissionPolicy_T "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("lambda")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 同步: 当消息是群聊,且发送者既不是管理员也不是群主时给予权限")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("normal_group_member")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" SenderRoles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_groupchat "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_admin "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_owner\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 异步: 在检查器中查询数据库再根据返回值决定是否给予权限")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("db_check")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" SenderRoles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n query "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" db"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'if exists (select * from list where user=?) 1 else 0'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("user_id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" query"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("在实际使用时应当避免挂起太久的异步操作。在定义了这些条件后,可作为 "),a("code",[t._v("permission")]),t._v(" 参数传递给相关的装饰器:")]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[t._v("permit_group "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("768887710")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nbanned_people "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10001")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("foo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" SenderRoles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_groupchat "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("from_group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("permit_group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sendby"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("banned_people"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n@on_natural_language"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'天气'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" only_to_me"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" permission"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("foo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" db_check"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 需要同时满足 foo 和 db_check")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# permission=aggregate_policy((foo, db_check)) # 需要同时满足 foo 和 db_check")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# permission=aggregate_policy((foo, db_check), any) # 只需满足一个")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" NLPSession"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" IntentCommand"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'weather'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"权限声明常量"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#权限声明常量","aria-hidden":"true"}},[t._v("#")]),t._v(" 权限声明常量")]),t._v(" "),a("br"),t._v(" "),a("details",[a("summary",[t._v("适用于 1.9.0 之前的版本。点此展开")]),t._v(" "),a("p",[t._v("NoneBot 在 1.9.0 后改变了声明权限的风格。为了保持向前兼容,尽管不建议使用,如果你的代码仍包含以下常量,则无需改动它们仍将工作:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("PRIVATE_FRIEND")]),t._v(": 好友私聊")]),t._v(" "),a("li",[a("code",[t._v("PRIVATE_GROUP")]),t._v(": 群临时私聊")]),t._v(" "),a("li",[a("code",[t._v("PRIVATE_DISCUSS")]),t._v(": 讨论组临时私聊")]),t._v(" "),a("li",[a("code",[t._v("PRIVATE_OTHER")]),t._v(": 其它私聊")]),t._v(" "),a("li",[a("code",[t._v("PRIVATE")]),t._v(": 任何私聊")]),t._v(" "),a("li",[a("code",[t._v("DISCUSS")]),t._v(": 讨论组")]),t._v(" "),a("li",[a("code",[t._v("GROUP_MEMBER")]),t._v(": 群成员")]),t._v(" "),a("li",[a("code",[t._v("GROUP_ADMIN")]),t._v(": 群管理员")]),t._v(" "),a("li",[a("code",[t._v("GROUP_OWNER")]),t._v(": 群主")]),t._v(" "),a("li",[a("code",[t._v("GROUP")]),t._v(": 任何群成员")]),t._v(" "),a("li",[a("code",[t._v("SUPERUSER")]),t._v(": 超级用户")]),t._v(" "),a("li",[a("code",[t._v("EVERYBODY")]),t._v(": 任何人")])]),t._v(" "),a("p",[t._v("用于权限声明的常量可通过 "),a("code",[t._v("|")]),t._v(" 合并,在命令或自然语言处理器装饰器的 "),a("code",[t._v("permission")]),t._v(" 参数中传入,表示允许触发相应命令或自然语言处理器的用户类型。")]),t._v(" "),a("p",[t._v("例如下面的代码中,只有私聊和群管理员可以访问 "),a("code",[t._v("hello")]),t._v(" 命令:")]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[t._v("@nonebot"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("on_command"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'hello'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" permission"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("PRIVATE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" GROUP_ADMIN"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("_")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pass")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("p",[t._v("需要注意的是,当一个用户是「群管理员」时,ta 同时也是「群成员」;当 ta 是「群主」时,ta 同时也是「群管理员」和「群成员」。")]),t._v(" "),a("p",[t._v("在 1.9.0 后,这些常量的类型从 "),a("code",[t._v("int")]),t._v(" 改变为了 "),a("RouterLink",{attrs:{to:"/api/typing.html#var-permissionpolicy-t"}},[t._v("PermissionPolicy_T")]),t._v(",所以如果你之前包含了它们的 type hints,或用了不寻常的方法来获取它们的值,则可能会导致错误。")],1)]),t._v(" "),a("h2",{attrs:{id:"class-senderroles-bot-event-sender"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#class-senderroles-bot-event-sender","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("class")]),t._v(" "),a("code",[t._v("SenderRoles(bot, event, sender)")]),t._v(" "),a("Badge",{attrs:{text:"1.9.0+"}})],1),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("说明")])]),t._v(" "),a("p",[t._v("封装了原生的 "),a("code",[t._v("CQEvent")]),t._v(" 便于权限检查。此类的实例一般会传入 "),a("code",[t._v("PermissionPolicy_T")]),t._v(" 作为参数。")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("参数")])]),t._v(" "),a("ul",[a("li",[a("p",[a("code",[t._v("bot")]),t._v(" ("),a("RouterLink",{attrs:{to:"/api/#class-nonebot-config-object-none"}},[t._v("NoneBot")]),t._v(")")],1)]),t._v(" "),a("li",[a("p",[a("code",[t._v("event")]),t._v(" (aiocqhttp.event.Event)")])]),t._v(" "),a("li",[a("p",[a("code",[t._v("sender")]),t._v(" (dict[str, Any] | None)")])])])])]),t._v(" "),a("h3",{attrs:{id:"instance-var-bot"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#instance-var-bot","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("instance-var")]),t._v(" "),a("code",[t._v("bot")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" "),a("RouterLink",{attrs:{to:"/api/#class-nonebot-config-object-none"}},[t._v("NoneBot")])],1)]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 机器人对象。")])])]),t._v(" "),a("h3",{attrs:{id:"instance-var-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#instance-var-event","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("instance-var")]),t._v(" "),a("code",[t._v("event")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" aiocqhttp.event.Event")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 事件。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-admin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-admin","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_admin")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 发送者是群管理员。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-anonymous"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-anonymous","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_anonymous")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 消息是匿名消息。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-discusschat"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-discusschat","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_discusschat")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 消息是讨论组消息。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-groupchat"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-groupchat","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_groupchat")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 消息是群聊消息。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-owner"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-owner","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_owner")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 发送者是群主。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-private-discuss"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-private-discuss","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_private_discuss")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 消息是讨论组私聊消息。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-private-friend"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-private-friend","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_private_friend")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 消息是好友私聊消息。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-private-group"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-private-group","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_private_group")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 消息是群私聊消息。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-privatechat"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-privatechat","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_privatechat")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 消息是私聊消息。")])])]),t._v(" "),a("h3",{attrs:{id:"property-is-superuser"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-is-superuser","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("property")]),t._v(" "),a("code",[t._v("is_superuser")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" bool")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 发送者是配置文件中设置的超级用户。")])])]),t._v(" "),a("h3",{attrs:{id:"instance-var-sender"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#instance-var-sender","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("instance-var")]),t._v(" "),a("code",[t._v("sender")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("类型:")]),t._v(" dict[str, Any] | None")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("说明:")]),t._v(" 只有消息是群消息的时候才会有这个属性,其内容是 "),a("code",[t._v("/get_group_member_info")]),t._v(" API 调用的返回值。")])])]),t._v(" "),a("h3",{attrs:{id:"async-staticmethod-create-bot-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#async-staticmethod-create-bot-event","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("async staticmethod")]),t._v(" "),a("code",[t._v("create(bot, event)")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("说明")])]),t._v(" "),a("p",[t._v("构造 "),a("code",[t._v("SenderRoles")]),t._v("。")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("参数")])]),t._v(" "),a("ul",[a("li",[a("p",[a("code",[t._v("bot")]),t._v(" ("),a("RouterLink",{attrs:{to:"/api/#class-nonebot-config-object-none"}},[t._v("NoneBot")]),t._v("): 接收事件的 NoneBot 对象")],1)]),t._v(" "),a("li",[a("p",[a("code",[t._v("event")]),t._v(" (aiocqhttp.event.Event): 上报事件")])])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("返回")])]),t._v(" "),a("ul",[a("li",[t._v("SenderRoles")])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("用法")])]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[t._v("sender "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" SenderRoles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bot"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_groupchat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_owner"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" process_owner"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_admin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" process_admin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" process_member"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("session"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("根据发送者的身份决定相应命令处理方式。")])])]),t._v(" "),a("h3",{attrs:{id:"method-from-group-self-group-id"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#method-from-group-self-group-id","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("method")]),t._v(" "),a("code",[t._v("from_group(self, group_id)")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("说明")])]),t._v(" "),a("p",[t._v("表示发送者是否来自于群 "),a("code",[t._v("group_id")]),t._v("。")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("参数")])]),t._v(" "),a("ul",[a("li",[a("code",[t._v("group_id")]),t._v(" (int | Container[int]): 群号码,可以为多个群号。")])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("返回")])]),t._v(" "),a("ul",[a("li",[t._v("bool")])])])]),t._v(" "),a("h3",{attrs:{id:"method-sent-by-self-sender-id"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#method-sent-by-self-sender-id","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("method")]),t._v(" "),a("code",[t._v("sent_by(self, sender_id)")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("说明")])]),t._v(" "),a("p",[t._v("表示发送者 QQ 号是否是 "),a("code",[t._v("sender_id")]),t._v("。")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("参数")])]),t._v(" "),a("ul",[a("li",[a("code",[t._v("sender_id")]),t._v(" (int | Container[int]): 表示发送者 QQ 号是否是 "),a("code",[t._v("sender_id")]),t._v("。")])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("返回")])]),t._v(" "),a("ul",[a("li",[t._v("bool")])])])]),t._v(" "),a("h2",{attrs:{id:"async-def-check-permission-bot-event-policy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#async-def-check-permission-bot-event-policy","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("async def")]),t._v(" "),a("code",[t._v("check_permission(bot, event, policy)")])]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("说明")])]),t._v(" "),a("p",[t._v("检查用户是否具有所要求的权限。")]),t._v(" "),a("p",[t._v("一般用户应该没有必要使用该函数。")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("参数")])]),t._v(" "),a("ul",[a("li",[a("p",[a("code",[t._v("bot")]),t._v(" ("),a("RouterLink",{attrs:{to:"/api/#class-nonebot-config-object-none"}},[t._v("NoneBot")]),t._v("): NoneBot 对象")],1)]),t._v(" "),a("li",[a("p",[a("code",[t._v("event")]),t._v(" (aiocqhttp.event.Event): 消息事件对象")])]),t._v(" "),a("li",[a("p",[a("code",[t._v("policy")]),t._v(" ("),a("RouterLink",{attrs:{to:"/api/typing.html#var-permissionpolicy-t"}},[t._v("PermissionPolicy_T")]),t._v(") "),a("Badge",{attrs:{text:"1.9.0+"}}),t._v(": 返回布尔值的权限检查策略")],1)])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("返回")])]),t._v(" "),a("ul",[a("li",[t._v("bool: 消息事件所对应的上下文是否具有所要求的权限")])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("用法")])]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[t._v("has_perm "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" check_permission"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bot"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" normal_group_member"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])])])]),t._v(" "),a("h2",{attrs:{id:"def-aggregate-policy-policies-aggregator-built-in-function-all"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#def-aggregate-policy-policies-aggregator-built-in-function-all","aria-hidden":"true"}},[t._v("#")]),t._v(" "),a("em",[t._v("def")]),t._v(" "),a("code",[t._v("aggregate_policy(policies, aggregator=)")]),t._v(" "),a("Badge",{attrs:{text:"1.9.0+"}})],1),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("说明")])]),t._v(" "),a("p",[t._v("在默认参数下,将多个权限检查策略函数使用 AND 操作符连接并返回单个权限检查策略。在实现中对这几个策略使用内置 "),a("code",[t._v("all")]),t._v(" 函数,会优先执行同步函数而且尽可能在同步模式的情况下短路。")]),t._v(" "),a("p",[t._v("在新的策略下,只有事件满足了 "),a("code",[t._v("policies")]),t._v(" 中所有的原策略,才会返回 "),a("code",[t._v("True")]),t._v("。")]),t._v(" "),a("p",[a("code",[t._v("aggregator")]),t._v(" 参数也可以设置为其他函数,例如 "),a("code",[t._v("any")]),t._v(": 在此情况下会使用 "),a("code",[t._v("OR")]),t._v(" 操作符连接。")]),t._v(" "),a("p",[t._v("如果参数中所有的策略都是同步的,则返回值是同步的,否则返回值是异步函数。")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("参数")])]),t._v(" "),a("ul",[a("li",[a("p",[a("code",[t._v("policies")]),t._v(" (Iterable[(SenderRoles) -> bool | (SenderRoles) -> Awaitable[bool]]): 要合并的权限检查策略")])]),t._v(" "),a("li",[a("p",[a("code",[t._v("aggregator")]),t._v(" ((Iterable[object]) -> bool): 用于合并策略的函数")])])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("返回")])]),t._v(" "),a("ul",[a("li",[t._v("PermissionPolicy_T: 新的权限检查策略")])])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("用法")])]),t._v(" "),a("div",{staticClass:"language-python line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-python"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 以下两种方式在效果上等同")]),t._v("\npolicy1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("lambda")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_groupchat "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("from_group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("123456789")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\npolicy2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" aggregate_policy"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("lambda")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_groupchat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("lambda")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("from_group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("123456789")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])])])])},[],!1,null,null,null);s.default=n.exports}}]);