mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-03-01 00:00:26 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6a0b408af | ||
|
|
e9856ac80f | ||
|
|
f553f9dc8d | ||
|
|
5608638e9a | ||
|
|
a53c20767a | ||
|
|
a92bef5b33 | ||
|
|
a9a3b6ec6e | ||
|
|
20d41fff9e | ||
|
|
0b4d7e1346 | ||
|
|
46b9049a24 | ||
|
|
521f4dc365 | ||
|
|
04b507d749 | ||
|
|
5638127813 | ||
|
|
30a7797ba9 |
27
.github/prompt/default.md
vendored
Normal file
27
.github/prompt/default.md
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# V?.?.?
|
||||||
|
[使用文档](https://napneko.github.io/)
|
||||||
|
|
||||||
|
## Windows 一键包
|
||||||
|
我们为提供了的轻量化一键部署方案
|
||||||
|
相对于普通需要安装QQ的方案,下面已内置QQ和Napcat 阅读使用文档参考
|
||||||
|
|
||||||
|
你可以下载
|
||||||
|
|
||||||
|
NapCat.Shell.Windows.OneKey.zip (无头)
|
||||||
|
|
||||||
|
启动后可自动化部署一键包,教程参考使用文档安装部分
|
||||||
|
|
||||||
|
## 警告
|
||||||
|
**注意QQ版本推荐使用 40768+ 版本 最低可以使用40768版本**
|
||||||
|
**默认WebUi密钥为随机密码 控制台查看**
|
||||||
|
|
||||||
|
**[9.9.22-40990 X64 Win](https://dldir1v6.qq.com/qqfile/qq/QQNT/2c9d3f6c/QQ9.9.22.40990_x64.exe)**
|
||||||
|
[LinuxX64 DEB 40990 ](https://dldir1.qq.com/qqfile/qq/QQNT/ec800879/linuxqq_3.2.20-40990_amd64.deb)
|
||||||
|
[LinuxX64 RPM 40990 ](https://dldir1.qq.com/qqfile/qq/QQNT/ec800879/linuxqq_3.2.20-40990_x86_64.rpm)
|
||||||
|
[LinuxArm64 DEB 40990 ](https://dldir1.qq.com/qqfile/qq/QQNT/ec800879/linuxqq_3.2.20-40990_arm64.deb)
|
||||||
|
[LinuxArm64 RPM 40990 ](https://dldir1.qq.com/qqfile/qq/QQNT/ec800879/linuxqq_3.2.20-40990_aarch64.rpm)
|
||||||
|
[MAC DMG 40990 ](https://dldir1v6.qq.com/qqfile/qq/QQNT/c6cb0f5d/QQ_v6.9.82.40990.dmg)
|
||||||
|
## 如果WinX64缺少运行库或者xxx.dll?
|
||||||
|
[安装运行库](https://aka.ms/vs/17/release/vc_redist.x64.exe)
|
||||||
|
|
||||||
|
## 更新
|
||||||
4
.github/prompt/release_note_prompt.txt
vendored
4
.github/prompt/release_note_prompt.txt
vendored
@@ -26,9 +26,9 @@
|
|||||||
额外约束:
|
额外约束:
|
||||||
- 语言简体中文,面向最终用户
|
- 语言简体中文,面向最终用户
|
||||||
|
|
||||||
下面为真实示例,请完全参考
|
下面为真实示例,请完全参考(第一行版本号必须使用用户提供的版本号,例如 v4.9.5)
|
||||||
|
|
||||||
# V?.?.?
|
# V4.9.0
|
||||||
[使用文档](https://napneko.github.io/)
|
[使用文档](https://napneko.github.io/)
|
||||||
|
|
||||||
## Windows 一键包
|
## Windows 一键包
|
||||||
|
|||||||
61
.github/workflows/auto-release.yml
vendored
61
.github/workflows/auto-release.yml
vendored
@@ -9,8 +9,8 @@ on:
|
|||||||
permissions: write-all
|
permissions: write-all
|
||||||
|
|
||||||
env:
|
env:
|
||||||
OPENROUTER_API_URL: https://openrouter.ai/api/v1/chat/completions
|
OPENROUTER_API_URL: https://91vip.futureppo.top/v1/chat/completions
|
||||||
OPENROUTER_MODEL: "openrouter/auto"
|
OPENROUTER_MODEL: "kimi-k2-0905-turbo"
|
||||||
RELEASE_NAME: "NapCat"
|
RELEASE_NAME: "NapCat"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -88,7 +88,8 @@ jobs:
|
|||||||
# -----------------------------
|
# -----------------------------
|
||||||
# 1) 下载 QQ x64
|
# 1) 下载 QQ x64
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
JS_URL="https://cdn-go.cn/qq-web/im.qq.com_new/latest/rainbow/windowsConfig.js"
|
# JS_URL="https://cdn-go.cn/qq-web/im.qq.com_new/latest/rainbow/windowsConfig.js"
|
||||||
|
JS_URL="https://slave.docadan488.workers.dev/proxy?url=https://cdn-go.cn/qq-web/im.qq.com_new/latest/rainbow/windowsConfig.js"
|
||||||
NT_URL=$(curl -fsSL "$JS_URL" | grep -oP '"ntDownloadX64Url"\s*:\s*"\K[^"]+')
|
NT_URL=$(curl -fsSL "$JS_URL" | grep -oP '"ntDownloadX64Url"\s*:\s*"\K[^"]+')
|
||||||
QQ_ZIP="$(basename "$NT_URL")"
|
QQ_ZIP="$(basename "$NT_URL")"
|
||||||
aria2c -x16 -s16 -k1M -o "$QQ_ZIP" "$NT_URL"
|
aria2c -x16 -s16 -k1M -o "$QQ_ZIP" "$NT_URL"
|
||||||
@@ -103,7 +104,7 @@ jobs:
|
|||||||
NODE_VER="22.11.0"
|
NODE_VER="22.11.0"
|
||||||
NODE_URL="https://nodejs.org/dist/v$NODE_VER/node-v$NODE_VER-win-x64.zip"
|
NODE_URL="https://nodejs.org/dist/v$NODE_VER/node-v$NODE_VER-win-x64.zip"
|
||||||
NODE_ZIP="node-v$NODE_VER-win-x64.zip"
|
NODE_ZIP="node-v$NODE_VER-win-x64.zip"
|
||||||
aria2c -x16 -s16 -k1M -o "$NODE_ZIP" "$NODE_URL"
|
aria2c -x1 -s1 -k1M -o "$NODE_ZIP" "$NODE_URL"
|
||||||
|
|
||||||
NODE_EXTRACT="$TMPDIR/node_extracted"
|
NODE_EXTRACT="$TMPDIR/node_extracted"
|
||||||
mkdir -p "$NODE_EXTRACT"
|
mkdir -p "$NODE_EXTRACT"
|
||||||
@@ -112,52 +113,41 @@ jobs:
|
|||||||
# -----------------------------
|
# -----------------------------
|
||||||
# 3) 创建输出目录
|
# 3) 创建输出目录
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
OUT_DIR="$GITHUB_WORKSPACE/napcat"
|
OUT_DIR="$GITHUB_WORKSPACE/NapCat.Shell.Windows.Node"
|
||||||
mkdir -p "$OUT_DIR/napcat"
|
mkdir -p "$OUT_DIR/NapCat.Shell.Windows.Node"
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# 4) 解压 NapCat.Shell.zip 到 napcat
|
# 4) 解压 NapCat.Shell.zip 到 napcat
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
unzip -q "$GITHUB_WORKSPACE/artifacts/NapCat.Shell.zip" -d "$OUT_DIR/napcat"
|
cp -a "$GITHUB_WORKSPACE/artifacts/NapCat.Shell/." "$OUT_DIR/napcat/"
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# 5) 拷贝 QQ 文件到 napcat
|
# 5) 拷贝 QQ 文件到 NapCat.Shell.Windows.Node
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
QQ_TARGETS=("avif_convert.dll" "broadcast_ipc.dll" "config.json" "libglib-2.0-0.dll" "libgobject-2.0-0.dll" "libvips-42.dll" "ncnn.dll" "opencv.dll" "package.json" "QBar.dll" "wrapper.node")
|
QQ_TARGETS=("avif_convert.dll" "broadcast_ipc.dll" "config.json" "libglib-2.0-0.dll" "libgobject-2.0-0.dll" "libvips-42.dll" "ncnn.dll" "opencv.dll" "package.json" "QBar.dll" "wrapper.node")
|
||||||
for name in "${QQ_TARGETS[@]}"; do
|
for name in "${QQ_TARGETS[@]}"; do
|
||||||
find "$QQ_EXTRACT" -iname "$name" -exec cp -a {} "$OUT_DIR/napcat" \; || true
|
find "$QQ_EXTRACT" -iname "$name" -exec cp -a {} "$OUT_DIR" \; || true
|
||||||
done
|
done
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# 6) 拷贝仓库文件 napcat.bat 和 index.js
|
# 6) 拷贝仓库文件 napcat.bat 和 index.js
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
cp -a "$GITHUB_WORKSPACE/packages/napcat-develop/napcat.bat" "$OUT_DIR/napcat/" || true
|
cp -a "$GITHUB_WORKSPACE/packages/napcat-develop/napcat.bat" "$OUT_DIR/" || true
|
||||||
cp -a "$GITHUB_WORKSPACE/packages/napcat-develop/index.js" "$OUT_DIR/napcat/" || true
|
cp -a "$GITHUB_WORKSPACE/packages/napcat-develop/index.js" "$OUT_DIR/" || true
|
||||||
|
cp -a "$GITHUB_WORKSPACE/packages/napcat-develop/QQNT.dll" "$OUT_DIR/" || true
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# 7) 拷贝 Node.exe 到 napcat
|
# 7) 拷贝 Node.exe 到 NapCat.Shell.Windows.Node
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
cp -a "$NODE_EXTRACT/node-v$NODE_VER-win-x64/node.exe" "$OUT_DIR/napcat/" || true
|
cp -a "$NODE_EXTRACT/node-v$NODE_VER-win-x64/node.exe" "$OUT_DIR/" || true
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 8) 生成 index.txt
|
|
||||||
# -----------------------------
|
|
||||||
echo "NapCat Files Collected on $(date)" > "$GITHUB_WORKSPACE/index.txt"
|
|
||||||
|
|
||||||
# -----------------------------
|
|
||||||
# 9) 打包 napcat,命名为 NapCat.Shell.Windows.Node.zip
|
|
||||||
# -----------------------------
|
|
||||||
cd "$OUT_DIR"
|
|
||||||
zip -qr "$GITHUB_WORKSPACE/NapCat.Shell.Windows.Node.zip" napcat
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: NapCat.Shell.Windows.Node
|
name: NapCat.Shell.Windows.Node
|
||||||
path: NapCat.Shell.Windows.Node.zip
|
path: NapCat.Shell.Windows.Node
|
||||||
|
|
||||||
release-napcat:
|
release-napcat:
|
||||||
needs: [Build-LiteLoader, Build-Shell]
|
needs: [Build-LiteLoader, Build-Shell, Download-QNX64]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -170,10 +160,11 @@ jobs:
|
|||||||
|
|
||||||
- name: Zip Artifacts
|
- name: Zip Artifacts
|
||||||
run: |
|
run: |
|
||||||
cd artifacts
|
cd artifacts
|
||||||
[ -d NapCat.Framework ] && zip -qr ../NapCat.Framework.zip -r NapCat.Framework
|
[ -d NapCat.Framework ] && (cd NapCat.Framework && zip -qr ../../NapCat.Framework.zip .)
|
||||||
[ -d NapCat.Shell ] && zip -qr ../NapCat.Shell.zip -r NapCat.Shell
|
[ -d NapCat.Shell ] && (cd NapCat.Shell && zip -qr ../../NapCat.Shell.zip .)
|
||||||
cd ..
|
[ -d NapCat.Shell.Windows.Node ] && (cd NapCat.Shell.Windows.Node && zip -qr ../../NapCat.Shell.Windows.Node.zip .)
|
||||||
|
cd ..
|
||||||
|
|
||||||
- name: Generate release note via OpenRouter
|
- name: Generate release note via OpenRouter
|
||||||
env:
|
env:
|
||||||
@@ -226,13 +217,16 @@ jobs:
|
|||||||
SYSTEM_PROMPT=$(<"$PROMPT_FILE")
|
SYSTEM_PROMPT=$(<"$PROMPT_FILE")
|
||||||
|
|
||||||
# 构建用户内容
|
# 构建用户内容
|
||||||
USER_CONTENT="TAG: $CURRENT_TAG\n提交列表:\n$COMMITS"
|
USER_CONTENT="当前真正的版本: $CURRENT_TAG\n提交列表:\n$COMMITS"
|
||||||
|
|
||||||
# 构建请求 JSON
|
# 构建请求 JSON
|
||||||
BODY=$(jq -n \
|
BODY=$(jq -n \
|
||||||
--arg system "$SYSTEM_PROMPT" \
|
--arg system "$SYSTEM_PROMPT" \
|
||||||
--arg user "$USER_CONTENT" \
|
--arg user "$USER_CONTENT" \
|
||||||
'{model: env.OPENROUTER_MODEL, messages:[{role:"system", content:$system},{role:"user", content:$user}], temperature:0.2, max_tokens:800}')
|
'{model: env.OPENROUTER_MODEL, messages:[{role:"system", content:$system},{role:"user", content:$user}], temperature:0.3, max_tokens:800}')
|
||||||
|
|
||||||
|
echo "=== OpenRouter request body ==="
|
||||||
|
echo "$BODY" | jq .
|
||||||
|
|
||||||
# 调用 OpenRouter
|
# 调用 OpenRouter
|
||||||
RESPONSE=$(curl -s -X POST "$OPENROUTER_API_URL" \
|
RESPONSE=$(curl -s -X POST "$OPENROUTER_API_URL" \
|
||||||
@@ -263,6 +257,7 @@ jobs:
|
|||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
body_path: CHANGELOG.md
|
body_path: CHANGELOG.md
|
||||||
files: |
|
files: |
|
||||||
|
NapCat.Shell.Windows.Node.zip
|
||||||
NapCat.Framework.zip
|
NapCat.Framework.zip
|
||||||
NapCat.Shell.zip
|
NapCat.Shell.zip
|
||||||
draft: true
|
draft: true
|
||||||
|
|||||||
@@ -15,13 +15,6 @@
|
|||||||
"import": "./*"
|
"import": "./*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
|
||||||
"napcat-core": "workspace:*",
|
|
||||||
"napcat-common": "workspace:*",
|
|
||||||
"napcat-onebot": "workspace:*",
|
|
||||||
"napcat-webui-backend": "workspace:*",
|
|
||||||
"napcat-qrcode": "workspace:*"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^22.0.1"
|
"@types/node": "^22.0.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import { WebUiDataRuntime } from '@/napcat-webui-backend/helper/Data';
|
|||||||
import { sendSuccess } from '@/napcat-webui-backend/utils/response';
|
import { sendSuccess } from '@/napcat-webui-backend/utils/response';
|
||||||
import { WebUiConfig } from '@/napcat-webui-backend/index';
|
import { WebUiConfig } from '@/napcat-webui-backend/index';
|
||||||
|
|
||||||
export const PackageInfoHandler: RequestHandler = (_, res) => {
|
export const GetNapCatVersion: RequestHandler = (_, res) => {
|
||||||
const data = WebUiDataRuntime.getPackageJson();
|
const data = WebUiDataRuntime.GetNapCatVersion();
|
||||||
sendSuccess(res, data);
|
sendSuccess(res, { version: data });
|
||||||
};
|
};
|
||||||
|
|
||||||
export const QQVersionHandler: RequestHandler = (_, res) => {
|
export const QQVersionHandler: RequestHandler = (_, res) => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { LoginRuntimeType } from '../types/data';
|
import type { LoginRuntimeType } from '../types/data';
|
||||||
import packageJson from '../../../../package.json';
|
|
||||||
import store from 'napcat-common/src/store';
|
import store from 'napcat-common/src/store';
|
||||||
|
import { napCatVersion } from 'napcat-common/src/version';
|
||||||
|
|
||||||
const LoginRuntime: LoginRuntimeType = {
|
const LoginRuntime: LoginRuntimeType = {
|
||||||
LoginCurrentTime: Date.now(),
|
LoginCurrentTime: Date.now(),
|
||||||
@@ -30,12 +30,11 @@ const LoginRuntime: LoginRuntimeType = {
|
|||||||
QQLoginList: [],
|
QQLoginList: [],
|
||||||
NewQQLoginList: [],
|
NewQQLoginList: [],
|
||||||
},
|
},
|
||||||
packageJson,
|
NapCatVersion: napCatVersion,
|
||||||
WebUiConfigQuickFunction: async () => {
|
WebUiConfigQuickFunction: async () => {
|
||||||
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const WebUiDataRuntime = {
|
export const WebUiDataRuntime = {
|
||||||
setWebUiTokenChangeCallback (func: (token: string) => Promise<void>): void {
|
setWebUiTokenChangeCallback (func: (token: string) => Promise<void>): void {
|
||||||
LoginRuntime.onWebUiTokenChange = func;
|
LoginRuntime.onWebUiTokenChange = func;
|
||||||
@@ -130,8 +129,8 @@ export const WebUiDataRuntime = {
|
|||||||
return LoginRuntime.NapCatHelper.onOB11ConfigChanged(ob11);
|
return LoginRuntime.NapCatHelper.onOB11ConfigChanged(ob11);
|
||||||
} as LoginRuntimeType['NapCatHelper']['onOB11ConfigChanged'],
|
} as LoginRuntimeType['NapCatHelper']['onOB11ConfigChanged'],
|
||||||
|
|
||||||
getPackageJson () {
|
GetNapCatVersion () {
|
||||||
return LoginRuntime.packageJson;
|
return LoginRuntime.NapCatVersion;
|
||||||
},
|
},
|
||||||
|
|
||||||
setQQVersion (version: string) {
|
setQQVersion (version: string) {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { Router } from 'express';
|
import { Router } from 'express';
|
||||||
import { GetThemeConfigHandler, PackageInfoHandler, QQVersionHandler, SetThemeConfigHandler } from '../api/BaseInfo';
|
import { GetThemeConfigHandler, GetNapCatVersion, QQVersionHandler, SetThemeConfigHandler } from '../api/BaseInfo';
|
||||||
import { StatusRealTimeHandler } from '@/napcat-webui-backend/api/Status';
|
import { StatusRealTimeHandler } from '@/napcat-webui-backend/api/Status';
|
||||||
import { GetProxyHandler } from '../api/Proxy';
|
import { GetProxyHandler } from '../api/Proxy';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
// router: 获取nc的package.json信息
|
// router: 获取nc的package.json信息
|
||||||
router.get('/QQVersion', QQVersionHandler);
|
router.get('/QQVersion', QQVersionHandler);
|
||||||
router.get('/PackageInfo', PackageInfoHandler);
|
router.get('/GetNapCatVersion', GetNapCatVersion);
|
||||||
router.get('/GetSysStatusRealTime', StatusRealTimeHandler);
|
router.get('/GetSysStatusRealTime', StatusRealTimeHandler);
|
||||||
router.get('/proxy', GetProxyHandler);
|
router.get('/proxy', GetProxyHandler);
|
||||||
router.get('/Theme', GetThemeConfigHandler);
|
router.get('/Theme', GetThemeConfigHandler);
|
||||||
|
|||||||
@@ -18,5 +18,5 @@ interface LoginRuntimeType {
|
|||||||
QQLoginList: string[];
|
QQLoginList: string[];
|
||||||
NewQQLoginList: LoginListItem[];
|
NewQQLoginList: LoginListItem[];
|
||||||
};
|
};
|
||||||
packageJson: object;
|
NapCatVersion: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ const NapCatVersion = () => {
|
|||||||
data: packageData,
|
data: packageData,
|
||||||
loading: packageLoading,
|
loading: packageLoading,
|
||||||
error: packageError,
|
error: packageError,
|
||||||
} = useRequest(WebUIManager.getPackageInfo);
|
} = useRequest(WebUIManager.GetNapCatVersion);
|
||||||
|
|
||||||
const currentVersion = packageData?.version;
|
const currentVersion = packageData?.version;
|
||||||
|
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ export default class WebUIManager {
|
|||||||
return data.data as ServerResponse<T>;
|
return data.data as ServerResponse<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async getPackageInfo () {
|
public static async GetNapCatVersion () {
|
||||||
const { data } =
|
const { data } =
|
||||||
await serverRequest.get<ServerResponse<PackageInfo>>('/base/PackageInfo');
|
await serverRequest.get<ServerResponse<PackageInfo>>('/base/GetNapCatVersion');
|
||||||
return data.data;
|
return data.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import logo from '@/assets/images/logo.png';
|
|||||||
import WebUIManager from '@/controllers/webui_manager';
|
import WebUIManager from '@/controllers/webui_manager';
|
||||||
|
|
||||||
function VersionInfo () {
|
function VersionInfo () {
|
||||||
const { data, loading, error } = useRequest(WebUIManager.getPackageInfo);
|
const { data, loading, error } = useRequest(WebUIManager.GetNapCatVersion);
|
||||||
return (
|
return (
|
||||||
<div className='flex items-center gap-2 text-2xl font-bold'>
|
<div className='flex items-center gap-2 text-2xl font-bold'>
|
||||||
<div className='flex items-center gap-2'>
|
<div className='flex items-center gap-2'>
|
||||||
|
|||||||
Reference in New Issue
Block a user