Skip to main content

Alconna Adapter for Nonebot

Project description

nonebot

NoneBot Plugin Alconna

✨ Alconna Usage For NoneBot2 ✨

license pypi python

该插件提供了 AlconnaNonebot2 适配版本与工具

特性

  • 完整的 Alconna 特性支持
  • 基本的 rule, matcher 与 依赖注入
  • 自动回复命令帮助信息 (help, shortcut, completion) 选项
  • 现有全部协议的 Segment 标注
  • match_value, match_path 等检查函数

讨论

QQ 交流群: 链接

使用方法

消息解析

from nonebot.adapters.onebot.v12 import Message, MessageSegment
from arclet.alconna import Alconna, Option, Args

msg = Message("Hello! --foo 123")
img = MessageSegment.image("1.png")
print(msg)

alc = Alconna("Hello!", Option("--foo", Args["foo", int]))
res = alc.parse(msg)
assert res.matched
assert res.query("foo.foo") == 123
assert not alc.parse(Message(["Hello!", img])).matched

MessageSegment 标注

from nonebot_plugin_alconna.adapters.onebot12 import Mention
from nonebot.adapters.onebot.v12 import Message, MessageSegment
from arclet.alconna import Alconna, Args
from arclet.alconna.tools import AlconnaString

msg = Message(["Hello!", MessageSegment.mention("123")])
print(msg)  # Hello![mention:user_id=123]

alc = AlconnaString("Hello! <target:Mention>")
res = alc.parse(msg)
assert res.matched
assert res.target.data['user_id'] == '123'

Matcher 与 依赖注入

from nonebot_plugin_alconna import (
    on_alconna, 
    Match,
    Query,
    AlconnaMatch, 
    AlconnaQuery,
    AlconnaResult, 
    AlconnaMatches,
    CommandResult
)
from arclet.alconna import Alconna, Args, Arparma, Option

test = on_alconna(
    Alconna(
        "test",
        Option("foo", Args["bar", int]),
        Option("baz", Args["qux", bool, False])
    ),
    auto_send_output=True
)


@test.handle()
async def handle_test1(result: CommandResult = AlconnaResult()):
    await test.send(f"matched: {result.matched}")
    await test.send(f"maybe output: {result.output}")

@test.handle()
async def handle_test2(result: Arparma = AlconnaMatches()):
    await test.send(f"head result: {result.header_result}")
    await test.send(f"args: {result.all_matched_args}")

@test.handle()
async def handle_test3(bar: Match[int] = AlconnaMatch("bar")):
    if bar.available:    
        await test.send(f"foo={bar.result}")

@test.handle()
async def handle_test4(qux: Query[bool] = AlconnaQuery("baz.qux", False)):
    if qux.available:
        await test.send(f"baz.qux={qux.result}")

条件控制

from arclet.alconna import Alconna, Subcommand, Option, Args
from nonebot_plugin_alconna import assign, on_alconna, AlconnaResult, CommandResult

pip = Alconna(
    "pip",
    Subcommand(
        "install", 
        Args["pak", str],
        Option("--upgrade"),
        Option("--force-reinstall")
    ),
    Subcommand(
        "list",
        Option("--out-dated")
    )
)

pip_update = on_alconna(pip, assign("install.pak", "pip"))
pip_match_install = on_alconna(pip, assign("install"))
pip_match_list = on_alconna(pip, assign("list"))

@pip_update.handle()
async def update(arp: CommandResult = AlconnaResult()):
    ...

@pip_match_list.handle()
async def list_(arp: CommandResult = AlconnaResult()):
    ...

@pip_match_install.handle()
async def install(arp: CommandResult = AlconnaResult()):
    ...

参数解释

def on_alconna(
    command: Alconna | str,
    *checker: Callable[[Arparma], bool],
    duplication: type[T_Duplication] | None = None,
    skip_for_unmatch: bool = True,
    auto_send_output: bool = False,
    output_converter: Callable[[str], Message | Awaitable[Message]] | None = None,
    **kwargs,
) -> type[Matcher]:
  • command: Alconna 命令
  • checker: 命令解析结果的检查器
  • duplication: 可选的自定义 Duplication 类型
  • skip_for_unmatch: 是否在命令不匹配时跳过该响应
  • auto_send_output: 是否自动发送输出信息并跳过响应
  • output_converter: 输出信息字符串转换为 Message 方法

提供了 MessageSegment标注 的协议:

协议名称 路径
OneBot 协议 adapters.onebot11, adapters.onebot12
Telegram adapters.telegram
飞书 adapters.feishu
GitHub adapters.github
QQ 频道 adapters.qqguild
钉钉 adapters.ding
Console adapters.console
开黑啦 adapters.kook
Mirai adapters.mirai
Ntchat adapters.ntchat
MineCraft (Spigot) adapters.spigot
BiliBili Live adapters.bilibili

体验

demo bot

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot-plugin-alconna-0.2.4.tar.gz (13.0 kB view hashes)

Uploaded Source

Built Distribution

nonebot_plugin_alconna-0.2.4-py3-none-any.whl (19.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page