Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/core.lib/src/adapters/NodeIDependsAdapter.js
#	src/core.lib/src/adapters/NodeIDispatcherAdapter.js
#	src/core.lib/src/adapters/NodeIGlobalAdapter.js
#	src/core.lib/src/adapters/index.js
#	src/core.lib/src/apis/file.js
#	src/core.lib/src/apis/friend.js
#	src/core.lib/src/apis/group.js
#	src/core.lib/src/apis/index.js
#	src/core.lib/src/apis/msg.js
#	src/core.lib/src/apis/sign.js
#	src/core.lib/src/apis/user.js
#	src/core.lib/src/apis/webapi.js
#	src/core.lib/src/core.js
#	src/core.lib/src/data.js
#	src/core.lib/src/entities/cache.js
#	src/core.lib/src/entities/constructor.js
#	src/core.lib/src/entities/group.js
#	src/core.lib/src/entities/index.js
#	src/core.lib/src/entities/msg.js
#	src/core.lib/src/entities/notify.js
#	src/core.lib/src/entities/user.js
#	src/core.lib/src/external/hook.js
#	src/core.lib/src/index.js
#	src/core.lib/src/listeners/NodeIKernelBuddyListener.js
#	src/core.lib/src/listeners/NodeIKernelFileAssistantListener.js
#	src/core.lib/src/listeners/NodeIKernelGroupListener.js
#	src/core.lib/src/listeners/NodeIKernelLoginListener.js
#	src/core.lib/src/listeners/NodeIKernelMsgListener.js
#	src/core.lib/src/listeners/NodeIKernelProfileListener.js
#	src/core.lib/src/listeners/NodeIKernelRobotListener.js
#	src/core.lib/src/listeners/NodeIKernelSessionListener.js
#	src/core.lib/src/listeners/NodeIKernelStorageCleanListener.js
#	src/core.lib/src/listeners/index.js
#	src/core.lib/src/services/common.js
#	src/core.lib/src/services/index.js
#	src/core.lib/src/sessionConfig.js
#	src/core.lib/src/utils/config.js
#	src/core.lib/src/utils/db.js
#	src/core.lib/src/utils/rkey.js
#	src/core.lib/src/wrapper.js
  • Loading branch information
linyuchen committed May 12, 2024
2 parents eeeae44 + 69f4383 commit 65aa365
Show file tree
Hide file tree
Showing 18 changed files with 117 additions and 36 deletions.
9 changes: 5 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# v1.3.2
# v1.3.5

QQ Version: Windows 9.9.9-23424 / Linux 3.2.7-23361

## 修复与优化
* 重置Rkey获取机制,使用接口分发Rkey

* 尝试修复多开崩溃问题
* 修复群列表更新问题

## 新增与调整
* 新增扩展获取好友分类列表 Api /get_friend_with_category
* 新增设置群公告 Api

新增的 API 详细见[API文档](https://napneko.github.io/zh-CN/develop/extends_api)
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "napcat",
"private": true,
"type": "module",
"version": "1.3.0",
"version": "1.3.2",
"scripts": {
"watch:dev": "vite --mode development",
"watch:prod": "vite --mode production",
Expand Down
4 changes: 2 additions & 2 deletions src/common/server/http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ export abstract class HttpServerBase {
this.listen(port, host);
} catch (e: any) {
logError('HTTP服务启动失败', e.toString());
// llonebotError.httpServerError = "HTTP服务启动失败, " + e.toString()
// httpServerError = "HTTP服务启动失败, " + e.toString()
}
}

stop() {
// llonebotError.httpServerError = ""
// httpServerError = ""
if (this.server) {
this.server.close();
this.server = null;
Expand Down
2 changes: 1 addition & 1 deletion src/common/utils/qqlevel.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// QQ等级换算
import { QQLevel } from '../../core/src/entities';
import { QQLevel } from '@/core/entities';

export function calcQQLevel(level: QQLevel) {
const { crownNum, sunNum, moonNum, starNum } = level;
Expand Down
23 changes: 18 additions & 5 deletions src/common/utils/reboot.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
import { exit } from "process";
import { resolve } from "path";
async function reboot() {
import { writeFile, writeFileSync } from "fs";
async function rebootWithQuickLogin(uin: string) {
let batScript = resolve(__dirname, './napcat.bat');
let batUtf8Script = resolve(__dirname, './napcat-utf8.bat');
let bashScript = resolve(__dirname, './napcat.sh');
//如果是win系统写出 5s延迟启动 默认batUtf8Script启动
// 如果是linux系统写出 5s延迟启动 默认bashScript启动
if (process.platform === 'win32') {
// console.log('正在重启...');
writeFileSync(resolve(__dirname, './reboot-utf8.bat'), `
@echo off
timeout /t 5 /nobreak
start /b /wait %~dp0\\napcat-utf8.bat -q ${uin}
`);
// 启动cmd执行脚本

} else if (process.platform === 'linux') {
//console.log('正在重启...');
writeFileSync(resolve(__dirname, './reboot.sh'), `
#!/bin/bash
timeout 5
./napcat-utf8.sh -q ${uin}
`);
// 启动bash执行脚本



}
exit(0);
}
10 changes: 9 additions & 1 deletion src/common/utils/system.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
import os from 'node:os';
import path from 'node:path';

// 缓解Win7设备兼容性问题
let osName: string;
try {
osName = os.hostname();
} catch (e) {
osName = "NapCat"

}
export const systemPlatform = os.platform();
export const cpuArch = os.arch();
export const systemVersion = os.release();
export const hostname = os.hostname();
export const hostname = osName;
const homeDir = os.homedir();
export const downloadsPath = path.join(homeDir, 'Downloads');
export const systemName = os.type();
2 changes: 1 addition & 1 deletion src/common/utils/umami.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export function postLoginStatus() {
'screen': '1920x1080',
'language': 'zh-CN',
'title': 'OneBot.Login',
'url': '/login/onebot11/1.3.0',
'url': '/login/onebot11/1.3.2',
'referrer': 'https://napcat.demo.cn/login?type=onebot11'
}
};
Expand Down
2 changes: 1 addition & 1 deletion src/core.lib/src/apis/window.js

Large diffs are not rendered by default.

58 changes: 58 additions & 0 deletions src/onebot11/action/go-cqhttp/SendGroupNotice.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { checkFileReceived, uri2local } from '@/common/utils/file';
import BaseAction from '../BaseAction';
import { ActionName } from '../types';
import { NTQQGroupApi, WebApi } from '@/core/apis';
import { unlink } from 'node:fs';
interface Payload {
group_id: string;
content: string;
image?: string;
pinned?: number;
confirmRequired?: number;

}
export class SendGroupNotice extends BaseAction<Payload, null> {
actionName = ActionName.GoCQHTTP_SendGroupNotice;
protected async _handle(payload: Payload) {
let UploadImage: { id: string, width: number, height: number } | undefined = undefined;
if (payload.image) {
//公告图逻辑
let Image_path, Image_errMsg, Image_IsLocal = false;
let Uri2LocalRet = (await uri2local(payload.image));
Image_errMsg = Uri2LocalRet.errMsg;
Image_path = Uri2LocalRet.path;
Image_IsLocal = Uri2LocalRet.isLocal;
if (Image_errMsg) {
throw `群公告${payload.image}设置失败,image字段可能格式不正确`;
}
if (!Image_path) {
throw `群公告${payload.image}设置失败,获取资源失败`;
}
await checkFileReceived(Image_path, 5000); // 文件不存在QQ会崩溃,需要提前判断
let ImageUploadResult = await NTQQGroupApi.uploadGroupBulletinPic(payload.group_id, Image_path);
if (ImageUploadResult.errCode != 0) {
throw `群公告${payload.image}设置失败,图片上传失败`;
}
if (!Image_IsLocal) {
unlink(Image_path, () => { });
}
UploadImage = ImageUploadResult.picInfo;
}
let Notice_Pinned = 0;
let Notice_confirmRequired = 0;
if (!payload.pinned) {
Notice_Pinned = 0;
}
if (!payload.confirmRequired) {
Notice_confirmRequired = 0;
}
let PublishGroupBulletinResult = await NTQQGroupApi.publishGroupBulletin(payload.group_id, payload.content, UploadImage, Notice_Pinned, Notice_confirmRequired);

if (PublishGroupBulletinResult.result! = 0) {
throw `设置群公告失败,错误信息:${PublishGroupBulletinResult.errMsg}`;
}
// 下面实现扬了
//await WebApi.setGroupNotice(payload.group_id, payload.content) ;
return null;
}
}
2 changes: 2 additions & 0 deletions src/onebot11/action/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import { GetGroupNotice } from './group/GetGroupNotice';
import { GetGroupEssence } from './group/GetGroupEssence';
import { ForwardFriendSingleMsg, ForwardGroupSingleMsg } from '@/onebot11/action/msg/ForwardSingleMsg';
import { GetFriendWithCategory } from './extends/GetFriendWithCategory';
import { SendGroupNotice } from './go-cqhttp/SendGroupNotice';

export const actionHandlers = [
new GetFile(),
Expand Down Expand Up @@ -97,6 +98,7 @@ export const actionHandlers = [
new GetRobotUinRange(),
new GetFriendWithCategory(),
//以下为go-cqhttp api
new SendGroupNotice(),
new GetGroupNotice(),
new GetGroupEssence(),
new GoCQHTTPSendForwardMsg(),
Expand Down
10 changes: 5 additions & 5 deletions src/onebot11/action/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ export interface InvalidCheckResult {
}

export enum ActionName {
// llonebot
// 以下为扩展napcat扩展
GetRobotUinRange = 'get_robot_uin_range',
SetOnlineStatus = 'set_online_status',
GetFriendsWithCategory = 'get_friends_with_category',
GetGroupIgnoreAddRequest = 'get_group_ignore_add_request',
SetQQAvatar = 'set_qq_avatar',
GetConfig = 'get_config',
Expand Down Expand Up @@ -54,11 +57,8 @@ export enum ActionName {
GetRecord = 'get_record',
CleanCache = 'clean_cache',
GetCookies = 'get_cookies',
// 以下为扩展napcat扩展
GetRobotUinRange = 'get_robot_uin_range',
SetOnlineStatus = 'set_online_status',
GetFriendsWithCategory = 'get_friends_with_category',
// 以下为go-cqhttp api
GoCQHTTP_SendGroupNotice = '_send_group_notice',
GoCQHTTP_GetEssenceMsg = 'get_essence_msg_list',
GoCQHTTP_SetGroupNotice = '_send_group_notice',
GoCQHTTP_GetGroupNotice = '_get_group_notice',
Expand Down
8 changes: 4 additions & 4 deletions src/onebot11/constructor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import {
Sex,
TipGroupElementType,
User
} from '../core/src/entities';
} from '@/core/entities';
import { EventType } from './event/OB11BaseEvent';
import { encodeCQCode } from './cqcode';
import { dbUtil } from '@/core/utils/db';
Expand All @@ -41,7 +41,7 @@ import { OB11GroupCardEvent } from './event/notice/OB11GroupCardEvent';
import { OB11GroupDecreaseEvent } from './event/notice/OB11GroupDecreaseEvent';
import { ob11Config } from '@/onebot11/config';
import { deleteGroup, getFriend, getGroupMember, groupMembers, selfInfo, tempGroupCodeMap } from '@/core/data';
import { NTQQFileApi, NTQQGroupApi, NTQQUserApi } from '../core/src/apis';
import { NTQQFileApi, NTQQGroupApi, NTQQUserApi } from '@/core/apis';
import { OB11GroupMsgEmojiLikeEvent } from '@/onebot11/event/notice/OB11MsgEmojiLikeEvent';


Expand Down Expand Up @@ -92,7 +92,6 @@ export class OB11Constructor {
resMsg.group_id = parseInt(tempGroupCode);
}
}

for (const element of msg.elements) {
const message_data: OB11MessageData | any = {
data: {},
Expand Down Expand Up @@ -152,10 +151,11 @@ export class OB11Constructor {
// let currentRKey = "CAQSKAB6JWENi5LMk0kc62l8Pm3Jn1dsLZHyRLAnNmHGoZ3y_gDZPqZt-64"

try {
message_data['data']['url'] = await NTQQFileApi.getImageUrl(msg);
message_data['data']['url'] = await NTQQFileApi.getImageUrl(element.picElement, msg.chatType !== ChatType.group);
} catch (e: any) {
logError('获取图片url失败', e.stack);
}
//console.log(message_data['data']['url'])
// message_data["data"]["file_id"] = element.picElement.fileUuid
message_data['data']['file_size'] = element.picElement.fileSize;
dbUtil.addFileCache({
Expand Down
10 changes: 5 additions & 5 deletions src/onebot11/main.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { napCatCore } from '@/core';
import { MsgListener } from '../core/src/listeners';
import { MsgListener } from '@/core/listeners';
import { OB11Constructor } from '@/onebot11/constructor';
import { postOB11Event } from '@/onebot11/server/postOB11Event';
import {
Expand All @@ -10,16 +10,16 @@ import {
GroupNotify,
GroupNotifyTypes,
RawMessage
} from '../core/src/entities';
} from '@/core/entities';
import { ob11Config } from '@/onebot11/config';
import { httpHeart, ob11HTTPServer } from '@/onebot11/server/http';
import { ob11WebsocketServer } from '@/onebot11/server/ws/WebsocketServer';
import { ob11ReverseWebsockets } from '@/onebot11/server/ws/ReverseWebsocket';
import { friendRequests, getFriend, getGroup, getGroupMember, groupNotifies, selfInfo, uid2UinMap } from '@/core/data';
import { dbUtil } from '@/core/utils/db';
import { BuddyListener, GroupListener, NodeIKernelBuddyListener } from '../core/src/listeners';
import { BuddyListener, GroupListener, NodeIKernelBuddyListener } from '@/core/listeners';
import { OB11FriendRequestEvent } from '@/onebot11/event/request/OB11FriendRequest';
import { NTQQGroupApi, NTQQUserApi } from '../core/src/apis';
import { NTQQGroupApi, NTQQUserApi } from '@/core/apis';
import { log, logDebug, logError, setLogSelfInfo } from '@/common/utils/log';
import { OB11GroupRequestEvent } from '@/onebot11/event/request/OB11GroupRequest';
import { OB11GroupAdminNoticeEvent } from '@/onebot11/event/notice/OB11GroupAdminNoticeEvent';
Expand Down Expand Up @@ -205,7 +205,7 @@ export class NapCatOnebot11 {
try {
notify.time = Date.now();
const notifyTime = parseInt(notify.seq) / 1000 / 1000;
// log(`群通知时间${notifyTime}`, `LLOneBot启动时间${this.bootTime}`);
// log(`群通知时间${notifyTime}`, `启动时间${this.bootTime}`);
if (notifyTime < this.bootTime) {
continue;
}
Expand Down
4 changes: 2 additions & 2 deletions src/onebot11/server/postOB11Event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import { wsReply } from './ws/reply';
import { log, logDebug, logError } from '@/common/utils/log';
import { ob11Config } from '@/onebot11/config';
import crypto from 'crypto';
import { ChatType, Group, GroupRequestOperateTypes, Peer } from '../../core/src/entities';
import { ChatType, Group, GroupRequestOperateTypes, Peer } from '@/core/entities';
import { convertMessage2List, createSendElements, sendMsg } from '../action/msg/SendMsg';
import { OB11FriendRequestEvent } from '../event/request/OB11FriendRequest';
import { OB11GroupRequestEvent } from '../event/request/OB11GroupRequest';
import { isNull } from '@/common/utils/helper';
import { dbUtil } from '@/core/utils/db';
import { friendRequests, getGroup, groupNotifies, selfInfo } from '@/core/data';
import { NTQQFriendApi, NTQQGroupApi, NTQQMsgApi } from '../../core/src/apis';
import { NTQQFriendApi, NTQQGroupApi, NTQQMsgApi } from '@/core/apis';

export type PostEventType = OB11Message | OB11BaseMetaEvent | OB11BaseNoticeEvent

Expand Down
2 changes: 1 addition & 1 deletion src/onebot11/version.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const version = '1.3.0';
export const version = '1.3.2';
2 changes: 1 addition & 1 deletion src/webui/ui/NapCat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ async function onSettingWindowCreated(view: Element) {
SettingItem(
'<span id="napcat-update-title">Napcat</span>',
undefined,
SettingButton('V1.3.0', 'napcat-update-button', 'secondary'),
SettingButton('V1.3.2', 'napcat-update-button', 'secondary'),
),
]),
SettingList([
Expand Down
2 changes: 1 addition & 1 deletion static/assets/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ async function onSettingWindowCreated(view) {
SettingItem(
'<span id="napcat-update-title">Napcat</span>',
void 0,
SettingButton("V1.3.0", "napcat-update-button", "secondary")
SettingButton("V1.3.2", "napcat-update-button", "secondary")
)
]),
SettingList([
Expand Down
1 change: 0 additions & 1 deletion vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { PluginOption, Plugin } from 'vite';
import nodeResolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import { builtinModules } from 'module';
import os from 'node:os';
import fs from 'node:fs';

const external = ['silk-wasm', 'ws', 'express', 'uuid', 'fluent-ffmpeg', 'sqlite3', 'log4js',
Expand Down

0 comments on commit 65aa365

Please sign in to comment.