mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
Merge branch 'main' into dev
# Conflicts: # src/onebot11/constructor.ts
This commit is contained in:
commit
f30dd81455
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 4,
|
"manifest_version": 4,
|
||||||
"type": "extension",
|
"type": "extension",
|
||||||
"name": "LLOneBot v3.20.0",
|
"name": "LLOneBot v3.20.1",
|
||||||
"slug": "LLOneBot",
|
"slug": "LLOneBot",
|
||||||
"description": "使你的NTQQ支持OneBot11协议进行QQ机器人开发, 不支持商店在线更新",
|
"description": "使你的NTQQ支持OneBot11协议进行QQ机器人开发, 不支持商店在线更新",
|
||||||
"version": "3.20.0",
|
"version": "3.20.1",
|
||||||
"icon": "./icon.jpg",
|
"icon": "./icon.jpg",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
@ -94,9 +94,9 @@ export async function refreshGroupMembers(groupQQ: string) {
|
|||||||
export const uidMaps: Record<string, string> = {} // 一串加密的字符串(uid) -> qq号
|
export const uidMaps: Record<string, string> = {} // 一串加密的字符串(uid) -> qq号
|
||||||
|
|
||||||
export function getUidByUin(uin: string) {
|
export function getUidByUin(uin: string) {
|
||||||
for (const key in uidMaps) {
|
for (const uid in uidMaps) {
|
||||||
if (uidMaps[key] === uin) {
|
if (uidMaps[uid] === uin) {
|
||||||
return key
|
return uid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ import {
|
|||||||
friendRequests,
|
friendRequests,
|
||||||
getFriend,
|
getFriend,
|
||||||
getGroup,
|
getGroup,
|
||||||
getGroupMember,
|
getGroupMember, groups,
|
||||||
llonebotError,
|
llonebotError,
|
||||||
refreshGroupMembers,
|
refreshGroupMembers,
|
||||||
selfInfo,
|
selfInfo,
|
||||||
@ -54,7 +54,6 @@ import {log} from "../common/utils/log";
|
|||||||
import {getConfigUtil} from "../common/config";
|
import {getConfigUtil} from "../common/config";
|
||||||
import {checkFfmpeg} from "../common/utils/video";
|
import {checkFfmpeg} from "../common/utils/video";
|
||||||
|
|
||||||
|
|
||||||
let running = false;
|
let running = false;
|
||||||
|
|
||||||
let mainWindow: BrowserWindow | null = null;
|
let mainWindow: BrowserWindow | null = null;
|
||||||
@ -63,7 +62,6 @@ let mainWindow: BrowserWindow | null = null;
|
|||||||
function onLoad() {
|
function onLoad() {
|
||||||
log("llonebot main onLoad");
|
log("llonebot main onLoad");
|
||||||
ipcMain.handle(CHANNEL_CHECK_VERSION, async (event, arg) => {
|
ipcMain.handle(CHANNEL_CHECK_VERSION, async (event, arg) => {
|
||||||
|
|
||||||
return checkNewVersion();
|
return checkNewVersion();
|
||||||
});
|
});
|
||||||
ipcMain.handle(CHANNEL_UPDATE, async (event, arg) => {
|
ipcMain.handle(CHANNEL_UPDATE, async (event, arg) => {
|
||||||
@ -373,13 +371,7 @@ function onLoad() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
startReceiveHook().then();
|
startReceiveHook().then();
|
||||||
// NTQQGroupApi.getGroups(true).then(_groups => {
|
NTQQGroupApi.getGroups(true).then()
|
||||||
// _groups.map(group => {
|
|
||||||
// if (!groups.find(g => g.groupCode == group.groupCode)) {
|
|
||||||
// groups.push(group)
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
const config = getConfigUtil().getConfig()
|
const config = getConfigUtil().getConfig()
|
||||||
if (config.ob11.enableHttp) {
|
if (config.ob11.enableHttp) {
|
||||||
ob11HTTPServer.start(config.ob11.httpPort)
|
ob11HTTPServer.start(config.ob11.httpPort)
|
||||||
|
@ -3,7 +3,9 @@ import {SelfInfo, User} from "../types";
|
|||||||
import {ReceiveCmdS} from "../hook";
|
import {ReceiveCmdS} from "../hook";
|
||||||
import {uidMaps} from "../../common/data";
|
import {uidMaps} from "../../common/data";
|
||||||
import {NTQQWindowApi, NTQQWindows} from "./window";
|
import {NTQQWindowApi, NTQQWindows} from "./window";
|
||||||
|
import {isQQ998, sleep} from "../../common/utils";
|
||||||
|
|
||||||
|
let userInfoCache: Record<string, User> = {}; // uid: User
|
||||||
|
|
||||||
export class NTQQUserApi{
|
export class NTQQUserApi{
|
||||||
static async setQQAvatar(filePath: string) {
|
static async setQQAvatar(filePath: string) {
|
||||||
@ -31,8 +33,11 @@ export class NTQQUserApi{
|
|||||||
return result.profiles.get(uid)
|
return result.profiles.get(uid)
|
||||||
}
|
}
|
||||||
static async getUserDetailInfo(uid: string) {
|
static async getUserDetailInfo(uid: string) {
|
||||||
|
// this.getUserInfo(uid);
|
||||||
|
let methodName = !isQQ998 ? NTQQApiMethod.USER_DETAIL_INFO : NTQQApiMethod.USER_DETAIL_INFO_WITH_BIZ_INFO
|
||||||
|
const fetchInfo = async ()=>{
|
||||||
const result = await callNTQQApi<{ info: User }>({
|
const result = await callNTQQApi<{ info: User }>({
|
||||||
methodName: NTQQApiMethod.USER_DETAIL_INFO,
|
methodName,
|
||||||
cbCmd: ReceiveCmdS.USER_DETAIL_INFO,
|
cbCmd: ReceiveCmdS.USER_DETAIL_INFO,
|
||||||
afterFirstCmd: false,
|
afterFirstCmd: false,
|
||||||
cmdCB: (payload) => {
|
cmdCB: (payload) => {
|
||||||
@ -53,6 +58,15 @@ export class NTQQUserApi{
|
|||||||
}
|
}
|
||||||
return info
|
return info
|
||||||
}
|
}
|
||||||
|
// 首次请求两次才能拿到的等级信息
|
||||||
|
if (!userInfoCache[uid]) {
|
||||||
|
await fetchInfo()
|
||||||
|
}
|
||||||
|
await sleep(1000);
|
||||||
|
let userInfo = await fetchInfo()
|
||||||
|
userInfoCache[uid] = userInfo
|
||||||
|
return userInfo
|
||||||
|
}
|
||||||
|
|
||||||
static async getPSkey() {
|
static async getPSkey() {
|
||||||
return await callNTQQApi<string>({
|
return await callNTQQApi<string>({
|
||||||
|
@ -35,6 +35,7 @@ export enum NTQQApiMethod {
|
|||||||
GROUP_MEMBERS = "nodeIKernelGroupService/getNextMemberList",
|
GROUP_MEMBERS = "nodeIKernelGroupService/getNextMemberList",
|
||||||
USER_INFO = "nodeIKernelProfileService/getUserSimpleInfo",
|
USER_INFO = "nodeIKernelProfileService/getUserSimpleInfo",
|
||||||
USER_DETAIL_INFO = "nodeIKernelProfileService/getUserDetailInfo",
|
USER_DETAIL_INFO = "nodeIKernelProfileService/getUserDetailInfo",
|
||||||
|
USER_DETAIL_INFO_WITH_BIZ_INFO = "nodeIKernelProfileService/getUserDetailInfoWithBizInfo",
|
||||||
FILE_TYPE = "getFileType",
|
FILE_TYPE = "getFileType",
|
||||||
FILE_MD5 = "getFileMd5",
|
FILE_MD5 = "getFileMd5",
|
||||||
FILE_COPY = "copyFile",
|
FILE_COPY = "copyFile",
|
||||||
|
@ -172,9 +172,11 @@ export interface ArkElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const IMAGE_HTTP_HOST = "https://gchat.qpic.cn"
|
export const IMAGE_HTTP_HOST = "https://gchat.qpic.cn"
|
||||||
|
export const IMAGE_HTTP_HOST_NEW = "https://multimedia.nt.qq.com.cn"
|
||||||
|
|
||||||
export interface PicElement {
|
export interface PicElement {
|
||||||
originImageUrl: string; // http url, 没有host,host是https://gchat.qpic.cn/
|
originImageUrl: string; // http url, 没有host,host是https://gchat.qpic.cn/, 带download参数的是https://multimedia.nt.qq.com.cn
|
||||||
|
originImageMd5?: string;
|
||||||
sourcePath: string; // 图片本地路径
|
sourcePath: string; // 图片本地路径
|
||||||
thumbPath: Map<number, string>;
|
thumbPath: Map<number, string>;
|
||||||
picWidth: number;
|
picWidth: number;
|
||||||
|
@ -14,7 +14,7 @@ import {
|
|||||||
GrayTipElementSubType,
|
GrayTipElementSubType,
|
||||||
Group,
|
Group,
|
||||||
GroupMember,
|
GroupMember,
|
||||||
IMAGE_HTTP_HOST,
|
IMAGE_HTTP_HOST, IMAGE_HTTP_HOST_NEW,
|
||||||
RawMessage,
|
RawMessage,
|
||||||
SelfInfo,
|
SelfInfo,
|
||||||
Sex,
|
Sex,
|
||||||
@ -148,6 +148,16 @@ export class OB11Constructor {
|
|||||||
}
|
}
|
||||||
} else if (fileMd5 && element.picElement.fileUuid.indexOf("_") === -1) { // fileuuid有下划线的是Linux发送的,这个url是另外的格式,目前尚未得知如何组装
|
} else if (fileMd5 && element.picElement.fileUuid.indexOf("_") === -1) { // fileuuid有下划线的是Linux发送的,这个url是另外的格式,目前尚未得知如何组装
|
||||||
message_data["data"]["url"] = `${IMAGE_HTTP_HOST}/gchatpic_new/0/0-0-${fileMd5.toUpperCase()}/0`
|
message_data["data"]["url"] = `${IMAGE_HTTP_HOST}/gchatpic_new/0/0-0-${fileMd5.toUpperCase()}/0`
|
||||||
|
if (url.startsWith("/download") && url.includes("&rkey")){
|
||||||
|
message_data["data"]["url"] = IMAGE_HTTP_HOST_NEW + url
|
||||||
|
}
|
||||||
|
else if (!url.startsWith("/download")){
|
||||||
|
message_data["data"]["url"] = IMAGE_HTTP_HOST + url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!message_data["data"]["url"]){
|
||||||
|
message_data["data"]["url"] = `${IMAGE_HTTP_HOST}/gchatpic_new/0/0-0-${md5HexStr.toUpperCase()}/0`
|
||||||
}
|
}
|
||||||
// message_data["data"]["file_id"] = element.picElement.fileUuid
|
// message_data["data"]["file_id"] = element.picElement.fileUuid
|
||||||
message_data["data"]["file_size"] = element.picElement.fileSize
|
message_data["data"]["file_size"] = element.picElement.fileSize
|
||||||
|
@ -1 +1 @@
|
|||||||
export const version = "3.20.0"
|
export const version = "3.20.1"
|
Loading…
x
Reference in New Issue
Block a user