Compare commits

...

3 Commits

Author SHA1 Message Date
linyuchen
54179cb686 fix: can't get qq of the at member 2024-03-16 03:28:43 +08:00
linyuchen
c9a5ee69cf Merge pull request #130 from super1207/main 2024-03-15 21:17:25 +08:00
super1207
e348103e84 新增设置头像的api,set_qq_avatar 2024-03-15 20:45:22 +08:00
7 changed files with 67 additions and 8 deletions

View File

@@ -1,10 +1,10 @@
{
"manifest_version": 4,
"type": "extension",
"name": "LLOneBot v3.15.0",
"name": "LLOneBot v3.15.1",
"slug": "LLOneBot",
"description": "LiteLoaderQQNT的OneBotApi,不支持商店在线更新",
"version": "3.15.0",
"version": "3.15.1",
"icon": "./icon.jpg",
"authors": [
{

View File

@@ -96,6 +96,8 @@ export enum NTQQApiMethod {
CACHE_CHAT_CLEAR = 'nodeIKernelStorageCleanService/clearChatCacheInfo',
OPEN_EXTRA_WINDOW = 'openExternalWindow',
SET_QQ_AVATAR = 'nodeIKernelProfileService/setHeader'
}
enum NTQQApiChannel {
@@ -894,4 +896,14 @@ export class NTQQApi {
}, null]
});
}
static async setQQAvatar(filePath: string) {
return await callNTQQApi<GeneralCallResult>({
methodName: NTQQApiMethod.SET_QQ_AVATAR,
args: [{
path:filePath
}, null],
timeoutSecond: 10 // 10秒不一定够
});
}
}

View File

@@ -35,12 +35,14 @@ import CleanCache from "./CleanCache";
import GoCQHTTPUploadGroupFile from "./go-cqhttp/UploadGroupFile";
import {GetConfigAction, SetConfigAction} from "./llonebot/Config";
import GetGroupAddRequest from "./llonebot/GetGroupAddRequest";
import SetQQAvatar from './llonebot/SetQQAvatar'
export const actionHandlers = [
new Debug(),
new GetConfigAction(),
new SetConfigAction(),
new GetGroupAddRequest(),
new SetQQAvatar(),
// onebot11
new SendLike(),
new GetMsg(),

View File

@@ -0,0 +1,44 @@
import BaseAction from "../BaseAction";
import {NTQQApi} from "../../../ntqqapi/ntcall";
import {ActionName} from "../types";
import { uri2local } from "../../utils";
import * as fs from "node:fs";
import { checkFileReceived } from "../../../common/utils";
// import { log } from "../../../common/utils";
interface Payload {
file: string
}
export default class SetAvatar extends BaseAction<Payload, null> {
actionName = ActionName.SetQQAvatar
protected async _handle(payload: Payload): Promise<null> {
const {path, isLocal, errMsg} = (await uri2local(payload.file))
if (errMsg){
throw `头像${payload.file}设置失败,file字段可能格式不正确`
}
if (path) {
await checkFileReceived(path, 5000); // 文件不存在QQ会崩溃需要提前判断
const ret = await NTQQApi.setQQAvatar(path)
if (!isLocal){
fs.unlink(path, () => {})
}
if (!ret) {
throw `头像${payload.file}设置失败,api无返回`
}
// log(`头像设置返回:${JSON.stringify(ret)}`)
if (ret['result'] == 1004022) {
throw `头像${payload.file}设置失败,文件可能不是图片格式`
} else if(ret['result'] != 0) {
throw `头像${payload.file}设置失败,未知的错误,${ret['result']}:${ret['errMsg']}`
}
} else {
if (!isLocal){
fs.unlink(path, () => {})
}
throw `头像${payload.file}设置失败,无法获取头像,文件可能不存在`
}
return null
}
}

View File

@@ -15,6 +15,7 @@ export interface InvalidCheckResult {
export enum ActionName {
GetGroupIgnoreAddRequest = "get_group_ignore_add_request",
SetQQAvatar = "set_qq_avatar",
GetConfig = "get_config",
SetConfig = "set_config",
Debug = "llonebot_debug",

View File

@@ -91,7 +91,7 @@ export class OB11Constructor {
let atUid = element.textElement.atNtUid
let atQQ = element.textElement.atUid
if (!atQQ || atQQ === "0") {
const atMember = await getGroupMember(msg.peerUin, null, atUid)
const atMember = await getGroupMember(msg.peerUin, atUid)
if (atMember) {
atQQ = atMember.uin
}
@@ -257,13 +257,13 @@ export class OB11Constructor {
if (groupElement.type == TipGroupElementType.memberIncrease) {
log("收到群成员增加消息", groupElement)
await sleep(1000);
const member = await getGroupMember(msg.peerUid, null, groupElement.memberUid);
const member = await getGroupMember(msg.peerUid, groupElement.memberUid);
let memberUin = member?.uin;
if (!memberUin) {
memberUin = (await NTQQApi.getUserDetailInfo(groupElement.memberUid)).uin
}
// log("获取新群成员QQ", memberUin)
const adminMember = await getGroupMember(msg.peerUid, null, groupElement.adminUid);
const adminMember = await getGroupMember(msg.peerUid, groupElement.adminUid);
// log("获取同意新成员入群的管理员", adminMember)
if (memberUin) {
const operatorUin = adminMember?.uin || memberUin
@@ -280,7 +280,7 @@ export class OB11Constructor {
let duration = parseInt(groupElement.shutUp.duration)
let sub_type: "ban" | "lift_ban" = duration > 0 ? "ban" : "lift_ban"
if (memberUid){
memberUin = (await getGroupMember(msg.peerUid, null, memberUid))?.uin || (await NTQQApi.getUserDetailInfo(memberUid))?.uin
memberUin = (await getGroupMember(msg.peerUid, memberUid))?.uin || (await NTQQApi.getUserDetailInfo(memberUid))?.uin
}
else {
memberUin = "0"; // 0表示全员禁言
@@ -288,7 +288,7 @@ export class OB11Constructor {
duration = -1
}
}
const adminUin = (await getGroupMember(msg.peerUid, null, adminUid))?.uin || (await NTQQApi.getUserDetailInfo(adminUid))?.uin
const adminUin = (await getGroupMember(msg.peerUid, adminUid))?.uin || (await NTQQApi.getUserDetailInfo(adminUid))?.uin
if (memberUin && adminUin) {
return new OB11GroupBanEvent(parseInt(msg.peerUid), parseInt(memberUin), parseInt(adminUin), duration, sub_type);
}

View File

@@ -1 +1 @@
export const version = "3.15.0"
export const version = "3.15.1"