Nambers / MiraiCP

c++ SDK of Mirai
https://eritque-arcus.tech/MiraiCP/
GNU Affero General Public License v3.0
178 stars 31 forks source link

MessageChain::deserializationFromMiraiCode 中缺失 "]" #101

Closed Asada-Shino closed 2 years ago

Asada-Shino commented 2 years ago

Describe the bug 出现的异常(实际行为和预期行为) 目前代码第257行 https://github.com/Nambers/MiraiCP/blob/main/cpp/include/miraiCP.cpp#L257 mc.add(UnSupportMessage("[mirai:" + tmp)); => mc.add(UnSupportMessage("[mirai:" + tmp + "]")); 不然类似mirai:face等上文未处理的miraicode转化成singlemessage时会缺少“]” (话说type里不加个face嘛)

| loader | v2.8.0-M2 |

Nambers commented 2 years ago

是实际上有出现问题吗? 我当时的设计思路是: 因为tmp变量(https://github.com/Nambers/MiraiCP/blob/main/cpp/include/miraiCP.cpp#L230) 理论上是包含每个miraicode的内容的,就 从[] 然后因为(https://github.com/Nambers/MiraiCP/blob/main/cpp/include/miraiCP.cpp#L231) 这里去掉了开头的[mirai:所以L230是加上了[mirai:, 但是tmp没去掉后面的]所以不用加 可能因为substr少了一位把后面的]去掉了 face的话可以考虑加下,下个版本

Asada-Shino commented 2 years ago

我确实是遇到了问题。 我试着写了一个复读机,机器人复读三个小表情时输出”[mirai:face:297[mirai:face:297[mirai:face:297“,然后我一路溯源查到了这里的代码。我logger.info逐步打印tmp值时确实也没有右括号。 我尝试着修复这个问题:

  1. 我试着多截取一位,使tmp包含"]",但是这样图片消息将无法复读(复读的图片结尾为"\]]")(顺带一提,line242和line245是否反了?2是艾特全体消息,3是图片消息)
  2. 我试着将mc.add(UnSupportMessage("[mirai:" + tmp));改为mc.add(UnSupportMessage("[mirai:" + tmp + "]"));,这解决了我的问题,且图片等消息都能正常发送(复读)
Nambers commented 2 years ago

我确实是遇到了问题。 我试着写了一个复读机,机器人复读三个小表情时输出”[mirai:face:297[mirai:face:297[mirai:face:297“,然后我一路溯源查到了这里的代码。我logger.info逐步打印tmp值时确实也没有右括号。 我尝试着修复这个问题:

  1. 我试着多截取一位,使tmp包含"]",但是这样图片消息将无法复读(复读的图片结尾为"]]")(顺带一提,line242和line245是否反了?2是艾特全体消息,3是图片消息)
  2. 我试着将mc.add(UnSupportMessage("[mirai:" + tmp));改为mc.add(UnSupportMessage("[mirai:" + tmp + "]"));,这解决了我的问题,且图片等消息都能正常发送(复读)

ok,晚点尝试复现和修复

Nambers commented 2 years ago

刚刚看了下qs (一直到这几天才有时间看) 需要注意的是mirai 好像新一点的表情会直接返回文本(比如狗头,返回的类型其实是PlainText + content = "\汪汪") face和marketFace应该会在下个版本加 然后MarketFace 目前Mirai还不支持发送

Nambers commented 2 years ago

在下一个版本 2.8.0 会包含修复