mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
BUG修复
1.尝试让所有人能收到group_admin事件 2.修复请求API: delete_msg(POST请求网址传参)将负数判定为文本导致无法调用的问题
This commit is contained in:
parent
0b4b25a11e
commit
b1c6ce3885
@ -21,7 +21,7 @@ import { dbUtil } from '@/common/utils/db';
|
|||||||
import { sleep } from '@/common/utils/helper';
|
import { sleep } from '@/common/utils/helper';
|
||||||
import crypto from 'node:crypto';
|
import crypto from 'node:crypto';
|
||||||
import { rawFriends, friends, groupMembers, groups, selfInfo, stat } from '@/core/data';
|
import { rawFriends, friends, groupMembers, groups, selfInfo, stat } from '@/core/data';
|
||||||
import { RawMessage } from '@/core/entities';
|
import { GroupMember, RawMessage } from '@/core/entities';
|
||||||
import { NTEventDispatch } from '@/common/utils/EventTask';
|
import { NTEventDispatch } from '@/common/utils/EventTask';
|
||||||
import {
|
import {
|
||||||
enableConsoleLog,
|
enableConsoleLog,
|
||||||
@ -346,7 +346,7 @@ export class NapCatCore {
|
|||||||
// console.log('onMemberListChange', groupCode, arg);
|
// console.log('onMemberListChange', groupCode, arg);
|
||||||
};
|
};
|
||||||
groupListener.onMemberInfoChange = (groupCode, changeType, members) => {
|
groupListener.onMemberInfoChange = (groupCode, changeType, members) => {
|
||||||
// console.log('onMemberInfoChange', arg);
|
//console.log('onMemberInfoChange', groupCode, changeType, members);
|
||||||
if (changeType === 0 && members.get(selfInfo.uid)?.isDelete) {
|
if (changeType === 0 && members.get(selfInfo.uid)?.isDelete) {
|
||||||
// 自身退群或者被踢退群 5s用于Api操作 之后不再出现
|
// 自身退群或者被踢退群 5s用于Api操作 之后不再出现
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -359,6 +359,9 @@ export class NapCatCore {
|
|||||||
members.forEach((member, uid) => {
|
members.forEach((member, uid) => {
|
||||||
const existMember = existMembers.get(uid);
|
const existMember = existMembers.get(uid);
|
||||||
if (existMember) {
|
if (existMember) {
|
||||||
|
// 检查管理变动
|
||||||
|
member.isChangeRole = this.checkAdminEvent(groupCode, member, existMember);
|
||||||
|
// 更新成员信息
|
||||||
Object.assign(existMember, member);
|
Object.assign(existMember, member);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -471,6 +474,13 @@ export class NapCatCore {
|
|||||||
const loginList = await this.loginService.getLoginList();
|
const loginList = await this.loginService.getLoginList();
|
||||||
return loginList;
|
return loginList;
|
||||||
}
|
}
|
||||||
|
checkAdminEvent(groupCode: string, memberNew: GroupMember, memberOld: GroupMember | undefined ) : boolean {
|
||||||
|
if (memberNew.role !== memberOld.role) {
|
||||||
|
log(`群 ${groupCode} ${memberNew.nick} 角色变更为 ${memberNew.role === 3 ? '管理员' : '群员' }`);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const napCatCore = new NapCatCore();
|
export const napCatCore = new NapCatCore();
|
||||||
|
@ -52,4 +52,5 @@ export interface GroupMember {
|
|||||||
isRobot: boolean;
|
isRobot: boolean;
|
||||||
sex?: Sex
|
sex?: Sex
|
||||||
qqLevel?: QQLevel
|
qqLevel?: QQLevel
|
||||||
|
isChangeRole: boolean;
|
||||||
}
|
}
|
@ -7,7 +7,12 @@ import { FromSchema, JSONSchema } from 'json-schema-to-ts';
|
|||||||
const SchemaData = {
|
const SchemaData = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
message_id: { type: 'number' },
|
message_id: {
|
||||||
|
oneOf:[
|
||||||
|
{ type: 'number' },
|
||||||
|
{ type: 'string' }
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
required: ['message_id']
|
required: ['message_id']
|
||||||
} as const satisfies JSONSchema;
|
} as const satisfies JSONSchema;
|
||||||
@ -18,7 +23,7 @@ class DeleteMsg extends BaseAction<Payload, void> {
|
|||||||
actionName = ActionName.DeleteMsg;
|
actionName = ActionName.DeleteMsg;
|
||||||
PayloadSchema = SchemaData;
|
PayloadSchema = SchemaData;
|
||||||
protected async _handle(payload: Payload) {
|
protected async _handle(payload: Payload) {
|
||||||
const msg = await dbUtil.getMsgByShortId(payload.message_id);
|
const msg = await dbUtil.getMsgByShortId(Number(payload.message_id));
|
||||||
if (msg) {
|
if (msg) {
|
||||||
await NTQQMsgApi.recallMsg({ peerUid: msg.peerUid, chatType: msg.chatType }, [msg.msgId]);
|
await NTQQMsgApi.recallMsg({ peerUid: msg.peerUid, chatType: msg.chatType }, [msg.msgId]);
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import { OB11Config, ob11Config } from '@/onebot11/config';
|
|||||||
import { httpHeart, ob11HTTPServer } from '@/onebot11/server/http';
|
import { httpHeart, ob11HTTPServer } from '@/onebot11/server/http';
|
||||||
import { ob11WebsocketServer } from '@/onebot11/server/ws/WebsocketServer';
|
import { ob11WebsocketServer } from '@/onebot11/server/ws/WebsocketServer';
|
||||||
import { ob11ReverseWebsockets } from '@/onebot11/server/ws/ReverseWebsocket';
|
import { ob11ReverseWebsockets } from '@/onebot11/server/ws/ReverseWebsocket';
|
||||||
import { getGroup, getGroupMember, selfInfo, tempGroupCodeMap } from '@/core/data';
|
import { getGroup, getGroupMember, groupMembers, selfInfo, tempGroupCodeMap } from '@/core/data';
|
||||||
import { dbUtil } from '@/common/utils/db';
|
import { dbUtil } from '@/common/utils/db';
|
||||||
import { BuddyListener, GroupListener, NodeIKernelBuddyListener } from '@/core/listeners';
|
import { BuddyListener, GroupListener, NodeIKernelBuddyListener } from '@/core/listeners';
|
||||||
import { OB11FriendRequestEvent } from '@/onebot11/event/request/OB11FriendRequest';
|
import { OB11FriendRequestEvent } from '@/onebot11/event/request/OB11FriendRequest';
|
||||||
@ -267,9 +267,46 @@ export class NapCatOnebot11 {
|
|||||||
const groupListener = new GroupListener();
|
const groupListener = new GroupListener();
|
||||||
groupListener.onGroupNotifiesUpdated = async (doubt, notifies) => {
|
groupListener.onGroupNotifiesUpdated = async (doubt, notifies) => {
|
||||||
//console.log('ob11 onGroupNotifiesUpdated', notifies[0]);
|
//console.log('ob11 onGroupNotifiesUpdated', notifies[0]);
|
||||||
this.postGroupNotifies(notifies).then().catch(e => logError('postGroupNotifies error: ', e));
|
if (![GroupNotifyTypes.ADMIN_SET, GroupNotifyTypes.ADMIN_UNSET, GroupNotifyTypes.ADMIN_UNSET_OTHER].includes(notifies[0].type)) {
|
||||||
|
this.postGroupNotifies(notifies).then().catch(e => logError('postGroupNotifies error: ', e));
|
||||||
|
};
|
||||||
};
|
};
|
||||||
groupListener.onMemberInfoChange = async (groupCode: string, changeType: number, members: Map<string, GroupMember>) => {
|
groupListener.onMemberInfoChange = async (groupCode: string, changeType: number, members: Map<string, GroupMember>) => {
|
||||||
|
//console.log("ob11 onMemberInfoChange", groupCode, changeType, members)
|
||||||
|
if (changeType === 1) {
|
||||||
|
let member;
|
||||||
|
for (const [key, value] of members) {
|
||||||
|
member = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const existMembers = groupMembers.get(groupCode);
|
||||||
|
if (existMembers) {
|
||||||
|
const existMember = existMembers.get(member.uid);
|
||||||
|
if (existMember) {
|
||||||
|
if (existMember.isChangeRole) {
|
||||||
|
//console.log("ob11 onMemberInfoChange:eventMember:localMember", member, existMember)
|
||||||
|
const notify: GroupNotify[] = [
|
||||||
|
{
|
||||||
|
time: Date.now(),
|
||||||
|
seq: (Date.now() * 1000 * 1000).toString(),
|
||||||
|
type: member.role === GroupMemberRole.admin ? GroupNotifyTypes.ADMIN_SET : GroupNotifyTypes.ADMIN_UNSET_OTHER, // 8 设置; 13 取消
|
||||||
|
status: 0,
|
||||||
|
group: { groupCode: groupCode, groupName: '' },
|
||||||
|
user1: { uid: member.uid, nickName: member.nick },
|
||||||
|
user2: { uid: member.uid, nickName: member.nick },
|
||||||
|
actionUser: { uid: '', nickName: '' },
|
||||||
|
actionTime: '0',
|
||||||
|
invitationExt: { srcType: 0, groupCode: '0', waitStatus: 0 },
|
||||||
|
postscript: '',
|
||||||
|
repeatSeqs: [],
|
||||||
|
warningTips: ''
|
||||||
|
}
|
||||||
|
];
|
||||||
|
this.postGroupNotifies(notify).then().catch(e => logError('postGroupNotifies error: ', e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// 如果自身是非管理员也许要从这里获取Delete 成员变动 待测试与验证
|
// 如果自身是非管理员也许要从这里获取Delete 成员变动 待测试与验证
|
||||||
const role = (await getGroupMember(groupCode, selfInfo.uin))?.role;
|
const role = (await getGroupMember(groupCode, selfInfo.uin))?.role;
|
||||||
const isPrivilege = role === 3 || role === 4;
|
const isPrivilege = role === 3 || role === 4;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user