mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c7b9946d2f | ||
![]() |
0caca473d6 | ||
![]() |
3e5d35957d | ||
![]() |
6b8b14aba2 | ||
![]() |
5db7a90a24 | ||
![]() |
88b86611a3 |
@@ -4,7 +4,7 @@
|
|||||||
"name": "NapCatQQ",
|
"name": "NapCatQQ",
|
||||||
"slug": "NapCat.Framework",
|
"slug": "NapCat.Framework",
|
||||||
"description": "高性能的 OneBot 11 协议实现",
|
"description": "高性能的 OneBot 11 协议实现",
|
||||||
"version": "4.7.33",
|
"version": "4.7.34",
|
||||||
"icon": "./logo.png",
|
"icon": "./logo.png",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
"name": "napcat",
|
"name": "napcat",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "4.7.33",
|
"version": "4.7.34",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:universal": "npm run build:webui && vite build --mode universal || exit 1",
|
"build:universal": "npm run build:webui && vite build --mode universal || exit 1",
|
||||||
"build:framework": "npm run build:webui && vite build --mode framework || exit 1",
|
"build:framework": "npm run build:webui && vite build --mode framework || exit 1",
|
||||||
|
@@ -115,7 +115,7 @@ async function tryDownload(options: string | HttpDownloadOptions, useReferer: bo
|
|||||||
if (useReferer && !headers['Referer']) {
|
if (useReferer && !headers['Referer']) {
|
||||||
headers['Referer'] = url;
|
headers['Referer'] = url;
|
||||||
}
|
}
|
||||||
const fetchRes = await fetch(url, { headers }).catch((err) => {
|
const fetchRes = await fetch(url, { headers, redirect: 'follow' }).catch((err) => {
|
||||||
if (err.cause) {
|
if (err.cause) {
|
||||||
throw err.cause;
|
throw err.cause;
|
||||||
}
|
}
|
||||||
|
@@ -1 +1 @@
|
|||||||
export const napCatVersion = '4.7.33';
|
export const napCatVersion = '4.7.34';
|
||||||
|
@@ -86,4 +86,31 @@ export class NTQQFriendApi {
|
|||||||
accept,
|
accept,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
async handleDoubtFriendRequest(friendUid: string, str1: string = '', str2: string = '') {
|
||||||
|
this.context.session.getBuddyService().approvalDoubtBuddyReq(friendUid, str1, str2);
|
||||||
|
}
|
||||||
|
async getDoubtFriendRequest(count: number) {
|
||||||
|
let date = Date.now().toString();
|
||||||
|
const [, ret] = await this.core.eventWrapper.callNormalEventV2(
|
||||||
|
'NodeIKernelBuddyService/getDoubtBuddyReq',
|
||||||
|
'NodeIKernelBuddyListener/onDoubtBuddyReqChange',
|
||||||
|
[date, count, ''],
|
||||||
|
() => true,
|
||||||
|
(data) => data.reqId === date
|
||||||
|
);
|
||||||
|
let requests = Promise.all(ret.doubtList.map(async (item) => {
|
||||||
|
return {
|
||||||
|
flag: item.uid, //注意强制String 非isNumeric 不遵守则不符合设计
|
||||||
|
uin: await this.core.apis.UserApi.getUinByUidV2(item.uid) ?? 0,// 信息字段
|
||||||
|
nick: item.nick, // 信息字段 这个不是nickname 可能是来源的群内的昵称
|
||||||
|
source: item.source, // 信息字段
|
||||||
|
reason: item.reason, // 信息字段
|
||||||
|
msg: item.msg, // 信息字段
|
||||||
|
group_code: item.groupCode, // 信息字段
|
||||||
|
time: item.reqTime, // 信息字段
|
||||||
|
type: 'doubt' //保留字段
|
||||||
|
};
|
||||||
|
}))
|
||||||
|
return requests;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
8
src/core/external/appid.json
vendored
8
src/core/external/appid.json
vendored
@@ -258,5 +258,13 @@
|
|||||||
"3.2.17-34467": {
|
"3.2.17-34467": {
|
||||||
"appid": 537282292,
|
"appid": 537282292,
|
||||||
"qua": "V1_LNX_NQ_3.2.17_34467_GW_B"
|
"qua": "V1_LNX_NQ_3.2.17_34467_GW_B"
|
||||||
|
},
|
||||||
|
"9.9.19-34566": {
|
||||||
|
"appid": 537282307,
|
||||||
|
"qua": "V1_WIN_NQ_9.9.19_34566_GW_B"
|
||||||
|
},
|
||||||
|
"3.2.17-34566": {
|
||||||
|
"appid": 537282343,
|
||||||
|
"qua": "V1_LNX_NQ_3.2.17_34566_GW_B"
|
||||||
}
|
}
|
||||||
}
|
}
|
6
src/core/external/offset.json
vendored
6
src/core/external/offset.json
vendored
@@ -327,12 +327,16 @@
|
|||||||
"send": "770CDC0",
|
"send": "770CDC0",
|
||||||
"recv": "77106F0"
|
"recv": "77106F0"
|
||||||
},
|
},
|
||||||
"9.9.19-34362-x64":{
|
"9.9.19-34362-x64": {
|
||||||
"send": "3BD80D0",
|
"send": "3BD80D0",
|
||||||
"recv": "3BDC8D0"
|
"recv": "3BDC8D0"
|
||||||
},
|
},
|
||||||
"9.9.19-34467-x64": {
|
"9.9.19-34467-x64": {
|
||||||
"send": "3BD8690",
|
"send": "3BD8690",
|
||||||
"recv": "3BDCE90"
|
"recv": "3BDCE90"
|
||||||
|
},
|
||||||
|
"9.9.19-34566-x64": {
|
||||||
|
"send": "3BDA110",
|
||||||
|
"recv": "3BDE910"
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -40,12 +40,30 @@ export class NodeIKernelBuddyListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onDelBatchBuddyInfos(arg: unknown): any {
|
onDelBatchBuddyInfos(arg: unknown): any {
|
||||||
|
console.log('onDelBatchBuddyInfos not implemented', ...arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
onDoubtBuddyReqChange(arg: unknown): any {
|
onDoubtBuddyReqChange(_arg:
|
||||||
|
{
|
||||||
|
reqId: string;
|
||||||
|
cookie: string;
|
||||||
|
doubtList: Array<{
|
||||||
|
uid: string;
|
||||||
|
nick: string;
|
||||||
|
age: number,
|
||||||
|
sex: number;
|
||||||
|
commFriendNum: number;
|
||||||
|
reqTime: string;
|
||||||
|
msg: string;
|
||||||
|
source: string;
|
||||||
|
reason: string;
|
||||||
|
groupCode: string;
|
||||||
|
nameMore?: null;
|
||||||
|
}>;
|
||||||
|
}): void | Promise<void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
onDoubtBuddyReqUnreadNumChange(arg: unknown): any {
|
onDoubtBuddyReqUnreadNumChange(_num: number): void | Promise<void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
onNickUpdated(arg: unknown): any {
|
onNickUpdated(arg: unknown): any {
|
||||||
|
@@ -106,15 +106,15 @@ export interface NodeIKernelBuddyService {
|
|||||||
|
|
||||||
getAddMeSetting(): unknown;
|
getAddMeSetting(): unknown;
|
||||||
|
|
||||||
getDoubtBuddyReq(): unknown;
|
getDoubtBuddyReq(reqId: string, num: number,uk:string): Promise<GeneralCallResult>;
|
||||||
|
|
||||||
getDoubtBuddyUnreadNum(): number;
|
getDoubtBuddyUnreadNum(): number;
|
||||||
|
|
||||||
approvalDoubtBuddyReq(uid: number, isAgree: boolean): void;
|
approvalDoubtBuddyReq(uid: string, str1: string, str2: string): void;
|
||||||
|
|
||||||
delDoubtBuddyReq(uid: number): void;
|
delDoubtBuddyReq(uid: number): void;
|
||||||
|
|
||||||
delAllDoubtBuddyReq(): void;
|
delAllDoubtBuddyReq(): Promise<GeneralCallResult>;
|
||||||
|
|
||||||
reportDoubtBuddyReqUnread(): void;
|
reportDoubtBuddyReqUnread(): void;
|
||||||
|
|
||||||
|
@@ -115,10 +115,16 @@ import { RenameGroupFile } from './extends/RenameGroupFile';
|
|||||||
import { GetRkeyServer } from './packet/GetRkeyServer';
|
import { GetRkeyServer } from './packet/GetRkeyServer';
|
||||||
import { GetRkeyEx } from './packet/GetRkeyEx';
|
import { GetRkeyEx } from './packet/GetRkeyEx';
|
||||||
import { CleanCache } from './system/CleanCache';
|
import { CleanCache } from './system/CleanCache';
|
||||||
|
import SetFriendRemark from './user/SetFriendRemark';
|
||||||
|
import { SetDoubtFriendsAddRequest } from './new/SetDoubtFriendsAddRequest';
|
||||||
|
import { GetDoubtFriendsAddRequest } from './new/GetDoubtFriendsAddRequest';
|
||||||
|
|
||||||
export function createActionMap(obContext: NapCatOneBot11Adapter, core: NapCatCore) {
|
export function createActionMap(obContext: NapCatOneBot11Adapter, core: NapCatCore) {
|
||||||
|
|
||||||
const actionHandlers = [
|
const actionHandlers = [
|
||||||
|
new SetDoubtFriendsAddRequest(obContext, core),
|
||||||
|
new GetDoubtFriendsAddRequest(obContext, core),
|
||||||
|
new SetFriendRemark(obContext, core),
|
||||||
new GetRkeyEx(obContext, core),
|
new GetRkeyEx(obContext, core),
|
||||||
new GetRkeyServer(obContext, core),
|
new GetRkeyServer(obContext, core),
|
||||||
new SetGroupRemark(obContext, core),
|
new SetGroupRemark(obContext, core),
|
||||||
|
18
src/onebot/action/new/GetDoubtFriendsAddRequest.ts
Normal file
18
src/onebot/action/new/GetDoubtFriendsAddRequest.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { OneBotAction } from '@/onebot/action/OneBotAction';
|
||||||
|
import { ActionName } from '@/onebot/action/router';
|
||||||
|
import { Static, Type } from '@sinclair/typebox';
|
||||||
|
|
||||||
|
const SchemaData = Type.Object({
|
||||||
|
count: Type.Number({ default: 50 }),
|
||||||
|
});
|
||||||
|
|
||||||
|
type Payload = Static<typeof SchemaData>;
|
||||||
|
|
||||||
|
export class GetDoubtFriendsAddRequest extends OneBotAction<Payload, unknown> {
|
||||||
|
override actionName = ActionName.GetDoubtFriendsAddRequest;
|
||||||
|
override payloadSchema = SchemaData;
|
||||||
|
|
||||||
|
async _handle(payload: Payload) {
|
||||||
|
return await this.core.apis.FriendApi.getDoubtFriendRequest(payload.count);
|
||||||
|
}
|
||||||
|
}
|
21
src/onebot/action/new/SetDoubtFriendsAddRequest.ts
Normal file
21
src/onebot/action/new/SetDoubtFriendsAddRequest.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { OneBotAction } from '@/onebot/action/OneBotAction';
|
||||||
|
import { ActionName } from '@/onebot/action/router';
|
||||||
|
import { Static, Type } from '@sinclair/typebox';
|
||||||
|
|
||||||
|
const SchemaData = Type.Object({
|
||||||
|
flag: Type.String(),
|
||||||
|
//注意强制String 非isNumeric 不遵守则不符合设计
|
||||||
|
approve: Type.Boolean({ default: true }),
|
||||||
|
//该字段没有语义 仅做保留 强制为True
|
||||||
|
});
|
||||||
|
|
||||||
|
type Payload = Static<typeof SchemaData>;
|
||||||
|
|
||||||
|
export class SetDoubtFriendsAddRequest extends OneBotAction<Payload, unknown> {
|
||||||
|
override actionName = ActionName.SetDoubtFriendsAddRequest;
|
||||||
|
override payloadSchema = SchemaData;
|
||||||
|
|
||||||
|
async _handle(payload: Payload) {
|
||||||
|
return await this.core.apis.FriendApi.handleDoubtFriendRequest(payload.flag);
|
||||||
|
}
|
||||||
|
}
|
@@ -10,6 +10,10 @@ export interface InvalidCheckResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const ActionName = {
|
export const ActionName = {
|
||||||
|
// new extends 完全差异OneBot类别
|
||||||
|
GetDoubtFriendsAddRequest: 'get_doubt_friends_add_request',
|
||||||
|
SetDoubtFriendsAddRequest: 'set_doubt_friends_add_request',
|
||||||
|
// napcat
|
||||||
GetRkeyEx: 'get_rkey',
|
GetRkeyEx: 'get_rkey',
|
||||||
GetRkeyServer: 'get_rkey_server',
|
GetRkeyServer: 'get_rkey_server',
|
||||||
SetGroupRemark: 'set_group_remark',
|
SetGroupRemark: 'set_group_remark',
|
||||||
@@ -35,6 +39,7 @@ export const ActionName = {
|
|||||||
SetGroupLeave: 'set_group_leave',
|
SetGroupLeave: 'set_group_leave',
|
||||||
SetSpecialTitle: 'set_group_special_title',
|
SetSpecialTitle: 'set_group_special_title',
|
||||||
SetFriendAddRequest: 'set_friend_add_request',
|
SetFriendAddRequest: 'set_friend_add_request',
|
||||||
|
SetFriendRemark: 'set_friend_remark',
|
||||||
SetGroupAddRequest: 'set_group_add_request',
|
SetGroupAddRequest: 'set_group_add_request',
|
||||||
GetLoginInfo: 'get_login_info',
|
GetLoginInfo: 'get_login_info',
|
||||||
GoCQHTTP_GetStrangerInfo: 'get_stranger_info',
|
GoCQHTTP_GetStrangerInfo: 'get_stranger_info',
|
||||||
|
25
src/onebot/action/user/SetFriendRemark.ts
Normal file
25
src/onebot/action/user/SetFriendRemark.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { OneBotAction } from '@/onebot/action/OneBotAction';
|
||||||
|
import { ActionName } from '@/onebot/action/router';
|
||||||
|
import { Static, Type } from '@sinclair/typebox';
|
||||||
|
|
||||||
|
const SchemaData = Type.Object({
|
||||||
|
user_id: Type.String(),
|
||||||
|
remark: Type.String()
|
||||||
|
});
|
||||||
|
|
||||||
|
type Payload = Static<typeof SchemaData>;
|
||||||
|
|
||||||
|
export default class SetFriendRemark extends OneBotAction<Payload, null> {
|
||||||
|
override actionName = ActionName.SetFriendRemark;
|
||||||
|
override payloadSchema = SchemaData;
|
||||||
|
|
||||||
|
async _handle(payload: Payload): Promise<null> {
|
||||||
|
let friendUid = await this.core.apis.UserApi.getUidByUinV2(payload.user_id);
|
||||||
|
let is_friend = await this.core.apis.FriendApi.isBuddy(friendUid);
|
||||||
|
if (!is_friend) {
|
||||||
|
throw new Error(`用户 ${payload.user_id} 不是好友`);
|
||||||
|
}
|
||||||
|
await this.core.apis.FriendApi.setBuddyRemark(friendUid, payload.remark);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user