
Product
Announcing Socket Fix 2.0
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
arclet-alconna-ariadne
Advanced tools
该项目为 Alconna
为 GraiaProject
下项目的内建支持
包括解析器、Dispatcher、SayaSchema 和 附加组件
pip install arclet-alconna-graia, arclet-alconna-ariadne
pdm add arclet-alconna-graia, arclet-alconna-ariadne
或
pip install arclet-alconna-graia, arclet-alconna-avilla
pdm add arclet-alconna-graia, arclet-alconna-avilla
或
pip install arclet-alconna-graia, arclet-alconna-ichika
pdm add arclet-alconna-graia, arclet-alconna-ichika
Alconna-Graia 现在依赖 Launart
的 service
功能
你需要在你使用 Alconna-Graia 组件时加入如下代码:
from launart import Launart
from arclet.alconna.graia import AlconnaGraiaService
from arclet.alconna.xxx import AlconnaXXXAdapter
...
manager = Launart(...)
manager.add_service(AlconnaGraiaService(AlconnaXXXAdapter))
adapater
的使用可以直接导入:
from launart import Launart
from arclet.alconna.graia import AlconnaGraiaService
import arclet.alconna.xxx
...
manager = Launart(...)
manager.add_service(AlconnaGraiaService())
或传入 endpoint, 其等价于直接导入:
from launart import Launart
from arclet.alconna.graia import AlconnaGraiaService
...
manager = Launart(...)
manager.add_service(AlconnaGraiaService("xxx"))
不指定 adapter 时 Alconna-Graia 默认使用基础 adapter
ariadne:
from arclet.alconna import Args
from arclet.alconna.graia import Alconna, AlconnaDispatcher, Match, CommandResult
from arclet.alconna.graia.service import AlconnaGraiaService
import arclet.alconna.ariadne
...
manager = Launart(...)
manager.add_service(AlconnaGraiaService())
app = Ariadne(...)
alc = Alconna("!jrrp", Args["sth", str, 1123])
@app.broadcast.receiver(
GroupMessage,
dispatchers=[AlconnaDispatcher(alc, send_flag='stay')]
)
async def test2(
group: Group,
result: CommandResult[GroupMessage],
sth: Match[str]
):
print("sign:", result.result)
print("sender:", group)
print("match", sth.available, sth.result)
avilla:
from arclet.alconna import Args
from arclet.alconna.graia import Alconna, AlconnaDispatcher, Match, CommandResult
from arclet.alconna.graia.service import AlconnaGraiaService
import arclet.alconna.avilla
...
broadcast = create(Broadcast)
manager = Launart(...)
manager.add_service(AlconnaGraiaService())
avilla = Avilla(...)
alc = Alconna("!jrrp", Args["sth", str, 1123])
@broadcast.receiver(
MessageReceived,
dispatchers=[AlconnaDispatcher(alc, send_flag='stay')]
)
async def test2(
context: Context,
result: CommandResult[MessageReceived],
sth: Match[str]
):
print("sign:", result.result)
print("sender:", context.scene)
print("match", sth.available, sth.result)
in module.py:
from arclet.alconna.graia import Alconna, AlconnaDispatcher, Match, CommandResult, AlconnaSchema
from arclet.alconna import Args
...
channel = Channel.current()
alc = Alconna("!jrrp", Args["sth", str, 1123])
@channel.use(AlconnaSchema(AlconnaDispatcher(alc)))
@channel.use(ListenerSchema([...]))
async def test2(result: CommandResult[...], sth: Match[str]):
print("sign:", result.result)
print("match", sth.available, sth.result)
in main.py:
from arclet.alconna.graia import AlconnaBehaviour
from creart import create
...
saya = create(Saya)
create(AlconnaBehaviour)
with saya.module_context():
saya.require("module")
in module.py:
from graiax.shortcut.saya import listen
from arclet.alconna.graia import alcommand, Alconna, Match, from_command, startswith, endswith
from arclet.alconna import Args, Arpamar
...
@alcommand(Alconna("!jrrp", Args["sth", str, 1123]), private=False)
async def test1(result: Arpamar, sth: Match[str]):
print("sign:", result)
print("match", sth.available, sth.result)
@alcommand("[!|.]hello <name:str>", send_error=True)
async def test1(result: Arpamar, name: Match[str]):
print("sign:", result)
print("match", name.available, name.result)
@listen(...)
@from_command("foo bar {baz}")
async def test2(baz: int):
print("baz", baz)
@listen(...)
@startswith("foo bar")
async def test3(event: ...):
...
@listen(...)
@endswith(int)
async def test4(event: ...):
...
in main.py:
from creart import create
...
saya = create(Saya)
with saya.module_context():
saya.require("module")
class AlconnaDispatcher(BaseDispatcher, Generic[TOHandler]):
def __init__(
self,
command: Alconna | AlconnaGroup,
*,
send_flag: Literal["reply", "post", "stay"] = "stay",
skip_for_unmatch: bool = True,
comp_session: Optional[CompConfig] = None,
message_converter: Callable[[OutType, str], MessageChain | Coroutine[Any, Any, MessageChain]] | None = None,
): ...
command
: 使用的 Alconna 指令
send_flag
: 解析期间输出信息的发送方式
skip_for_unmatch
: 解析失败时是否跳过, 否则错误信息按 send_flag 处理
comp_session
: 补全会话配置, 不传入则不启用补全会话
message_converter
: send_flag 为 reply 时 输出信息的预处理器
Match
: 查询某个参数是否匹配,如foo: Match[int]
。使用时以 Match.available
判断是否匹配成功,以
Match.result
获取匹配结果
Query
: 查询某个参数路径是否存在,如sth: Query[int] = Query("foo.bar")
;可以指定默认值如
Query("foo.bar", 1234)
。使用时以 Query.available
判断是否匹配成功,以 Query.result
获取匹配结果
Header
: 表示命令头部为特殊形式时的头部匹配
assign
: 依托路径是否匹配成功为命令分发处理器。
from arclet.alconna.graia import assign, alcommand
from arclet.alconna import Alconna, Arpamar
...
alc = Alconna(...)
@alcommand(alc, private=False)
@assign("foo")
async def foo(result: Arpamar):
...
@alcommand(alc, private=False)
@assign("bar.baz", 1)
async def bar_baz_1(result: Arpamar):
...
from arclet.alconna.graia import Match, Alc
...
@app.broadcast.receiver(
..., dispatchers=[Alc.from_format("foo bar {baz:int}")]
)
async def test2(baz: Match[int]):
print("match", baz.available, baz.result)
or
from arclet.alconna.graia import Match, AlconnaSchema
...
channel = Channel.current()
@channel.use(AlconnaSchema.from_("foo {sth:str} bar {baz:int}"))
@channel.use(ListenerSchema([...]))
async def test2(sth: Match[str]):
print("match", sth.available, sth.result)
FAQs
Support Alconna to GraiaProject/Ariadne
We found that arclet-alconna-ariadne demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.