oicq
oicq copied to clipboard
无法获取语音消息的 URL
Node.js Version
v16.16.0
Package(oicq) Version
2.3.1
Login Protocol
iPad
Bug Description (最好截图说明,你的文字描述可能无法准确传达信息)
最近正在尝试写 QQ 到其它聊天协议的桥接,在处理语音消息时发现消息的 URL 为空,示例代码大致如下:
qqBot.on('message.group', (e) => {
if (e.message.length === 1 && e.message[0].type === 'record') {
console.log(e.message[0]);
}
});
根据源码判断,可能是协议有变,语音消息可能不带 URL 参数?
下图是我在 VSCode debug 时得到的 proto 对象:
Log Details (控制台日志,请提供包含前后一段时间内的)
[2022-10-24T20:05:14.633] [MARK] [iPad:2041074485] - ----------
[2022-10-24T20:05:14.634] [MARK] [iPad:2041074485] - Package Version: [email protected] (Released on 2022/6/21)
[2022-10-24T20:05:14.634] [MARK] [iPad:2041074485] - View Changelogs:https://github.com/takayama-lily/oicq/releases
[2022-10-24T20:05:14.634] [MARK] [iPad:2041074485] - ----------
[2022-10-24T20:05:14.701] [MARK] [iPad:2041074485] - 163.177.30.25:8080 connected
[2022-10-24T20:05:14.834] [MARK] [iPad:2041074485] - Welcome, [REMOVED] ! 正在加载资源...
[2022-10-24T20:05:15.004] [MARK] [iPad:2041074485] - 加载了4个好友,3个群,0个陌生人
[2022-10-24T20:05:21.334] [INFO] [iPad:2041074485] - recv from: [Group: [REMOVED], Member: [REMOVED]] {ptt:}
{
type: 'record',
file: 'protobuf://CAQiEA2dh2wFA9P+MBEmXj6PvNMqKnswRDlEODc2Qy0wNTAzLUQzRkUtMzAxMS0yNjVFM0U4RkJDRDN9LmFtcjDmETpcFjYgOTJrQTEEN2VkMzQ0YWIgICAgICAgMCAgICAgICAwDZ2HbAUD0/4wESZePo+803swRDlEODc2Qy0wNTAzLUQzRkUtMzAxMS0yNjVFM0U4RkJDRDN9LmFtckFAq4nN9gdIAFAAWAGSASQ5OHpPaWtNX3RPWDhPb2szdHU4cjVjTVEjM2o0Q1VCZmZPWFGYAQHoAQHyAQ0IABIFCACAAQAoADgA',
url: '',
md5: '0d9d876c0503d3fe3011265e3e8fbcd3',
size: 2278,
seconds: 1
}
~~收到消息的时候再 getMsg
一下就有 url 了(~~
稍微扯皮一下,其实 go-cqhttp 也有类似问题,我刚刚在那边提了个 issue,看看那边的开发者能不能给出解决方案 Mrs4s/go-cqhttp#1749
看上去现在某些协议登录必须用另外的命令获取语音的 url 了。
我最近在自己的 icalingua++ 分支修了这个问题,供参考: https://github.com/5ec1cff/Icalingua-plus-plus/commit/f7d4959c8a8db592a11176ca1fd7bf3be1a2c820
也可以看看 mirai 的解决方法: https://github.com/mamoe/mirai/commit/9eef7d378719476e8f9352acfe6328111d3734db