This repository was archived by the owner on Jul 21, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdemo.py
More file actions
127 lines (103 loc) · 3.29 KB
/
Copy pathdemo.py
File metadata and controls
127 lines (103 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# 应与使用的 adapter 对应
# 不加也可以,做了兼容
import nonebot_plugin_alconna.adapters.onebot12 # noqa: F401
from arclet.alconna import Alconna, Args, Arparma, Option, Subcommand, command_manager, namespace, Duplication, SubcommandStub
from importlib_metadata import distributions
from nonebot.adapters.onebot.v12.message import Message, MessageSegment
from nonebot_plugin_alconna import (
AlconnaMatches, on_alconna, set_output_converter, AlconnaDuplication,
Check, assign, funcommand
)
from tarina import lang
from typing import Literal
set_output_converter(lambda t, x: Message([MessageSegment.text(x)]))
with namespace("nbtest") as ns:
ns.headers = ["/"]
ns.builtin_option_name["help"] = {"-h", "帮助", "--help"}
help_cmd = on_alconna(Alconna("help"))
pip = Alconna(
"pip",
Subcommand(
"install",
Args["pak", str],
Option("--upgrade"),
Option("--force-reinstall"),
),
Subcommand("list", Option("--out-dated")),
)
# auto_send already set in .env
pipcmd = on_alconna(pip, comp_config={'timeout': 10}, block=True) # , auto_send_output=True)
ali = on_alconna(Alconna(["/"], "一言"), aliases={"hitokoto"}, skip_for_unmatch=True)
i18n = on_alconna(Alconna("lang", Args["lang", ["zh_CN", "en_US"]]))
class PipResult(Duplication):
list: SubcommandStub
pak: str
def get_dist_map() -> dict:
"""获取与项目相关的发行字典"""
dist_map: dict = {}
for dist in distributions():
name: str = dist.metadata["Name"]
version: str = dist.metadata["Version"]
if not name or not version:
continue
dist_map[name] = max(version, dist_map.get(name, ""))
return dist_map
@help_cmd.handle()
async def _help(arp: Arparma = AlconnaMatches()):
await help_cmd.send(MessageSegment.text(command_manager.all_command_help()))
@i18n.handle()
async def _i18n(arp: Arparma = AlconnaMatches()):
try:
lang.select(arp["lang"])
except ValueError as e:
await i18n.finish(str(e))
await i18n.send("ok")
@pipcmd.handle([Check(assign("list"))])
async def ll():
md = "\n".join([f"- {k} {v}" for k, v in get_dist_map().items()])
await pipcmd.send(MessageSegment.text(md))
@pipcmd.handle([Check(assign("install.pak"))])
async def ll(res: PipResult = AlconnaDuplication(PipResult)):
await pipcmd.send(f"pip installing {res.pak}...")
@pipcmd.handle()
async def ll():
await pipcmd.send("WIP...")
@ali.handle()
async def yiyan(res: Arparma = AlconnaMatches()):
if res.matched:
await ali.send("WIP...")
# else:
# await ali.send(f"[hitokoto] Unmatched: {res}")
table = {
"add": float.__add__,
"sub": float.__sub__,
"mul": float.__mul__,
"div": float.__truediv__,
}
@funcommand()
async def calc(
op: Literal["add", "sub", "mul", "div"],
a: float, b: float
):
"""加法测试"""
return f"{a} {op} {b} = {table[op](a, b)}"
@funcommand()
async def test(
a: int,
b: bool,
*args: str,
c: float = 1.0,
d: int = 1,
e: bool = False,
**kwargs: str,
):
"""测试"""
return (
f"a: {a}\n"
f"b: {b}\n"
f"c: {c}\n"
f"d: {d}\n"
f"e: {e}\n"
f"args: {args}\n"
f"kwargs: {kwargs}\n"
)