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.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8559e432cedba3e1b6b3a93a30b301d00997a531032b02ff0cacb9a9ef8be744 |
|
MD5 | 6e9164e059fae39bd3e94fc7df067b40 |
|
BLAKE2b-256 | 5f61203460791b4141eb367dc5a2f7bea5f044bc643fdcc5810a1e691fd8a672 |
Close
Hashes for nonebot_plugin_alconna-0.2.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b6cf0b111f3644871552cafe078b844761428820d6ef8fe69d7bc26f54dd9711 |
|
MD5 | 89247d0c6f6bf1177a85f60b59b8ebba |
|
BLAKE2b-256 | 1c5c9cc0c95d2a02e0ea8d98b594db8b7a1ff32a7095d7d04a38fe91da38e8bf |