Closed jhqwqmc closed 5 months ago
有报错日志吗?
有报错日志吗?
Uncaught Error: Error invoking remote method 'LiteLoader.lite_tools.getRkey': TypeError: Cannot read properties of undefined (reading 'expired_time')
和我上面描述的是一样的
已修复
已修复
有点小问题,请求接口http://127.0.0.1:9814/get_rkey
返回的是
{
"status": "ok",
"retcode": 0,
"data": {
"private_rkey": "&rkey=xxx1xxx",
"group_rkey": "&rkey=xxx2xxx"
},
"echo": null
}
然后插件读取的时候是直接把返回值当作
{
"private_rkey": "&rkey=xxx1xxx",
"group_rkey": "&rkey=xxx2xxx"
}
const newRkey = await fetch(config.rkeyAPI).then((res) => res.json());
const rkeyData = newRkey.data;
if (typeof rkeyData.group_rkey === "string" && typeof rkeyData.private_rkey === "string") {
rkey = rkeyData;
log2("成功更新rkey", rkey);
} else {
log2("数据返回格式错误", rkeyData);
就完全没问题了
我用的接口套了一层转发还没注意到这个问题,建议是给返回添加一个 expired_time
字段避免请求过于频繁,下面是 Mlikiowa 写的实现
import time
import requests
from flask import Flask, request
HTTP_RKEY_SEVER_URL = "http://127.0.0.1:8083/get_rkey"
def client_getRkey(url):
result = requests.get(url).json()
private_rkey = result['data']['private_rkey']
group_rkey = result['data']['group_rkey']
return {"private_rkey": private_rkey, "group_rkey": group_rkey}
create_time = int(time.time()) # 当前10位时间戳
rkey = client_getRkey(HTTP_RKEY_SEVER_URL)
rkey["expired_time"] = create_time + 60*60
app = Flask(__name__)
@app.route('/get_rkey', methods=['POST', 'GET'])
def server_rkey():
global create_time, rkey
if int(time.time()) - create_time > 60 * 60:
rkey = client_getRkey(HTTP_RKEY_SEVER_URL)
rkey["expired_time"] = create_time + 60 * 60
create_time = int(time.time())
return rkey
app.run(host='0.0.0.0', port=8068, debug=True)
貌似在对表情包这种特殊图片进行搜索的时候,会出现非法请求的问题,需要把api换成 https://gchat.qpic.cn 才能解决,但是在配置文件中替换,会在下次启动时重新恢复默认,不过如果把 https://multimedia.nt.qq.com.cn 全换成 https://gchat.qpic.cn 也没问题
和表情包无关,是对方使用的版本过低导致的,2.30.1理论上我应该已经修复了两个图片地址的拼接问题了啊
和表情包无关,是对方使用的版本过低导致的,2.30.1理论上我应该已经修复了两个图片地址的拼接问题了啊
要不还是先全用 https://gchat.qpic.cn/ 接口?这个貌似没什么兼容性问题
我用的接口套了一层转发还没注意到这个问题,建议是给返回添加一个
expired_time
字段避免请求过于频繁,下面是 Mlikiowa 写的实现
话说这个为什么不在 FetchRkeyOperation.cs 里实现呢?
using System.Text.Json.Nodes;
using Lagrange.Core;
using Lagrange.Core.Common.Interface.Api;
using Lagrange.OneBot.Core.Entity.Action;
namespace Lagrange.OneBot.Core.Operation.Generic;
[Operation("get_rkey")]
public class FetchRkeyOperation : IOperation
{
public async Task<OneBotResult> HandleOperation(BotContext context, JsonNode? payload)
{
long expiredTime = (long)(DateTime.UtcNow.AddMinutes(10) - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
var rkeys = await context.FetchRkey();
return new OneBotResult(new JsonObject { { "private_rkey", rkeys[0] }, { "group_rkey", rkeys[1] }, { "expired_time", expiredTime} }, 0, "ok");
}
}
https://github.com/jhqwqmc/Lagrange.Core/actions/runs/9557782455
和表情包无关,是对方使用的版本过低导致的,2.30.1理论上我应该已经修复了两个图片地址的拼接问题了啊
要不还是先全用 https://gchat.qpic.cn/ 接口?这个貌似没什么兼容性问题
部分新版客户端发送的图片用旧接口无法获取
部分新版客户端发送的图片用旧接口无法获取
那可以先在跳转浏览器前,先请求这个url的头部返回是否为200,如果不是就回退旧接口
我用的接口套了一层转发还没注意到这个问题,建议是给返回添加一个
expired_time
字段避免请求过于频繁,下面是 Mlikiowa 写的实现话说这个为什么不在 FetchRkeyOperation.cs 里实现呢?
因为这个项目不是为了这个功能写的,更主要的原因是我不会C#
部分新版客户端发送的图片用旧接口无法获取
那可以先在跳转浏览器前,先请求这个url的头部返回是否为200,如果不是就回退旧接口
倒也不用,只需要判断链接中的特殊格式就行了,我是没预判到他会返回使用旧接口的标记的同时返回新接口的路径
已修复
有点小问题,请求接口
http://127.0.0.1:9814/get_rkey
返回的是{ "status": "ok", "retcode": 0, "data": { "private_rkey": "&rkey=xxx1xxx", "group_rkey": "&rkey=xxx2xxx" }, "echo": null }
然后插件读取的时候是直接把返回值当作
{ "private_rkey": "&rkey=xxx1xxx", "group_rkey": "&rkey=xxx2xxx" }
现已兼容两种接口返回的数据
请确保您已阅读以上注意事项,并勾选下方的确认框。
QQNT 版本
9.9.11.24402
LiteLoaderQQNT 版本
1.1.1
轻量工具箱 版本
2.30.0
运行环境
Windows
已安装插件列表
No response
重现步骤
调用
搜索图片
功能期望的结果是什么?
可以正常调用getRkey
实际的结果是什么?
https://github.com/xiyuesaves/LiteLoaderQQNT-lite_tools/blob/118f68c60be58dc140d2981087408acc8e9bcd4f/src/main_modules/getRkey.js#L12 这一行的
rkey.expired_time
会获取失败,rkey
打印出来是undefined
导致报错补充说明(可选)
No response