Merge branch 'main' into 1999
Some checks failed
Build Action / Build-LiteLoader (push) Failing after 1s
Build Action / Build-Shell (push) Failing after 1s

This commit is contained in:
手瓜一十雪 2025-04-27 19:22:08 +08:00
commit 7b638dac6b
20 changed files with 250 additions and 81 deletions

View File

@ -4,7 +4,7 @@
"name": "NapCatQQ", "name": "NapCatQQ",
"slug": "NapCat.Framework", "slug": "NapCat.Framework",
"description": "高性能的 OneBot 11 协议实现", "description": "高性能的 OneBot 11 协议实现",
"version": "4.7.34", "version": "4.7.43",
"icon": "./logo.png", "icon": "./logo.png",
"authors": [ "authors": [
{ {

View File

@ -2,7 +2,7 @@
"name": "napcat", "name": "napcat",
"private": true, "private": true,
"type": "module", "type": "module",
"version": "4.7.34", "version": "4.7.43",
"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",

View File

@ -1 +1 @@
export const napCatVersion = '4.7.34'; export const napCatVersion = '4.7.43';

View File

@ -345,6 +345,7 @@ export class NTQQFileApi {
'NodeIKernelMsgListener/onRichMediaDownloadComplete', 'NodeIKernelMsgListener/onRichMediaDownloadComplete',
[{ [{
fileModelId: '0', fileModelId: '0',
downSourceType: 0,
downloadSourceType: 0, downloadSourceType: 0,
triggerType: 1, triggerType: 1,
msgId: msgId, msgId: msgId,

View File

@ -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;
}
} }

View File

@ -258,5 +258,21 @@
"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"
},
"3.2.17-34606": {
"appid": 537282343,
"qua": "V1_LNX_NQ_3.2.17_34606_GW_B"
},
"9.9.19-34606": {
"appid": 537282307,
"qua": "V1_WIN_NQ_9.9.19_34606_GW_B"
} }
} }

View File

@ -334,5 +334,21 @@
"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"
},
"9.9.19-34606-x64": {
"send": "3BDA110",
"recv": "3BDE910"
},
"3.2.17-34606-x64": {
"send": "AD7DC60",
"recv": "AD81680"
},
"3.2.17-34606-arm64": {
"send": "7711270",
"recv": "7714BA0"
} }
} }

View File

@ -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 {

View File

@ -21,7 +21,8 @@ export interface OnRichMediaDownloadCompleteParams {
clientMsg: string, clientMsg: string,
businessId: number, businessId: number,
userTotalSpacePerDay: unknown, userTotalSpacePerDay: unknown,
userUsedSpacePerDay: unknown userUsedSpacePerDay: unknown,
chatType: number,
} }
export interface GroupFileInfoUpdateParamType { export interface GroupFileInfoUpdateParamType {
@ -97,112 +98,112 @@ export interface TempOnRecvParams {
} }
export class NodeIKernelMsgListener { export class NodeIKernelMsgListener {
onAddSendMsg(msgRecord: RawMessage): any { onAddSendMsg(_msgRecord: RawMessage): any {
} }
onBroadcastHelperDownloadComplete(broadcastHelperTransNotifyInfo: unknown): any { onBroadcastHelperDownloadComplete(_broadcastHelperTransNotifyInfo: unknown): any {
} }
onBroadcastHelperProgressUpdate(broadcastHelperTransNotifyInfo: unknown): any { onBroadcastHelperProgressUpdate(_broadcastHelperTransNotifyInfo: unknown): any {
} }
onChannelFreqLimitInfoUpdate(contact: unknown, z: unknown, freqLimitInfo: unknown): any { onChannelFreqLimitInfoUpdate(_contact: unknown, _z: unknown, _freqLimitInfo: unknown): any {
} }
onContactUnreadCntUpdate(hashMap: unknown): any { onContactUnreadCntUpdate(_hashMap: unknown): any {
} }
onCustomWithdrawConfigUpdate(customWithdrawConfig: unknown): any { onCustomWithdrawConfigUpdate(_customWithdrawConfig: unknown): any {
} }
onDraftUpdate(contact: unknown, arrayList: unknown, j2: unknown): any { onDraftUpdate(_contact: unknown, _arrayList: unknown, _j2: unknown): any {
} }
onEmojiDownloadComplete(emojiNotifyInfo: unknown): any { onEmojiDownloadComplete(_emojiNotifyInfo: unknown): any {
} }
onEmojiResourceUpdate(emojiResourceInfo: unknown): any { onEmojiResourceUpdate(_emojiResourceInfo: unknown): any {
} }
onFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): any { onFeedEventUpdate(_firstViewDirectMsgNotifyInfo: unknown): any {
} }
onFileMsgCome(arrayList: unknown): any { onFileMsgCome(_arrayList: unknown): any {
} }
onFirstViewDirectMsgUpdate(firstViewDirectMsgNotifyInfo: unknown): any { onFirstViewDirectMsgUpdate(_firstViewDirectMsgNotifyInfo: unknown): any {
} }
onFirstViewGroupGuildMapping(arrayList: unknown): any { onFirstViewGroupGuildMapping(_arrayList: unknown): any {
} }
onGrabPasswordRedBag(i2: unknown, str: unknown, i3: unknown, recvdOrder: unknown, msgRecord: unknown): any { onGrabPasswordRedBag(_i2: unknown, _str: unknown, _i3: unknown, _recvdOrder: unknown, _msgRecord: unknown): any {
} }
onGroupFileInfoAdd(groupItem: unknown): any { onGroupFileInfoAdd(_groupItem: unknown): any {
} }
onGroupFileInfoUpdate(groupFileListResult: GroupFileInfoUpdateParamType): any { onGroupFileInfoUpdate(_groupFileListResult: GroupFileInfoUpdateParamType): any {
} }
onGroupGuildUpdate(groupGuildNotifyInfo: unknown): any { onGroupGuildUpdate(_groupGuildNotifyInfo: unknown): any {
} }
onGroupTransferInfoAdd(groupItem: unknown): any { onGroupTransferInfoAdd(_groupItem: unknown): any {
} }
onGroupTransferInfoUpdate(groupFileListResult: unknown): any { onGroupTransferInfoUpdate(_groupFileListResult: unknown): any {
} }
onGuildInteractiveUpdate(guildInteractiveNotificationItem: unknown): any { onGuildInteractiveUpdate(_guildInteractiveNotificationItem: unknown): any {
} }
onGuildMsgAbFlagChanged(guildMsgAbFlag: unknown): any { onGuildMsgAbFlagChanged(_guildMsgAbFlag: unknown): any {
} }
onGuildNotificationAbstractUpdate(guildNotificationAbstractInfo: unknown): any { onGuildNotificationAbstractUpdate(_guildNotificationAbstractInfo: unknown): any {
} }
onHitCsRelatedEmojiResult(downloadRelateEmojiResultInfo: unknown): any { onHitCsRelatedEmojiResult(_downloadRelateEmojiResultInfo: unknown): any {
} }
onHitEmojiKeywordResult(hitRelatedEmojiWordsResult: unknown): any { onHitEmojiKeywordResult(_hitRelatedEmojiWordsResult: unknown): any {
} }
onHitRelatedEmojiResult(relatedWordEmojiInfo: unknown): any { onHitRelatedEmojiResult(_relatedWordEmojiInfo: unknown): any {
} }
onImportOldDbProgressUpdate(importOldDbMsgNotifyInfo: unknown): any { onImportOldDbProgressUpdate(_importOldDbMsgNotifyInfo: unknown): any {
} }
onInputStatusPush(inputStatusInfo: { onInputStatusPush(_inputStatusInfo: {
chatType: number; chatType: number;
eventType: number; eventType: number;
fromUin: string; fromUin: string;
@ -215,55 +216,55 @@ export class NodeIKernelMsgListener {
} }
onKickedOffLine(kickedInfo: KickedOffLineInfo): any { onKickedOffLine(_kickedInfo: KickedOffLineInfo): any {
} }
onLineDev(arrayList: unknown): any { onLineDev(_arrayList: unknown): any {
} }
onLogLevelChanged(j2: unknown): any { onLogLevelChanged(_j2: unknown): any {
} }
onMsgAbstractUpdate(arrayList: unknown): any { onMsgAbstractUpdate(_arrayList: unknown): any {
} }
onMsgBoxChanged(arrayList: unknown): any { onMsgBoxChanged(_arrayList: unknown): any {
} }
onMsgDelete(contact: unknown, arrayList: unknown): any { onMsgDelete(_contact: unknown, _arrayList: unknown): any {
} }
onMsgEventListUpdate(hashMap: unknown): any { onMsgEventListUpdate(_hashMap: unknown): any {
} }
onMsgInfoListAdd(arrayList: unknown): any { onMsgInfoListAdd(_arrayList: unknown): any {
} }
onMsgInfoListUpdate(msgList: RawMessage[]): any { onMsgInfoListUpdate(_msgList: RawMessage[]): any {
} }
onMsgQRCodeStatusChanged(i2: unknown): any { onMsgQRCodeStatusChanged(_i2: unknown): any {
} }
onMsgRecall(chatType: ChatType, uid: string, msgSeq: string): any { onMsgRecall(_chatType: ChatType, _uid: string, _msgSeq: string): any {
} }
onMsgSecurityNotify(msgRecord: unknown): any { onMsgSecurityNotify(_msgRecord: unknown): any {
} }
onMsgSettingUpdate(msgSetting: unknown): any { onMsgSettingUpdate(_msgSetting: unknown): any {
} }
@ -279,108 +280,108 @@ export class NodeIKernelMsgListener {
} }
onReadFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): any { onReadFeedEventUpdate(_firstViewDirectMsgNotifyInfo: unknown): any {
} }
onRecvGroupGuildFlag(i2: unknown): any { onRecvGroupGuildFlag(_i2: unknown): any {
} }
onRecvMsg(arrayList: RawMessage[]): any { onRecvMsg(_arrayList: RawMessage[]): any {
} }
onRecvMsgSvrRspTransInfo(j2: unknown, contact: unknown, i2: unknown, i3: unknown, str: unknown, bArr: unknown): any { onRecvMsgSvrRspTransInfo(_j2: unknown, _contact: unknown, _i2: unknown, _i3: unknown, _str: unknown, _bArr: unknown): any {
} }
onRecvOnlineFileMsg(arrayList: unknown): any { onRecvOnlineFileMsg(_arrayList: unknown): any {
} }
onRecvS2CMsg(arrayList: unknown): any { onRecvS2CMsg(_arrayList: unknown): any {
} }
onRecvSysMsg(arrayList: Array<number>): any { onRecvSysMsg(_arrayList: Array<number>): any {
} }
onRecvUDCFlag(i2: unknown): any { onRecvUDCFlag(_i2: unknown): any {
} }
onRichMediaDownloadComplete(fileTransNotifyInfo: OnRichMediaDownloadCompleteParams): any { onRichMediaDownloadComplete(_fileTransNotifyInfo: OnRichMediaDownloadCompleteParams): any {
} }
onRichMediaProgerssUpdate(fileTransNotifyInfo: unknown): any { onRichMediaProgerssUpdate(_fileTransNotifyInfo: unknown): any {
} }
onRichMediaUploadComplete(fileTransNotifyInfo: unknown): any { onRichMediaUploadComplete(_fileTransNotifyInfo: unknown): any {
} }
onSearchGroupFileInfoUpdate(searchGroupFileResult: unknown): any { onSearchGroupFileInfoUpdate(_searchGroupFileResult: unknown): any {
} }
onSendMsgError(j2: unknown, contact: unknown, i2: unknown, str: unknown): any { onSendMsgError(_j2: unknown, _contact: unknown, _i2: unknown, _str: unknown): any {
} }
onSysMsgNotification(i2: unknown, j2: unknown, j3: unknown, arrayList: unknown): any { onSysMsgNotification(_i2: unknown, _j2: unknown, _j3: unknown, _arrayList: unknown): any {
} }
onTempChatInfoUpdate(tempChatInfo: TempOnRecvParams): any { onTempChatInfoUpdate(_tempChatInfo: TempOnRecvParams): any {
} }
onUnreadCntAfterFirstView(hashMap: unknown): any { onUnreadCntAfterFirstView(_hashMap: unknown): any {
} }
onUnreadCntUpdate(hashMap: unknown): any { onUnreadCntUpdate(_hashMap: unknown): any {
} }
onUserChannelTabStatusChanged(z: unknown): any { onUserChannelTabStatusChanged(_z: unknown): any {
} }
onUserOnlineStatusChanged(z: unknown): any { onUserOnlineStatusChanged(_z: unknown): any {
} }
onUserTabStatusChanged(arrayList: unknown): any { onUserTabStatusChanged(_arrayList: unknown): any {
} }
onlineStatusBigIconDownloadPush(i2: unknown, j2: unknown, str: unknown): any { onlineStatusBigIconDownloadPush(_i2: unknown, _j2: unknown, _str: unknown): any {
} }
onlineStatusSmallIconDownloadPush(i2: unknown, j2: unknown, str: unknown): any { onlineStatusSmallIconDownloadPush(_i2: unknown, _j2: unknown, _str: unknown): any {
} }
// 第一次发现于Linux // 第一次发现于Linux
onUserSecQualityChanged(...args: unknown[]): any { onUserSecQualityChanged(..._args: unknown[]): any {
} }
onMsgWithRichLinkInfoUpdate(...args: unknown[]): any { onMsgWithRichLinkInfoUpdate(..._args: unknown[]): any {
} }
onRedTouchChanged(...args: unknown[]): any { onRedTouchChanged(..._args: unknown[]): any {
} }
// 第一次发现于Win 9.9.9-23159 // 第一次发现于Win 9.9.9-23159
onBroadcastHelperProgerssUpdate(...args: unknown[]): any { onBroadcastHelperProgerssUpdate(..._args: unknown[]): any {
} }
} }

View File

@ -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;

View File

@ -425,7 +425,20 @@ export interface NodeIKernelMsgService {
switchToOfflineGetRichMediaElement(...args: unknown[]): unknown; switchToOfflineGetRichMediaElement(...args: unknown[]): unknown;
downloadRichMedia(...args: unknown[]): unknown; downloadRichMedia(args: {
fileModelId: string,
downSourceType: number,
triggerType: number,
msgId: string,
chatType: number,
peerUid: string,
elementId: string,
thumbSize: number,
downloadType: number,
filePath: string
} & {
downloadSourceType: number, //33800左右一下的老版本 新版34606已经完全上面格式
}): unknown;
getFirstUnreadMsgSeq(args: { getFirstUnreadMsgSeq(args: {
peerUid: string peerUid: string

View File

@ -3,7 +3,7 @@ import { ActionName } from '@/onebot/action/router';
import { Static, Type } from '@sinclair/typebox'; import { Static, Type } from '@sinclair/typebox';
const SchemaData = Type.Object({ const SchemaData = Type.Object({
model: Type.String(), model: Type.Optional(Type.String()),
}); });
type Payload = Static<typeof SchemaData>; type Payload = Static<typeof SchemaData>;

View File

@ -38,6 +38,7 @@ export default class GoCQHTTPUploadGroupFile extends OneBotAction<Payload, null>
deleteAfterSentFiles: [] deleteAfterSentFiles: []
}; };
const sendFileEle = await this.core.apis.FileApi.createValidSendFileElement(msgContext, downloadResult.path, payload.name, payload.folder ?? payload.folder_id); const sendFileEle = await this.core.apis.FileApi.createValidSendFileElement(msgContext, downloadResult.path, payload.name, payload.folder ?? payload.folder_id);
msgContext.deleteAfterSentFiles.push(downloadResult.path);
await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(peer, [sendFileEle], msgContext.deleteAfterSentFiles); await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(peer, [sendFileEle], msgContext.deleteAfterSentFiles);
return null; return null;
} }

View File

@ -48,6 +48,7 @@ export default class GoCQHTTPUploadPrivateFile extends OneBotAction<Payload, nul
deleteAfterSentFiles: [] deleteAfterSentFiles: []
}; };
const sendFileEle: SendFileElement = await this.core.apis.FileApi.createValidSendFileElement(msgContext, downloadResult.path, payload.name); const sendFileEle: SendFileElement = await this.core.apis.FileApi.createValidSendFileElement(msgContext, downloadResult.path, payload.name);
msgContext.deleteAfterSentFiles.push(downloadResult.path);
await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(await this.getPeer(payload), [sendFileEle], msgContext.deleteAfterSentFiles); await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(await this.getPeer(payload), [sendFileEle], msgContext.deleteAfterSentFiles);
return null; return null;
} }

View File

@ -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),

View 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);
}
}

View 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);
}
}

View File

@ -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',

View 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;
}
}

View File

@ -907,10 +907,10 @@ export class OneBotMsgApi {
const member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin); const member = await this.core.apis.GroupApi.getGroupMember(msg.peerUin, msg.senderUin);
resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode); resMsg.group_id = parseInt(ret.tmpChatInfo!.groupCode);
resMsg.sender.nickname = member?.nick ?? member?.cardName ?? '临时会话'; resMsg.sender.nickname = member?.nick ?? member?.cardName ?? '临时会话';
resMsg.temp_source = resMsg.group_id; resMsg.temp_source = 0;
} else { } else {
resMsg.group_id = 284840486; resMsg.group_id = 284840486;
resMsg.temp_source = resMsg.group_id; resMsg.temp_source = 0;
resMsg.sender.nickname = '临时会话'; resMsg.sender.nickname = '临时会话';
} }
} }