Tian-que / nonebot-adapter-kaiheila

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

[Bug] MessageSegment.KMarkdown 出错 #37

Closed RF-Tar-Railt closed 10 months ago

RF-Tar-Railt commented 10 months ago
from nonebot.adapters.kaiheila.message import MessageSegment

msg = "/command " + MessageSegment.KMarkdown("(met)123456(met)12345678")

这样会在 Message.reduce 报错:

self = [MessageSegment(type='kmarkdown', data={'content': '/command '}), MessageSegment(type='kmarkdown', data={'content': '(met)123456(met)12345678', 'raw_content': ''})]

    def reduce(self) -> None:
        """合并消息内连续的纯文本段和 KMarkdown 段。"""
        index = 1
        while index < len(self):
            prev = self[index - 1]
            cur = self[index]
            if prev.type == "text" and cur.type == "text":
                self[index - 1] = MessageSegment(prev.type, {
                    "content": prev.data["content"] + cur.data["content"]
                })
                del self[index]
            elif prev.type == "kmarkdown" and cur.type == "kmarkdown":
                self[index - 1] = MessageSegment(prev.type, {
                    "content": prev.data["content"] + cur.data["content"],
>                   "raw_content": prev.data["raw_content"] + cur.data["raw_content"],
                })
E               KeyError: 'raw_content'

.venv\lib\site-packages\nonebot\adapters\kaiheila\message.py:223: KeyError

原因

MessageSegment:

    @overrides(BaseMessageSegment)
    def __add__(self, other: Union[str, "MessageSegment", Iterable["MessageSegment"]]) -> "Message":
        return Message(self.conduct(other))

    @overrides(BaseMessageSegment)
    def __radd__(self, other: Union[str, "MessageSegment", Iterable["MessageSegment"]]) -> "Message":
        if isinstance(other, str):
            other = MessageSegment(self.type, {"content": other})
        return Message(other.conduct(self))

我无法理解你这么写的用意是什么

ssttkkl commented 10 months ago

看起来只是单纯的写错了,我改一下