Skip to content

Commit

Permalink
feat: 完善一些获取群成员信息的方法
Browse files Browse the repository at this point in the history
  • Loading branch information
clansty committed Jul 12, 2024
1 parent 4388d45 commit 503a065
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 17 deletions.
2 changes: 2 additions & 0 deletions .idea/Q2TG.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions .idea/webResources.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion main/src/client/NapCatClient/entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { Send } from 'node-napcat-ts';
export abstract class NapCatEntity implements QQEntity {
protected logger: Logger;

protected constructor(protected readonly client: NapCatClient) {
protected constructor(public readonly client: NapCatClient) {
this.logger = getLogger('NapCatEntity');
}

Expand Down Expand Up @@ -222,6 +222,10 @@ export class NapCatGroup extends NapCatEntity implements Group {
});
},
};

async getAllMemberInfo() {
return await this.client.callApi('get_group_member_list', { group_id: this.gid });
}
}

export class NapCatGroupMember extends NapCatUser implements GroupMember {
Expand Down
3 changes: 3 additions & 0 deletions main/src/client/QQClient/entity.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import type { MessageRet, MfaceElem, Quotable, Sendable } from '@icqqjs/icqq';
import { Gender, GroupRole } from '@icqqjs/icqq/lib/common';
import { AtElem, FaceElem, ImageElem, PttElem, TextElem, VideoElem } from '@icqqjs/icqq/lib/message/elements';
import { QQClient } from './index';

// 全平台支持的 Elem
export type SendableElem = TextElem | FaceElem | ImageElem | AtElem | PttElem | VideoElem | MfaceElem;

export interface QQEntity {
readonly client: { uin: number };
readonly dm: boolean;

getForwardMsg(resid: string, fileName?: string): Promise<ForwardMessage[]>;
Expand Down Expand Up @@ -51,6 +53,7 @@ export interface GroupMember extends QQUser {
}

export interface GroupMemberInfo {
readonly user_id: number;
readonly card: string;
readonly nickname: string;
readonly sex: Gender;
Expand Down
11 changes: 2 additions & 9 deletions main/src/controllers/ForwardController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,21 +212,14 @@ export default class ForwardController {
else {
const chat = event.chat as Group;
const operator = chat.pickMember(event.fromId);
let operatorInfo: GroupMemberInfo;
if (operator instanceof OicqGroupMember) {
operatorInfo = await operator.renew();
}
// TODO: NapCat
let operatorInfo = await operator.renew();
operatorName = operatorInfo.card || operatorInfo.nickname;
if (event.fromId === event.targetId) {
targetName = '自己';
}
else {
const targetUser = chat.pickMember(event.targetId);
let targetInfo: GroupMemberInfo;
if (targetUser instanceof OicqGroupMember) {
targetInfo = await targetUser.renew();
}
let targetInfo = await targetUser.renew();
targetName = targetInfo.card || targetInfo.nickname;
}
}
Expand Down
24 changes: 17 additions & 7 deletions main/src/utils/getAboutText.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Group as OicqGroup } from '@icqqjs/icqq';
import { Friend, Group } from '../client/QQClient';
import { Friend, Group, GroupMemberInfo } from '../client/QQClient';
import { NapCatGroup } from '../client/NapCatClient';

export default async function getAboutText(entity: Friend | Group, html: boolean) {
let text: string;
Expand All @@ -8,18 +9,27 @@ export default async function getAboutText(entity: Friend | Group, html: boolean
`<b>昵称:</b>${entity.nickname}\n` +
`<b>账号:</b>${entity.uid}`;
}
else if (entity instanceof OicqGroup) {
const owner = await entity.pickMember(entity.info.owner_id).renew();
else {
let owner: GroupMemberInfo;
let memberCount: number;
if (entity instanceof OicqGroup) {
owner = await entity.pickMember(entity.info.owner_id).renew();
memberCount = entity.info.member_count;
}
else if (entity instanceof NapCatGroup) {
const membersInfo = await entity.getAllMemberInfo();
owner = membersInfo.find(member => member.role === 'owner');
memberCount = membersInfo.length;
}
const self = await entity.pickMember(entity.client.uin).renew();
text = `<b>群名称:</b>${entity.name}\n` +
`<b>${entity.info.member_count} 名成员</b>\n` +
`<b>群号:</b><code>${entity.group_id}</code>\n` +
`<b>${memberCount} 名成员</b>\n` +
`<b>群号:</b><code>${entity.gid}</code>\n` +
(self ? `<b>我的群名片:</b>${self.title ? `「<i>${self.title}</i>」` : ''}${self.card}\n` : '') +
(owner ? `<b>群主:</b>${owner.title ? `「<i>${owner.title}</i>」` : ''}` +
`${owner.card || owner.nickname} (<code>${entity.info.owner_id}</code>)` : '') +
`${owner.card || owner.nickname} (<code>${owner.user_id}</code>)` : '') +
((entity.is_admin || entity.is_owner) ? '\n<b>可管理</b>' : '');
}
// TODO: NapCat Group

if (!html) {
text = text.replace(/<\/?\w+>/g, '');
Expand Down

0 comments on commit 503a065

Please sign in to comment.