This commit is contained in:
idranme
2024-10-06 20:52:30 +08:00
parent 4cd9adde1d
commit 48588817fb
13 changed files with 57 additions and 138 deletions

View File

@@ -18,12 +18,10 @@ import {
CHANNEL_UPDATE,
CHANNEL_SET_CONFIG_CONFIRMED
} from '../common/channels'
import { getBuildVersion } from '../common/utils'
import { hookNTQQApiCall, hookNTQQApiReceive } from '../ntqqapi/hook'
import { checkNewVersion, upgradeLLOneBot } from '../common/utils/upgrade'
import { getConfigUtil } from '../common/config'
import { checkFfmpeg } from '../common/utils/video'
import { getSession } from '../ntqqapi/wrapper'
import { Context } from 'cordis'
import { llonebotError, selfInfo, LOG_DIR, DATA_DIR, TEMP_DIR } from '../common/globalVars'
import { log, logFileName } from '../common/utils/legacyLog'
@@ -204,15 +202,13 @@ function onLoad() {
})
}
const buildVersion = getBuildVersion()
const intervalId = setInterval(() => {
const self = Object.assign(selfInfo, {
uin: globalThis.authData?.uin,
uid: globalThis.authData?.uid,
online: true
})
if (self.uin && (buildVersion >= 27187 || getSession())) {
if (self.uin) {
clearInterval(intervalId)
start()
}

View File

@@ -213,12 +213,10 @@ export class NTQQFileCacheApi extends Service {
}
getCacheSessionPathList() {
return invoke<
{
key: string
value: string
}[]
>(NTMethod.CACHE_PATH_SESSION, [], { className: NTClass.OS_API })
return invoke<Array<{
key: string
value: string
}>>(NTMethod.CACHE_PATH_SESSION, [], { className: NTClass.OS_API })
}
scanCache() {

View File

@@ -1,7 +1,6 @@
import { Friend, SimpleInfo, CategoryFriend } from '../types'
import { ReceiveCmdS } from '../hook'
import { invoke, NTMethod, NTClass } from '../ntcall'
import { getSession } from '@/ntqqapi/wrapper'
import { Service, Context } from 'cordis'
declare module 'cordis' {
@@ -37,22 +36,13 @@ export class NTQQFriendApi extends Service {
}
async handleFriendRequest(friendUid: string, reqTime: string, accept: boolean) {
const session = getSession()
if (session) {
return session.getBuddyService().approvalFriendRequest({
return await invoke(NTMethod.HANDLE_FRIEND_REQUEST, [{
approvalInfo: {
friendUid,
reqTime,
accept
})
} else {
return await invoke(NTMethod.HANDLE_FRIEND_REQUEST, [{
approvalInfo: {
friendUid,
reqTime,
accept,
},
}])
}
accept,
},
}])
}
async getBuddyV2(refresh = false): Promise<SimpleInfo[]> {

View File

@@ -14,7 +14,6 @@ import {
import { invoke, NTClass, NTMethod } from '../ntcall'
import { GeneralCallResult } from '../services'
import { NTQQWindows } from './window'
import { getSession } from '../wrapper'
import { Service, Context } from 'cordis'
declare module 'cordis' {
@@ -139,21 +138,11 @@ export class NTQQGroupApi extends Service {
}
async setMemberCard(groupCode: string, memberUid: string, cardName: string) {
const session = getSession()
if (session) {
return session.getGroupService().modifyMemberCardName(groupCode, memberUid, cardName)
} else {
return await invoke(NTMethod.SET_MEMBER_CARD, [{ groupCode, uid: memberUid, cardName }])
}
return await invoke(NTMethod.SET_MEMBER_CARD, [{ groupCode, uid: memberUid, cardName }])
}
async setMemberRole(groupCode: string, memberUid: string, role: GroupMemberRole) {
const session = getSession()
if (session) {
return session.getGroupService().modifyMemberRole(groupCode, memberUid, role)
} else {
return await invoke(NTMethod.SET_MEMBER_ROLE, [{ groupCode, uid: memberUid, role }])
}
return await invoke(NTMethod.SET_MEMBER_ROLE, [{ groupCode, uid: memberUid, role }])
}
async setGroupName(groupCode: string, groupName: string) {
@@ -165,47 +154,27 @@ export class NTQQGroupApi extends Service {
}
async removeGroupEssence(groupCode: string, msgId: string) {
const session = getSession()
if (session) {
const data = await session.getMsgService().getMsgsIncludeSelf({ chatType: 2, guildId: '', peerUid: groupCode }, msgId, 1, false)
return session.getGroupService().removeGroupEssence({
const ntMsgApi = this.ctx.get('ntMsgApi')!
const data = await ntMsgApi.getMsgHistory({ chatType: 2, guildId: '', peerUid: groupCode }, msgId, 1, false)
return await invoke('nodeIKernelGroupService/removeGroupEssence', [{
req: {
groupCode: groupCode,
msgRandom: Number(data?.msgList[0].msgRandom),
msgSeq: Number(data?.msgList[0].msgSeq)
})
} else {
const ntMsgApi = this.ctx.get('ntMsgApi')!
const data = await ntMsgApi.getMsgHistory({ chatType: 2, guildId: '', peerUid: groupCode }, msgId, 1, false)
return await invoke('nodeIKernelGroupService/removeGroupEssence', [{
req: {
groupCode: groupCode,
msgRandom: Number(data?.msgList[0].msgRandom),
msgSeq: Number(data?.msgList[0].msgSeq)
}
}])
}
}
}])
}
async addGroupEssence(groupCode: string, msgId: string) {
const session = getSession()
if (session) {
const data = await session.getMsgService().getMsgsIncludeSelf({ chatType: 2, guildId: '', peerUid: groupCode }, msgId, 1, false)
return session.getGroupService().addGroupEssence({
const ntMsgApi = this.ctx.get('ntMsgApi')!
const data = await ntMsgApi.getMsgHistory({ chatType: 2, guildId: '', peerUid: groupCode }, msgId, 1, false)
return await invoke('nodeIKernelGroupService/addGroupEssence', [{
req: {
groupCode: groupCode,
msgRandom: Number(data?.msgList[0].msgRandom),
msgSeq: Number(data?.msgList[0].msgSeq)
})
} else {
const ntMsgApi = this.ctx.get('ntMsgApi')!
const data = await ntMsgApi.getMsgHistory({ chatType: 2, guildId: '', peerUid: groupCode }, msgId, 1, false)
return await invoke('nodeIKernelGroupService/addGroupEssence', [{
req: {
groupCode: groupCode,
msgRandom: Number(data?.msgList[0].msgRandom),
msgSeq: Number(data?.msgList[0].msgSeq)
}
}])
}
}
}])
}
async createGroupFileFolder(groupId: string, folderName: string) {

View File

@@ -2,7 +2,7 @@ import { User, UserDetailInfoByUin, UserDetailInfoByUinV2, UserDetailInfo, UserD
import { invoke } from '../ntcall'
import { getBuildVersion } from '@/common/utils'
import { RequestUtil } from '@/common/utils/request'
import { isNullable, Time } from 'cosmokit'
import { isNullable, pick, Time } from 'cosmokit'
import { Service, Context } from 'cordis'
import { selfInfo } from '@/common/globalVars'
@@ -193,7 +193,7 @@ export class NTQQUserApi extends Service {
async getSelfNick(refresh = true) {
if ((refresh || !selfInfo.nick) && selfInfo.uid) {
const data = await this.getUserSimpleInfo(selfInfo.uid)
selfInfo.nick = data.coreInfo.nick
selfInfo.nick = data.nick
}
return selfInfo.nick
}
@@ -223,7 +223,7 @@ export class NTQQUserApi extends Service {
}])
}
async getUserSimpleInfo(uid: string, force = true) {
async getUserSimpleInfoV2(uid: string, force = true) {
const data = await invoke<{ profiles: Record<string, SimpleInfo> }>(
'nodeIKernelProfileService/getUserSimpleInfo',
[{
@@ -236,7 +236,27 @@ export class NTQQUserApi extends Service {
cmdCB: payload => !isNullable(payload.profiles[uid]),
}
)
return data.profiles[uid]
return data.profiles[uid].coreInfo
}
async getUserSimpleInfo(uid: string, force = true) {
if (getBuildVersion() >= 26702) {
return this.getUserSimpleInfoV2(uid, force)
}
const data = await invoke<{ profiles: Map<string, User> }>(
'nodeIKernelProfileService/getUserSimpleInfo',
[{
uids: [uid],
force
}],
{
cbCmd: 'nodeIKernelProfileListener/onProfileSimpleChanged',
afterFirstCmd: false,
cmdCB: payload => payload.profiles.has(uid),
}
)
const profile = data.profiles.get(uid)!
return pick(profile, ['nick', 'remark', 'uid', 'uin'])
}
async getCoreAndBaseInfo(uids: string[]) {

View File

@@ -105,7 +105,7 @@ export interface BaseInfo {
phoneNum: string
categoryId: number
richTime: number
richBuffer: string
richBuffer: Uint8Array
}
interface MusicInfo {

View File

@@ -1,54 +0,0 @@
import {
NodeIKernelBuddyService,
NodeIKernelGroupService,
NodeIKernelProfileService,
NodeIKernelProfileLikeService,
NodeIKernelMSFService,
NodeIKernelMsgService,
NodeIKernelUixConvertService,
NodeIKernelRichMediaService,
NodeIKernelTicketService,
NodeIKernelTipOffService
} from './services'
import { constants } from 'node:os'
import { Dict } from 'cosmokit'
const Process = require('node:process')
export interface NodeIQQNTWrapperSession {
getBuddyService(): NodeIKernelBuddyService
getGroupService(): NodeIKernelGroupService
getProfileService(): NodeIKernelProfileService
getProfileLikeService(): NodeIKernelProfileLikeService
getMsgService(): NodeIKernelMsgService
getMSFService(): NodeIKernelMSFService
getUixConvertService(): NodeIKernelUixConvertService
getRichMediaService(): NodeIKernelRichMediaService
getTicketService(): NodeIKernelTicketService
getTipOffService(): NodeIKernelTipOffService
}
export interface WrapperApi {
NodeIQQNTWrapperSession?: NodeIQQNTWrapperSession
}
const wrapperApi: WrapperApi = {}
Process.dlopenOrig = Process.dlopen
Process.dlopen = function (module: Dict, filename: string, flags = constants.dlopen.RTLD_LAZY) {
const dlopenRet = this.dlopenOrig(module, filename, flags)
for (const export_name in module.exports) {
module.exports[export_name] = new Proxy(module.exports[export_name], {
construct: (target, args) => {
const ret = new target(...args)
if (export_name === 'NodeIQQNTWrapperSession') wrapperApi.NodeIQQNTWrapperSession = ret
return ret
}
})
}
return dlopenRet
}
export function getSession() {
return wrapperApi['NodeIQQNTWrapperSession']
}

View File

@@ -88,12 +88,12 @@ export namespace OB11Entities {
}
else if (msg.chatType === ChatType.C2C) {
resMsg.sub_type = 'friend'
resMsg.sender.nickname = (await ctx.ntUserApi.getUserSimpleInfo(msg.senderUid)).coreInfo.nick
resMsg.sender.nickname = (await ctx.ntUserApi.getUserSimpleInfo(msg.senderUid)).nick
}
else if (msg.chatType === ChatType.TempC2CFromGroup) {
resMsg.sub_type = 'group'
resMsg.temp_source = 0 //群聊
resMsg.sender.nickname = (await ctx.ntUserApi.getUserSimpleInfo(msg.senderUid)).coreInfo.nick
resMsg.sender.nickname = (await ctx.ntUserApi.getUserSimpleInfo(msg.senderUid)).nick
const ret = await ctx.ntMsgApi.getTempChatInfo(ChatType.TempC2CFromGroup, msg.senderUid)
if (ret?.result === 0) {
resMsg.sender.group_id = Number(ret.tmpChatInfo?.groupCode)

View File

@@ -13,7 +13,7 @@ export const getUser: Handler<User, Payload> = async (ctx, payload) => {
const data = await ctx.ntUserApi.getUserSimpleInfo(uid)
const ranges = await ctx.ntUserApi.getRobotUinRange()
return {
...decodeUser(data.coreInfo),
...decodeUser(data),
is_bot: ranges.some(e => uin >= e.minUin && uin <= e.maxUin)
}
}

View File

@@ -20,7 +20,7 @@ export async function parseGuildMemberAdded(bot: SatoriAdapter, input: RawMessag
}
if (!memberUid) return
const user = decodeUser((await bot.ctx.ntUserApi.getUserSimpleInfo(memberUid)).coreInfo)
const user = decodeUser(await bot.ctx.ntUserApi.getUserSimpleInfo(memberUid))
user.is_bot = isBot
return bot.event('guild-member-added', {
@@ -34,7 +34,7 @@ export async function parseGuildMemberAdded(bot: SatoriAdapter, input: RawMessag
}
export async function parseGuildMemberRemoved(bot: SatoriAdapter, input: GroupNotify) {
const user = decodeUser((await bot.ctx.ntUserApi.getUserSimpleInfo(input.user1.uid)).coreInfo)
const user = decodeUser(await bot.ctx.ntUserApi.getUserSimpleInfo(input.user1.uid))
return bot.event('guild-member-removed', {
guild: decodeGuild(input.group),

View File

@@ -30,6 +30,6 @@ export async function parseMessageDeleted(bot: SatoriAdapter, input: RawMessage)
user: message.user,
channel: message.channel,
guild: message.guild,
operator: omit(decodeUser(user.coreInfo), ['is_bot'])
operator: omit(decodeUser(user), ['is_bot'])
})
}

View File

@@ -7,7 +7,7 @@ export async function parseFriendRequest(bot: SatoriAdapter, input: FriendReques
const user = await bot.ctx.ntUserApi.getUserSimpleInfo(input.friendUid)
return bot.event('friend-request', {
user: decodeUser(user.coreInfo),
user: decodeUser(user),
message: {
id: flag,
content: input.extWords

View File

@@ -163,7 +163,7 @@ export async function decodeMessage(
message.user = decodeMessageUser(data)
message.created_at = +data.msgTime * 1000
if (message.channel.type === Universal.Channel.Type.DIRECT) {
const info = (await ctx.ntUserApi.getUserSimpleInfo(data.senderUid)).coreInfo
const info = await ctx.ntUserApi.getUserSimpleInfo(data.senderUid)
message.channel.name = info.nick
message.user.name = info.nick
message.user.nick = info.remark || info.nick