Tian-que / nonebot-adapter-kaiheila

Kaiheila adapter for nonebot2
MIT License
27 stars 9 forks source link

希望支持 kmarkdown 的构造和解析 #23

Open MeetWq opened 1 year ago

MeetWq commented 1 year ago

@abrahum 的 kookwalle-k 中实现了类似的功能:

https://github.com/abrahum/kook/blob/master/src/kmarkdown/mod.rs https://github.com/abrahum/kook/blob/master/src/kmarkdown/parse.rs https://github.com/onebot-walle/walle-k/blob/main/src/parse/message.rs

Tian-que commented 1 year ago

这周末看看能不能超一个

ssttkkl commented 1 year ago

其实我不太理解为什么需要构造和解析kmd,手写有什么局限性或者说构造和解析有什么优势吗()

MeetWq commented 1 year ago

其实我不太理解为什么需要构造和解析kmd,手写有什么局限性或者说构造和解析有什么优势吗()

类似于为什么要用 MessageSegment 代替 CQ码 手写发送的时候还好,解析的时候就麻烦了,比如我现在有个需求是从 kmd 中拿到被 mention 的 id

ssttkkl commented 1 year ago

我觉得比较好的方案是把kmd相关的功能单独做成一个库,然后由插件开发者手动调用。 一方面我理解kmd和cq码不一样,大部分场景都不需要做解析,没必要引入额外的性能开销,另一方面可以直接用pyo3之类的方案把上面现成的rust库粘上

看看@Tian-que 怎么说

ssttkkl commented 1 year ago

其实需要mention的id的话可以在事件的extra属性拿到

https://github.com/Tian-que/nonebot-adapter-kaiheila/blob/7a495b3191e75c02a687180066ee5493fd81ae87/nonebot/adapters/kaiheila/event.py#L71

kexue-z commented 1 year ago

KMD 我搬了这个来用 https://github.com/kexue-z/KaiheilaCardBuilder

自己用了一些写的 https://github.com/kexue-z/Dao-bot/blob/master/plugins/mc/kook/utils.py

效果-->

image

image

Tian-que commented 1 year ago

其实我不太理解为什么需要构造和解析kmd,手写有什么局限性或者说构造和解析有什么优势吗()

类似于为什么要用 MessageSegment 代替 CQ码 手写发送的时候还好,解析的时候就麻烦了,比如我现在有个需求是从 kmd 中拿到被 mention 的 id

从复用角度来看,就像@ssttkkl 说的那样, 这部分可以单独抽出来作为一个功能性组件,@kexue-z搞了一个Python实现的KaiheilaCardBuilder,可以试一下

ssttkkl commented 10 months ago

https://gist.github.com/RF-Tar-Railt/d8d48812303a477a09868dc1bd08a0d9