[建议]对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()))
}
}
写了个测试,并没有发现 uin 为字符串类型的情况。
所以 Lagrange 要求的 uin 是字符串是吗
序列化转发消息的部分:OnebotMessages.kt#serializeForwardNodes
了解了,Lagrange 似乎用的是 Onebot 而非 go-cqhttp 的转发格式,之前弄混了
还有个 OnebotFakeNode,用的 go-cqhttp 格式,真的是越来越乱了
qs
好的,稍晚些测试
无法发送转发消息,会提示“消息类型不支持查看”
无法发送转发消息,会提示“消息类型不支持查看”
这是 Lagrange 实现的问题