从零开始安装鸣潮机器人插件XutheringWavesUID
0 准备工作
# 创建总目录
mkdir -p bot && cd bot/
# 安装node.js
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -
sudo apt-get install -y nodejs
1 安装 GsCore
1‑1 克隆核心
git clone https://github.com/Genshin-bots/gsuid_core.git
cd gsuid_core
1‑2 安装 uv 与依赖
# 安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 使 uv 命令生效 (如果提示找不到命令,请执行这一行)
source $HOME/.local/bin/env
# 安装依赖
uv sync
uv run python -m ensurepip
1‑3 启动
uv run core
- 网页控制台:首次启动即生成,默认地址
localhost:8765/genshinuid,账号密码root/root。务必登录后修改密码。 - 若要外网访问,把
bot/gsuid_core/data/config.json里的HOST改成0.0.0.0后重启或者反向代理localhost:8765即可。 - 启动成功后记得在网页控制台
masters内添加自己的账号。
1‑4 GsCore 持久化
1-4-1 获取 uv 、工作目录和虚拟环境的绝对路径
echo "UV_PATH: $(which uv)"
echo "WORK_DIR: $(pwd)"
假设输出为:
UV_PATH: /root/.local/bin/uvWORK_DIR: /root/bot/gsuid_core
1-4-2 systemd 服务
创建 Service 文件
sudo nano /etc/systemd/system/gsuid.service
写入以下内容并自行修改路径
[Unit]
Description=gsuid
After=network.target
[Service]
# 修改为你的运行用户,例如 root
User=root
# 修改为你的项目路径
WorkingDirectory=/root/bot/gsuid_core
# 使用 uv run 启动,路径需改为你的实际路径
ExecStart=/root/.local/bin/uv run core
# 总是重启,防止异常崩溃
Restart=always
RestartSec=5
# 设置输出缓冲,确保日志实时显示
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
启动并管理服务
# 重载配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start gsuid
# 设置开机自启
sudo systemctl enable gsuid
# 查看状态
sudo systemctl status gsuid
# 查看日志
sudo journalctl -u gsuid -f
1-4-3 tmux
安装tmux
sudo apt update && sudo apt install tmux -y
启动会话
# 启动一个会话
tmux new -s gsuid
# 在 tmux 里启动
uv run core
# 按 Ctrl-b 然后 d 退出会话,进程继续在后台跑
# 需要时重新连接
tmux attach -t gsuid
# 杀死进程
tmux kill-session -t gsuid
1-4-4 PM2
安装PM2
sudo apt update && sudo apt install npm -y
# 安装 pm2
sudo npm install pm2 -g
使用 PM2 启动
pm2 start "uv run core" --name gsuid_core --no-autorestart
开机自启
# 生成启动脚本
pm2 startup
# 保存当前运行列表
pm2 save
管理命令
# 查看状态列表
pm2 list
# 查看日志
pm2 logs gsuid_core
# 重启
pm2 restart gsuid_core
# 停止
pm2 stop gsuid_core
# 监控面板
pm2 monit
2 安装 NoneBot2 框架或安装Astrbot框架
2-1 安装NoneBot2
2-1-1 安装 pipx
# 安装 pipx
sudo apt update && sudo apt install pipx
# 添加到 $PATH
pipx ensurepath
# 重启终端
exec $SHELL
2-1-2 装脚手架并生成项目
# 安装脚手架
pipx install nb-cli
# 生成项目
cd /root/bot
nb create
选择bootstrap模板,输入Project Name,按需使用空格选中需要的适配器,驱动器选择FastAPI、HTTPX、websockets,
2-1-3 运行项目
nb run
2-1-4 持久化
pm2 start "nb run --reload" --name nonebot --kill-timeout 5000 --no-autorestart
2-2 安装AstrBot
2-2-1 Linux一键脚本
安装wget
sudo apt install wget
下载脚本 & 部署
cd /root/bot
wget -O astrbot-install.sh https://github.com/Astriora/Antlia/raw/refs/heads/main/Script/AstrBot/Antlia.sh &&
bash astrbot-install.sh
使用脚本启动
./astrbot.sh
网页控制台:默认地址 IP:6185,账号密码 astrbot/astrbot。务必登录后修改密码。
3 安装 NapCatQQ 协议端
3‑1 下载并运行一键脚本
cd /root/bot
mkdir NapCat && cd NapCat
curl -o \
napcat.sh \
https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh \
&& sudo bash napcat.sh \
--docker n \
--cli y
3‑2 启动并配置NapCat
sudo napcat
在弹出的 tui 界面选择配置 Napcat 选项,添加账号并启动 Napcat。 网页控制台:在添加账号处配置。
4 连接到 AstrBot
4-1 在 AstrBot 配置 aiocqhttp
1.进入 AstrBot 的管理面板
2.点击左边栏机器人
3.然后在右边的界面中,点击+ 创建机器人
4.选择OneBot v11
弹出的配置项填写:
- ID(id):随意填写,仅用于区分不同的消息平台实例。
- 启用(enable): 勾选。
- 反向 WebSocket 主机地址:请填写你的机器的 IP 地址,一般情况下请直接填写
0.0.0.0 - 反向 WebSocket 端口:填写一个端口,默认为
6199。 - 反向 Websocket Token:只有当 NapCat 网络配置中配置了 token 才需填写。
点击
保存
4-2 在 AstrBot 中配置管理员
填写完毕后,进入配置文件页,点击平台配置选项卡,找到管理员ID,填写你的账号(不是机器人的账号)。
点击右下角保存,AstrBot 重启并会应用配置。
4-3 在 NapCat 中添加 WebSocket 客户端
在NapCat 的管理面板,点击网络配置->新建->WebSockets客户端或者在 tui 中选择配置 Napcat->配置 xxxxx->WebSockets客户端。
- URL 填写 ws://宿主机IP:端口/ws。如 ws://localhost:6199/ws或ws://127.0.0.1:6199/ws。
- 消息格式:Array
- 心跳间隔: 5000
- 重连间隔: 5000
点击
保存。
前往 AstrBot WebUI控制台,如果出现aiocqhttp(OneBot v11) 适配器已连接。 蓝色的日志,说明连接成功。如果没有,若干秒后出现aiocqhttp 适配器已被关闭则为连接超时(失败),请检查配置是否正确。
此时,你的 AstrBot 和 NapCat 应该已经连接成功!使用私聊的方式对机器人发送/help以检查是否连接成功。
4-4 为gs适配器添加引用图片支持
@@ -165,6 +165,47 @@ async def on_all_message(self, event: AstrMessageEvent):
GsMessage(
type="reply",
data=msg.id,
)
)
+ # 处理引用消息中的内容(如图片)
+ if hasattr(msg, 'chain') and msg.chain:
+ logger.debug(f'处理引用消息链,包含 {len(msg.chain)} 个组件')
+ for reply_msg in msg.chain:
+ try:
+ if isinstance(reply_msg, Image):
+ img_path = reply_msg.path
+ if not img_path:
+ img_path = reply_msg.url
+ if img_path:
+ logger.debug(f'处理引用消息中的图片: {img_path}')
+ if img_path.startswith('http'):
+ message.append(
+ GsMessage(
+ type='image',
+ data=img_path,
+ )
+ )
+ logger.debug(f'添加引用消息中的HTTP图片: {img_path}')
+ else:
+ if not os.path.exists(img_path):
+ img_path = Path(__file__).parent / img_path
+ if os.path.exists(img_path):
+ async with aiofiles.open(img_path, 'rb') as f:
+ img_data = await f.read()
+ base64_data = b64encode(img_data).decode('utf-8')
+ message.append(
+ GsMessage(
+ type='image',
+ data=f'base64://{base64_data}',
+ )
+ )
+ logger.debug(f'添加引用消息中的本地图片: {img_path}')
+ else:
+ logger.warning(f'引用消息中的图片文件不存在: {img_path}')
+ else:
+ logger.warning(f'引用消息中的图片路径为空: {reply_msg}')
+ elif isinstance(reply_msg, Plain):
+ # 也处理引用消息中的文本内容
+ message.append(
+ GsMessage(
+ type='text',
+ data=reply_msg.text,
+ )
+ )
+ logger.debug(f'添加引用消息中的文本: {reply_msg.text[:50]}...')
+ elif isinstance(reply_msg, At):
+ # 处理引用消息中的@消息
+ message.append(
+ GsMessage(
+ type='at',
+ data=str(reply_msg.qq),
+ )
+ )
+ logger.debug(f'添加引用消息中的At: {reply_msg.qq}')
+ else:
+ logger.debug(f'引用消息中包含不支持的消息类型: {type(reply_msg)}')
+ except Exception as e:
+ logger.error(f'处理引用消息组件时出错: {type(reply_msg)}, 错误: {e}')
+ continue
else:
logger.warning(f"不支持的消息类型: {type(msg)}")
5 连接到NoneBot2
5-1 安装 NoneBot 适配器 & 需要的插件
cd /root/bot/<你的项目名>
nb plugin install nonebot-plugin-genshinuid
5-2 QQ 协议适配
修改 NoneBot 配置文件 .env 或者 .env.*。
DRIVER=~fastapi+~httpx+~websockets
QQ_BOTS='
[
{
"id": "xxx",
"token": "xxx",
"secret": "xxx",
"intent": {
"c2c_group_at_messages": true
},
"use_websocket": true
}
]
'
自行替换的id、token、secret 。
在项目文件夹下使用nb run --reload启动机器人,如果一切顺利,可在日志看到如[INFO] nonebot | QQ | Bot xxxxx connected的日志。
6 连接到 GsCore
在AstrBot插件商店内搜索并安装gscore_adapter。
并配置插件:
- 链接至GsCore的IP地址:默认应为127.0.0.1或localhost
- 链接至GsCore的端口:默认应为8765
- 向GsCore注册自身的Bot:默认应为AstrBot
连接Core的WsToken:只有当 GsCore 配置中配置了
WsToken或者链接至GsCore的IP地址不在GsCore的TRUSTED_IPS内才需填写。公网用户强烈建议启用WsToken。配置后需重启GsCore,当在AstrBot的日志出现
与[gsuid-core]成功连接! Bot_ID: AstrBot,则成功连接。
7 安装鸣潮插件
向机器人发送core安装插件XutheringWavesUID即可。