Merge branch 'main-fix' into main-fix
This commit is contained in:
17
.github/pull_request_template.md
vendored
Normal file
17
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- 提交前必读 -->
|
||||
- 🔴**当前项目处于重构阶段(2025.3.14-)**
|
||||
- ✅ 接受:与main直接相关的Bug修复:提交到main-fix分支
|
||||
- ⚠️ 冻结:所有新功能开发和非紧急重构
|
||||
|
||||
# 请填写以下内容
|
||||
(删除掉中括号内的空格,并替换为**小写的x**)
|
||||
1. - [ ] `main` 分支 **禁止修改**,请确认本次提交的分支 **不是 `main` 分支**
|
||||
2. - [ ] 本次更新 **包含破坏性变更**(如数据库结构变更、配置文件修改等)
|
||||
3. - [ ] 本次更新是否经过测试
|
||||
4. - [ ] 请**不要**在数据库中添加group_id字段,这会影响本项目对其他平台的兼容
|
||||
5. 请填写破坏性更新的具体内容(如有):
|
||||
6. 请简要说明本次更新的内容和目的:
|
||||
# 其他信息
|
||||
- **关联 Issue**:Close #
|
||||
- **截图/GIF**:
|
||||
- **附加信息**:
|
||||
29
.github/workflows/precheck.yml
vendored
Normal file
29
.github/workflows/precheck.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
# .github/workflows/precheck.yml
|
||||
name: PR Precheck
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
conflict-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Check Conflicts
|
||||
run: |
|
||||
git fetch origin main
|
||||
if git diff --name-only --diff-filter=U origin/main...HEAD | grep .; then
|
||||
echo "CONFLICT=true" >> $GITHUB_ENV
|
||||
fi
|
||||
labeler:
|
||||
runs-on: ubuntu-latest
|
||||
needs: conflict-check
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
if: env.CONFLICT == 'true'
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.addLabels({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.issue.number,
|
||||
labels: ['🚫冲突需处理']
|
||||
})
|
||||
1
.github/workflows/ruff.yml
vendored
1
.github/workflows/ruff.yml
vendored
@@ -6,3 +6,4 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: astral-sh/ruff-action@v3
|
||||
|
||||
|
||||
348
MaiLauncher.bat
348
MaiLauncher.bat
@@ -2,12 +2,12 @@
|
||||
@setlocal enabledelayedexpansion
|
||||
@chcp 936
|
||||
|
||||
@REM 设置版本号
|
||||
@REM <EFBFBD><EFBFBD><EFBFBD>ð汾<EFBFBD><EFBFBD>
|
||||
set "VERSION=1.0"
|
||||
|
||||
title 麦麦Bot控制台 v%VERSION%
|
||||
title <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bot<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ v%VERSION%
|
||||
|
||||
@REM 设置Python和Git环境变量
|
||||
@REM <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Python<EFBFBD><EFBFBD>Git<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set "_root=%~dp0"
|
||||
set "_root=%_root:~0,-1%"
|
||||
cd "%_root%"
|
||||
@@ -21,14 +21,14 @@ if exist "%_root%\python" (
|
||||
call "%_root%\venv\Scripts\activate.bat"
|
||||
set "PYTHON_HOME=%_root%\venv\Scripts"
|
||||
) else (
|
||||
echo 正在自动查找Python解释器...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Python<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
|
||||
where python >nul 2>&1
|
||||
if %errorlevel% equ 0 (
|
||||
for /f "delims=" %%i in ('where python') do (
|
||||
echo %%i | findstr /i /c:"!LocalAppData!\Microsoft\WindowsApps\python.exe" >nul
|
||||
if errorlevel 1 (
|
||||
echo 找到Python解释器:%%i
|
||||
echo <EFBFBD>ҵ<EFBFBD>Python<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%%i
|
||||
set "py_path=%%i"
|
||||
goto :validate_python
|
||||
)
|
||||
@@ -41,46 +41,46 @@ if exist "%_root%\python" (
|
||||
goto :validate_python
|
||||
)
|
||||
)
|
||||
echo 没有找到Python解释器,要安装吗?
|
||||
set /p pyinstall_confirm="继续?(Y/n): "
|
||||
echo û<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Python<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,Ҫ<><D2AA>װ<EFBFBD><D7B0>?
|
||||
set /p pyinstall_confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/n): "
|
||||
if /i "!pyinstall_confirm!"=="Y" (
|
||||
cls
|
||||
echo 正在安装Python...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>װPython...
|
||||
winget install --id Python.Python.3.13 -e --accept-package-agreements --accept-source-agreements
|
||||
if %errorlevel% neq 0 (
|
||||
echo 安装失败,请手动安装Python
|
||||
echo <EFBFBD><EFBFBD>װʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD>װPython
|
||||
start https://www.python.org/downloads/
|
||||
exit /b
|
||||
)
|
||||
echo 安装完成,正在验证Python...
|
||||
echo <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤Python...
|
||||
goto search_python
|
||||
|
||||
) else (
|
||||
echo 取消安装Python,按任意键退出...
|
||||
echo ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װPython<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>...
|
||||
pause >nul
|
||||
exit /b
|
||||
)
|
||||
|
||||
echo 错误:未找到可用的Python解释器!
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Python<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
exit /b 1
|
||||
|
||||
:validate_python
|
||||
"!py_path!" --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo 无效的Python解释器:%py_path%
|
||||
echo <EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>Python<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%py_path%
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:: 提取安装目录
|
||||
:: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>װĿ¼
|
||||
for %%i in ("%py_path%") do set "PYTHON_HOME=%%~dpi"
|
||||
set "PYTHON_HOME=%PYTHON_HOME:~0,-1%"
|
||||
)
|
||||
if not exist "%PYTHON_HOME%\python.exe" (
|
||||
echo Python路径验证失败:%PYTHON_HOME%
|
||||
echo 请检查Python安装路径中是否有python.exe文件
|
||||
echo Python·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤ʧ<EFBFBD>ܣ<EFBFBD>%PYTHON_HOME%
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Python<EFBFBD><EFBFBD>װ·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>python.exe<EFBFBD>ļ<EFBFBD>
|
||||
exit /b 1
|
||||
)
|
||||
echo 成功设置Python路径:%PYTHON_HOME%
|
||||
echo <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Python·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%PYTHON_HOME%
|
||||
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ cls
|
||||
if exist "%_root%\tools\git\bin" (
|
||||
set "GIT_HOME=%_root%\tools\git\bin"
|
||||
) else (
|
||||
echo 正在自动查找Git...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Git...
|
||||
|
||||
where git >nul 2>&1
|
||||
if %errorlevel% equ 0 (
|
||||
@@ -98,7 +98,7 @@ if exist "%_root%\tools\git\bin" (
|
||||
goto :validate_git
|
||||
)
|
||||
)
|
||||
echo 正在扫描常见安装路径...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>賣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ·<EFBFBD><EFBFBD>...
|
||||
set "search_paths=!ProgramFiles!\Git\cmd"
|
||||
for /f "tokens=*" %%d in ("!search_paths!") do (
|
||||
if exist "%%d\git.exe" (
|
||||
@@ -106,31 +106,31 @@ if exist "%_root%\tools\git\bin" (
|
||||
goto :validate_git
|
||||
)
|
||||
)
|
||||
echo 没有找到Git,要安装吗?
|
||||
set /p confirm="继续?(Y/N): "
|
||||
echo û<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Git<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!confirm!"=="Y" (
|
||||
cls
|
||||
echo 正在安装Git...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>װGit...
|
||||
set "custom_url=https://ghfast.top/https://github.com/git-for-windows/git/releases/download/v2.48.1.windows.1/Git-2.48.1-64-bit.exe"
|
||||
|
||||
set "download_path=%TEMP%\Git-Installer.exe"
|
||||
|
||||
echo 正在下载Git安装包...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Git<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>...
|
||||
curl -L -o "!download_path!" "!custom_url!"
|
||||
|
||||
if exist "!download_path!" (
|
||||
echo 下载成功,开始安装Git...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>سɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>װGit...
|
||||
start /wait "" "!download_path!" /SILENT /NORESTART
|
||||
) else (
|
||||
echo 下载失败,请手动安装Git
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD>װGit
|
||||
start https://git-scm.com/download/win
|
||||
exit /b
|
||||
)
|
||||
|
||||
del "!download_path!"
|
||||
echo 临时文件已清理。
|
||||
echo <EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
echo 安装完成,正在验证Git...
|
||||
echo <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤Git...
|
||||
where git >nul 2>&1
|
||||
if %errorlevel% equ 0 (
|
||||
for /f "delims=" %%i in ('where git') do (
|
||||
@@ -140,28 +140,28 @@ if exist "%_root%\tools\git\bin" (
|
||||
goto :search_git
|
||||
|
||||
) else (
|
||||
echo 安装完成,但未找到Git,请手动安装Git
|
||||
echo <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ҵ<EFBFBD>Git<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD>װGit
|
||||
start https://git-scm.com/download/win
|
||||
exit /b
|
||||
)
|
||||
|
||||
) else (
|
||||
echo 取消安装Git,按任意键退出...
|
||||
echo ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װGit<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>...
|
||||
pause >nul
|
||||
exit /b
|
||||
)
|
||||
|
||||
echo 错误:未找到可用的Git!
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Git<EFBFBD><EFBFBD>
|
||||
exit /b 1
|
||||
|
||||
:validate_git
|
||||
"%git_path%" --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo 无效的Git:%git_path%
|
||||
echo <EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>Git<EFBFBD><EFBFBD>%git_path%
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:: 提取安装目录
|
||||
:: <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>װĿ¼
|
||||
for %%i in ("%git_path%") do set "GIT_HOME=%%~dpi"
|
||||
set "GIT_HOME=%GIT_HOME:~0,-1%"
|
||||
)
|
||||
@@ -170,40 +170,40 @@ if exist "%_root%\tools\git\bin" (
|
||||
cls
|
||||
sc query | findstr /i "MongoDB" >nul
|
||||
if !errorlevel! neq 0 (
|
||||
echo MongoDB服务未运行,是否尝试运行服务?
|
||||
set /p confirm="是否启动?(Y/N): "
|
||||
echo MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p confirm="<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!confirm!"=="Y" (
|
||||
echo 正在尝试启动MongoDB服务...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
powershell -Command "Start-Process -Verb RunAs cmd -ArgumentList '/c net start MongoDB'"
|
||||
echo 正在等待MongoDB服务启动...
|
||||
echo 按下任意键跳过等待...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڵȴ<EFBFBD>MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>...
|
||||
timeout /t 30 >nul
|
||||
sc query | findstr /i "MongoDB" >nul
|
||||
if !errorlevel! neq 0 (
|
||||
echo MongoDB服务启动失败,可能是没有安装,要安装吗?
|
||||
set /p install_confirm="继续安装?(Y/N): "
|
||||
echo MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD>װ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p install_confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!install_confirm!"=="Y" (
|
||||
echo 正在安装MongoDB...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>װMongoDB...
|
||||
winget install --id MongoDB.Server -e --accept-package-agreements --accept-source-agreements
|
||||
echo 安装完成,正在启动MongoDB服务...
|
||||
echo <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
net start MongoDB
|
||||
if !errorlevel! neq 0 (
|
||||
echo 启动MongoDB服务失败,请手动启动
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
exit /b
|
||||
) else (
|
||||
echo MongoDB服务已成功启动
|
||||
echo MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѳɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
)
|
||||
) else (
|
||||
echo 取消安装MongoDB,按任意键退出...
|
||||
echo ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װMongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>...
|
||||
pause >nul
|
||||
exit /b
|
||||
)
|
||||
)
|
||||
) else (
|
||||
echo "警告:MongoDB服务未运行,将导致MaiMBot无法访问数据库!"
|
||||
echo "<EFBFBD><EFBFBD><EFBFBD>棺MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MaiMBot<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ⣡"
|
||||
)
|
||||
) else (
|
||||
echo MongoDB服务已运行
|
||||
echo MongoDB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
)
|
||||
|
||||
@REM set "GIT_HOME=%_root%\tools\git\bin"
|
||||
@@ -212,47 +212,47 @@ set "PATH=%PYTHON_HOME%;%GIT_HOME%;%PATH%"
|
||||
:install_maim
|
||||
if not exist "!_root!\bot.py" (
|
||||
cls
|
||||
echo 你似乎没有安装麦麦Bot,要安装在当前目录吗?
|
||||
set /p confirm="继续?(Y/N): "
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD>û<EFBFBD>а<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bot<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>װ<EFBFBD>ڵ<EFBFBD>ǰĿ¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!confirm!"=="Y" (
|
||||
echo 要使用Git代理下载吗?
|
||||
set /p proxy_confirm="继续?(Y/N): "
|
||||
echo Ҫʹ<EFBFBD><EFBFBD>Git<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p proxy_confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!proxy_confirm!"=="Y" (
|
||||
echo 正在安装麦麦Bot...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bot...
|
||||
git clone https://ghfast.top/https://github.com/SengokuCola/MaiMBot
|
||||
) else (
|
||||
echo 正在安装麦麦Bot...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bot...
|
||||
git clone https://github.com/SengokuCola/MaiMBot
|
||||
)
|
||||
xcopy /E /H /I MaiMBot . >nul 2>&1
|
||||
rmdir /s /q MaiMBot
|
||||
git checkout main-fix
|
||||
|
||||
echo 安装完成,正在安装依赖...
|
||||
echo <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
python -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
|
||||
python -m pip install virtualenv
|
||||
python -m virtualenv venv
|
||||
call venv\Scripts\activate.bat
|
||||
python -m pip install -r requirements.txt
|
||||
|
||||
echo 安装完成,要编辑配置文件吗?
|
||||
set /p edit_confirm="继续?(Y/N): "
|
||||
echo <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>Ҫ<EFBFBD>༭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p edit_confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!edit_confirm!"=="Y" (
|
||||
goto config_menu
|
||||
) else (
|
||||
echo 取消编辑配置文件,按任意键返回主菜单...
|
||||
echo ȡ<EFBFBD><EFBFBD><EFBFBD>༭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@REM git获取当前分支名并保存在变量里
|
||||
@REM git<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for /f "delims=" %%b in ('git symbolic-ref --short HEAD 2^>nul') do (
|
||||
set "BRANCH=%%b"
|
||||
)
|
||||
|
||||
@REM 根据不同分支名给分支名字符串使用不同颜色
|
||||
echo 分支名: %BRANCH%
|
||||
@REM <EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ͬ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ò<EFBFBD>ͬ<EFBFBD><EFBFBD>ɫ
|
||||
echo <EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>: %BRANCH%
|
||||
if "!BRANCH!"=="main" (
|
||||
set "BRANCH_COLOR=[92m"
|
||||
) else if "!BRANCH!"=="main-fix" (
|
||||
@@ -266,78 +266,78 @@ if "!BRANCH!"=="main" (
|
||||
@REM endlocal & set "BRANCH_COLOR=%BRANCH_COLOR%"
|
||||
|
||||
:check_is_venv
|
||||
echo 正在检查虚拟环境状态...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬...
|
||||
if exist "%_root%\config\no_venv" (
|
||||
echo 检测到no_venv,跳过虚拟环境检查
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>no_venv,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
goto menu
|
||||
)
|
||||
|
||||
:: 环境检测
|
||||
:: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if defined VIRTUAL_ENV (
|
||||
goto menu
|
||||
)
|
||||
|
||||
echo =====================================
|
||||
echo 虚拟环境检测警告:
|
||||
echo 当前使用系统Python路径:!PYTHON_HOME!
|
||||
echo 未检测到激活的虚拟环境!
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⾯<EFBFBD>棺
|
||||
echo <EFBFBD><EFBFBD>ǰʹ<EFBFBD><EFBFBD>ϵͳPython·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!PYTHON_HOME!
|
||||
echo δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
:env_interaction
|
||||
echo =====================================
|
||||
echo 请选择操作:
|
||||
echo 1 - 创建并激活Venv虚拟环境
|
||||
echo 2 - 创建/激活Conda虚拟环境
|
||||
echo 3 - 临时跳过本次检查
|
||||
echo 4 - 永久跳过虚拟环境检查
|
||||
set /p choice="请输入选项(1-4): "
|
||||
echo <EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 1 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Venv<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 2 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>Conda<64><61><EFBFBD><EFBFBD><E2BBB7>
|
||||
echo 3 - <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 4 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p choice="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>(1-4): "
|
||||
|
||||
if "!choice!" = "4" (
|
||||
echo 要永久跳过虚拟环境检查吗?
|
||||
set /p no_venv_confirm="继续?(Y/N): ....."
|
||||
if "!choice!"=="4" (
|
||||
echo Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p no_venv_confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): ....."
|
||||
if /i "!no_venv_confirm!"=="Y" (
|
||||
echo 1 > "%_root%\config\no_venv"
|
||||
echo 已创建no_venv文件
|
||||
echo <EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD>no_venv<EFBFBD>ļ<EFBFBD>
|
||||
pause >nul
|
||||
goto menu
|
||||
) else (
|
||||
echo 取消跳过虚拟环境检查,按任意键返回...
|
||||
echo ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
pause >nul
|
||||
goto env_interaction
|
||||
)
|
||||
)
|
||||
|
||||
if "!choice!" = "3"(
|
||||
echo 警告:使用系统环境可能导致依赖冲突!
|
||||
if "!choice!"=="3" (
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>棺ʹ<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>
|
||||
timeout /t 2 >nul
|
||||
goto menu
|
||||
)
|
||||
|
||||
if "!choice!" = "2" goto handle_conda
|
||||
if "!choice!" = "1" goto handle_venv
|
||||
if "!choice!"=="2" goto handle_conda
|
||||
if "!choice!"=="1" goto handle_venv
|
||||
|
||||
echo 无效的输入,请输入1-4之间的数字
|
||||
echo <EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-4֮<34><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
timeout /t 2 >nul
|
||||
goto env_interaction
|
||||
|
||||
:handle_venv
|
||||
python -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
|
||||
echo 正在初始化Venv环境...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>Venv<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
python -m pip install virtualenv || (
|
||||
echo 安装环境失败,错误码:!errorlevel!
|
||||
echo <EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룺!errorlevel!
|
||||
pause
|
||||
goto env_interaction
|
||||
)
|
||||
echo 创建虚拟环境到:venv
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>venv
|
||||
python -m virtualenv venv || (
|
||||
echo 环境创建失败,错误码:!errorlevel!
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룺!errorlevel!
|
||||
pause
|
||||
goto env_interaction
|
||||
)
|
||||
|
||||
call venv\Scripts\activate.bat
|
||||
echo 已激活Venv环境
|
||||
echo 要安装依赖吗?
|
||||
set /p install_confirm="继续?(Y/N): "
|
||||
echo <EFBFBD>Ѽ<EFBFBD><EFBFBD><EFBFBD>Venv<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo Ҫ<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p install_confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!install_confirm!"=="Y" (
|
||||
goto update_dependencies
|
||||
)
|
||||
@@ -345,66 +345,70 @@ goto menu
|
||||
|
||||
:handle_conda
|
||||
where conda >nul 2>&1 || (
|
||||
echo 未检测到conda,可能原因:
|
||||
echo 1. 未安装Miniconda
|
||||
echo 2. conda配置异常
|
||||
echo δ<EFBFBD><EFBFBD><EFBFBD>conda<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 1. δ<EFBFBD><EFBFBD>װMiniconda
|
||||
echo 2. conda<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
timeout /t 10 >nul
|
||||
goto env_interaction
|
||||
)
|
||||
|
||||
:conda_menu
|
||||
echo 请选择Conda操作:
|
||||
echo 1 - 创建新环境
|
||||
echo 2 - 激活已有环境
|
||||
echo 3 - 返回上级菜单
|
||||
set /p choice="请输入选项(1-3): "
|
||||
echo <EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Conda<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 1 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 2 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 3 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD>˵<EFBFBD>
|
||||
set /p choice="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>(1-3): "
|
||||
|
||||
if "!choice!"=="3" goto env_interaction
|
||||
if "!choice!"=="2" goto activate_conda
|
||||
if "!choice!"=="1" goto create_conda
|
||||
|
||||
echo <20><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-3֮<33><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
timeout /t 2 >nul
|
||||
goto conda_menu
|
||||
|
||||
:create_conda
|
||||
set /p "CONDA_ENV=请输入新环境名称:"
|
||||
set /p "CONDA_ENV=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>"
|
||||
if "!CONDA_ENV!"=="" (
|
||||
echo 环境名称不能为空!
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>
|
||||
goto create_conda
|
||||
)
|
||||
conda create -n !CONDA_ENV! python=3.13 -y || (
|
||||
echo 环境创建失败,错误码:!errorlevel!
|
||||
pause
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룺!errorlevel!
|
||||
timeout /t 10 >nul
|
||||
goto conda_menu
|
||||
)
|
||||
goto activate_conda
|
||||
|
||||
:activate_conda
|
||||
set /p "CONDA_ENV=请输入要激活的环境名称:"
|
||||
conda activate !CONDA_ENV! || (
|
||||
echo 激活失败,可能原因:
|
||||
echo 1. 环境不存在
|
||||
echo 2. conda配置异常
|
||||
set /p "CONDA_ENV=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>"
|
||||
call conda activate !CONDA_ENV! || (
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 2. conda<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
pause
|
||||
goto conda_menu
|
||||
)
|
||||
echo 成功激活conda环境:!CONDA_ENV!
|
||||
echo 要安装依赖吗?
|
||||
set /p install_confirm="继续?(Y/N): "
|
||||
echo <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>conda<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!CONDA_ENV!
|
||||
echo Ҫ<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p install_confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!install_confirm!"=="Y" (
|
||||
goto update_dependencies
|
||||
)
|
||||
:menu
|
||||
@chcp 936
|
||||
cls
|
||||
echo 麦麦Bot控制台 v%VERSION% 当前分支: %BRANCH_COLOR%%BRANCH%[0m
|
||||
echo 当前Python环境: [96m!PYTHON_HOME![0m
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bot<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨ v%VERSION% <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>֧: %BRANCH_COLOR%%BRANCH%[0m
|
||||
echo <EFBFBD><EFBFBD>ǰPython<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [96m!PYTHON_HOME![0m
|
||||
echo ======================
|
||||
echo 1. 更新并启动麦麦Bot (默认)
|
||||
echo 2. 直接启动麦麦Bot
|
||||
echo 3. 启动麦麦配置界面
|
||||
echo 4. 打开麦麦神奇工具箱
|
||||
echo 5. 退出
|
||||
echo 1. <EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bot (Ĭ<EFBFBD><EFBFBD>)
|
||||
echo 2. ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bot
|
||||
echo 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>湤<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 5. <EFBFBD>˳<EFBFBD>
|
||||
echo ======================
|
||||
|
||||
set /p choice="请输入选项数字 (1-5)并按下回车以选择: "
|
||||
set /p choice="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1-5)<29><><EFBFBD><EFBFBD><EFBFBD>»س<C2BB><D8B3><EFBFBD>ѡ<EFBFBD><D1A1>: "
|
||||
|
||||
if "!choice!"=="" set choice=1
|
||||
|
||||
@@ -414,7 +418,7 @@ if "!choice!"=="3" goto config_menu
|
||||
if "!choice!"=="4" goto tools_menu
|
||||
if "!choice!"=="5" exit /b
|
||||
|
||||
echo 无效的输入,请输入1-5之间的数字
|
||||
echo <EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-5֮<35><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
timeout /t 2 >nul
|
||||
goto menu
|
||||
|
||||
@@ -437,18 +441,18 @@ goto menu
|
||||
:tools_menu
|
||||
@chcp 936
|
||||
cls
|
||||
echo 麦麦时尚工具箱 当前分支: %BRANCH_COLOR%%BRANCH%[0m
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ<EFBFBD><C7B0>֧: %BRANCH_COLOR%%BRANCH%[0m
|
||||
echo ======================
|
||||
echo 1. 更新依赖
|
||||
echo 2. 切换分支
|
||||
echo 3. 重置当前分支
|
||||
echo 4. 更新配置文件
|
||||
echo 5. 学习新的知识库
|
||||
echo 6. 打开知识库文件夹
|
||||
echo 7. 返回主菜单
|
||||
echo 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 2. <EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>֧
|
||||
echo 3. <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><EFBFBD>֧
|
||||
echo 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
echo 5. ѧϰ<EFBFBD>µ<EFBFBD>֪ʶ<EFBFBD><EFBFBD>
|
||||
echo 6. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ʶ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||
echo 7. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
|
||||
echo ======================
|
||||
|
||||
set /p choice="请输入选项数字: "
|
||||
set /p choice="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: "
|
||||
if "!choice!"=="1" goto update_dependencies
|
||||
if "!choice!"=="2" goto switch_branch
|
||||
if "!choice!"=="3" goto reset_branch
|
||||
@@ -457,29 +461,29 @@ if "!choice!"=="5" goto learn_new_knowledge
|
||||
if "!choice!"=="6" goto open_knowledge_folder
|
||||
if "!choice!"=="7" goto menu
|
||||
|
||||
echo 无效的输入,请输入1-6之间的数字
|
||||
echo <EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-6֮<36><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
timeout /t 2 >nul
|
||||
goto tools_menu
|
||||
|
||||
:update_dependencies
|
||||
cls
|
||||
echo 正在更新依赖...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
python -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
|
||||
python.exe -m pip install -r requirements.txt
|
||||
|
||||
echo 依赖更新完成,按任意键返回工具箱菜单...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
pause
|
||||
goto tools_menu
|
||||
|
||||
:switch_branch
|
||||
cls
|
||||
echo 正在切换分支...
|
||||
echo 当前分支: %BRANCH%
|
||||
@REM echo 可用分支: main, debug, stable-dev
|
||||
echo 1. 切换到[92mmain[0m
|
||||
echo 2. 切换到[91mmain-fix[0m
|
||||
echo 请输入要切换到的分支:
|
||||
set /p branch_name="分支名: "
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>֧...
|
||||
echo <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>֧: %BRANCH%
|
||||
@REM echo <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>֧: main, debug, stable-dev
|
||||
echo 1. <EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>[92mmain[0m
|
||||
echo 2. <EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>[91mmain-fix[0m
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>֧:
|
||||
set /p branch_name="<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>: "
|
||||
if "%branch_name%"=="" set branch_name=main
|
||||
if "%branch_name%"=="main" (
|
||||
set "BRANCH_COLOR=[92m"
|
||||
@@ -494,32 +498,32 @@ if "%branch_name%"=="main" (
|
||||
set "BRANCH_COLOR=[91m"
|
||||
set "branch_name=main-fix"
|
||||
) else (
|
||||
echo 无效的分支名, 请重新输入
|
||||
echo <EFBFBD><EFBFBD>Ч<EFBFBD>ķ<EFBFBD>֧<EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
timeout /t 2 >nul
|
||||
goto switch_branch
|
||||
)
|
||||
|
||||
echo 正在切换到分支 %branch_name%...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧ %branch_name%...
|
||||
git checkout %branch_name%
|
||||
echo 分支切换完成,当前分支: %BRANCH_COLOR%%branch_name%[0m
|
||||
echo <EFBFBD><EFBFBD>֧<EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>֧: %BRANCH_COLOR%%branch_name%[0m
|
||||
set "BRANCH=%branch_name%"
|
||||
echo 按任意键返回工具箱菜单...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
pause >nul
|
||||
goto tools_menu
|
||||
|
||||
|
||||
:reset_branch
|
||||
cls
|
||||
echo 正在重置当前分支...
|
||||
echo 当前分支: !BRANCH!
|
||||
echo 确认要重置当前分支吗?
|
||||
set /p confirm="继续?(Y/N): "
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><EFBFBD>֧...
|
||||
echo <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>֧: !BRANCH!
|
||||
echo ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set /p confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!confirm!"=="Y" (
|
||||
echo 正在重置当前分支...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><EFBFBD>֧...
|
||||
git reset --hard !BRANCH!
|
||||
echo 分支重置完成,按任意键返回工具箱菜单...
|
||||
echo <EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
) else (
|
||||
echo 取消重置当前分支,按任意键返回工具箱菜单...
|
||||
echo ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
)
|
||||
pause >nul
|
||||
goto tools_menu
|
||||
@@ -527,44 +531,44 @@ goto tools_menu
|
||||
|
||||
:update_config
|
||||
cls
|
||||
echo 正在更新配置文件...
|
||||
echo 请确保已备份重要数据,继续将修改当前配置文件。
|
||||
echo 继续请按Y,取消请按任意键...
|
||||
set /p confirm="继续?(Y/N): "
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>...
|
||||
echo <EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>밴Y<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>밴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
set /p confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!confirm!"=="Y" (
|
||||
echo 正在更新配置文件...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>...
|
||||
python.exe config\auto_update.py
|
||||
echo 配置文件更新完成,按任意键返回工具箱菜单...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
) else (
|
||||
echo 取消更新配置文件,按任意键返回工具箱菜单...
|
||||
echo ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
)
|
||||
pause >nul
|
||||
goto tools_menu
|
||||
|
||||
:learn_new_knowledge
|
||||
cls
|
||||
echo 正在学习新的知识库...
|
||||
echo 请确保已备份重要数据,继续将修改当前知识库。
|
||||
echo 继续请按Y,取消请按任意键...
|
||||
set /p confirm="继续?(Y/N): "
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧϰ<EFBFBD>µ<EFBFBD>֪ʶ<EFBFBD><EFBFBD>...
|
||||
echo <EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ǰ֪ʶ<EFBFBD>⡣
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>밴Y<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>밴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
set /p confirm="<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Y/N): "
|
||||
if /i "!confirm!"=="Y" (
|
||||
echo 正在学习新的知识库...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧϰ<EFBFBD>µ<EFBFBD>֪ʶ<EFBFBD><EFBFBD>...
|
||||
python.exe src\plugins\zhishi\knowledge_library.py
|
||||
echo 学习完成,按任意键返回工具箱菜单...
|
||||
echo ѧϰ<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
) else (
|
||||
echo 取消学习新的知识库,按任意键返回工具箱菜单...
|
||||
echo ȡ<EFBFBD><EFBFBD>ѧϰ<EFBFBD>µ<EFBFBD>֪ʶ<EFBFBD>⣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
)
|
||||
pause >nul
|
||||
goto tools_menu
|
||||
|
||||
:open_knowledge_folder
|
||||
cls
|
||||
echo 正在打开知识库文件夹...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>֪ʶ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>...
|
||||
if exist data\raw_info (
|
||||
start explorer data\raw_info
|
||||
) else (
|
||||
echo 知识库文件夹不存在!
|
||||
echo 正在创建文件夹...
|
||||
echo ֪ʶ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>...
|
||||
mkdir data\raw_info
|
||||
timeout /t 2 >nul
|
||||
)
|
||||
@@ -577,18 +581,18 @@ cls
|
||||
git pull > temp.log 2>&1
|
||||
findstr /C:"detected dubious ownership" temp.log >nul
|
||||
if %errorlevel% equ 0 (
|
||||
echo 检测到仓库权限问题,正在自动修复...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>...
|
||||
git config --global --add safe.directory "%cd%"
|
||||
echo 已添加例外,正在重试git pull...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>git pull...
|
||||
del temp.log
|
||||
goto retry_git_pull
|
||||
)
|
||||
del temp.log
|
||||
echo 正在更新依赖...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
python -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
|
||||
python -m pip install -r requirements.txt && cls
|
||||
|
||||
echo 当前代理设置:
|
||||
echo <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
echo HTTP_PROXY=%HTTP_PROXY%
|
||||
echo HTTPS_PROXY=%HTTPS_PROXY%
|
||||
|
||||
@@ -600,17 +604,17 @@ set no_proxy=0.0.0.0/32
|
||||
REM chcp 65001
|
||||
python bot.py
|
||||
echo.
|
||||
echo Bot已停止运行,按任意键返回主菜单...
|
||||
echo Bot<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
pause >nul
|
||||
goto menu
|
||||
|
||||
:start_bot
|
||||
cls
|
||||
echo 正在更新依赖...
|
||||
echo <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
python -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
|
||||
python -m pip install -r requirements.txt && cls
|
||||
|
||||
echo 当前代理设置:
|
||||
echo <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
echo HTTP_PROXY=%HTTP_PROXY%
|
||||
echo HTTPS_PROXY=%HTTPS_PROXY%
|
||||
|
||||
@@ -622,7 +626,7 @@ set no_proxy=0.0.0.0/32
|
||||
REM chcp 65001
|
||||
python bot.py
|
||||
echo.
|
||||
echo Bot已停止运行,按任意键返回主菜单...
|
||||
echo Bot<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>...
|
||||
pause >nul
|
||||
goto menu
|
||||
|
||||
|
||||
78
README.md
78
README.md
@@ -1,3 +1,81 @@
|
||||
# 关于项目分支调整与贡献指南的重要通知
|
||||
<details>
|
||||
<summary>
|
||||
- 📂 致所有为麦麦提交过贡献,以及想要为麦麦提交贡献的朋友们!</summary>
|
||||
|
||||
---
|
||||
|
||||
**📢 关于项目分支调整与贡献指南的重要通知**
|
||||
**致所有关注MaiMBot的开发者与贡献者:**
|
||||
|
||||
首先,我们由衷感谢大家近期的热情参与!感谢大家对MaiMBot的喜欢,项目突然受到广泛关注让我们倍感惊喜,也深深感受到开源社区的温暖力量。为了保障项目长期健康发展,我们不得不对开发流程做出重要调整,恳请理解与支持。
|
||||
|
||||
---
|
||||
|
||||
### **📌 本次调整的核心原因**
|
||||
|
||||
1. **维护团队精力有限**
|
||||
核心成员(包括我本人)均为在校学生/在职开发者,近期涌入的大量PR和意见已远超我们的处理能力。为确保本职工作与项目质量,我们必须优化协作流程。
|
||||
|
||||
2. **重构核心架构的紧迫性**
|
||||
当前我们正与核心团队全力重构项目底层逻辑,这是为未来扩展性、性能提升打下的必要基础,需要高度专注。
|
||||
|
||||
3. **保障现有用户的稳定性**
|
||||
我们深知许多用户已依赖当前版本,因此必须划分清晰的维护边界,确保生产环境可用性。
|
||||
|
||||
---
|
||||
|
||||
### **🌿 全新分支策略与贡献指南**
|
||||
|
||||
为平衡上述目标,即日起启用以下分支结构:
|
||||
|
||||
| 分支 | 定位 | 接受PR类型 | 提交对象 |
|
||||
| ---------- | ---------------------------- | --------------------------------------------- | ---------------- |
|
||||
| `main` | **稳定版**(供下载使用) | 仅接受来自`main-fix`的合并 | 维护团队直接管理 |
|
||||
| `main-fix` | 生产环境紧急修复 | 明确的功能缺陷修复(需附带复现步骤/测试用例) | 所有开发者 |
|
||||
| `refactor` | 重构版(**不兼容当前main**) | 仅重构与相关Bug修复 | 重构小组维护 |
|
||||
|
||||
---
|
||||
|
||||
### **⚠️ 对现有PR的处理说明**
|
||||
|
||||
由于分支结构调整,**GitHub已自动关闭所有未合并的PR**,这并非否定您的贡献价值!如果您认为自己的PR符合以下条件:
|
||||
|
||||
- 属于`main-fix`明确的**功能性缺陷修复**(非功能增强) ,包括非预期行为和严重报错,需要发布issue讨论确定。
|
||||
- 属于`refactor`分支的**重构适配性修复**
|
||||
|
||||
**欢迎您重新提交到对应分支**,并在PR描述中标注`[Re-submit from closed PR]`,我们将优先审查。其他类型PR暂缓受理,但您的创意我们已记录在案,未来重构完成后将重新评估。
|
||||
|
||||
---
|
||||
|
||||
### **🙏 致谢与协作倡议**
|
||||
|
||||
- 感谢每一位提交Issue、PR、参与讨论的开发者!您的每一行代码都是maim吃的
|
||||
- 特别致敬在交流群中积极答疑的社区成员,你们自发维护的氛围令人感动❤️ ,maim哭了
|
||||
- **重构期间的非代码贡献同样珍贵**:文档改进、测试用例补充、用户反馈整理等,欢迎通过Issue认领任务!
|
||||
|
||||
---
|
||||
|
||||
### **📬 高效协作小贴士**
|
||||
|
||||
1. **提交前请先讨论**:创建Issue描述问题,确认是否符合`main-fix`修复范围
|
||||
2. **对重构提出您的想法**:如果您对重构版有自己的想法,欢迎提交讨论issue亟需测试伙伴,欢迎邮件联系`team@xxx.org`报名
|
||||
3. **部分main-fix的功能在issue讨论后,经过严格讨论,一致决定可以添加功能改动或修复的,可以提交pr**
|
||||
|
||||
---
|
||||
|
||||
**谢谢大家谢谢大家谢谢大家谢谢大家谢谢大家谢谢大家!**
|
||||
虽然此刻不得不放缓脚步,但这一切都是为了跳得更高。期待在重构完成后与各位共建更强大的版本!
|
||||
|
||||
千石可乐 敬上
|
||||
2025年3月14日
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 麦麦!MaiMBot (编辑中)
|
||||
|
||||
<div align="center">
|
||||
|
||||
280
run.sh
280
run.sh
@@ -1,280 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Maimbot 一键安装脚本 by Cookie987
|
||||
# 适用于Debian系
|
||||
# 请小心使用任何一键脚本!
|
||||
|
||||
# 如无法访问GitHub请修改此处镜像地址
|
||||
|
||||
LANG=C.UTF-8
|
||||
|
||||
GITHUB_REPO="https://ghfast.top/https://github.com/SengokuCola/MaiMBot.git"
|
||||
|
||||
# 颜色输出
|
||||
GREEN="\e[32m"
|
||||
RED="\e[31m"
|
||||
RESET="\e[0m"
|
||||
|
||||
# 需要的基本软件包
|
||||
REQUIRED_PACKAGES=("git" "sudo" "python3" "python3-venv" "curl" "gnupg" "python3-pip")
|
||||
|
||||
# 默认项目目录
|
||||
DEFAULT_INSTALL_DIR="/opt/maimbot"
|
||||
|
||||
# 服务名称
|
||||
SERVICE_NAME="maimbot"
|
||||
|
||||
IS_INSTALL_MONGODB=false
|
||||
IS_INSTALL_NAPCAT=false
|
||||
|
||||
# 1/6: 检测是否安装 whiptail
|
||||
if ! command -v whiptail &>/dev/null; then
|
||||
echo -e "${RED}[1/6] whiptail 未安装,正在安装...${RESET}"
|
||||
apt update && apt install -y whiptail
|
||||
fi
|
||||
|
||||
get_os_info() {
|
||||
if command -v lsb_release &>/dev/null; then
|
||||
OS_INFO=$(lsb_release -d | cut -f2)
|
||||
elif [[ -f /etc/os-release ]]; then
|
||||
OS_INFO=$(grep "^PRETTY_NAME=" /etc/os-release | cut -d '"' -f2)
|
||||
else
|
||||
OS_INFO="Unknown OS"
|
||||
fi
|
||||
echo "$OS_INFO"
|
||||
}
|
||||
|
||||
# 检查系统
|
||||
check_system() {
|
||||
# 检查是否为 root 用户
|
||||
if [[ "$(id -u)" -ne 0 ]]; then
|
||||
whiptail --title "🚫 权限不足" --msgbox "请使用 root 用户运行此脚本!\n执行方式: sudo bash $0" 10 60
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
source /etc/os-release
|
||||
if [[ "$ID" != "debian" || "$VERSION_ID" != "12" ]]; then
|
||||
whiptail --title "🚫 不支持的系统" --msgbox "此脚本仅支持 Debian 12 (Bookworm)!\n当前系统: $PRETTY_NAME\n安装已终止。" 10 60
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
whiptail --title "⚠️ 无法检测系统" --msgbox "无法识别系统版本,安装已终止。" 10 60
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 3/6: 询问用户是否安装缺失的软件包
|
||||
install_packages() {
|
||||
missing_packages=()
|
||||
for package in "${REQUIRED_PACKAGES[@]}"; do
|
||||
if ! dpkg -s "$package" &>/dev/null; then
|
||||
missing_packages+=("$package")
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#missing_packages[@]} -gt 0 ]]; then
|
||||
whiptail --title "📦 [3/6] 软件包检查" --yesno "检测到以下必须的依赖项目缺失:\n${missing_packages[*]}\n\n是否要自动安装?" 12 60
|
||||
if [[ $? -eq 0 ]]; then
|
||||
return 0
|
||||
else
|
||||
whiptail --title "⚠️ 注意" --yesno "某些必要的依赖项未安装,可能会影响运行!\n是否继续?" 10 60 || exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 4/6: Python 版本检查
|
||||
check_python() {
|
||||
PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
|
||||
|
||||
python3 -c "import sys; exit(0) if sys.version_info >= (3,9) else exit(1)"
|
||||
if [[ $? -ne 0 ]]; then
|
||||
whiptail --title "⚠️ [4/6] Python 版本过低" --msgbox "检测到 Python 版本为 $PYTHON_VERSION,需要 3.9 或以上!\n请升级 Python 后重新运行本脚本。" 10 60
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 5/6: 选择分支
|
||||
choose_branch() {
|
||||
BRANCH=$(whiptail --title "🔀 [5/6] 选择 Maimbot 分支" --menu "请选择要安装的 Maimbot 分支:" 15 60 2 \
|
||||
"main" "稳定版本(推荐,供下载使用)" \
|
||||
"main-fix" "生产环境紧急修复" 3>&1 1>&2 2>&3)
|
||||
|
||||
if [[ -z "$BRANCH" ]]; then
|
||||
BRANCH="main"
|
||||
whiptail --title "🔀 默认选择" --msgbox "未选择分支,默认安装稳定版本(main)" 10 60
|
||||
fi
|
||||
}
|
||||
|
||||
# 6/6: 选择安装路径
|
||||
choose_install_dir() {
|
||||
INSTALL_DIR=$(whiptail --title "📂 [6/6] 选择安装路径" --inputbox "请输入 Maimbot 的安装目录:" 10 60 "$DEFAULT_INSTALL_DIR" 3>&1 1>&2 2>&3)
|
||||
|
||||
if [[ -z "$INSTALL_DIR" ]]; then
|
||||
whiptail --title "⚠️ 取消输入" --yesno "未输入安装路径,是否退出安装?" 10 60
|
||||
if [[ $? -ne 0 ]]; then
|
||||
INSTALL_DIR="$DEFAULT_INSTALL_DIR"
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示确认界面
|
||||
confirm_install() {
|
||||
local confirm_message="请确认以下更改:\n\n"
|
||||
|
||||
if [[ ${#missing_packages[@]} -gt 0 ]]; then
|
||||
confirm_message+="📦 安装缺失的依赖项: ${missing_packages[*]}\n"
|
||||
else
|
||||
confirm_message+="✅ 所有依赖项已安装\n"
|
||||
fi
|
||||
|
||||
confirm_message+="📂 安装麦麦Bot到: $INSTALL_DIR\n"
|
||||
confirm_message+="🔀 分支: $BRANCH\n"
|
||||
|
||||
if [[ "$MONGODB_INSTALLED" == "true" ]]; then
|
||||
confirm_message+="✅ MongoDB 已安装\n"
|
||||
else
|
||||
if [[ "$IS_INSTALL_MONGODB" == "true" ]]; then
|
||||
confirm_message+="📦 安装 MongoDB\n"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$NAPCAT_INSTALLED" == "true" ]]; then
|
||||
confirm_message+="✅ NapCat 已安装\n"
|
||||
else
|
||||
if [[ "$IS_INSTALL_NAPCAT" == "true" ]]; then
|
||||
confirm_message+="📦 安装 NapCat\n"
|
||||
fi
|
||||
fi
|
||||
|
||||
confirm_message+="🛠️ 添加麦麦Bot作为系统服务 ($SERVICE_NAME.service)\n"
|
||||
|
||||
confitm_message+="\n\n注意:本脚本默认使用ghfast.top为GitHub进行加速,如不想使用请手动修改脚本开头的GITHUB_REPO变量。"
|
||||
whiptail --title "🔧 安装确认" --yesno "$confirm_message\n\n是否继续安装?" 15 60
|
||||
if [[ $? -ne 0 ]]; then
|
||||
whiptail --title "🚫 取消安装" --msgbox "安装已取消。" 10 60
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_mongodb() {
|
||||
if command -v mongod &>/dev/null; then
|
||||
MONGO_INSTALLED=true
|
||||
else
|
||||
MONGO_INSTALLED=false
|
||||
fi
|
||||
}
|
||||
|
||||
# 安装 MongoDB
|
||||
install_mongodb() {
|
||||
if [[ "$MONGO_INSTALLED" == "true" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
whiptail --title "📦 [3/6] 软件包检查" --yesno "检测到未安装MongoDB,是否安装?\n如果您想使用远程数据库,请跳过此步。" 10 60
|
||||
if [[ $? -ne 0 ]]; then
|
||||
return 1
|
||||
fi
|
||||
IS_INSTALL_MONGODB=true
|
||||
}
|
||||
|
||||
check_napcat() {
|
||||
if command -v napcat &>/dev/null; then
|
||||
NAPCAT_INSTALLED=true
|
||||
else
|
||||
NAPCAT_INSTALLED=false
|
||||
fi
|
||||
}
|
||||
|
||||
install_napcat() {
|
||||
if [[ "$NAPCAT_INSTALLED" == "true" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
whiptail --title "📦 [3/6] 软件包检查" --yesno "检测到未安装NapCat,是否安装?\n如果您想使用远程NapCat,请跳过此步。" 10 60
|
||||
if [[ $? -ne 0 ]]; then
|
||||
return 1
|
||||
fi
|
||||
IS_INSTALL_NAPCAT=true
|
||||
}
|
||||
|
||||
# 运行安装步骤
|
||||
whiptail --title "⚠️ 警告:安装前详阅" --msgbox "项目处于活跃开发阶段,代码可能随时更改\n文档未完善,有问题可以提交 Issue 或者 Discussion\nQQ机器人存在被限制风险,请自行了解,谨慎使用\n由于持续迭代,可能存在一些已知或未知的bug\n由于开发中,可能消耗较多token\n\n本脚本可能更新不及时,如遇到bug请优先尝试手动部署以确定是否为脚本问题" 14 60
|
||||
|
||||
check_system
|
||||
check_mongodb
|
||||
check_napcat
|
||||
install_packages
|
||||
install_mongodb
|
||||
install_napcat
|
||||
check_python
|
||||
choose_branch
|
||||
choose_install_dir
|
||||
confirm_install
|
||||
|
||||
# 开始安装
|
||||
whiptail --title "🚀 开始安装" --msgbox "所有环境检查完毕,即将开始安装麦麦Bot!" 10 60
|
||||
|
||||
echo -e "${GREEN}安装依赖项...${RESET}"
|
||||
|
||||
apt update && apt install -y "${missing_packages[@]}"
|
||||
|
||||
|
||||
if [[ "$IS_INSTALL_MONGODB" == "true" ]]; then
|
||||
echo -e "${GREEN}安装 MongoDB...${RESET}"
|
||||
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
|
||||
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
|
||||
apt-get update
|
||||
apt-get install -y mongodb-org
|
||||
|
||||
systemctl enable mongod
|
||||
systemctl start mongod
|
||||
fi
|
||||
|
||||
if [[ "$IS_INSTALL_NAPCAT" == "true" ]]; then
|
||||
echo -e "${GREEN}安装 NapCat...${RESET}"
|
||||
curl -o napcat.sh https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh && bash napcat.sh --cli y --docker n
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}创建 Python 虚拟环境...${RESET}"
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
cd "$INSTALL_DIR" || exit
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
echo -e "${GREEN}克隆仓库...${RESET}"
|
||||
# 安装 Maimbot
|
||||
mkdir -p "$INSTALL_DIR/repo"
|
||||
cd "$INSTALL_DIR/repo" || exit 1
|
||||
git clone -b "$BRANCH" $GITHUB_REPO .
|
||||
|
||||
echo -e "${GREEN}安装 Python 依赖...${RESET}"
|
||||
pip install -r requirements.txt
|
||||
|
||||
echo -e "${GREEN}设置服务...${RESET}"
|
||||
|
||||
# 设置 Maimbot 服务
|
||||
cat <<EOF | tee /etc/systemd/system/$SERVICE_NAME.service
|
||||
[Unit]
|
||||
Description=MaiMbot 麦麦
|
||||
After=network.target mongod.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=$INSTALL_DIR/repo/
|
||||
ExecStart=$INSTALL_DIR/venv/bin/python3 bot.py
|
||||
ExecStop=/bin/kill -2 $MAINPID
|
||||
Restart=always
|
||||
RestartSec=10s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable maimbot
|
||||
systemctl start maimbot
|
||||
|
||||
whiptail --title "🎉 安装完成" --msgbox "麦麦Bot安装完成!\n已经启动麦麦Bot服务。\n\n安装路径: $INSTALL_DIR\n分支: $BRANCH" 12 60
|
||||
422
run_debian12.sh
Normal file
422
run_debian12.sh
Normal file
@@ -0,0 +1,422 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 麦麦Bot一键安装脚本 by Cookie_987
|
||||
# 适用于Debian12
|
||||
# 请小心使用任何一键脚本!
|
||||
|
||||
LANG=C.UTF-8
|
||||
|
||||
# 如无法访问GitHub请修改此处镜像地址
|
||||
GITHUB_REPO="https://ghfast.top/https://github.com/SengokuCola/MaiMBot.git"
|
||||
|
||||
# 颜色输出
|
||||
GREEN="\e[32m"
|
||||
RED="\e[31m"
|
||||
RESET="\e[0m"
|
||||
|
||||
# 需要的基本软件包
|
||||
REQUIRED_PACKAGES=("git" "sudo" "python3" "python3-venv" "curl" "gnupg" "python3-pip")
|
||||
|
||||
# 默认项目目录
|
||||
DEFAULT_INSTALL_DIR="/opt/maimbot"
|
||||
|
||||
# 服务名称
|
||||
SERVICE_NAME="maimbot-daemon"
|
||||
SERVICE_NAME_WEB="maimbot-web"
|
||||
|
||||
IS_INSTALL_MONGODB=false
|
||||
IS_INSTALL_NAPCAT=false
|
||||
IS_INSTALL_DEPENDENCIES=false
|
||||
|
||||
INSTALLER_VERSION="0.0.1"
|
||||
|
||||
# 检查是否已安装
|
||||
check_installed() {
|
||||
[[ -f /etc/systemd/system/${SERVICE_NAME}.service ]]
|
||||
}
|
||||
|
||||
# 加载安装信息
|
||||
load_install_info() {
|
||||
if [[ -f /etc/maimbot_install.conf ]]; then
|
||||
source /etc/maimbot_install.conf
|
||||
else
|
||||
INSTALL_DIR="$DEFAULT_INSTALL_DIR"
|
||||
BRANCH="main"
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示管理菜单
|
||||
show_menu() {
|
||||
while true; do
|
||||
choice=$(whiptail --title "麦麦Bot管理菜单" --menu "请选择要执行的操作:" 15 60 7 \
|
||||
"1" "启动麦麦Bot" \
|
||||
"2" "停止麦麦Bot" \
|
||||
"3" "重启麦麦Bot" \
|
||||
"4" "启动WebUI" \
|
||||
"5" "停止WebUI" \
|
||||
"6" "重启WebUI" \
|
||||
"7" "更新麦麦Bot及其依赖" \
|
||||
"8" "切换分支" \
|
||||
"9" "更新配置文件" \
|
||||
"10" "退出" 3>&1 1>&2 2>&3)
|
||||
|
||||
[[ $? -ne 0 ]] && exit 0
|
||||
|
||||
case "$choice" in
|
||||
1)
|
||||
systemctl start ${SERVICE_NAME}
|
||||
whiptail --msgbox "✅麦麦Bot已启动" 10 60
|
||||
;;
|
||||
2)
|
||||
systemctl stop ${SERVICE_NAME}
|
||||
whiptail --msgbox "🛑麦麦Bot已停止" 10 60
|
||||
;;
|
||||
3)
|
||||
systemctl restart ${SERVICE_NAME}
|
||||
whiptail --msgbox "🔄麦麦Bot已重启" 10 60
|
||||
;;
|
||||
4)
|
||||
systemctl start ${SERVICE_NAME_WEB}
|
||||
whiptail --msgbox "✅WebUI已启动" 10 60
|
||||
;;
|
||||
5)
|
||||
systemctl stop ${SERVICE_NAME_WEB}
|
||||
whiptail --msgbox "🛑WebUI已停止" 10 60
|
||||
;;
|
||||
6)
|
||||
systemctl restart ${SERVICE_NAME_WEB}
|
||||
whiptail --msgbox "🔄WebUI已重启" 10 60
|
||||
;;
|
||||
7)
|
||||
update_dependencies
|
||||
;;
|
||||
8)
|
||||
switch_branch
|
||||
;;
|
||||
9)
|
||||
update_config
|
||||
;;
|
||||
10)
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
whiptail --msgbox "无效选项!" 10 60
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# 更新依赖
|
||||
update_dependencies() {
|
||||
cd "${INSTALL_DIR}/repo" || {
|
||||
whiptail --msgbox "🚫 无法进入安装目录!" 10 60
|
||||
return 1
|
||||
}
|
||||
if ! git pull origin "${BRANCH}"; then
|
||||
whiptail --msgbox "🚫 代码更新失败!" 10 60
|
||||
return 1
|
||||
fi
|
||||
source "${INSTALL_DIR}/venv/bin/activate"
|
||||
if ! pip install -r requirements.txt; then
|
||||
whiptail --msgbox "🚫 依赖安装失败!" 10 60
|
||||
deactivate
|
||||
return 1
|
||||
fi
|
||||
deactivate
|
||||
systemctl restart ${SERVICE_NAME}
|
||||
whiptail --msgbox "✅ 依赖已更新并重启服务!" 10 60
|
||||
}
|
||||
|
||||
# 切换分支
|
||||
switch_branch() {
|
||||
new_branch=$(whiptail --inputbox "请输入要切换的分支名称:" 10 60 "${BRANCH}" 3>&1 1>&2 2>&3)
|
||||
[[ -z "$new_branch" ]] && {
|
||||
whiptail --msgbox "🚫 分支名称不能为空!" 10 60
|
||||
return 1
|
||||
}
|
||||
|
||||
cd "${INSTALL_DIR}/repo" || {
|
||||
whiptail --msgbox "🚫 无法进入安装目录!" 10 60
|
||||
return 1
|
||||
}
|
||||
|
||||
if ! git ls-remote --exit-code --heads origin "${new_branch}" >/dev/null 2>&1; then
|
||||
whiptail --msgbox "🚫 分支 ${new_branch} 不存在!" 10 60
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! git checkout "${new_branch}"; then
|
||||
whiptail --msgbox "🚫 分支切换失败!" 10 60
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! git pull origin "${new_branch}"; then
|
||||
whiptail --msgbox "🚫 代码拉取失败!" 10 60
|
||||
return 1
|
||||
fi
|
||||
|
||||
source "${INSTALL_DIR}/venv/bin/activate"
|
||||
pip install -r requirements.txt
|
||||
deactivate
|
||||
|
||||
sed -i "s/^BRANCH=.*/BRANCH=${new_branch}/" /etc/maimbot_install.conf
|
||||
BRANCH="${new_branch}"
|
||||
systemctl restart ${SERVICE_NAME}
|
||||
touch "${INSTALL_DIR}/repo/elua.confirmed"
|
||||
whiptail --msgbox "✅ 已切换到分支 ${new_branch} 并重启服务!" 10 60
|
||||
}
|
||||
|
||||
# 更新配置文件
|
||||
update_config() {
|
||||
cd "${INSTALL_DIR}/repo" || {
|
||||
whiptail --msgbox "🚫 无法进入安装目录!" 10 60
|
||||
return 1
|
||||
}
|
||||
if [[ -f config/bot_config.toml ]]; then
|
||||
cp config/bot_config.toml config/bot_config.toml.bak
|
||||
whiptail --msgbox "📁 原配置文件已备份为 bot_config.toml.bak" 10 60
|
||||
source "${INSTALL_DIR}/venv/bin/activate"
|
||||
python3 config/auto_update.py
|
||||
deactivate
|
||||
whiptail --msgbox "🆕 已更新配置文件,请重启麦麦Bot!" 10 60
|
||||
return 0
|
||||
else
|
||||
whiptail --msgbox "🚫 未找到配置文件 bot_config.toml\n 请先运行一次麦麦Bot" 10 60
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ----------- 主安装流程 -----------
|
||||
run_installation() {
|
||||
# 1/6: 检测是否安装 whiptail
|
||||
if ! command -v whiptail &>/dev/null; then
|
||||
echo -e "${RED}[1/6] whiptail 未安装,正在安装...${RESET}"
|
||||
apt update && apt install -y whiptail
|
||||
fi
|
||||
|
||||
# 协议确认
|
||||
if ! (whiptail --title "ℹ️ [1/6] 使用协议" --yes-button "我同意" --no-button "我拒绝" --yesno "使用麦麦Bot及此脚本前请先阅读ELUA协议\nhttps://github.com/SengokuCola/MaiMBot/blob/main/EULA.md\n\n您是否同意此协议?" 12 70); then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 欢迎信息
|
||||
whiptail --title "[2/6] 欢迎使用麦麦Bot一键安装脚本 by Cookie987" --msgbox "检测到您未安装麦麦Bot,将自动进入安装流程,安装完成后再次运行此脚本即可进入管理菜单。\n\n项目处于活跃开发阶段,代码可能随时更改\n文档未完善,有问题可以提交 Issue 或者 Discussion\nQQ机器人存在被限制风险,请自行了解,谨慎使用\n由于持续迭代,可能存在一些已知或未知的bug\n由于开发中,可能消耗较多token\n\n本脚本可能更新不及时,如遇到bug请优先尝试手动部署以确定是否为脚本问题" 17 60
|
||||
|
||||
# 系统检查
|
||||
check_system() {
|
||||
if [[ "$(id -u)" -ne 0 ]]; then
|
||||
whiptail --title "🚫 权限不足" --msgbox "请使用 root 用户运行此脚本!\n执行方式: sudo bash $0" 10 60
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
source /etc/os-release
|
||||
if [[ "$ID" != "debian" || "$VERSION_ID" != "12" ]]; then
|
||||
whiptail --title "🚫 不支持的系统" --msgbox "此脚本仅支持 Debian 12 (Bookworm)!\n当前系统: $PRETTY_NAME\n安装已终止。" 10 60
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
whiptail --title "⚠️ 无法检测系统" --msgbox "无法识别系统版本,安装已终止。" 10 60
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
check_system
|
||||
|
||||
# 检查MongoDB
|
||||
check_mongodb() {
|
||||
if command -v mongod &>/dev/null; then
|
||||
MONGO_INSTALLED=true
|
||||
else
|
||||
MONGO_INSTALLED=false
|
||||
fi
|
||||
}
|
||||
check_mongodb
|
||||
|
||||
# 检查NapCat
|
||||
check_napcat() {
|
||||
if command -v napcat &>/dev/null; then
|
||||
NAPCAT_INSTALLED=true
|
||||
else
|
||||
NAPCAT_INSTALLED=false
|
||||
fi
|
||||
}
|
||||
check_napcat
|
||||
|
||||
# 安装必要软件包
|
||||
install_packages() {
|
||||
missing_packages=()
|
||||
for package in "${REQUIRED_PACKAGES[@]}"; do
|
||||
if ! dpkg -s "$package" &>/dev/null; then
|
||||
missing_packages+=("$package")
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#missing_packages[@]} -gt 0 ]]; then
|
||||
whiptail --title "📦 [3/6] 软件包检查" --yesno "检测到以下必须的依赖项目缺失:\n${missing_packages[*]}\n\n是否要自动安装?" 12 60
|
||||
if [[ $? -eq 0 ]]; then
|
||||
IS_INSTALL_DEPENDENCIES=true
|
||||
else
|
||||
whiptail --title "⚠️ 注意" --yesno "某些必要的依赖项未安装,可能会影响运行!\n是否继续?" 10 60 || exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
install_packages
|
||||
|
||||
# 安装MongoDB
|
||||
install_mongodb() {
|
||||
[[ $MONGO_INSTALLED == true ]] && return
|
||||
whiptail --title "📦 [3/6] 软件包检查" --yesno "检测到未安装MongoDB,是否安装?\n如果您想使用远程数据库,请跳过此步。" 10 60 && {
|
||||
echo -e "${GREEN}安装 MongoDB...${RESET}"
|
||||
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
|
||||
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | tee /etc/apt/sources.list.d/mongodb-org-8.0.list
|
||||
apt update
|
||||
apt install -y mongodb-org
|
||||
systemctl enable --now mongod
|
||||
IS_INSTALL_MONGODB=true
|
||||
}
|
||||
}
|
||||
install_mongodb
|
||||
|
||||
# 安装NapCat
|
||||
install_napcat() {
|
||||
[[ $NAPCAT_INSTALLED == true ]] && return
|
||||
whiptail --title "📦 [3/6] 软件包检查" --yesno "检测到未安装NapCat,是否安装?\n如果您想使用远程NapCat,请跳过此步。" 10 60 && {
|
||||
echo -e "${GREEN}安装 NapCat...${RESET}"
|
||||
curl -o napcat.sh https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh && bash napcat.sh --cli y --docker n
|
||||
IS_INSTALL_NAPCAT=true
|
||||
}
|
||||
}
|
||||
install_napcat
|
||||
|
||||
# Python版本检查
|
||||
check_python() {
|
||||
PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
|
||||
if ! python3 -c "import sys; exit(0) if sys.version_info >= (3,9) else exit(1)"; then
|
||||
whiptail --title "⚠️ [4/6] Python 版本过低" --msgbox "检测到 Python 版本为 $PYTHON_VERSION,需要 3.9 或以上!\n请升级 Python 后重新运行本脚本。" 10 60
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
check_python
|
||||
|
||||
# 选择分支
|
||||
choose_branch() {
|
||||
BRANCH=$(whiptail --title "🔀 [5/6] 选择麦麦Bot分支" --menu "请选择要安装的麦麦Bot分支:" 15 60 2 \
|
||||
"main" "稳定版本(推荐,供下载使用)" \
|
||||
"main-fix" "生产环境紧急修复" 3>&1 1>&2 2>&3)
|
||||
[[ -z "$BRANCH" ]] && BRANCH="main"
|
||||
}
|
||||
choose_branch
|
||||
|
||||
# 选择安装路径
|
||||
choose_install_dir() {
|
||||
INSTALL_DIR=$(whiptail --title "📂 [6/6] 选择安装路径" --inputbox "请输入麦麦Bot的安装目录:" 10 60 "$DEFAULT_INSTALL_DIR" 3>&1 1>&2 2>&3)
|
||||
[[ -z "$INSTALL_DIR" ]] && {
|
||||
whiptail --title "⚠️ 取消输入" --yesno "未输入安装路径,是否退出安装?" 10 60 && exit 1
|
||||
INSTALL_DIR="$DEFAULT_INSTALL_DIR"
|
||||
}
|
||||
}
|
||||
choose_install_dir
|
||||
|
||||
# 确认安装
|
||||
confirm_install() {
|
||||
local confirm_msg="请确认以下信息:\n\n"
|
||||
confirm_msg+="📂 安装麦麦Bot到: $INSTALL_DIR\n"
|
||||
confirm_msg+="🔀 分支: $BRANCH\n"
|
||||
[[ $IS_INSTALL_DEPENDENCIES == true ]] && confirm_msg+="📦 安装依赖:${missing_packages}\n"
|
||||
[[ $IS_INSTALL_MONGODB == true || $IS_INSTALL_NAPCAT == true ]] && confirm_msg+="📦 安装额外组件:\n"
|
||||
|
||||
[[ $IS_INSTALL_MONGODB == true ]] && confirm_msg+=" - MongoDB\n"
|
||||
[[ $IS_INSTALL_NAPCAT == true ]] && confirm_msg+=" - NapCat\n"
|
||||
confirm_msg+="\n注意:本脚本默认使用ghfast.top为GitHub进行加速,如不想使用请手动修改脚本开头的GITHUB_REPO变量。"
|
||||
|
||||
whiptail --title "🔧 安装确认" --yesno "$confirm_msg" 16 60 || exit 1
|
||||
}
|
||||
confirm_install
|
||||
|
||||
# 开始安装
|
||||
echo -e "${GREEN}安装依赖...${RESET}"
|
||||
[[ $IS_INSTALL_DEPENDENCIES == true ]] && apt update && apt install -y "${missing_packages[@]}"
|
||||
|
||||
echo -e "${GREEN}创建安装目录...${RESET}"
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
cd "$INSTALL_DIR" || exit 1
|
||||
|
||||
echo -e "${GREEN}设置Python虚拟环境...${RESET}"
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
echo -e "${GREEN}克隆仓库...${RESET}"
|
||||
git clone -b "$BRANCH" "$GITHUB_REPO" repo || {
|
||||
echo -e "${RED}克隆仓库失败!${RESET}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo -e "${GREEN}安装Python依赖...${RESET}"
|
||||
pip install -r repo/requirements.txt
|
||||
|
||||
echo -e "${GREEN}同意协议...${RESET}"
|
||||
touch repo/elua.confirmed
|
||||
|
||||
echo -e "${GREEN}创建系统服务...${RESET}"
|
||||
cat > /etc/systemd/system/${SERVICE_NAME}.service <<EOF
|
||||
[Unit]
|
||||
Description=麦麦Bot 主进程
|
||||
After=network.target mongod.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=${INSTALL_DIR}/repo
|
||||
ExecStart=$INSTALL_DIR/venv/bin/python3 bot.py
|
||||
Restart=always
|
||||
RestartSec=10s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat > /etc/systemd/system/${SERVICE_NAME_WEB}.service <<EOF
|
||||
[Unit]
|
||||
Description=麦麦Bot WebUI
|
||||
After=network.target mongod.service ${SERVICE_NAME}.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=${INSTALL_DIR}/repo
|
||||
ExecStart=$INSTALL_DIR/venv/bin/python3 webui.py
|
||||
Restart=always
|
||||
RestartSec=10s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable ${SERVICE_NAME}
|
||||
|
||||
# 保存安装信息
|
||||
echo "INSTALLER_VERSION=${INSTALLER_VERSION}" > /etc/maimbot_install.conf
|
||||
echo "INSTALL_DIR=${INSTALL_DIR}" >> /etc/maimbot_install.conf
|
||||
echo "BRANCH=${BRANCH}" >> /etc/maimbot_install.conf
|
||||
|
||||
whiptail --title "🎉 安装完成" --msgbox "麦麦Bot安装完成!\n已创建系统服务:${SERVICE_NAME},${SERVICE_NAME_WEB}\n\n使用以下命令管理服务:\n启动服务:systemctl start ${SERVICE_NAME}\n查看状态:systemctl status ${SERVICE_NAME}" 14 60
|
||||
}
|
||||
|
||||
# ----------- 主执行流程 -----------
|
||||
# 检查root权限
|
||||
[[ $(id -u) -ne 0 ]] && {
|
||||
echo -e "${RED}请使用root用户运行此脚本!${RESET}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 如果已安装显示菜单
|
||||
if check_installed; then
|
||||
load_install_info
|
||||
show_menu
|
||||
else
|
||||
run_installation
|
||||
# 安装完成后询问是否启动
|
||||
if whiptail --title "安装完成" --yesno "是否立即启动麦麦Bot服务?" 10 60; then
|
||||
systemctl start ${SERVICE_NAME}
|
||||
whiptail --msgbox "✅ 服务已启动!\n使用 systemctl status ${SERVICE_NAME} 查看状态" 10 60
|
||||
fi
|
||||
fi
|
||||
319
src/plugins/memory_system/manually_alter_memory.py
Normal file
319
src/plugins/memory_system/manually_alter_memory.py
Normal file
@@ -0,0 +1,319 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
import datetime
|
||||
from rich.console import Console
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
|
||||
'''
|
||||
我想 总有那么一个瞬间
|
||||
你会想和某天才变态少女助手一样
|
||||
往Bot的海马体里插上几个电极 不是吗
|
||||
|
||||
Let's do some dirty job.
|
||||
'''
|
||||
|
||||
# 获取当前文件的目录
|
||||
current_dir = Path(__file__).resolve().parent
|
||||
# 获取项目根目录(上三层目录)
|
||||
project_root = current_dir.parent.parent.parent
|
||||
# env.dev文件路径
|
||||
env_path = project_root / ".env.dev"
|
||||
|
||||
# from chat.config import global_config
|
||||
root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../.."))
|
||||
sys.path.append(root_path)
|
||||
|
||||
from src.common.logger import get_module_logger
|
||||
from src.common.database import db
|
||||
from src.plugins.memory_system.offline_llm import LLMModel
|
||||
|
||||
logger = get_module_logger('mem_alter')
|
||||
console = Console()
|
||||
|
||||
# 加载环境变量
|
||||
if env_path.exists():
|
||||
logger.info(f"从 {env_path} 加载环境变量")
|
||||
load_dotenv(env_path)
|
||||
else:
|
||||
logger.warning(f"未找到环境变量文件: {env_path}")
|
||||
logger.info("将使用默认配置")
|
||||
|
||||
from memory_manual_build import Memory_graph, Hippocampus #海马体和记忆图
|
||||
|
||||
# 查询节点信息
|
||||
def query_mem_info(memory_graph: Memory_graph):
|
||||
while True:
|
||||
query = input("\n请输入新的查询概念(输入'退出'以结束):")
|
||||
if query.lower() == '退出':
|
||||
break
|
||||
|
||||
items_list = memory_graph.get_related_item(query)
|
||||
if items_list:
|
||||
have_memory = False
|
||||
first_layer, second_layer = items_list
|
||||
if first_layer:
|
||||
have_memory = True
|
||||
print("\n直接相关的记忆:")
|
||||
for item in first_layer:
|
||||
print(f"- {item}")
|
||||
if second_layer:
|
||||
have_memory = True
|
||||
print("\n间接相关的记忆:")
|
||||
for item in second_layer:
|
||||
print(f"- {item}")
|
||||
if not have_memory:
|
||||
print("\n未找到相关记忆。")
|
||||
else:
|
||||
print("未找到相关记忆。")
|
||||
|
||||
# 增加概念节点
|
||||
def add_mem_node(hippocampus: Hippocampus):
|
||||
while True:
|
||||
concept = input("请输入节点概念名:\n")
|
||||
result = db.graph_data.nodes.count_documents({'concept': concept})
|
||||
|
||||
if result != 0:
|
||||
console.print("[yellow]已存在名为“{concept}”的节点,行为已取消[/yellow]")
|
||||
continue
|
||||
|
||||
memory_items = list()
|
||||
while True:
|
||||
context = input("请输入节点描述信息(输入'终止'以结束)")
|
||||
if context.lower() == "终止": break
|
||||
memory_items.append(context)
|
||||
|
||||
current_time = datetime.datetime.now().timestamp()
|
||||
hippocampus.memory_graph.G.add_node(concept,
|
||||
memory_items=memory_items,
|
||||
created_time=current_time,
|
||||
last_modified=current_time)
|
||||
# 删除概念节点(及连接到它的边)
|
||||
def remove_mem_node(hippocampus: Hippocampus):
|
||||
concept = input("请输入节点概念名:\n")
|
||||
result = db.graph_data.nodes.count_documents({'concept': concept})
|
||||
|
||||
if result == 0:
|
||||
console.print(f"[red]不存在名为“{concept}”的节点[/red]")
|
||||
|
||||
edges = db.graph_data.edges.find({
|
||||
'$or': [
|
||||
{'source': concept},
|
||||
{'target': concept}
|
||||
]
|
||||
})
|
||||
|
||||
for edge in edges:
|
||||
console.print(f"[yellow]存在边“{edge['source']} -> {edge['target']}”, 请慎重考虑[/yellow]")
|
||||
|
||||
console.print(f"[yellow]确定要移除名为“{concept}”的节点以及其相关边吗[/yellow]")
|
||||
destory = console.input(f"[red]请输入“{concept}”以删除节点 其他输入将被视为取消操作[/red]\n")
|
||||
if destory == concept:
|
||||
hippocampus.memory_graph.G.remove_node(concept)
|
||||
else:
|
||||
logger.info("[green]删除操作已取消[/green]")
|
||||
# 增加节点间边
|
||||
def add_mem_edge(hippocampus: Hippocampus):
|
||||
while True:
|
||||
source = input("请输入 **第一个节点** 名称(输入'退出'以结束):\n")
|
||||
if source.lower() == "退出": break
|
||||
if db.graph_data.nodes.count_documents({'concept': source}) == 0:
|
||||
console.print(f"[yellow]“{source}”节点不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
target = input("请输入 **第二个节点** 名称:\n")
|
||||
if db.graph_data.nodes.count_documents({'concept': target}) == 0:
|
||||
console.print(f"[yellow]“{target}”节点不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
if source == target:
|
||||
console.print(f"[yellow]试图创建“{source} <-> {target}”自环,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
hippocampus.memory_graph.connect_dot(source, target)
|
||||
edge = hippocampus.memory_graph.G.get_edge_data(source, target)
|
||||
if edge['strength'] == 1:
|
||||
console.print(f"[green]成功创建边“{source} <-> {target}”,默认权重1[/green]")
|
||||
else:
|
||||
console.print(f"[yellow]边“{source} <-> {target}”已存在,更新权重: {edge['strength']-1} <-> {edge['strength']}[/yellow]")
|
||||
# 删除节点间边
|
||||
def remove_mem_edge(hippocampus: Hippocampus):
|
||||
while True:
|
||||
source = input("请输入 **第一个节点** 名称(输入'退出'以结束):\n")
|
||||
if source.lower() == "退出": break
|
||||
if db.graph_data.nodes.count_documents({'concept': source}) == 0:
|
||||
console.print("[yellow]“{source}”节点不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
target = input("请输入 **第二个节点** 名称:\n")
|
||||
if db.graph_data.nodes.count_documents({'concept': target}) == 0:
|
||||
console.print("[yellow]“{target}”节点不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
if source == target:
|
||||
console.print("[yellow]试图创建“{source} <-> {target}”自环,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
edge = hippocampus.memory_graph.G.get_edge_data(source, target)
|
||||
if edge is None:
|
||||
console.print("[yellow]边“{source} <-> {target}”不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
else:
|
||||
accept = console.input("[orange]请输入“确认”以确认删除操作(其他输入视为取消)[/orange]\n")
|
||||
if accept.lower() == "确认":
|
||||
hippocampus.memory_graph.G.remove_edge(source, target)
|
||||
console.print(f"[green]边“{source} <-> {target}”已删除。[green]")
|
||||
|
||||
# 修改节点信息
|
||||
def alter_mem_node(hippocampus: Hippocampus):
|
||||
batchEnviroment = dict()
|
||||
while True:
|
||||
concept = input("请输入节点概念名(输入'终止'以结束):\n")
|
||||
if concept.lower() == "终止": break
|
||||
_, node = hippocampus.memory_graph.get_dot(concept)
|
||||
if node is None:
|
||||
console.print(f"[yellow]“{concept}”节点不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
console.print("[yellow]注意,请确保你知道自己在做什么[/yellow]")
|
||||
console.print("[yellow]你将获得一个执行任意代码的环境[/yellow]")
|
||||
console.print("[red]你已经被警告过了。[/red]\n")
|
||||
|
||||
nodeEnviroment = {"concept": '<节点名>', 'memory_items': '<记忆文本数组>'}
|
||||
console.print("[green]环境变量中会有env与batchEnv两个dict, env在切换节点时会清空, batchEnv在操作终止时才会清空[/green]")
|
||||
console.print(f"[green] env 会被初始化为[/green]\n{nodeEnviroment}\n[green]且会在用户代码执行完毕后被提交 [/green]")
|
||||
console.print("[yellow]为便于书写临时脚本,请手动在输入代码通过Ctrl+C等方式触发KeyboardInterrupt来结束代码执行[/yellow]")
|
||||
|
||||
# 拷贝数据以防操作炸了
|
||||
nodeEnviroment = dict(node)
|
||||
nodeEnviroment['concept'] = concept
|
||||
|
||||
while True:
|
||||
userexec = lambda script, env, batchEnv: eval(script)
|
||||
try:
|
||||
command = console.input()
|
||||
except KeyboardInterrupt:
|
||||
# 稍微防一下小天才
|
||||
try:
|
||||
if isinstance(nodeEnviroment['memory_items'], list):
|
||||
node['memory_items'] = nodeEnviroment['memory_items']
|
||||
else:
|
||||
raise Exception
|
||||
|
||||
except:
|
||||
console.print("[red]我不知道你做了什么,但显然nodeEnviroment['memory_items']已经不是个数组了,操作已取消[/red]")
|
||||
break
|
||||
|
||||
try:
|
||||
userexec(command, nodeEnviroment, batchEnviroment)
|
||||
except Exception as e:
|
||||
console.print(e)
|
||||
console.print("[red]自定义代码执行时发生异常,已捕获,请重试(可通过 console.print(locals()) 检查环境状态)[/red]")
|
||||
# 修改边信息
|
||||
def alter_mem_edge(hippocampus: Hippocampus):
|
||||
batchEnviroment = dict()
|
||||
while True:
|
||||
source = input("请输入 **第一个节点** 名称(输入'终止'以结束):\n")
|
||||
if source.lower() == "终止": break
|
||||
if hippocampus.memory_graph.get_dot(source) is None:
|
||||
console.print(f"[yellow]“{source}”节点不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
target = input("请输入 **第二个节点** 名称:\n")
|
||||
if hippocampus.memory_graph.get_dot(target) is None:
|
||||
console.print(f"[yellow]“{target}”节点不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
edge = hippocampus.memory_graph.G.get_edge_data(source, target)
|
||||
if edge is None:
|
||||
console.print(f"[yellow]边“{source} <-> {target}”不存在,操作已取消。[/yellow]")
|
||||
continue
|
||||
|
||||
console.print("[yellow]注意,请确保你知道自己在做什么[/yellow]")
|
||||
console.print("[yellow]你将获得一个执行任意代码的环境[/yellow]")
|
||||
console.print("[red]你已经被警告过了。[/red]\n")
|
||||
|
||||
edgeEnviroment = {"source": '<节点名>', "target": '<节点名>', 'strength': '<强度值,装在一个list里>'}
|
||||
console.print("[green]环境变量中会有env与batchEnv两个dict, env在切换节点时会清空, batchEnv在操作终止时才会清空[/green]")
|
||||
console.print(f"[green] env 会被初始化为[/green]\n{edgeEnviroment}\n[green]且会在用户代码执行完毕后被提交 [/green]")
|
||||
console.print("[yellow]为便于书写临时脚本,请手动在输入代码通过Ctrl+C等方式触发KeyboardInterrupt来结束代码执行[/yellow]")
|
||||
|
||||
# 拷贝数据以防操作炸了
|
||||
edgeEnviroment['strength'] = [edge["strength"]]
|
||||
edgeEnviroment['source'] = source
|
||||
edgeEnviroment['target'] = target
|
||||
|
||||
while True:
|
||||
userexec = lambda script, env, batchEnv: eval(script)
|
||||
try:
|
||||
command = console.input()
|
||||
except KeyboardInterrupt:
|
||||
# 稍微防一下小天才
|
||||
try:
|
||||
if isinstance(edgeEnviroment['strength'][0], int):
|
||||
edge['strength'] = edgeEnviroment['strength'][0]
|
||||
else:
|
||||
raise Exception
|
||||
|
||||
except:
|
||||
console.print("[red]我不知道你做了什么,但显然edgeEnviroment['strength']已经不是个int了,操作已取消[/red]")
|
||||
break
|
||||
|
||||
try:
|
||||
userexec(command, edgeEnviroment, batchEnviroment)
|
||||
except Exception as e:
|
||||
console.print(e)
|
||||
console.print("[red]自定义代码执行时发生异常,已捕获,请重试(可通过 console.print(locals()) 检查环境状态)[/red]")
|
||||
|
||||
|
||||
|
||||
async def main():
|
||||
start_time = time.time()
|
||||
|
||||
# 创建记忆图
|
||||
memory_graph = Memory_graph()
|
||||
|
||||
# 创建海马体
|
||||
hippocampus = Hippocampus(memory_graph)
|
||||
|
||||
# 从数据库同步数据
|
||||
hippocampus.sync_memory_from_db()
|
||||
|
||||
end_time = time.time()
|
||||
logger.info(f"\033[32m[加载海马体耗时: {end_time - start_time:.2f} 秒]\033[0m")
|
||||
|
||||
while True:
|
||||
try:
|
||||
query = int(input("请输入操作类型\n0 -> 查询节点; 1 -> 增加节点; 2 -> 移除节点; 3 -> 增加边; 4 -> 移除边;\n5 -> 修改节点; 6 -> 修改边; 其他任意输入 -> 退出\n"))
|
||||
except:
|
||||
query = -1
|
||||
|
||||
if query == 0:
|
||||
query_mem_info(memory_graph)
|
||||
elif query == 1:
|
||||
add_mem_node(hippocampus)
|
||||
elif query == 2:
|
||||
remove_mem_node(hippocampus)
|
||||
elif query == 3:
|
||||
add_mem_edge(hippocampus)
|
||||
elif query == 4:
|
||||
remove_mem_edge(hippocampus)
|
||||
elif query == 5:
|
||||
alter_mem_node(hippocampus)
|
||||
elif query == 6:
|
||||
alter_mem_edge(hippocampus)
|
||||
else:
|
||||
print("已结束操作")
|
||||
break
|
||||
|
||||
hippocampus.sync_memory_to_db()
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import asyncio
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user