{"id":25858782,"url":"https://github.com/arcletproject/alconna-avilla","last_synced_at":"2025-10-15T09:57:46.438Z","repository":{"id":115202748,"uuid":"532114506","full_name":"ArcletProject/Alconna-Avilla","owner":"ArcletProject","description":"Alconna 为 Avilla 框架的使用支持","archived":false,"fork":false,"pushed_at":"2025-05-02T08:26:32.000Z","size":238,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-02T09:35:17.491Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArcletProject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-09-03T00:23:52.000Z","updated_at":"2025-05-02T08:26:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"ac21a1f4-7b20-496e-8a0f-8fd440d2e09c","html_url":"https://github.com/ArcletProject/Alconna-Avilla","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ArcletProject/Alconna-Avilla","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArcletProject%2FAlconna-Avilla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArcletProject%2FAlconna-Avilla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArcletProject%2FAlconna-Avilla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArcletProject%2FAlconna-Avilla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArcletProject","download_url":"https://codeload.github.com/ArcletProject/Alconna-Avilla/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArcletProject%2FAlconna-Avilla/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279070240,"owners_count":26096812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-15T02:00:07.814Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-01T20:33:53.505Z","updated_at":"2025-10-15T09:57:46.412Z","avatar_url":"https://github.com/ArcletProject.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Alconna Avilla\n\n该项目为 [`Alconna`](https://github.com/ArcletProject/Alconna) 为 [`Avilla`](https://github.com/GraiaProject/Avilla) 框架的内建支持\n\n包括解析器、Dispatcher、SayaSchema 和 附加组件\n\n\u003e [!WARNING]\n\u003e 本项目与 `avilla.core.builtins.command` 不兼容\n\n## 安装\n\n```shell\npip install arclet-alconna-avilla\npdm add arclet-alconna-avilla\n```\n\n## 快速使用\n\n### 单文件\n\n```python\nfrom arclet.alconna import Args, Alconna\nfrom arclet.alconna.avilla import AlconnaDispatcher, Match, CommandResult\n...\nbroadcast = create(Broadcast)\navilla = Avilla(...)\n\n\nalc = Alconna(\"!jrrp\", Args[\"sth\", str, 1123])\n\n@broadcast.receiver(\n    MessageReceived,\n    dispatchers=[AlconnaDispatcher(alc, send_flag='stay')]\n)\nasync def test2(\n    context: Context,\n    result: CommandResult[MessageReceived],\n    sth: Match[str]\n):\n    print(\"sign:\", result.result)\n    print(\"sender:\", context.scene)\n    print(\"match\", sth.available, sth.result)\n```\n\n### 使用 Saya\n\nin module.py:\n```python\nfrom arclet.alconna.avilla import AlconnaDispatcher, Match, CommandResult, AlconnaSchema\nfrom arclet.alconna import Alconna, Args\n...\nchannel = Channel.current()\n\nalc = Alconna(\"!jrrp\", Args[\"sth\", str, 1123])\n\n@channel.use(AlconnaSchema(AlconnaDispatcher(alc)))\n@channel.use(ListenerSchema([...]))\nasync def test2(result: CommandResult[...], sth: Match[str]):\n    print(\"sign:\", result.result)\n    print(\"match\", sth.available, sth.result)\n\n\n```\n\nin main.py:\n```python\nfrom arclet.alconna.avilla import AlconnaBehaviour\nfrom creart import create\n...\n\nsaya = create(Saya)\ncreate(AlconnaBehaviour)\n\nwith saya.module_context():\n    saya.require(\"module\")\n\n```\n### 使用 Saya Util\n\nin module.py:\n\n```python\nfrom graia.saya.builtins.broadcast.shortcut import listen\nfrom arclet.alconna.avilla import alcommand, Match, from_command, startswith, endswith\nfrom arclet.alconna import  Args, Arparma, Alconna\n\n...\n\n\n@alcommand(Alconna(\"!jrrp\", Args[\"sth\", str, 1123]), private=False)\nasync def test1(result: Arparma, sth: Match[str]):\n    print(\"sign:\", result)\n    print(\"match\", sth.available, sth.result)\n\n\n@alcommand(\"[!|.]hello \u003cname:str\u003e\", send_error=True)\nasync def test1(result: Arparma, name: Match[str]):\n    print(\"sign:\", result)\n    print(\"match\", name.available, name.result)\n\n    \n@listen(...) \n@from_command(\"foo bar {baz}\")\nasync def test2(baz: int):\n    print(\"baz\", baz)\n    \n    \n@listen(...)\n@startswith(\"foo bar\")\nasync def test3(event: ...):\n    ...\n\n\n@listen(...)\n@endswith(int)\nasync def test4(event: ...):\n    ...\n```\n\nin main.py:\n```python\nfrom creart import create\n...\n\nsaya = create(Saya)\n\nwith saya.module_context():\n    saya.require(\"module\")\n\n```\n\n## AlconnaDispatcher 参数说明\n\n```python\nclass AlconnaDispatcher(BaseDispatcher, Generic[TOHandler]):\n    def __init__(\n        self,\n        command: Alconna | AlconnaGroup,\n        *,\n        send_flag: Literal[\"reply\", \"post\", \"stay\"] = \"stay\",\n        skip_for_unmatch: bool = True,\n        comp_session: Optional[CompConfig] = None,\n        message_converter: Callable[[OutType, str], MessageChain | Coroutine[Any, Any, MessageChain]] | None = None,\n    ): ...\n```\n\n`command`: 使用的 Alconna 指令\n\n`send_flag`: 解析期间输出信息的发送方式\n- reply: 直接发送给指令发送者\n- post: 以事件通过 Broadcast 广播\n- stay: 存入 CommandResult 传递给事件处理器\n\n`skip_for_unmatch`: 解析失败时是否跳过, 否则错误信息按 send_flag 处理\n\n`comp_session`: 补全会话配置, 不传入则不启用补全会话\n\n`message_converter`: send_flag 为 reply 时 输出信息的预处理器\n\n## 附加组件\n\n- `Match`: 查询某个参数是否匹配，如`foo: Match[int]`。使用时以 `Match.available` 判断是否匹配成功，以\n`Match.result` 获取匹配结果\n\n- `Query`: 查询某个参数路径是否存在，如`sth: Query[int] = Query(\"foo.bar\")`；可以指定默认值如\n`Query(\"foo.bar\", 1234)`。使用时以 `Query.available` 判断是否匹配成功，以 `Query.result` 获取匹配结果\n\n- `Header`: 表示命令头部为特殊形式时的头部匹配\n\n- `assign`: 依托路径是否匹配成功为命令分发处理器。\n\n```python\nfrom arclet.alconna.avilla import assign, alcommand\nfrom arclet.alconna import Alconna, Arpamar\n...\n\nalc = Alconna(...)\n\n@alcommand(alc, private=False)\n@assign(\"foo\")\nasync def foo(result: Arpamar):\n    ...\n\n@alcommand(alc, private=False)\n@assign(\"bar.baz\", 1)\nasync def bar_baz_1(result: Arpamar):\n    ...\n```\n\n## 便捷方法\n\n```python\nfrom arclet.alconna.avilla import Match, Alc\n...\n\n@app.broadcast.receiver(\n    ..., dispatchers=[Alc.from_format(\"foo bar {baz:int}\")]\n)\nasync def test2(baz: Match[int]):\n    print(\"match\", baz.available, baz.result)\n```\n\nor\n\n```python\nfrom arclet.alconna.avilla import Match, AlconnaSchema\n...\nchannel = Channel.current()\n\n@channel.use(AlconnaSchema.from_(\"foo {sth:str} bar {baz:int}\"))\n@channel.use(ListenerSchema([...]))\nasync def test2(sth: Match[str]):\n    print(\"match\", sth.available, sth.result)\n```\n\n## 文档\n\n[链接](https://graiax.cn/guide/alconna.html#kirakira%E2%98%86dokidoki%E7%9A%84dispatcher)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcletproject%2Falconna-avilla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farcletproject%2Falconna-avilla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcletproject%2Falconna-avilla/lists"}