GraiaProject / Ariadne

一个优雅且完备的 Python QQ 自动化框架,基于 Mirai API HTTP v2。 Powered by Graia Project.
https://graia.cn/ariadne
GNU Affero General Public License v3.0
741 stars 45 forks source link

[Feature] UnionDispatcher / UnionDecorator #166

Closed BlueGlassBlock closed 2 years ago

BlueGlassBlock commented 2 years ago

使用场景ChainDecorator / Twilight 等可能失败的解析处进行分支匹配

你想要的解决方案 假定名字为 UnionDispatch

@bcc.receiver(MessageEvent, dispatchers=[UnionDispatch(Twilight([FullMatch(".test1"), ParamMatch() @ "uvx"]), Twilight([FullMatch(".test2"), ParamMatch() @ "sbc"]))])
async def reply(app: Ariadne, event: MessageEvent, uvx: Optional[MessageChain] = ResultValue(), sbc: Optional[MessageChain] = ResultValue()):
    if uvx:
            await app.sendMessage(event, MessageChain.create("Auto reply to test1!", uvx))
    if sbc:
        await app.sendMessage(event, MessageChain.create("Auto reply to test1!", sbc))
BlueGlassBlock commented 2 years ago

忽然意识到这玩意对执行的 Context 冲击太大了。。。