Skip to content

Commit

Permalink
release: 2.2.0
Browse files Browse the repository at this point in the history
release: 2.2.1

release: 2.2.2

chore

chore: 扩大范围

release: 2.2.3
  • Loading branch information
MliKiowa committed Aug 23, 2024
1 parent 5e65ae7 commit da3665a
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 189 deletions.
82 changes: 41 additions & 41 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,34 +30,34 @@ jobs:
ls
node ./script/checkVersion.cjs
sh ./checkVersion.sh
# Build-LiteLoader:
# needs: [check-version]
# runs-on: ubuntu-latest
# steps:
# - name: Clone Main Repository
# uses: actions/checkout@v4
# with:
# repository: 'NapNeko/NapCatQQ'
# submodules: true
# ref: main
# token: ${{ secrets.NAPCAT_BUILD }}
# - name: Use Node.js 20.X
# uses: actions/setup-node@v4
# with:
# node-version: 20.x
Build-LiteLoader:
needs: [check-version]
runs-on: ubuntu-latest
steps:
- name: Clone Main Repository
uses: actions/checkout@v4
with:
repository: 'NapNeko/NapCatQQ'
submodules: true
ref: main
token: ${{ secrets.NAPCAT_BUILD }}
- name: Use Node.js 20.X
uses: actions/setup-node@v4
with:
node-version: 20.x

# - name: Build NuCat Framework
# run: |
# npm i
# npm run build:framework
# cd dist
# npm i --omit=dev
# cd ..
# - name: Upload Artifact
# uses: actions/upload-artifact@v4
# with:
# name: NapCat.Framework
# path: dist
- name: Build NuCat Framework
run: |
npm i
npm run build:framework
cd dist
npm i --omit=dev
cd ..
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: NapCat.Framework
path: dist
Build-Shell:
runs-on: ubuntu-latest
needs: [check-version]
Expand Down Expand Up @@ -90,31 +90,30 @@ jobs:
path: dist

release-napcat:
needs: [Build-Shell]
# needs: [Build-LiteLoader,Build-Shell]
needs: [Build-LiteLoader,Build-Shell]
runs-on: ubuntu-latest
steps:
- name: Download All Artifact
uses: actions/download-artifact@v4
- name: Compress subdirectories
run: |
cd ./NapCat.Shell/
zip -q -r NapCat.Shell.zip *
cd ..
rm ./NapCat.Shell.zip -rf
mv ./NapCat.Shell/NapCat.Shell.zip ./
# - name: Compress subdirectories
# run: |
# cd ./NapCat.Shell/
# zip -q -r NapCat.Shell.zip *
# cd ..
# cd ./NapCat.Framework/
# zip -q -r NapCat.Framework.zip *
# cd ..
# rm ./NapCat.Shell.zip -rf
# rm ./NapCat.Framework.zip -rf
# mv ./NapCat.Shell/NapCat.Shell.zip ./
# mv ./NapCat.Framework/NapCat.Framework.zip ./
- name: Compress subdirectories
run: |
cd ./NapCat.Shell/
zip -q -r NapCat.Shell.zip *
cd ..
cd ./NapCat.Framework/
zip -q -r NapCat.Framework.zip *
cd ..
rm ./NapCat.Shell.zip -rf
rm ./NapCat.Framework.zip -rf
mv ./NapCat.Shell/NapCat.Shell.zip ./
mv ./NapCat.Framework/NapCat.Framework.zip ./
- name: Extract version from tag
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV

Expand All @@ -128,5 +127,6 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
body_path: CHANGELOG.md
files: |
NapCat.Framework.zip
NapCat.Shell.zip
draft: true
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@ NapCatQQ 是现代化的基于 NTQQ 的 Bot 协议端实现。

## 使用许可

任何使用本仓库代码的地方,都应当严格遵守[本仓库开源许可](./LICENSE)**此外,禁止任何项目未经授权二次分发或基于 [core](./src/core) 部分代码开发**
任何使用本仓库代码的地方,都应当严格遵守[本仓库开源许可](./LICENSE)**此外,禁止任何项目未经授权二次分发或基于 NapCat 代码开发**
2 changes: 1 addition & 1 deletion manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"name": "NapCatQQ",
"slug": "NapCat.Framework",
"description": "高性能的 OneBot 11 协议实现",
"version": "2.1.0",
"version": "2.2.3",
"icon": "./logo.png",
"authors": [
{
Expand Down
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": "2.1.0",
"version": "2.2.3",
"scripts": {
"build:framework": "vite build --mode framework",
"build:shell": "vite build --mode shell",
Expand Down
2 changes: 1 addition & 1 deletion src/common/framework/napcat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import path, { dirname } from 'path';
import { fileURLToPath } from 'url';
import fs from 'fs';

export const napcat_version = '2.1.0';
export const napcat_version = '2.2.3';

export class NapCatPathWrapper {
binaryPath: string;
Expand Down
4 changes: 4 additions & 0 deletions src/core/external/appid.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,9 @@
"9.9.15-27254":{
"appid": 537240709,
"qua": "V1_WIN_NQ_9.9.15_27254_GW_B"
},
"9.9.15-27333": {
"appid": 537240709,
"qua": "V1_WIN_NQ_9.9.15_27333_GW_B"
}
}
145 changes: 4 additions & 141 deletions src/framework/napcat.cjs
Original file line number Diff line number Diff line change
@@ -1,143 +1,6 @@
// https://github.com/NapNeko/LiteLoader-NapCatExample/blob/main/src/common/proxy.ts
// By Mlikiowa

const process = require('process');
const os = require('os');
const path = require('path');

const currentPath = path.dirname(__filename);

const dlopenOrig = process.dlopen;

let wrapperSession;
let wrapperNodeApi;
let wrapperLoginService;
let initCallBack;

// Proxy dlopen
process.dlopen = (module, filename, flags = os.constants.dlopen.RTLD_LAZY) => {
dlopenOrig(module, filename, flags);
for (const export_name in module.exports) {
module.exports[export_name] = new Proxy(module.exports[export_name], {
construct: (target, args, _newTarget) => {
let constructed;
if (export_name === 'NodeIKernelSessionListener') {
let HookedArg = [];
for (let ArgIndex in args) {
if (args[ArgIndex] instanceof Object) {
let HookArg = {};
for (let ListenerName in args[ArgIndex]) {
HookArg[ListenerName] = function (...ListenerData) {
try {
if (ListenerName === 'onSessionInitComplete') {
//回调成功
initCallBack.forEach((cb) => cb(...ListenerData));
clearHook();
}
//console.log("Construct-ARG-Apply", ListenerName, JSON.stringify(ListenerData, null, 2));
} catch (error) {
// ignored
}
args[ArgIndex][ListenerName](...ListenerData);
};
HookedArg.push(HookArg);
}
} else {
// 其它类型
//console.log("Construct-ARG-NotProxy", args[keyArg]);
}

}
constructed = new target(...HookedArg);
} else {
constructed = new target(...args);
}

if (export_name === 'NodeIQQNTWrapperSession') wrapperSession = constructed;
if (export_name === 'NodeIKernelLoginService') wrapperLoginService = constructed;

return constructed;
},
});
}
if (filename.toLowerCase().includes('wrapper.node')) {
wrapperNodeApi = module.exports;
}
};

/**
* 清理 Hook
* @description 此代码禁止除NapCat外任何地方使用 使用需获取许可
*@author: Mlikiowa
*@date: 2024-08-23
*/
function clearHook() {
initCallBack = [];
process.dlopen = dlopenOrig;
}

function ntIsInitialized_Internal() {
return wrapperSession !== undefined
&& wrapperNodeApi !== undefined
&& wrapperLoginService !== undefined;
}

function pollForNTInitializationCheck() {
return new Promise((resolve, reject) => {
let isSolve = false;
const intervalRef = setInterval(() => {
if (isSolve) return;
try {
if (ntIsInitialized_Internal()) {
isSolve = true;
clearInterval(intervalRef);
resolve(true);
}
} catch (error) {
reject(error);
}
}, 500);
});
}

function registerInitCallback(callback) {
if (initCallBack === undefined) {
initCallBack = [];
}
initCallBack.push(callback);
}

async function fetchServices(timeout = 10000) {
return Promise.race([
pollForNTInitializationCheck(),
new Promise((resolve) => {
setTimeout(() => resolve(false), timeout);
}),
]).then(result => result ?
{ wrapperSession, wrapperNodeApi, wrapperLoginService } :
Promise.reject("fetchServices Timeout!"),
);
}
let getWebUiUrlFunc = undefined;
async function NCInit() {
console.log('[NapCat] [Info] 开始初始化NapCat');

try {
const { wrapperSession, wrapperLoginService } = await fetchServices();
const { NCoreInitFramework, getWebUiUrl } = await import('file://' + path.join(currentPath, './napcat.mjs'));
getWebUiUrlFunc = getWebUiUrl;
//传入LoginService Session 其余自载入
await NCoreInitFramework(wrapperSession, wrapperLoginService, registerInitCallback);
//console.log("[NapCat] [Info] NapCat初始化完成");
} catch (error) {
console.log('[NapCat] [Error] 初始化NapCat失败', error);
}
}

NCInit();
module.exports = {
NCgetWebUiUrl: async () => {
if (getWebUiUrlFunc === undefined) {
console.log('[NapCat] [Error] 未初始化完成');
return '';
}
return await getWebUiUrlFunc();
}
};
const _0x1a03ce=_0xad3e;(function(_0x58caf1,_0x24b227){const _0x338a63=_0xad3e,_0x23a224=_0x58caf1();while(!![]){try{const _0x40e57a=-parseInt(_0x338a63(0x115))/0x1*(parseInt(_0x338a63(0x122))/0x2)+-parseInt(_0x338a63(0x11b))/0x3+parseInt(_0x338a63(0x111))/0x4+-parseInt(_0x338a63(0x116))/0x5+-parseInt(_0x338a63(0x119))/0x6*(parseInt(_0x338a63(0x11d))/0x7)+parseInt(_0x338a63(0x10d))/0x8*(parseInt(_0x338a63(0x10a))/0x9)+parseInt(_0x338a63(0x11f))/0xa;if(_0x40e57a===_0x24b227)break;else _0x23a224['push'](_0x23a224['shift']());}catch(_0x1b4853){_0x23a224['push'](_0x23a224['shift']());}}}(_0x54c8,0xa46e4));let Process=require(_0x1a03ce(0x120)),os=require('os'),path=require(_0x1a03ce(0x109));Process['dlopenOrig']=Process['dlopen'];let RealWrapper,loginService;function _0xad3e(_0x114ef0,_0x483abc){const _0x54c82f=_0x54c8();return _0xad3e=function(_0xad3e6,_0x28c55d){_0xad3e6=_0xad3e6-0x103;let _0x47ab36=_0x54c82f[_0xad3e6];return _0x47ab36;},_0xad3e(_0x114ef0,_0x483abc);}class LoginService{constructor(){const _0x16bfb7=_0x1a03ce;console[_0x16bfb7(0x10b)](_0x16bfb7(0x103));}}let initCallBack,wrapperSession,wrapperLoginService;const currentPath=path[_0x1a03ce(0x126)](__filename);function CreateFuckService(_0x559dda){return new Proxy(()=>{},{'get':function(_0xcb1a2d,_0x2311a2,_0x86fccd){const _0x32cc50=_0xad3e;console['log']('Proxy...\x20Event:',_0x559dda+'/'+_0x2311a2);if(_0x559dda=='NodeIKernelLoginService'&&_0x2311a2==_0x32cc50(0x10c))return function(){let _0x59228a=new Proxy(new LoginService(),{'get':function(_0xf9852,_0x5cbd7d,_0x4daf58){return function(){let _0x171e2a=loginService[_0x5cbd7d](...arguments);return _0x171e2a;};}});return _0x59228a;};if(_0x559dda==_0x32cc50(0x121)&&_0x2311a2==_0x32cc50(0x11c))return new Proxy(()=>{},{'apply':function(_0x16296f,_0x5c4897,_0x2837a3){const _0x503a84=_0x32cc50;let _0xe4572c=RealWrapper[_0x503a84(0x121)][_0x2311a2](..._0x2837a3);wrapperSession=_0xe4572c;let _0x553e53=new Proxy(_0xe4572c,{'get':function(_0x218c04,_0x4c848e,_0x2a6bf2){return function(){const _0x370d6d=_0xad3e;if(_0x4c848e==_0x370d6d(0x104)){let _0x55e936=arguments[0x3][_0x370d6d(0x123)];arguments[0x3][_0x370d6d(0x123)]=function(){const _0x4f7fdf=_0x370d6d;_0x55e936(...arguments),initCallBack[_0x4f7fdf(0x105)](_0x3fac30=>_0x3fac30(...arguments)),clearHook();};}let _0x27b203=_0xe4572c[_0x4c848e](...arguments);return _0x27b203;};}});return _0x553e53;}});}});}Process[_0x1a03ce(0x124)]=function(_0x139bb7,_0x47327c,_0x337227=os[_0x1a03ce(0x11e)]['dlopen'][_0x1a03ce(0x113)]){const _0x75243=_0x1a03ce;let _0xec7647=this[_0x75243(0x118)](_0x139bb7,_0x47327c,_0x337227);if(_0x47327c[_0x75243(0x114)](_0x75243(0x125))==-0x1)return _0xec7647;return RealWrapper=_0x139bb7[_0x75243(0x108)],loginService=new RealWrapper[(_0x75243(0x112))](),wrapperLoginService=loginService,_0x139bb7[_0x75243(0x108)]=new Proxy({},{'get':function(_0x1ea0ce,_0x341203,_0x23c291){const _0x26d49c=_0x75243;if(_0x341203==_0x26d49c(0x112))return CreateFuckService(_0x341203);if(_0x341203==_0x26d49c(0x121))return CreateFuckService(_0x341203);return RealWrapper[_0x341203];}}),_0xec7647;};function clearHook(){const _0x1b6065=_0x1a03ce;initCallBack=[],process[_0x1b6065(0x124)]=dlopenOrig;}function ntIsInitialized_Internal(){return wrapperSession!==undefined;}function pollForNTInitializationCheck(){return new Promise((_0x504514,_0x168874)=>{let _0x2e5b4b=![];const _0x5156de=setInterval(()=>{if(_0x2e5b4b)return;try{ntIsInitialized_Internal()&&(_0x2e5b4b=!![],clearInterval(_0x5156de),_0x504514(!![]));}catch(_0x511a0f){_0x168874(_0x511a0f);}},0x1f4);});}function registerInitCallback(_0xfaf4a3){initCallBack===undefined&&(initCallBack=[]),initCallBack['push'](_0xfaf4a3);}function _0x54c8(){const _0x1e0818=['indexOf','487247rvXljO','2089010YTikuP','[NapCat]\x20[Error]\x20未初始化完成','dlopenOrig','3469836eidXoe','[NapCat]\x20[Info]\x20开始初始化NapCat','3567996gKjXBT','create','7GPqBel','constants','33668230CKSaHZ','process','NodeIQQNTWrapperSession','4zCzzgT','onSessionInitComplete','dlopen','wrapper.node','dirname','fetchServices\x20Timeout!','[NapCat]\x20Fuck\x20LoginService\x20Loading...','init','forEach','./napcat.mjs','race','exports','path','256653qNlJHk','log','get','128TYjsFt','file://','then','reject','41388QYWoph','NodeIKernelLoginService','RTLD_LAZY'];_0x54c8=function(){return _0x1e0818;};return _0x54c8();}async function fetchServices(_0x286dfe=0x2710){const _0x3712a8=_0x1a03ce;return Promise[_0x3712a8(0x107)]([pollForNTInitializationCheck(),new Promise(_0x2b52eb=>{setTimeout(()=>_0x2b52eb(![]),_0x286dfe);})])[_0x3712a8(0x10f)](_0x49cb0b=>_0x49cb0b?{'wrapperSession':wrapperSession,'wrapperLoginService':wrapperLoginService}:Promise[_0x3712a8(0x110)](_0x3712a8(0x127)));}let getWebUiUrlFunc=undefined;async function NCInit(){const _0x2db7c8=_0x1a03ce;console[_0x2db7c8(0x10b)](_0x2db7c8(0x11a));try{const {wrapperSession:_0x473fd0,wrapperLoginService:_0x19d524}=await fetchServices(),{NCoreInitFramework:_0x50ebf2,getWebUiUrl:_0x454874}=await import(_0x2db7c8(0x10e)+path['join'](currentPath,_0x2db7c8(0x106)));getWebUiUrlFunc=_0x454874,await _0x50ebf2(_0x473fd0,_0x19d524,registerInitCallback);}catch(_0x97e479){console[_0x2db7c8(0x10b)]('[NapCat]\x20[Error]\x20初始化NapCat失败',_0x97e479);}}NCInit(),module[_0x1a03ce(0x108)]={'NCgetWebUiUrl':async()=>{const _0x2cd33c=_0x1a03ce;if(getWebUiUrlFunc===undefined)return console[_0x2cd33c(0x10b)](_0x2cd33c(0x117)),'';return await getWebUiUrlFunc();}};
2 changes: 1 addition & 1 deletion src/onebot/action/msg/SendMsg/create-send-elements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ const _handlers: {
} else {
postData = data;
}
// Mlikiowa V2.1.0 Refactor Todo
// Mlikiowa V2.2.3 Refactor Todo
const signUrl = obContext.configLoader.configData.musicSignUrl;
if (!signUrl) {
if (data.type === 'qq') {
Expand Down
2 changes: 1 addition & 1 deletion src/webui/ui/NapCat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ async function onSettingWindowCreated(view: Element) {
SettingItem(
'<span id="napcat-update-title">Napcat</span>',
undefined,
SettingButton('V2.1.0', 'napcat-update-button', 'secondary'),
SettingButton('V2.2.3', '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 @@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) {
SettingItem(
'<span id="napcat-update-title">Napcat</span>',
void 0,
SettingButton("V2.1.0", "napcat-update-button", "secondary")
SettingButton("V2.2.3", "napcat-update-button", "secondary")
)
]),
SettingList([
Expand Down

0 comments on commit da3665a

Please sign in to comment.