mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
import { OB11GroupMember } from '../../types'
|
|
import { OB11Entities } from '../../entities'
|
|
import { BaseAction } from '../BaseAction'
|
|
import { ActionName } from '../types'
|
|
import { selfInfo } from '@/common/globalVars'
|
|
|
|
interface Payload {
|
|
group_id: number | string
|
|
no_cache: boolean | string
|
|
}
|
|
|
|
class GetGroupMemberList extends BaseAction<Payload, OB11GroupMember[]> {
|
|
actionName = ActionName.GetGroupMemberList
|
|
|
|
protected async _handle(payload: Payload) {
|
|
const groupCode = payload.group_id.toString()
|
|
let groupMembers = await this.ctx.ntGroupApi.getGroupMembers(groupCode)
|
|
if (groupMembers.size === 0) {
|
|
await this.ctx.sleep(100)
|
|
groupMembers = await this.ctx.ntGroupApi.getGroupMembers(groupCode)
|
|
}
|
|
const groupMembersArr = Array.from(groupMembers.values())
|
|
|
|
const _groupMembers = groupMembersArr.map(item => {
|
|
return OB11Entities.groupMember(groupCode, item)
|
|
})
|
|
|
|
const MemberMap: Map<number, OB11GroupMember> = new Map<number, OB11GroupMember>()
|
|
const date = Math.round(Date.now() / 1000)
|
|
|
|
for (let i = 0, len = _groupMembers.length; i < len; i++) {
|
|
// 保证基础数据有这个 同时避免群管插件过于依赖这个杀了
|
|
_groupMembers[i].join_time ||= date
|
|
_groupMembers[i].last_sent_time ||= date
|
|
MemberMap.set(_groupMembers[i].user_id, _groupMembers[i])
|
|
}
|
|
|
|
const selfRole = groupMembers.get(selfInfo.uid)?.role
|
|
const isPrivilege = selfRole === 3 || selfRole === 4
|
|
|
|
if (isPrivilege) {
|
|
const webGroupMembers = await this.ctx.ntWebApi.getGroupMembers(groupCode)
|
|
for (let i = 0, len = webGroupMembers.length; i < len; i++) {
|
|
if (!webGroupMembers[i]?.uin) {
|
|
continue
|
|
}
|
|
const MemberData = MemberMap.get(webGroupMembers[i]?.uin)
|
|
if (MemberData) {
|
|
if (MemberData.join_time === date) {
|
|
MemberData.join_time = webGroupMembers[i]?.join_time
|
|
MemberData.last_sent_time = webGroupMembers[i]?.last_speak_time
|
|
}
|
|
MemberData.qage = webGroupMembers[i]?.qage
|
|
MemberMap.set(webGroupMembers[i]?.uin, MemberData)
|
|
}
|
|
}
|
|
}
|
|
|
|
return Array.from(MemberMap.values())
|
|
}
|
|
}
|
|
|
|
export default GetGroupMemberList
|