localhost:8765/genshinuid,账号密码 root/root。务必登录后修改密码。bot/gsuid_core/data/config.json 里的 HOST 改成 0.0.0.0 后重启或者反向代理localhost:8765即可。masters内添加自己的账号。假设输出为:
UV_PATH: /root/.local/bin/uvWORK_DIR: /root/bot/gsuid_core选择bootstrap模板,输入Project Name,按需使用空格选中需要的适配器,驱动器选择FastAPI、HTTPX、websockets,
网页控制台:默认地址 IP:6185,账号密码 astrbot/astrbot。务必登录后修改密码。
在弹出的 tui 界面选择配置 Napcat 选项,添加账号并启动 Napcat。 网页控制台:在添加账号处配置。
1.进入 AstrBot 的管理面板
2.点击左边栏机器人
3.然后在右边的界面中,点击+ 创建机器人
4.选择OneBot v11
弹出的配置项填写:
0.0.0.06199。保存填写完毕后,进入配置文件页,点击平台配置选项卡,找到管理员ID,填写你的账号(不是机器人的账号)。
点击右下角保存,AstrBot 重启并会应用配置。
在NapCat 的管理面板,点击网络配置->新建->WebSockets客户端或者在 tui 中选择配置 Napcat->配置 xxxxx->WebSockets客户端。
保存。前往 AstrBot WebUI控制台,如果出现aiocqhttp(OneBot v11) 适配器已连接。 蓝色的日志,说明连接成功。如果没有,若干秒后出现aiocqhttp 适配器已被关闭则为连接超时(失败),请检查配置是否正确。
此时,你的 AstrBot 和 NapCat 应该已经连接成功!使用私聊的方式对机器人发送/help以检查是否连接成功。
修改 NoneBot 配置文件 .env 或者 .env.*。
自行替换的id、token、secret 。
在项目文件夹下使用nb run --reload启动机器人,如果一切顺利,可在日志看到如[INFO] nonebot | QQ | Bot xxxxx connected的日志。
在AstrBot插件商店内搜索并安装gscore_adapter。
并配置插件:
连接Core的WsToken:只有当 GsCore 配置中配置了WsToken或者链接至GsCore的IP地址不在GsCore的TRUSTED_IPS内才需填写。公网用户强烈建议启用WsToken。
配置后需重启GsCore,当在AstrBot的日志出现与[gsuid-core]成功连接! Bot_ID: AstrBot ,则成功连接。
向机器人发送core安装插件XutheringWavesUID即可。
# 创建总目录
mkdir -p bot && cd bot/
# 安装node.js
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -
sudo apt-get install -y nodejs
git clone https://github.com/Genshin-bots/gsuid_core.git
cd gsuid_core
# 安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 使 uv 命令生效 (如果提示找不到命令,请执行这一行)
source $HOME/.local/bin/env
# 安装依赖
uv sync
uv run python -m ensurepip
uv run core
echo "UV_PATH: $(which uv)"
echo "WORK_DIR: $(pwd)"
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
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
sudo apt update && sudo apt install npm -y
# 安装 pm2
sudo npm install pm2 -g
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
# 安装 pipx
sudo apt update && sudo apt install pipx
# 添加到 $PATH
pipx ensurepath
# 重启终端
exec $SHELL
# 安装脚手架
pipx install nb-cli
# 生成项目
cd /root/bot
nb create
nb run
pm2 start "nb run --reload" --name nonebot --kill-timeout 5000 --no-autorestart
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
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
sudo napcat
@@ -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)}")
cd /root/bot/<你的项目名>
nb plugin install nonebot-plugin-genshinuid
DRIVER=~fastapi+~httpx+~websockets
QQ_BOTS='
[
{
"id": "xxx",
"token": "xxx",
"secret": "xxx",
"intent": {
"c2c_group_at_messages": true
},
"use_websocket": true
}
]
'