mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
optimize
This commit is contained in:
@@ -3,7 +3,7 @@ import {
|
||||
GroupExtParam,
|
||||
GroupMember,
|
||||
GroupMemberRole,
|
||||
GroupNotifyTypes,
|
||||
GroupNotifyType,
|
||||
GroupRequestOperateTypes,
|
||||
} from '@/ntqqapi/types'
|
||||
import { GeneralCallResult } from './common'
|
||||
@@ -181,7 +181,7 @@ export interface NodeIKernelGroupService {
|
||||
operateType: GroupRequestOperateTypes, // 2 拒绝
|
||||
targetMsg: {
|
||||
seq: string, // 通知序列号
|
||||
type: GroupNotifyTypes,
|
||||
type: GroupNotifyType,
|
||||
groupCode: string,
|
||||
postscript: string
|
||||
}
|
||||
|
@@ -1,13 +1,19 @@
|
||||
export enum GroupNotifyTypes {
|
||||
INVITE_ME = 1,
|
||||
INVITED_JOIN = 4, // 有人接受了邀请入群
|
||||
JOIN_REQUEST_BY_INVITED = 5, // 有人邀请了别人入群
|
||||
JOIN_REQUEST = 7,
|
||||
ADMIN_SET = 8,
|
||||
KICK_MEMBER = 9,
|
||||
MEMBER_EXIT = 11, // 主动退出
|
||||
ADMIN_UNSET = 12, // 我被取消管理员
|
||||
ADMIN_UNSET_OTHER = 13, // 其他人取消管理员
|
||||
export enum GroupNotifyType {
|
||||
INVITED_BY_MEMBER = 1,
|
||||
REFUSE_INVITED,
|
||||
REFUSED_BY_ADMINI_STRATOR,
|
||||
AGREED_TOJOIN_DIRECT, // 有人接受了邀请入群
|
||||
INVITED_NEED_ADMINI_STRATOR_PASS, // 有人邀请了别人入群
|
||||
AGREED_TO_JOIN_BY_ADMINI_STRATOR,
|
||||
REQUEST_JOIN_NEED_ADMINI_STRATOR_PASS,
|
||||
SET_ADMIN,
|
||||
KICK_MEMBER_NOTIFY_ADMIN,
|
||||
KICK_MEMBER_NOTIFY_KICKED,
|
||||
MEMBER_LEAVE_NOTIFY_ADMIN, // 主动退出
|
||||
CANCEL_ADMIN_NOTIFY_CANCELED, // 我被取消管理员
|
||||
CANCEL_ADMIN_NOTIFY_ADMIN, // 其他人取消管理员
|
||||
TRANSFER_GROUP_NOTIFY_OLDOWNER,
|
||||
TRANSFER_GROUP_NOTIFY_ADMIN
|
||||
}
|
||||
|
||||
export interface GroupNotifies {
|
||||
@@ -27,7 +33,7 @@ export enum GroupNotifyStatus {
|
||||
export interface GroupNotify {
|
||||
time: number // 自己添加的字段,时间戳,毫秒, 用于判断收到短时间内收到重复的notify
|
||||
seq: string // 唯一标识符,转成数字再除以1000应该就是时间戳?
|
||||
type: GroupNotifyTypes
|
||||
type: GroupNotifyType
|
||||
status: GroupNotifyStatus
|
||||
group: { groupCode: string; groupName: string }
|
||||
user1: { uid: string; nickName: string } // 被设置管理员的人
|
||||
|
@@ -2,13 +2,14 @@ import { Service, Context } from 'cordis'
|
||||
import { OB11Entities } from './entities'
|
||||
import {
|
||||
GroupNotify,
|
||||
GroupNotifyTypes,
|
||||
GroupNotifyType,
|
||||
RawMessage,
|
||||
BuddyReqType,
|
||||
Peer,
|
||||
FriendRequest,
|
||||
GroupMember,
|
||||
GroupMemberRole
|
||||
GroupMemberRole,
|
||||
GroupNotifyStatus
|
||||
} from '../ntqqapi/types'
|
||||
import { OB11GroupRequestEvent } from './event/request/OB11GroupRequest'
|
||||
import { OB11FriendRequestEvent } from './event/request/OB11FriendRequest'
|
||||
@@ -108,15 +109,14 @@ class OneBot11Adapter extends Service {
|
||||
private async handleGroupNotify(notifies: GroupNotify[]) {
|
||||
for (const notify of notifies) {
|
||||
try {
|
||||
notify.time = Date.now()
|
||||
const notifyTime = parseInt(notify.seq) / 1000
|
||||
const flag = notify.group.groupCode + '|' + notify.seq + '|' + notify.type
|
||||
if (notifyTime < this.startTime) {
|
||||
continue
|
||||
}
|
||||
if (notify.type == GroupNotifyTypes.MEMBER_EXIT || notify.type == GroupNotifyTypes.KICK_MEMBER) {
|
||||
if ([GroupNotifyType.MEMBER_LEAVE_NOTIFY_ADMIN, GroupNotifyType.KICK_MEMBER_NOTIFY_ADMIN].includes(notify.type)) {
|
||||
this.ctx.logger.info('有成员退出通知', notify)
|
||||
const member1Uin = (await this.ctx.ntUserApi.getUinByUid(notify.user1.uid))!
|
||||
const member1Uin = await this.ctx.ntUserApi.getUinByUid(notify.user1.uid)
|
||||
let operatorId = member1Uin
|
||||
let subType: GroupDecreaseSubType = 'leave'
|
||||
if (notify.user2.uid) {
|
||||
@@ -135,57 +135,35 @@ class OneBot11Adapter extends Service {
|
||||
)
|
||||
this.dispatch(groupDecreaseEvent)
|
||||
}
|
||||
else if ([GroupNotifyTypes.JOIN_REQUEST, GroupNotifyTypes.JOIN_REQUEST_BY_INVITED].includes(notify.type)) {
|
||||
else if ([GroupNotifyType.REQUEST_JOIN_NEED_ADMINI_STRATOR_PASS].includes(notify.type) && notify.status === GroupNotifyStatus.KUNHANDLE) {
|
||||
this.ctx.logger.info('有加群请求')
|
||||
let requestQQ = ''
|
||||
try {
|
||||
// uid-->uin
|
||||
requestQQ = (await this.ctx.ntUserApi.getUinByUid(notify.user1.uid))
|
||||
if (isNaN(parseInt(requestQQ))) {
|
||||
requestQQ = (await this.ctx.ntUserApi.getUserDetailInfo(notify.user1.uid)).uin
|
||||
}
|
||||
} catch (e) {
|
||||
this.ctx.logger.error('获取加群人QQ号失败 Uid:', notify.user1.uid, e)
|
||||
}
|
||||
let invitorId: string
|
||||
if (notify.type == GroupNotifyTypes.JOIN_REQUEST_BY_INVITED) {
|
||||
// groupRequestEvent.sub_type = 'invite'
|
||||
try {
|
||||
// uid-->uin
|
||||
invitorId = (await this.ctx.ntUserApi.getUinByUid(notify.user2.uid))
|
||||
if (isNaN(parseInt(invitorId))) {
|
||||
invitorId = (await this.ctx.ntUserApi.getUserDetailInfo(notify.user2.uid)).uin
|
||||
}
|
||||
} catch (e) {
|
||||
invitorId = ''
|
||||
this.ctx.logger.error('获取邀请人QQ号失败 Uid:', notify.user2.uid, e)
|
||||
}
|
||||
let requestUin = (await this.ctx.ntUserApi.getUinByUid(notify.user1.uid))
|
||||
if (isNaN(parseInt(requestUin))) {
|
||||
requestUin = (await this.ctx.ntUserApi.getUserDetailInfo(notify.user1.uid)).uin
|
||||
}
|
||||
const groupRequestEvent = new OB11GroupRequestEvent(
|
||||
parseInt(notify.group.groupCode),
|
||||
parseInt(requestQQ) || 0,
|
||||
parseInt(requestUin) || 0,
|
||||
flag,
|
||||
notify.postscript,
|
||||
invitorId! === undefined ? undefined : +invitorId,
|
||||
'add'
|
||||
)
|
||||
this.dispatch(groupRequestEvent)
|
||||
}
|
||||
else if (notify.type == GroupNotifyTypes.INVITE_ME) {
|
||||
else if (notify.type === GroupNotifyType.INVITED_BY_MEMBER && notify.status === GroupNotifyStatus.KUNHANDLE) {
|
||||
this.ctx.logger.info('收到邀请我加群通知')
|
||||
const userId = (await this.ctx.ntUserApi.getUinByUid(notify.user2.uid)) || ''
|
||||
const userId = await this.ctx.ntUserApi.getUinByUid(notify.user2.uid)
|
||||
const groupInviteEvent = new OB11GroupRequestEvent(
|
||||
parseInt(notify.group.groupCode),
|
||||
parseInt(userId),
|
||||
parseInt(userId) || 0,
|
||||
flag,
|
||||
undefined,
|
||||
notify.postscript,
|
||||
undefined,
|
||||
'invite'
|
||||
)
|
||||
this.dispatch(groupInviteEvent)
|
||||
}
|
||||
} catch (e: any) {
|
||||
this.ctx.logger.error('解析群通知失败', e.stack.toString())
|
||||
this.ctx.logger.error('解析群通知失败', e.stack)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -427,7 +427,7 @@ export namespace OB11Entities {
|
||||
ctx.logger.info(`收到我被踢出或退群提示, 群${msg.peerUid}`, groupElement)
|
||||
ctx.ntGroupApi.quitGroup(msg.peerUid)
|
||||
try {
|
||||
const adminUin = (await ctx.ntGroupApi.getGroupMember(msg.peerUid, groupElement.adminUid))?.uin || (await ctx.ntUserApi.getUidByUin(groupElement.adminUid))
|
||||
const adminUin = (await ctx.ntGroupApi.getGroupMember(msg.peerUid, groupElement.adminUid))?.uin || (await ctx.ntUserApi.getUinByUid(groupElement.adminUid))
|
||||
if (adminUin) {
|
||||
return new OB11GroupDecreaseEvent(
|
||||
parseInt(msg.peerUid),
|
||||
|
Reference in New Issue
Block a user