mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
chore: 原始脚本
This commit is contained in:
45
script/BootWay.03.ps1
Normal file
45
script/BootWay.03.ps1
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Dont Use This Script
|
||||||
|
# 2024.7.3
|
||||||
|
function Get-QQpath {
|
||||||
|
try {
|
||||||
|
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
|
||||||
|
$uninstallString = $key.UninstallString
|
||||||
|
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
throw "get QQ path error: $_"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Select-QQPath {
|
||||||
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
|
[System.Windows.Forms.Application]::EnableVisualStyles()
|
||||||
|
|
||||||
|
$dialogTitle = "Select QQ.exe"
|
||||||
|
|
||||||
|
$filePicker = New-Object System.Windows.Forms.OpenFileDialog
|
||||||
|
$filePicker.Title = $dialogTitle
|
||||||
|
$filePicker.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"
|
||||||
|
$filePicker.FilterIndex = 1
|
||||||
|
$null = $filePicker.ShowDialog()
|
||||||
|
if (-not ($filePicker.FileName)) {
|
||||||
|
throw "User did not select an .exe file."
|
||||||
|
}
|
||||||
|
return $filePicker.FileName
|
||||||
|
}
|
||||||
|
|
||||||
|
$params = $args -join " "
|
||||||
|
Try {
|
||||||
|
$QQpath = Get-QQpath
|
||||||
|
}
|
||||||
|
Catch {
|
||||||
|
$QQpath = Select-QQPath
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(Test-Path $QQpath)) {
|
||||||
|
throw "provided QQ path is invalid: $QQpath"
|
||||||
|
}
|
||||||
|
|
||||||
|
$Bootfile = Join-Path $PSScriptRoot "napcat.mjs"
|
||||||
|
$env:ELECTRON_RUN_AS_NODE = 1
|
||||||
|
$commandInfo = Get-Command $QQpath -ErrorAction Stop
|
||||||
|
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-command &{& chcp 65001;& '$($commandInfo.Path)' --enable-logging }"
|
90
script/BootWay05.bat
Normal file
90
script/BootWay05.bat
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
@echo off
|
||||||
|
REM 检查当前会话是否具有管理员权限
|
||||||
|
openfiles >nul 2>&1
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
REM 如果不是管理员,则重新启动脚本以管理员模式运行
|
||||||
|
echo 请求管理员权限...
|
||||||
|
powershell -Command "Start-Process cmd -ArgumentList '/c %~f0 %*' -Verb RunAs"
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 设置当前工作目录
|
||||||
|
cd /d %~dp0
|
||||||
|
|
||||||
|
REM 获取当前目录路径
|
||||||
|
set currentPath=%cd%
|
||||||
|
set currentPath=%currentPath:\=/%
|
||||||
|
|
||||||
|
REM 生成JavaScript代码
|
||||||
|
set "jsCode=(async () =^>await import('file:///%currentPath%/napcat.mjs'))();"
|
||||||
|
|
||||||
|
REM 将JavaScript代码保存到文件中
|
||||||
|
echo %jsCode% > loadScript.js
|
||||||
|
echo JavaScript code has been generated and saved to loadScript.js
|
||||||
|
|
||||||
|
REM 设置NAPCAT_PATH环境变量为 当前目录的loadScript.js地址
|
||||||
|
set NAPCAT_PATH=%cd%\loadScript.js
|
||||||
|
|
||||||
|
REM 获取QQ路径
|
||||||
|
|
||||||
|
|
||||||
|
:loop_read
|
||||||
|
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
|
||||||
|
set RetString=%%b
|
||||||
|
goto :napcat_boot
|
||||||
|
)
|
||||||
|
|
||||||
|
:napcat_boot
|
||||||
|
for %%a in (%RetString%) do (
|
||||||
|
set "pathWithoutUninstall=%%~dpa"
|
||||||
|
)
|
||||||
|
|
||||||
|
SET QQPath=%pathWithoutUninstall%QQ.exe
|
||||||
|
|
||||||
|
REM 拿不到QQ路径则退出
|
||||||
|
if not exist "%QQpath%" (
|
||||||
|
echo provided QQ path is invalid: %QQpath%
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 收集dbghelp.dll路径和HASH信息
|
||||||
|
set QQdir=%~dp0
|
||||||
|
set oldDllPath=%QQdir%dbghelp.dll
|
||||||
|
set newDllPath=%currentPath%\dbghelp.dll
|
||||||
|
|
||||||
|
for /f "tokens=*" %%A in ('certutil -hashfile "%oldDllPath%" MD5') do (
|
||||||
|
if not defined oldDllHash set oldDllHash=%%A
|
||||||
|
)
|
||||||
|
for /f "tokens=*" %%A in ('certutil -hashfile "%newDllPath%" MD5') do (
|
||||||
|
if not defined newDllHash set newDllHash=%%A
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 如果文件一致则跳过
|
||||||
|
if "%oldDllHash%" neq "%newDllHash%" (
|
||||||
|
tasklist /fi "imagename eq QQ.exe" 2>nul | find /i "QQ.exe" >nul
|
||||||
|
if %errorlevel% equ 0 (
|
||||||
|
REM 文件占用则退出
|
||||||
|
echo dbghelp.dll is in use, cannot continue.
|
||||||
|
) else (
|
||||||
|
REM 文件未占用则尝试覆盖
|
||||||
|
copy /y "%newDllPath%" "%oldDllPath%"
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo Failed to copy dbghelp.dll
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
) else (
|
||||||
|
echo dbghelp.dll has been copied to %QQdir%
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 带参数启动QQ
|
||||||
|
REM 判断wt是否存在,存在则通过wt启动,不存在则通过cmd启动
|
||||||
|
REM %QQPath% --enable-logging %*
|
||||||
|
where wt >nul 2>nul
|
||||||
|
if %errorlevel% equ 0 (
|
||||||
|
wt "cmd" /c "%QQPath%" --enable-logging %*
|
||||||
|
) else (
|
||||||
|
"%QQPath%" --enable-logging %*
|
||||||
|
)
|
123
script/BootWay05.ps1
Normal file
123
script/BootWay05.ps1
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
# 检查当前会话是否具有管理员权限
|
||||||
|
function Test-Administrator {
|
||||||
|
$user = [Security.Principal.WindowsIdentity]::GetCurrent()
|
||||||
|
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Administrator)) {
|
||||||
|
# 如果不是管理员,则重新启动脚本以管理员模式运行
|
||||||
|
$scriptPath = $myInvocation.MyCommand.Path
|
||||||
|
if (-not $scriptPath) {
|
||||||
|
$scriptPath = $PSCommandPath
|
||||||
|
}
|
||||||
|
$newProcess = New-Object System.Diagnostics.ProcessStartInfo "powershell";
|
||||||
|
$newProcess.Arguments = "-File `"$scriptPath`" $args"
|
||||||
|
$newProcess.Verb = "runas";
|
||||||
|
[System.Diagnostics.Process]::Start($newProcess);
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-QQpath {
|
||||||
|
try {
|
||||||
|
$key = Get-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ"
|
||||||
|
$uninstallString = $key.UninstallString
|
||||||
|
return [System.IO.Path]::GetDirectoryName($uninstallString) + "\QQ.exe"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
throw "get QQ path error: $_"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Select-QQPath {
|
||||||
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
|
[System.Windows.Forms.Application]::EnableVisualStyles()
|
||||||
|
|
||||||
|
$dialogTitle = "Select QQ.exe"
|
||||||
|
|
||||||
|
$filePicker = New-Object System.Windows.Forms.OpenFileDialog
|
||||||
|
$filePicker.Title = $dialogTitle
|
||||||
|
$filePicker.Filter = "Executable Files (*.exe)|*.exe|All Files (*.*)|*.*"
|
||||||
|
$filePicker.FilterIndex = 1
|
||||||
|
$null = $filePicker.ShowDialog()
|
||||||
|
if (-not ($filePicker.FileName)) {
|
||||||
|
throw "User did not select an .exe file."
|
||||||
|
}
|
||||||
|
return $filePicker.FileName
|
||||||
|
}
|
||||||
|
|
||||||
|
# 设置当前工作目录
|
||||||
|
$scriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
Set-Location $scriptDirectory
|
||||||
|
|
||||||
|
# 获取当前目录路径
|
||||||
|
$currentPath = Get-Location
|
||||||
|
|
||||||
|
# 替换\为/
|
||||||
|
$currentPath = $currentPath -replace '\\', '/'
|
||||||
|
|
||||||
|
# 生成JavaScript代码
|
||||||
|
$jsCode = @"
|
||||||
|
(async () => {
|
||||||
|
await import('file:///$currentPath/napcat.mjs');
|
||||||
|
})();
|
||||||
|
"@
|
||||||
|
|
||||||
|
# 将JavaScript代码保存到文件中
|
||||||
|
$jsFilePath = Join-Path $currentPath "loadScript.js"
|
||||||
|
$jsCode | Out-File -FilePath $jsFilePath -Encoding UTF8
|
||||||
|
|
||||||
|
Write-Output "JavaScript code has been generated and saved to $jsFilePath"
|
||||||
|
# 设置NAPCAT_PATH环境变量为 当前目录的loadScript.js地址
|
||||||
|
$env:NAPCAT_PATH = $jsFilePath
|
||||||
|
|
||||||
|
$params = $args -join " "
|
||||||
|
Try {
|
||||||
|
$QQpath = Get-QQpath
|
||||||
|
}
|
||||||
|
Catch {
|
||||||
|
$QQpath = Select-QQPath
|
||||||
|
}
|
||||||
|
# 拿不到QQ路径则退出
|
||||||
|
if (!(Test-Path $QQpath)) {
|
||||||
|
Write-Output "provided QQ path is invalid: $QQpath"
|
||||||
|
Read-Host "Press any key to continue..."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
$commandInfo = Get-Command $QQpath -ErrorAction Stop
|
||||||
|
|
||||||
|
# 收集dbghelp.dll路径和HASH信息
|
||||||
|
$QQpath = Split-Path $QQpath
|
||||||
|
$oldDllPath = Join-Path $QQpath "dbghelp.dll"
|
||||||
|
$oldDllHash = Get-FileHash $oldDllPath -Algorithm MD5
|
||||||
|
$newDllPath = Join-Path $currentPath "dbghelp.dll"
|
||||||
|
$newDllHash = Get-FileHash $newDllPath -Algorithm MD5
|
||||||
|
# 如果文件一致则跳过
|
||||||
|
if ($oldDllHash.Hash -ne $newDllHash.Hash) {
|
||||||
|
$processes = Get-Process -Name QQ -ErrorAction SilentlyContinue
|
||||||
|
if ($processes) {
|
||||||
|
# 文件占用则退出
|
||||||
|
Write-Output "dbghelp.dll is in use by the following processes:"
|
||||||
|
$processes | ForEach-Object { Write-Output "$($_.Id) $($_.Name) $($_.Path)" }
|
||||||
|
Write-Output "dbghelp.dll is in use, cannot continue."
|
||||||
|
Read-Host "Press any key to continue..."
|
||||||
|
exit
|
||||||
|
} else {
|
||||||
|
# 文件未占用则尝试覆盖
|
||||||
|
try {
|
||||||
|
Copy-Item -Path "$newDllPath" -Destination "$oldDllPath" -Force
|
||||||
|
Write-Output "dbghelp.dll has been copied to $QQpath"
|
||||||
|
} catch {
|
||||||
|
Write-Output "Failed to copy dbghelp.dll: $_"
|
||||||
|
Read-Host "Press any key to continue..."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 带参数启动QQ
|
||||||
|
try {
|
||||||
|
Start-Process powershell -ArgumentList '-noexit', '-noprofile', "-command &{& chcp 65001;& '$($commandInfo.Path)' --enable-logging $params}" -NoNewWindow -ErrorAction Stop
|
||||||
|
} catch {
|
||||||
|
Write-Output "Failed to start process as administrator: $_"
|
||||||
|
Read-Host "Press any key to continue..."
|
||||||
|
}
|
93
script/BootWay05.utf8.bat
Normal file
93
script/BootWay05.utf8.bat
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
@echo off
|
||||||
|
REM 检查当前会话是否具有管理员权限
|
||||||
|
openfiles >nul 2>&1
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
REM 如果不是管理员,则重新启动脚本以管理员模式运行
|
||||||
|
echo 请求管理员权限...
|
||||||
|
where wt >nul 2>nul
|
||||||
|
if %errorlevel% equ 0 (
|
||||||
|
powershell -Command "Start-Process cmd -ArgumentList ' /c %~f0 %*' -Verb RunAs"
|
||||||
|
) else (
|
||||||
|
powershell -Command "Start-Process wt -ArgumentList 'cmd /c %~f0 %*' -Verb RunAs"
|
||||||
|
)
|
||||||
|
|
||||||
|
REM wt "cmd" /c "%~f0 %*"
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 设置当前工作目录
|
||||||
|
cd /d %~dp0
|
||||||
|
|
||||||
|
REM 获取当前目录路径
|
||||||
|
set currentPath=%cd%
|
||||||
|
set currentPath=%currentPath:\=/%
|
||||||
|
|
||||||
|
REM 生成JavaScript代码
|
||||||
|
set "jsCode=(async () =^>await import('file:///%currentPath%/napcat.mjs'))();"
|
||||||
|
|
||||||
|
REM 将JavaScript代码保存到文件中
|
||||||
|
echo %jsCode% > loadScript.js
|
||||||
|
echo JavaScript code has been generated and saved to loadScript.js
|
||||||
|
|
||||||
|
REM 设置NAPCAT_PATH环境变量为 当前目录的loadScript.js地址
|
||||||
|
set NAPCAT_PATH=%cd%\loadScript.js
|
||||||
|
|
||||||
|
REM 获取QQ路径
|
||||||
|
|
||||||
|
|
||||||
|
:loop_read
|
||||||
|
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
|
||||||
|
set RetString=%%b
|
||||||
|
goto :napcat_boot
|
||||||
|
)
|
||||||
|
|
||||||
|
:napcat_boot
|
||||||
|
for %%a in (%RetString%) do (
|
||||||
|
set "pathWithoutUninstall=%%~dpa"
|
||||||
|
)
|
||||||
|
|
||||||
|
SET QQPath=%pathWithoutUninstall%QQ.exe
|
||||||
|
|
||||||
|
REM 拿不到QQ路径则退出
|
||||||
|
if not exist "%QQpath%" (
|
||||||
|
echo provided QQ path is invalid: %QQpath%
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 收集dbghelp.dll路径和HASH信息
|
||||||
|
set QQdir=%~dp0
|
||||||
|
set oldDllPath=%QQdir%dbghelp.dll
|
||||||
|
set newDllPath=%currentPath%\dbghelp.dll
|
||||||
|
|
||||||
|
for /f "tokens=*" %%A in ('certutil -hashfile "%oldDllPath%" MD5') do (
|
||||||
|
if not defined oldDllHash set oldDllHash=%%A
|
||||||
|
)
|
||||||
|
for /f "tokens=*" %%A in ('certutil -hashfile "%newDllPath%" MD5') do (
|
||||||
|
if not defined newDllHash set newDllHash=%%A
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 如果文件一致则跳过
|
||||||
|
if "%oldDllHash%" neq "%newDllHash%" (
|
||||||
|
tasklist /fi "imagename eq QQ.exe" 2>nul | find /i "QQ.exe" >nul
|
||||||
|
if %errorlevel% equ 0 (
|
||||||
|
REM 文件占用则退出
|
||||||
|
echo dbghelp.dll is in use, cannot continue.
|
||||||
|
) else (
|
||||||
|
REM 文件未占用则尝试覆盖
|
||||||
|
copy /y "%newDllPath%" "%oldDllPath%"
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo Failed to copy dbghelp.dll
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
) else (
|
||||||
|
echo dbghelp.dll has been copied to %QQdir%
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 带参数启动QQ
|
||||||
|
REM 判断wt是否存在,存在则通过wt启动,不存在则通过cmd启动
|
||||||
|
REM %QQPath% --enable-logging %*
|
||||||
|
chcp 65001
|
||||||
|
"%QQPath%" --enable-logging %*
|
42
script/checkVersion.cjs
Normal file
42
script/checkVersion.cjs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
const fs = require("fs");
|
||||||
|
const process = require("process");
|
||||||
|
|
||||||
|
console.log("[NapCat] [CheckVersion] 开始检测当前仓库版本...");
|
||||||
|
try {
|
||||||
|
const packageJson = require("../package.json");
|
||||||
|
const currentVersion = packageJson.version;
|
||||||
|
const targetVersion = process.env.VERSION;
|
||||||
|
|
||||||
|
console.log("[NapCat] [CheckVersion] currentVersion:", currentVersion, "targetVersion:", targetVersion);
|
||||||
|
|
||||||
|
// 验证 targetVersion 格式
|
||||||
|
if (!targetVersion || typeof targetVersion !== 'string') {
|
||||||
|
console.error("[NapCat] [CheckVersion] 目标版本格式不正确或未设置!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入脚本文件的统一函数
|
||||||
|
const writeScriptToFile = (content) => {
|
||||||
|
fs.writeFileSync("./checkVersion.sh", content, { flag: 'w' });
|
||||||
|
console.log("[NapCat] [CheckVersion] checkVersion.sh 文件已更新。");
|
||||||
|
};
|
||||||
|
|
||||||
|
if (currentVersion === targetVersion) {
|
||||||
|
// 不需要更新版本,写入一个简单的脚本
|
||||||
|
const simpleScript = "#!/bin/bash\necho \"CheckVersion Is Done\"";
|
||||||
|
writeScriptToFile(simpleScript);
|
||||||
|
} else {
|
||||||
|
// 更新版本,构建安全的sed命令
|
||||||
|
const safeScriptContent = `
|
||||||
|
#!/bin/bash
|
||||||
|
git config --global user.email "bot@test.wumiao.wang"
|
||||||
|
git config --global user.name "Version"
|
||||||
|
sed -i "s/\\\"version\\\": \\\"${currentVersion}\\\"/\\\"version\\\": \\\"${targetVersion}\\\"/g" package.json
|
||||||
|
git add .
|
||||||
|
git commit -m "chore:version change"
|
||||||
|
git push -u origin main`;
|
||||||
|
writeScriptToFile(safeScriptContent);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("[NapCat] [CheckVersion] 检测过程中发生错误:", error);
|
||||||
|
}
|
BIN
script/dbghelp.dll
Normal file
BIN
script/dbghelp.dll
Normal file
Binary file not shown.
Reference in New Issue
Block a user