Skip to content

Commit 33f27ab

Browse files
committed
🐛 fix kook kmarkdown parse
resolve #91
1 parent 2d1682b commit 33f27ab

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

src/nonebot_plugin_alconna/uniseg/adapters/kook/builder.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@
1818

1919
CHN = re.compile(r"\(chn\)(?P<id>.+?)\(chn\)")
2020
EMJ = re.compile(r"\(emj\)(?P<name>.+?)\(emj\)\[(?P<id>[^\[]+?)\]")
21-
EMJ1 = re.compile(r":(?P<id>.+?):")
2221
NO_CHN = re.compile(r"\[\(chn\)(?P<id>.+?)\(chn\)\]\(.+\)")
2322
NO_EMJ = re.compile(r"\[\(emj\)(?P<name>.+?)\(emj\)\[(?P<id>[^\[]+?)\]\]\(.+\)")
24-
NO_EMJ1 = re.compile(r"\[:(?P<id>.+?):\]\(.+\)")
2523

2624

2725
class KookMessageBuilder(MessageBuilder):
@@ -58,9 +56,6 @@ def preprocess(self, source: Message[MessageSegment]) -> Message[MessageSegment]
5856
for mat in EMJ.finditer(content):
5957
mats[mat.start()] = MessageSegment("emoji", {"id": mat.group("id"), "name": mat.group("name")})
6058
spans[mat.start()] = mat.end()
61-
for mat in EMJ1.finditer(content):
62-
mats[mat.start()] = MessageSegment("emoji", {"id": mat.group("id")})
63-
spans[mat.start()] = mat.end()
6459
for mat in NO_CHN.finditer(content):
6560
if mat.start() + 1 in spans:
6661
del spans[mat.start() + 1]
@@ -69,10 +64,6 @@ def preprocess(self, source: Message[MessageSegment]) -> Message[MessageSegment]
6964
if mat.start() + 1 in spans:
7065
del spans[mat.start() + 1]
7166
del mats[mat.start() + 1]
72-
for mat in NO_EMJ1.finditer(content):
73-
if mat.start() + 1 in spans:
74-
del spans[mat.start() + 1]
75-
del mats[mat.start() + 1]
7667
if not mats:
7768
res.append(MessageSegment.KMarkdown(content))
7869
continue
@@ -88,7 +79,7 @@ def preprocess(self, source: Message[MessageSegment]) -> Message[MessageSegment]
8879
text = ""
8980
res.append(mats[_index])
9081
continue
91-
if _index >= spans[current]:
82+
if current in spans and _index >= spans[current]:
9283
in_mat = False
9384
if not in_mat:
9485
text += char
@@ -108,8 +99,6 @@ def kmarkdown(self, seg: KMarkdown):
10899
mat = re.search(r"\(emj\)(?P<name>[^()\[\]]+)\(emj\)\[(?P<id>[^\[\]]+)\]", content)
109100
if mat:
110101
return Emoji(mat["id"], mat["name"])
111-
if content.startswith(":") and (mat := re.search(r":(?P<id>[^:]+):", content)):
112-
return Emoji(mat["id"])
113102
return Text(seg.data["content"]).mark(0, len(seg.data["content"]), "markdown")
114103

115104
@build("mention")

tests/test_kook.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,11 @@ def test_kook():
2929
assert res1.matched
3030
assert res1.some_arg == "[(met)123456(met)](42345)"
3131
assert res1.some_arg1 == "12345678"
32+
33+
msg2 = Message(MessageSegment.KMarkdown("/foo 1:2:3"))
34+
alc2 = Alconna("/foo", Args["some_arg", str])
35+
res2 = alc2.parse(msg2, ctx)
36+
assert res2.matched
37+
assert res2.some_arg == "1:2:3"
38+
assert alc2.parse(Message(MessageSegment.text("/foo :aaa:")), ctx).matched
39+
assert alc2.parse(Message([MessageSegment.text("/foo "), MessageSegment.KMarkdown(":aaa:")]), ctx).matched

0 commit comments

Comments
 (0)