MrXiaoM/Overflow

[建议]对Lagrange合并转发提供支持

Closed this issue · 11 comments

已使用最新版Overflow,连接Lagrange,无法发送合并转发消息(node)。
自己研究了下发现了问题,拉格兰发送转发消息的时候,“uin”的值为qq号的字符串型,如果正常传入整数型会导致拉格兰报错并且无法发送。
是否考虑增加一个配置项以适配合并转发?

已使用最新版Overflow,连接Lagrange,无法发送合并转发消息(node)。 自己研究了下发现了问题,拉格兰发送转发消息的时候,“uin”的值为qq号的字符串型,如果正常传入整数型会导致拉格兰报错并且无法发送。 是否考虑增加一个配置项以适配合并转发?

看到还在open的一个issue已经有反映合并转发这个问题了,看了一下cq码的文档发现了问题出在哪里
合并转发消息节点
文档里注明的uin类型为int64类型,不过下翻找到“自定义消息合并转发”时可以发现uin为字符串型

另外按 Onebot v11 文档说明, data 应全为字符串, 但由于需要接收message 类型的消息, 所以 仅限此Type的content字段 支持Array套娃

import cn.evolvefield.onebot.client.core.toJsonArray
import com.google.gson.GsonBuilder
import com.google.gson.JsonParser
import net.mamoe.mirai.message.data.At
import net.mamoe.mirai.message.data.ForwardMessage
import net.mamoe.mirai.message.data.PlainText
import net.mamoe.mirai.utils.currentTimeSeconds
import top.mrxiaom.overflow.internal.message.OnebotMessages

object LagrangeTest {
    @JvmStatic
    fun main(args: Array<String>) {
        val gson = GsonBuilder().setPrettyPrinting().create()
        val nodeList = listOf(
            ForwardMessage.Node(12345, currentTimeSeconds().toInt(), "测试", PlainText("消息1")),
            ForwardMessage.Node(123456, currentTimeSeconds().toInt(), "测试", At(12345).plus("消息2")),
            ForwardMessage.Node(1234567, currentTimeSeconds().toInt(), "测试", At(123456).plus("消息3")),
            ForwardMessage.Node(12345678, currentTimeSeconds().toInt(), "测试", At(1234567).plus("消息4")),
        ).map {
            val message = JsonParser.parseString(OnebotMessages.serializeToOneBotJson(null, it.messageChain))
            mutableMapOf(
                "type" to "node",
                "data" to mutableMapOf(
                    "name" to it.senderName,
                    "uin" to it.senderId,
                    "content" to message,
                ),
                "time" to it.time
            )
        }
        println(gson.toJson(nodeList.toJsonArray()))
    }
}

QQ截图20240316145243

写了个测试,并没有发现 uin 为字符串类型的情况。
所以 Lagrange 要求的 uin 是字符串是吗

序列化转发消息的部分:OnebotMessages.kt#serializeForwardNodes

了解了,Lagrange 似乎用的是 Onebot 而非 go-cqhttp 的转发格式,之前弄混了
还有个 OnebotFakeNode,用的 go-cqhttp 格式,真的是越来越乱了

ff31deb8310a3ee8440401192a7d3f33
拉格兰特色

已尝试在 2cf7991 修复

好的,稍晚些测试

无法发送转发消息,会提示“消息类型不支持查看”

无法发送转发消息,会提示“消息类型不支持查看”

这是 Lagrange 实现的问题