From 91d78f22f758c902862766b5d22b2fccc0cfc2c4 Mon Sep 17 00:00:00 2001 From: idranme <96647698+idranme@users.noreply.github.com> Date: Wed, 9 Oct 2024 02:55:12 +0800 Subject: [PATCH] refactor --- src/ntqqapi/api/group.ts | 2 +- src/ntqqapi/ntcall.ts | 4 +- src/ntqqapi/types/group.ts | 56 ++++++++++++------- src/ntqqapi/types/user.ts | 1 + .../action/go-cqhttp/GetStrangerInfo.ts | 4 +- .../action/group/GetGroupMemberInfo.ts | 10 ++-- src/onebot11/action/group/SetGroupAdmin.ts | 2 +- src/onebot11/entities.ts | 26 ++++----- src/onebot11/helper/createMessage.ts | 2 +- src/onebot11/types.ts | 38 ++++++------- src/satori/server.ts | 2 +- 11 files changed, 82 insertions(+), 65 deletions(-) diff --git a/src/ntqqapi/api/group.ts b/src/ntqqapi/api/group.ts index 2bc90fc..06a4f63 100644 --- a/src/ntqqapi/api/group.ts +++ b/src/ntqqapi/api/group.ts @@ -73,7 +73,7 @@ export class NTQQGroupApi extends Service { cbCmd: 'nodeIKernelGroupListener/onMemberInfoChange', afterFirstCmd: false, cmdCB: payload => payload.members.has(uid), - timeout: 2000 + timeout: 3000 } ) return data.members.get(uid)! diff --git a/src/ntqqapi/ntcall.ts b/src/ntqqapi/ntcall.ts index c7197e7..85add45 100644 --- a/src/ntqqapi/ntcall.ts +++ b/src/ntqqapi/ntcall.ts @@ -123,8 +123,8 @@ export function invoke< const apiArgs = [method, ...args] const callbackId = randomUUID() const timeoutId = setTimeout(() => { - log(`ntqq api timeout ${channel}, ${eventName}, ${method}`, apiArgs) - reject(`ntqq api timeout ${channel}, ${eventName}, ${method}, ${apiArgs}`) + log(`ntqq api timeout ${channel}, ${eventName}, ${method}`, args) + reject(`ntqq api timeout ${channel}, ${eventName}, ${method}, ${JSON.stringify(args)}`) }, timeout) if (!options.cbCmd) { diff --git a/src/ntqqapi/types/group.ts b/src/ntqqapi/types/group.ts index 2dcee1f..1da2369 100644 --- a/src/ntqqapi/types/group.ts +++ b/src/ntqqapi/types/group.ts @@ -1,5 +1,3 @@ -import { QQLevel, Sex } from './user' - export enum GroupListUpdateType { REFRESHALL, GETALL, @@ -35,36 +33,54 @@ export interface Group { memberUin: string memberUid: string } - members: GroupMember[] // 原始数据是没有这个的,为了方便自己加了这个字段 createTime: string } export enum GroupMemberRole { - normal = 2, - admin = 3, - owner = 4, + Normal = 2, + Admin = 3, + Owner = 4, } export interface GroupMember { - memberSpecialTitle?: string - avatarPath: string - cardName: string - cardType: number - isDelete: boolean - nick: string + uid: string qid: string + uin: string + nick: string remark: string - role: GroupMemberRole // 群主:4, 管理员:3,群员:2 - shutUpTime: number // 禁言时间,单位是什么暂时不清楚 - uid: string // 加密的字符串 - uin: string // QQ号 + cardType: number + cardName: string + role: GroupMemberRole + avatarPath: string + shutUpTime: number + isDelete: boolean + isSpecialConcerned: boolean + isSpecialShield: boolean isRobot: boolean - sex?: Sex - qqLevel?: QQLevel - isChangeRole: boolean + groupHonor: Uint8Array + memberRealLevel: number + memberLevel: number + globalGroupLevel: number + globalGroupPoint: number + memberTitleId: number + memberSpecialTitle: string + specialTitleExpireTime: string + userShowFlag: number + userShowFlagNew: number + richFlag: number + mssVipType: number + bigClubLevel: number + bigClubFlag: number + autoRemark: string + creditLevel: number joinTime: number lastSpeakTime: number - memberLevel: number + memberFlag: number + memberFlagExt: number + memberMobileFlag: number + memberFlagExt2: number + isSpecialShielded: boolean + cardNameId: number } export interface PublishGroupBulletinReq { diff --git a/src/ntqqapi/types/user.ts b/src/ntqqapi/types/user.ts index 9108a59..05ef0eb 100644 --- a/src/ntqqapi/types/user.ts +++ b/src/ntqqapi/types/user.ts @@ -67,6 +67,7 @@ export interface User { recommendImgFlag?: number disableEmojiShortCuts?: number pendantId?: string + age?: number } export interface SelfInfo extends User { diff --git a/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts b/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts index d485b8c..0557d4e 100644 --- a/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts +++ b/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts @@ -26,7 +26,7 @@ export class GetStrangerInfo extends BaseAction { ...extendData, user_id: parseInt(extendData.info.uin) || 0, nickname: extendData.info.nick, - sex: OB11UserSex.unknown, + sex: OB11UserSex.Unknown, age: (extendData.info.birthday_year == 0) ? 0 : new Date().getFullYear() - extendData.info.birthday_year, qid: extendData.info.qid, level: extendData.info.qqLevel && calcQQLevel(extendData.info.qqLevel) || 0, @@ -46,7 +46,7 @@ export class GetStrangerInfo extends BaseAction { ...extendData, user_id: parseInt(extendData.detail.uin) || 0, nickname: extendData.detail.simpleInfo.coreInfo.nick, - sex: OB11UserSex.unknown, + sex: OB11UserSex.Unknown, age: 0, level: extendData.detail.commonExt.qqLevel && calcQQLevel(extendData.detail.commonExt.qqLevel) || 0, login_days: 0, diff --git a/src/onebot11/action/group/GetGroupMemberInfo.ts b/src/onebot11/action/group/GetGroupMemberInfo.ts index 211d5eb..261af97 100644 --- a/src/onebot11/action/group/GetGroupMemberInfo.ts +++ b/src/onebot11/action/group/GetGroupMemberInfo.ts @@ -2,7 +2,7 @@ import { BaseAction, Schema } from '../BaseAction' import { OB11GroupMember } from '../../types' import { OB11Entities } from '../../entities' import { ActionName } from '../types' -import { isNullable } from 'cosmokit' +import { calcQQLevel } from '@/common/utils/misc' interface Payload { group_id: number | string @@ -22,14 +22,14 @@ class GetGroupMemberInfo extends BaseAction { if (!uid) throw new Error('无法获取用户信息') const member = await this.ctx.ntGroupApi.getGroupMember(groupCode, uid) if (member) { - if (isNullable(member.sex)) { - const info = await this.ctx.ntUserApi.getUserDetailInfo(member.uid) - Object.assign(member, info) - } const ret = OB11Entities.groupMember(groupCode, member) const date = Math.round(Date.now() / 1000) ret.last_sent_time ??= date ret.join_time ??= date + const info = await this.ctx.ntUserApi.getUserDetailInfo(member.uid) + ret.sex = OB11Entities.sex(info.sex!) + ret.qq_level = (info.qqLevel && calcQQLevel(info.qqLevel)) || 0 + ret.age = info.age ?? 0 return ret } throw new Error(`群成员${payload.user_id}不存在`) diff --git a/src/onebot11/action/group/SetGroupAdmin.ts b/src/onebot11/action/group/SetGroupAdmin.ts index 6368950..090fc62 100644 --- a/src/onebot11/action/group/SetGroupAdmin.ts +++ b/src/onebot11/action/group/SetGroupAdmin.ts @@ -25,7 +25,7 @@ export default class SetGroupAdmin extends BaseAction { await this.ctx.ntGroupApi.setMemberRole( groupCode, uid, - payload.enable ? GroupMemberRole.admin : GroupMemberRole.normal + payload.enable ? GroupMemberRole.Admin : GroupMemberRole.Normal ) return null } diff --git a/src/onebot11/entities.ts b/src/onebot11/entities.ts index bc669b8..2d0c89f 100644 --- a/src/onebot11/entities.ts +++ b/src/onebot11/entities.ts @@ -647,21 +647,21 @@ export namespace OB11Entities { return raw.map(friendV2) } - export function groupMemberRole(role: number): OB11GroupMemberRole | undefined { + export function groupMemberRole(role: number): OB11GroupMemberRole { return { - 4: OB11GroupMemberRole.owner, - 3: OB11GroupMemberRole.admin, - 2: OB11GroupMemberRole.member, - }[role] + 4: OB11GroupMemberRole.Owner, + 3: OB11GroupMemberRole.Admin, + 2: OB11GroupMemberRole.Member, + }[role] ?? OB11GroupMemberRole.Member } export function sex(sex: Sex): OB11UserSex { const sexMap = { - [Sex.male]: OB11UserSex.male, - [Sex.female]: OB11UserSex.female, - [Sex.unknown]: OB11UserSex.unknown, + [Sex.male]: OB11UserSex.Male, + [Sex.female]: OB11UserSex.Female, + [Sex.unknown]: OB11UserSex.Unknown, } - return sexMap[sex] || OB11UserSex.unknown + return sexMap[sex] || OB11UserSex.Unknown } export function groupMember(group_id: string, member: GroupMember): OB11GroupMember { @@ -670,20 +670,20 @@ export namespace OB11Entities { user_id: parseInt(member.uin), nickname: member.nick, card: member.cardName, - sex: sex(member.sex!), + sex: OB11UserSex.Unknown, age: 0, area: '', level: String(member.memberLevel ?? 0), - qq_level: (member.qqLevel && calcQQLevel(member.qqLevel)) || 0, + qq_level: 0, join_time: member.joinTime, last_sent_time: member.lastSpeakTime, - title_expire_time: 0, + title_expire_time: +member.specialTitleExpireTime, unfriendly: false, card_changeable: true, is_robot: member.isRobot, shut_up_timestamp: member.shutUpTime, role: groupMemberRole(member.role), - title: member.memberSpecialTitle || '', + title: member.memberSpecialTitle, } } diff --git a/src/onebot11/helper/createMessage.ts b/src/onebot11/helper/createMessage.ts index 0a32d53..0d36fae 100644 --- a/src/onebot11/helper/createMessage.ts +++ b/src/onebot11/helper/createMessage.ts @@ -57,7 +57,7 @@ export async function createSendElements( .RemainAtAllCountForUin ctx.logger.info(`群${groupCode}剩余at全体次数`, remainAtAllCount) const self = await ctx.ntGroupApi.getGroupMember(groupCode, selfInfo.uid) - isAdmin = self?.role === GroupMemberRole.admin || self?.role === GroupMemberRole.owner + isAdmin = self?.role === GroupMemberRole.Admin || self?.role === GroupMemberRole.Owner } catch (e) { } } diff --git a/src/onebot11/types.ts b/src/onebot11/types.ts index fc46fe1..f573d29 100644 --- a/src/onebot11/types.ts +++ b/src/onebot11/types.ts @@ -16,36 +16,36 @@ export interface OB11User { } export enum OB11UserSex { - male = 'male', - female = 'female', - unknown = 'unknown', + Male = 'male', + Female = 'female', + Unknown = 'unknown', } export enum OB11GroupMemberRole { - owner = 'owner', - admin = 'admin', - member = 'member', + Owner = 'owner', + Admin = 'admin', + Member = 'member', } export interface OB11GroupMember { group_id: number user_id: number nickname: string - card?: string - sex?: OB11UserSex - age?: number - join_time?: number - last_sent_time?: number - level?: string + card: string + sex: OB11UserSex + age: number + join_time: number + last_sent_time: number + level: string qq_level?: number - role?: OB11GroupMemberRole - title?: string - area?: string - unfriendly?: boolean - title_expire_time?: number - card_changeable?: boolean + role: OB11GroupMemberRole + title: string + area: string + unfriendly: boolean + title_expire_time: number + card_changeable: boolean // 以下为gocq字段 - shut_up_timestamp?: number + shut_up_timestamp: number // 以下为扩展字段 is_robot?: boolean qage?: number diff --git a/src/satori/server.ts b/src/satori/server.ts index 290748b..b9d6191 100644 --- a/src/satori/server.ts +++ b/src/satori/server.ts @@ -65,7 +65,7 @@ export class SatoriServer { this.wsServer.on('connection', (socket, req) => { const url = req.url?.split('?').shift() if (!['/v1/events', '/v1/events/'].includes(url!)) { - return socket.close() + return socket.close(1008, 'invalid address') } socket.addEventListener('message', async (event) => {