mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
237 lines
6.5 KiB
TypeScript
237 lines
6.5 KiB
TypeScript
import { ReceiveCmdS } from '../hook'
|
|
import { Group, GroupMember, GroupMemberRole, GroupNotifies, GroupNotify, GroupRequestOperateTypes } from '../types'
|
|
import { callNTQQApi, GeneralCallResult, NTQQApiClass, NTQQApiMethod } from '../ntcall'
|
|
import { deleteGroup, uidMaps } from '../../common/data'
|
|
import { dbUtil } from '../../common/db'
|
|
import { log } from '../../common/utils/log'
|
|
import { NTQQWindowApi, NTQQWindows } from './window'
|
|
|
|
export class NTQQGroupApi {
|
|
static async getGroups(forced = false) {
|
|
let cbCmd = ReceiveCmdS.GROUPS
|
|
if (process.platform != 'win32') {
|
|
cbCmd = ReceiveCmdS.GROUPS_STORE
|
|
}
|
|
const result = await callNTQQApi<{
|
|
updateType: number
|
|
groupList: Group[]
|
|
}>({ methodName: NTQQApiMethod.GROUPS, args: [{ force_update: forced }, undefined], cbCmd })
|
|
return result.groupList
|
|
}
|
|
static async getGroupMembers(groupQQ: string, num = 3000): Promise<GroupMember[]> {
|
|
const sceneId = await callNTQQApi({
|
|
methodName: NTQQApiMethod.GROUP_MEMBER_SCENE,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
scene: 'groupMemberList_MainWindow',
|
|
},
|
|
],
|
|
})
|
|
// log("get group member sceneId", sceneId);
|
|
try {
|
|
const result = await callNTQQApi<{
|
|
result: { infos: any }
|
|
}>({
|
|
methodName: NTQQApiMethod.GROUP_MEMBERS,
|
|
args: [
|
|
{
|
|
sceneId: sceneId,
|
|
num: num,
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
// log("members info", typeof result.result.infos, Object.keys(result.result.infos))
|
|
const values = result.result.infos.values()
|
|
|
|
const members: GroupMember[] = Array.from(values)
|
|
for (const member of members) {
|
|
uidMaps[member.uid] = member.uin
|
|
}
|
|
// log(uidMaps);
|
|
// log("members info", values);
|
|
log(`get group ${groupQQ} members success`)
|
|
return members
|
|
} catch (e) {
|
|
log(`get group ${groupQQ} members failed`, e)
|
|
return []
|
|
}
|
|
}
|
|
static async getGroupNotifies() {
|
|
// 获取管理员变更
|
|
// 加群通知,退出通知,需要管理员权限
|
|
callNTQQApi<GeneralCallResult>({
|
|
methodName: ReceiveCmdS.GROUP_NOTIFY,
|
|
classNameIsRegister: true,
|
|
}).then()
|
|
return await callNTQQApi<GroupNotifies>({
|
|
methodName: NTQQApiMethod.GET_GROUP_NOTICE,
|
|
cbCmd: ReceiveCmdS.GROUP_NOTIFY,
|
|
afterFirstCmd: false,
|
|
args: [{ doubt: false, startSeq: '', number: 14 }, null],
|
|
})
|
|
}
|
|
static async getGroupIgnoreNotifies() {
|
|
await NTQQGroupApi.getGroupNotifies()
|
|
return await NTQQWindowApi.openWindow<GeneralCallResult & GroupNotifies>(
|
|
NTQQWindows.GroupNotifyFilterWindow,
|
|
[],
|
|
ReceiveCmdS.GROUP_NOTIFY,
|
|
)
|
|
}
|
|
static async handleGroupRequest(seq: string, operateType: GroupRequestOperateTypes, reason?: string) {
|
|
const notify: GroupNotify = await dbUtil.getGroupNotify(seq)
|
|
if (!notify) {
|
|
throw `${seq}对应的加群通知不存在`
|
|
}
|
|
// delete groupNotifies[seq];
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.HANDLE_GROUP_REQUEST,
|
|
args: [
|
|
{
|
|
doubt: false,
|
|
operateMsg: {
|
|
operateType: operateType, // 2 拒绝
|
|
targetMsg: {
|
|
seq: seq, // 通知序列号
|
|
type: notify.type,
|
|
groupCode: notify.group.groupCode,
|
|
postscript: reason,
|
|
},
|
|
},
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
}
|
|
static async quitGroup(groupQQ: string) {
|
|
const result = await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.QUIT_GROUP,
|
|
args: [{ groupCode: groupQQ }, null],
|
|
})
|
|
if (result.result === 0) {
|
|
deleteGroup(groupQQ)
|
|
}
|
|
return result
|
|
}
|
|
static async kickMember(
|
|
groupQQ: string,
|
|
kickUids: string[],
|
|
refuseForever: boolean = false,
|
|
kickReason: string = '',
|
|
) {
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.KICK_MEMBER,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
kickUids,
|
|
refuseForever,
|
|
kickReason,
|
|
},
|
|
],
|
|
})
|
|
}
|
|
static async banMember(groupQQ: string, memList: Array<{ uid: string; timeStamp: number }>) {
|
|
// timeStamp为秒数, 0为解除禁言
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.MUTE_MEMBER,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
memList,
|
|
},
|
|
],
|
|
})
|
|
}
|
|
static async banGroup(groupQQ: string, shutUp: boolean) {
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.MUTE_GROUP,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
shutUp,
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
}
|
|
static async setMemberCard(groupQQ: string, memberUid: string, cardName: string) {
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.SET_MEMBER_CARD,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
uid: memberUid,
|
|
cardName,
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
}
|
|
static async setMemberRole(groupQQ: string, memberUid: string, role: GroupMemberRole) {
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.SET_MEMBER_ROLE,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
uid: memberUid,
|
|
role,
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
}
|
|
static async setGroupName(groupQQ: string, groupName: string) {
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.SET_GROUP_NAME,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
groupName,
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
}
|
|
|
|
static async getGroupAtAllRemainCount(groupCode: string) {
|
|
return await callNTQQApi<
|
|
GeneralCallResult & {
|
|
atInfo: {
|
|
canAtAll: boolean
|
|
RemainAtAllCountForUin: number
|
|
RemainAtAllCountForGroup: number
|
|
atTimesMsg: string
|
|
canNotAtAllMsg: ''
|
|
}
|
|
}
|
|
>({
|
|
methodName: NTQQApiMethod.GROUP_AT_ALL_REMAIN_COUNT,
|
|
args: [
|
|
{
|
|
groupCode,
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
}
|
|
|
|
// 头衔不可用
|
|
static async setGroupTitle(groupQQ: string, uid: string, title: string) {
|
|
return await callNTQQApi<GeneralCallResult>({
|
|
methodName: NTQQApiMethod.SET_GROUP_TITLE,
|
|
args: [
|
|
{
|
|
groupCode: groupQQ,
|
|
uid,
|
|
title,
|
|
},
|
|
null,
|
|
],
|
|
})
|
|
}
|
|
static publishGroupBulletin(groupQQ: string, title: string, content: string) {}
|
|
}
|