ieew / nonebot_adapter_mirai2

nonebot2 的三方 adapter,用以为 nonebot2 提供 MiraiApiHttp2 协议支持
https://ieew.github.io/nonebot_adapter_mirai2/
GNU Affero General Public License v3.0
20 stars 6 forks source link

适配时遇到问题 #16

Closed fatinghenji closed 2 years ago

fatinghenji commented 2 years ago

在从nonebot.adapters.onebot.v11转到nonebot_adapter_mirai2时遇到了一个问题:

onebot.v11中定义了permission=GROUP为群中所有的成员所拥有的权限,而在nonebot_adapter_mirai2中将该权限分为了GROUP_MEMBER,GROUP_ADMIN,GROUP_ADMINS,GROUP_OWNER,GROUP_OWNER_SUPERUSER,SUPERUSER

在原插件(nonebot_plugin_fortune)中部分使用的GROUP权限的代码如下:

...
plugin_help = on_command("运势帮助", permission=GROUP, priority=8, block=True)
divine = on_command("今日运势", aliases={"抽签", "运势"}, permission=GROUP, priority=8, block=True)
limit_setting = on_regex(r"指定(.*?)签", permission=GROUP, priority=8, block=True)
theme_setting = on_regex(r"设置(.*?)签", permission=SUPERUSER | GROUP_ADMIN | GROUP_OWNER, priority=8, block=True)
reset = on_command("重置抽签", permission=SUPERUSER | GROUP_ADMIN | GROUP_OWNER, priority=8, block=True)
theme_list = on_command("主题列表", permission=GROUP, priority=8, block=True)
show = on_command("抽签设置", permission=GROUP, priority=8, block=True)
...

如果我要将其改为nonebot_adapter_mirai2所拥有的权限,是需要将其全部替换为GROUP_MEMBER, GROUP_ADMIN, GROUP_OWNER吗?如果不是的话,应该怎么替换呢?

ieew commented 2 years ago

adapter_mirai2 中目前暂时还没有提供允许任意群成员的 rule 规则,但你可以参考我在 permission.py 中写的规则自己弄一个。

实际上如果只想把处理器限制在群里的话可以像这样使用

from nonebot import on_command
from nonebot.adapters.mirai2 import Bot, GroupMessage

Session = on_command("/about")

@Session.handle()
async def _(bot: Bot, event: GroupMessage):
    await Session.send(json.dumps(await bot.about(), ensure_ascii=False))

通过nb2的类型检查功能就已经可以实现了。 我推荐这样做的原因是它足够简洁,并且非常的易于理解。

ieew commented 2 years ago

甚至你还可以这样以支持多个事件类型

async def _(bot: Bot, event: Union[GroupMessage, FriendMessage]):
ieew commented 2 years ago

时间过久,将关闭该问题