mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
107 lines
3.2 KiB
TypeScript
107 lines
3.2 KiB
TypeScript
import {NTQQApi} from '../ntqqapi/ntcall'
|
|
import {
|
|
type Friend,
|
|
type FriendRequest,
|
|
type Group,
|
|
type GroupMember,
|
|
type GroupNotify,
|
|
type RawMessage,
|
|
type SelfInfo
|
|
} from '../ntqqapi/types'
|
|
import {type FileCache, type LLOneBotError} from './types'
|
|
import {dbUtil} from "./db";
|
|
import {raw} from "express";
|
|
import {log} from "./utils";
|
|
|
|
export const selfInfo: SelfInfo = {
|
|
uid: '',
|
|
uin: '',
|
|
nick: '',
|
|
online: true
|
|
}
|
|
export let groups: Group[] = []
|
|
export let friends: Friend[] = []
|
|
export let friendRequests: Map<number, FriendRequest> = new Map<number, FriendRequest>()
|
|
export const llonebotError: LLOneBotError = {
|
|
ffmpegError: '',
|
|
otherError: ''
|
|
}
|
|
|
|
|
|
export async function getFriend(qq: string, uid: string = ""): Promise<Friend | undefined> {
|
|
let filterKey = uid ? "uid" : "uin"
|
|
let filterValue = uid ? uid : qq
|
|
let friend = friends.find(friend => friend[filterKey] === filterValue.toString())
|
|
// if (!friend) {
|
|
// try {
|
|
// friends = (await NTQQApi.getFriends(true))
|
|
// friend = friends.find(friend => friend[filterKey] === filterValue.toString())
|
|
// } catch (e) {
|
|
// // log("刷新好友列表失败", e.stack.toString())
|
|
// }
|
|
// }
|
|
return friend
|
|
}
|
|
|
|
export async function getGroup(qq: string): Promise<Group | undefined> {
|
|
let group = groups.find(group => group.groupCode === qq.toString())
|
|
if (!group) {
|
|
try {
|
|
const _groups = await NTQQApi.getGroups(true);
|
|
group = _groups.find(group => group.groupCode === qq.toString())
|
|
if (group) {
|
|
groups.push(group)
|
|
}
|
|
} catch (e) {
|
|
}
|
|
|
|
}
|
|
return group
|
|
}
|
|
|
|
export async function getGroupMember(groupQQ: string | number, memberQQ: string | number, memberUid: string = null) {
|
|
groupQQ = groupQQ.toString()
|
|
if (memberQQ) {
|
|
memberQQ = memberQQ.toString()
|
|
}
|
|
const group = await getGroup(groupQQ)
|
|
if (group) {
|
|
const filterKey = memberQQ ? "uin" : "uid"
|
|
const filterValue = memberQQ ? memberQQ : memberUid
|
|
let filterFunc: (member: GroupMember) => boolean = member => member[filterKey] === filterValue
|
|
let member = group.members?.find(filterFunc)
|
|
if (!member) {
|
|
try {
|
|
const _members = await NTQQApi.getGroupMembers(groupQQ)
|
|
if (_members.length > 0) {
|
|
group.members = _members
|
|
}
|
|
} catch (e) {
|
|
// log("刷新群成员列表失败", e.stack.toString())
|
|
}
|
|
|
|
member = group.members?.find(filterFunc)
|
|
}
|
|
return member
|
|
}
|
|
return null
|
|
}
|
|
|
|
export async function refreshGroupMembers(groupQQ: string) {
|
|
const group = groups.find(group => group.groupCode === groupQQ)
|
|
if (group) {
|
|
group.members = await NTQQApi.getGroupMembers(groupQQ)
|
|
}
|
|
}
|
|
|
|
export const uidMaps: Record<string, string> = {} // 一串加密的字符串(uid) -> qq号
|
|
|
|
export function getUidByUin(uin: string) {
|
|
for (const key in uidMaps) {
|
|
if (uidMaps[key] === uin) {
|
|
return key
|
|
}
|
|
}
|
|
}
|
|
|
|
export let tempGroupCodeMap: Record<string, string> = {} // peerUid => 群号
|