Tian-que / nonebot-adapter-kaiheila

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

对于mention消息的处理方案 #43

Open ssttkkl opened 6 months ago

ssttkkl commented 6 months ago

KOOK对mention是直接塞在KMarkdown里,目前适配器未进行处理,一方面用户使用起来比较难受,另一方面各种跨平台插件也没法对mention进行建模。

对于mention消息的处理,有以下几种备选方案:

1、把消息中的mention都单独提出来,比如原始消息是[KMarkdown: /command (met)123(met)]的话,就变成[KMarkdown: /command (met)123(met)][Mention: 123]。(问题:用户不只要提取mention,还需要除mention以外剩下的文本) 2、用正则粗暴地匹配(met)123(met),然后分割KMarkdown文本串。(问题:遇到嵌套在其他元素内的mention,这样粗暴分割会导致剩下的KMarkdown不再合法。但是用户发送指令的消息一般不会是太复杂的KMarkdown消息,机器人处理KMarkdown的场景本来就少) 3、对KMarkdown进行解析。具体怎么做、做成什么样都不明确。

ssttkkl commented 6 months ago

机器人处理KMarkdown的场景本来就少,那么是否可以把所有接收的KMarkdown消息都转成纯文本消息(使用KMarkdown消息的raw_content属性,即显示文本),在此之上再处理mention消息。 如果插件确实需要处理KMarkdown,可以直接从事件属性里拿。

ssttkkl commented 6 months ago

是否可以把所有接收的KMarkdown消息都转成纯文本消息(使用KMarkdown消息的raw_content属性,即显示文本)

44 实现了简单消息(KMarkdown消息除了mention的部分以外都是纯文本)直接构造由纯文本与相应Mention构成的消息,可以满足大部分插件使用mention的场景。