mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
chore
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
@@ -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() {
|
||||
|
@@ -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[]> {
|
||||
|
@@ -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) {
|
||||
|
@@ -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[]) {
|
||||
|
@@ -105,7 +105,7 @@ export interface BaseInfo {
|
||||
phoneNum: string
|
||||
categoryId: number
|
||||
richTime: number
|
||||
richBuffer: string
|
||||
richBuffer: Uint8Array
|
||||
}
|
||||
|
||||
interface MusicInfo {
|
||||
|
@@ -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']
|
||||
}
|
@@ -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)
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
@@ -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),
|
||||
|
@@ -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'])
|
||||
})
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user