Alconna Adapter for Nonebot
Project description
NoneBot Plugin Alconna
✨ Alconna Usage For NoneBot2 ✨
该插件提供了 Alconna 的 Nonebot2 适配版本与工具
特性
- 完整的 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 |
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
Built Distribution
Close
Hashes for nonebot-plugin-alconna-0.2.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55dc25fd298e12536fb2bc90f54dc8c705a81f8653e6be120b3b79733bd1f936 |
|
MD5 | 3e9e352901203862739d0e784161d101 |
|
BLAKE2b-256 | 71b36af859b809f8f9c70d53f682fb75a1b42b2f46e8a97250a2e75d71a364bf |
Close
Hashes for nonebot_plugin_alconna-0.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b8d7f0e69c3a30b5f54e08dbcf6f6a9a965dda8e21ec886e68ea26128b3908d |
|
MD5 | d61aadc2e45aefb4467fe46ae0df3053 |
|
BLAKE2b-256 | 8c93877befe270ade1731f2f5a48968586b82221934afdce4eb03bcfbc4b8f67 |