欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

快速上手NoneBot2的部署教程

最编程 2024-08-09 14:15:25
...

简介

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架。使用它可以快速开发一个群机器人,比如QQ群,而借助扩展插件,也可以接入其他聊天工具,比如飞书、钉钉、Telegram等。

本文将使用一个开源成熟的机器人LittlePaimon为例,展示如何部署一个QQ群机器人。

LittlePaimon

小派蒙是一个原神多功能机器人,提供了查询游戏信息、图鉴攻略、树脂提醒等功能,作为一名原批,部署这个实在是再合适不过了 ????


在教程开始前,需要特别说明下,本教程上半部分演示使用的是本地电脑:Macbook Pro,MacOS:13.2.1。除了安装Python在各个操作系统之间有差异以外,其余命令都与操作系统无关。

安装基础环境

在安装小派蒙之前,需要先安装Python3(版本≥3.8)、NoneBot2、go-cqhttp。

Python3.10

本文以Python3.10作为运行环境,python的安装方法网上已经有很多教程了,可以自行搜索下。安装完成以后可以使用命令 python -V 检查版本来查看是否安装正确,显示的版本≥3.8即可。

Pip镜像源

国内可用的pip源很多,阿里、清华、豆瓣等都可以,这里以清华镜像为例,只需要输入一行命令即可:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

NoneBot 2

安装完python以后,可以使用如下命令安装NoneBot2:

# 1. 安装pipx
python -m pip install pipx
python -m pipx ensurepath

# 2. 安装脚手架,安装完成以后重启一下命令行终端
pipx install nb-cli

安装完成后,你可以在命令行使用 nb -V 命令来查看脚手架的版本。如果出现无法找到命令的情况(例如: Command not found ),可以先尝试重新登录一下终端,或者参考 pipx 文档 检查你的环境变量。

go-cqhttp

go-cqhttp是一个无头QQ客户端,负责与小派蒙交互,进行消息的收发。本教程选择的是以NoneBot插件的形式安装,可以在后续安装小派蒙的时候进行选择,所以此处并未给出单独安装的方式,如有此需要,可以自行研究:docs.go-cqhttp.org/guide/quick…

安装小派蒙

上面的步骤顺利完成以后就可以安装小派蒙啦!先找一个安装小派蒙的路径,比如可以创建一个文件夹:NoneBot,然后在这个文件夹下执行以下命令:

nb self install nb-cli-plugin-littlepaimon  # 安装小派蒙脚手架插件
nb paimon create  # 创建小派蒙项目

???? 目录路径最好不要有中文,如果使用了中文路径,报错了的话请尝试更换为英文路径

在运行nb paimon create后,脚手架会一步步指引安装,以下为可能出现的选项:

  • 项目名称:你想要存放的小派蒙文件夹名,默认为LittlePaimon
  • 克隆源:推荐标记了国内的源,如果下载失败可尝试选择其他源
  • 超级用户QQ号:相当于机器人的管理员,填写你自己的QQ号
  • 立刻安装依赖:请选择是(Y),即直接回车
  • 创建虚拟环境:强烈建议选 是(Y) ,这样可以保证安装的依赖的独立性,不会和其他项目冲突
  • go-cqhttp安装和使用方式:可以选择插件的方式直接安装,如果自己喜欢也可以单独安装使用

在创建完成后,继续运行以下命令

# LittlePaimon为你刚刚填写的项目目录名
cd LittlePaimon

# 有两个资源包,默认都已勾选(Space取消选择),直接回车进下一步安装即可
nb paimon res

# 安装playwright相关依赖,如果是Debian系统中安装,
# 可以先去配置一个镜像加速服务:https://mirrors.tuna.tsinghua.edu.cn/help/debian/
nb paimon run playwright install chromium --with-deps

到此,你的小派蒙Bot安装成功!此后,你只需要在派蒙的目录下使用命令nb paimon run即可启动小派蒙Bot,并根据你选择的go-cqhttp安装方式(通过插件安装的会随小派蒙一起启动),启动并登录机器人账号。

启动小派蒙

启动小派蒙

配置QQ群机器人

服务启动以后可以先去配置一个QQ群的机器人了,如果你是用插件的方式安装的go-cqhttp,那此时它的管理端已经启动了,如果你是单独安装的,则需要手动启动一下,然后进入如下地址访问它的管理后台:http://0.0.0.0:13579/go-cqhttp/#/

添加账号

添加账号

先点击添加账号,然后输入自己作为QQ机器人的QQ号,可以用自己的小号,密码空着不用填写,我们以扫码的方式登录。

重点是下面的登录设备类型,我们优先选择iPad登录,提交以后会生成一个二维码,我们扫码进行登录,如果成功就万事大吉,如果提示登录密码错误或者账号已冻结的话,只能尝试别的设备类型了,比如我只能通过Android Watch的方式登录成功,其他都不行。。。如果所有的方式都登录失败了,那只能说腾讯NB,风控越来越强了。

???? 此处需要特别注意的一点,扫码登录必须是运行go-cqhttp的电脑和手机处于同一网络才能扫码成功,否则QQ会提示不在同一网络无法登录,如果你是在自己电脑上部署的,那一般不会有这个问题,但对于有自己云服务器的朋友会比较麻烦,只能先在本机运行,登录成功以后再把device.json和session.token这两个文件拷贝到云服务器上了。

扫码登录

扫码登录

登录成功以后,我们可以在QQ中拉一个群,之后群里发送的消息机器人都可以接收到,旁边的控制台也会打印出来

发送消息

发送消息

到这里,我们的派蒙小机器人就搭建完成啦!只要你保持这个程序一直运行,那机器人就可以一直提供服务。

部署到云服务器

上面展示了部署小派蒙的完整步骤,所有步骤都是在本地电脑操作演示的,而机器人如果想一直提供服务,那电脑就必须一直开着,这对于个人电脑来说还是比较困难的,所以如果你想拥有一个能够持续提供服务的机器人,那使用云服务器是一个很好的选择,接下来我会展示如何在云服务器上部署一个小派蒙。

这里需要特别说明一下,本教程不涉及云服务器的购买和选择,另外最好对Linux有一定的了解。

我使用的云服务器操作系统是Ubuntu 22.04,下面展示的命令如无特别说明,则与系统无关。

部署的方式主要有两种,一种是直接在本机上安装部署,那就是把上文的操作步骤在服务器上再完整执行一遍就可以了;另一种是使用Docker,下文将使用Docker展示如何搭建一个云服务器版的小派蒙。

安装Docker

开始之前简单介绍一下Docker吧,Docker可以简单理解为一种轻量化的虚拟服务,使用Docker可将应用程序和基础设施层隔离,并且能够快速打包、部署一个程序。

比如正常情况下我们想要安装python需要去网上找对应操作系统的教程怎么安装一个python,而有了Docker,我们使用一行命令docker pull python就可以拉取一个已经安装好python的镜像了,从这个镜像创建一个容器就可以直接部署小派蒙了,而且我们自己也可以发布自己的镜像,比如我可以搭建一个小派蒙的基础镜像,再发布到网上,这样其他人就可以直接拉取我的镜像来部署小派蒙,那他就不需要再经历上文这么多的安装步骤了!

好了,介绍就到此为止,Docker毕竟不是本文的重点,有兴趣的可以去网上搜索下相关资料。

下面以Ubuntu为例安装一个Docker:

sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

按步骤依次执行上述命令即可安装完成,其他操作系统可以去官网看下教程:docs.docker.com/engine/inst…

安装完成以后可以执行docker -v查看版本确认是否安装完成

完成以后我们还需要再配置一下镜像加速器,否则国内的网络去下载国外的镜像会非常慢,配置方式如下:

# Ubuntu或CentOS
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

搭建&运行容器

安装好docker以后我们就可以开始部署小派蒙了,我们先创建一个名为Dockerfile的文件(不带任何后缀),然后粘贴下面的内容:

FROM python:3.10

# 服务提供的外部端口号
EXPOSE 13579

# 该参数为管理小派蒙的管理员QQ号,多个用空格隔开,如果不传则使用默认值
ARG ADMIN_QQ=123456789

# 工作目录
WORKDIR /app

# 设置上海时区
ENV TZ='Asia/Shanghai'

# 配置debian镜像源,pip源,后面安装依赖时可以加快速度
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo 'Asia/Shanghai' > /etc/timezone && \
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \
    echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free\n\
    deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free\n\
    deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free\n\
    deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free' > /etc/apt/sources.list && \
    apt-get update && apt-get install -y expect

# 安装依赖
RUN bash -c "python -m pip install pipx; python -m pipx ensurepath; pipx install nb-cli"

# 由于nb命令需要重启一次终端,所以需要先source ~/.bashrc刷新一下,否则会找不到nb命令
RUN bash -c "source ~/.bashrc; \
    nb self install nb-cli-plugin-littlepaimon; \
    echo -e "\ncherishmoon镜像源(国内推荐)\n$ADMIN_QQ\ny\ny\nnonebot-plugin-gocqhttp插件\n" | nb paimon create; \
    cd LittlePaimon; \
    nb paimon run playwright install chromium --with-deps;"

# 创建一个expect脚本,用于自动下载小派蒙需要的资源文件
RUN echo '#!/usr/bin/expect\n\
    set timeout -1\n\
    spawn nb paimon res\n\
    expect "哪些资源"\n\
    send "\r"\n\
    expect "资源下载源"\n\
    send "cherishmoon镜像源(国内推荐)\r"\n\
    expect eof' > /app/install_res.exp

# 执行刚刚创建的expect脚本
RUN bash -c "source ~/.bashrc; cd LittlePaimon; expect /app/install_res.exp"

# 启动小派蒙
CMD cd /app/LittlePaimon; bash -c "source ~/.bashrc; nb paimon run"

然后使用docker指令构建一个镜像(执行时需要和刚刚创建的Dockerfile在同一个目录下):

# ADMIN_QQ为小派蒙后台的管理员QQ,需要换成自己的QQ号,多个用空格隔开
docker build --build-arg ADMIN_QQ='123456' -t little-paimon .

???? 由于依赖较多,所以构建的时间可能比较长(可能要半小时),耐心等待即可,如果构建时因为网络原因失败了,可以重试一下

构建成功以后,使用docker images命令就可以看到一个叫little-paimon的镜像了。然后我们就可以启动容器了,下面两个命令选一个执行:

# 方法一:直接使用host模式。与宿主机使用同一个网络,性能高,但是可能会导致端口混乱
docker run -d --name little-paimon --net=host little-paimon

# 方法二:配置dns。如果不想直接用宿主机网络,可以用这个方法
docker run -d --name little-paimon --dns 8.8.8.8 --dns 114.114.114.114 -p 13579:13579 little-paimon

上传容器镜像

在开始这一部分的教程之前,需要说明的是,这一步并不是必须的,只对于需要快速重复部署或者备份镜像的人可能会有一点帮助,没有需要的话可以跳过本步骤的阅读。

言归正传,我们刚才成功创建出了一个小派蒙的容器,现在,我们可以把自己制作的镜像上传到Docker Hub或者国内的云服务器厂商提供的容器镜像里去了,这样,以后我们在另一台电脑部署的时候就可以直接拉取镜像然后运行,进一步降低了部署的步骤和复杂度,也可以把这个上传的镜像当做一个远程备份。

???? 但是需要注意的是,上传镜像会把容器内所有的文件都上传,所以要注意上传成公开的镜像时,一定要把个人信息或者QQ机器人的登录信息删除!如果是私人镜像,那问题不大。

上传镜像的过程并不难,简单说就是登录Docker Hub,然后给镜像打一个tag,再上传就好了。

Docker Hub是Docker官方提供的容器镜像服务,由于服务器在国外,可能速度会有点慢,我选择的是国内的云服务厂商提供的,可以直接看云服务商的官方教程文档,一般都是很简单的。

需要提醒的一点是,在选择镜像服务的节点时,最好选择和自己服务器同样的地区(比如上海一),否则可能很慢。

这里我以华为云为例,首先获取一个临时登录的命令,登录成功以后输入以下命令:

# 使用docker login登录以后输入以下命令就可以把镜像推送到华为云镜像服务
docker tag little-paimon swr.cn-east-3.myhuaweicloud.com/rorschg/little-paimon:v1.0
docker push swr.cn-east-3.myhuaweicloud.com/rorschg/little-paimon:v1.0

配置域名

服务启动完成以后,我们还没办法直接访问到小派蒙的管理后台,所以我们还需要配置一个反向代理到自己的域名上。

这里我使用的是Caddy,它比nginx简单很多,只需要配置几行就好了,安装可以参考caddyserver.com/docs/instal…

安装以后在用户目录创建一个Caddyfile,然后写入如下内容:

paimon.example.com {
    reverse_proxy /go-cqhttp/* localhost:13579
    reverse_proxy /LittlePaimon/* localhost:13579
}

这里的paimon.example.com需要换成自己的域名,配置完成以后使用caddy reload就能让配置生效了,现在你访问:paimon.example.com/LittlePaimo…

???? 这里我配置了go-cqhttp反向代理,主要是方便首次配置机器人的时候使用,后续最好去掉,因为这个控制台本身不需要密码就能进入,一直放着还是很危险的!

拷贝QQ机器人登录信息

由于在远程服务器上我们没有办法直接登录QQ,会触发QQ的风控,所以我们只能曲线救国了。

我们可以先在本地登录,登录的时候需要确保手机和小派蒙(go-cqhttp)运行的电脑在同一个网络下,这是登录成功的关键,这个在上文已经有所提及。

然后我们把本机登录好的账户文件夹拷贝到运行的容器中,就可以完成QQ机器人的远程部署了。

我们需要拷贝的文件夹在这个目录下:LittlePaimon/accounts。这个目录下默认有一个binary的文件夹,另外还有以你设置的机器人QQ号为名称的文件夹,我们拷贝的时候只需要拷贝对应的QQ号的文件夹就可以了,binary文件夹不要拷贝

假设我的QQ机器人是:123456789,那我就需要把LittlePaimon/accounts/123456789这个文件夹上传到云服务器上,然后使用以下命令拷贝到容器中:

# 格式:docker cp /本地文件夹 容器名称:/容器文件夹
docker cp 123456789 little-paimon:/app/LittlePaimon/accounts

拷贝完成以后go-cqhttp中可能还没有这个QQ,需要再手动输入一下QQ号和登录方式,然后启动,就大功告成啦! ????

现在,我们在QQ上创建一个群或者讨论组,然后把我们刚刚设置的QQ机器人邀请进群就可以跟小派蒙对话了。

猫尾酒馆

猫尾酒馆

尾声

到此,NoneBot2的部署就全部完成了。

最开始我只是想在Github上找一个帮我抢米游社原石的脚本(因为老是抢不到,可恶…),找着找着发现了一个用NoneBot2写的机器人插件,然后就了解到了NoneBot2,知道了有小派蒙这么个机器人,我就想,如果部署一个小派蒙+抢原石插件不是美哉!于是就折腾了起来…

整个部署的过程中也踩了不少的坑,遇到了很多的问题,特别是Dockerfile的编写花费了我很多时间(交互式命令的安装很蛋疼),借此机会又重新学习了一下Docker,也算一件美事。我想这就是原批的快乐吧,玩玩游戏,学学技术~ ????

最后,感谢你的阅读!

参考文档

  1. NoneBot官方文档:v2.nonebot.dev/docs/
  2. 小派蒙官方文档:docs.paimon.cherishmoon.fun/deploy.html
  3. Docker官方文档:docs.docker.com/engine/inst…
  4. Caddy官方文档:caddyserver.com/docs/gettin…
  5. NoneBot2全平台保姆级新手教学:www.bilibili.com/video/BV198…