安装Lagrange

Lagrange.Core是是一个开源的 NTQQ 协议实现,作用就是一个无头的QQ客户端,去掉了QQ的图形界面,可以实现一般客户端都可以的功能
项目地址: LagrangeDev/Lagrange.Core: An Implementation of NTQQ Protocol, with Pure C#, Derived from Konata.Core (github.com)
官方文档: 简介 | Lagrange 文档 (lagrangedev.github.io)

从release下载最新版本的Lagrange,选择对应操作系统版本即可,例如我这里用的就是Linux-x64版本

将文件上传至服务器 (其实也可以在服务器上直接下载)并解压,然后执行就可以了

./Lagrange.OneBot

如果说权限不够则请为其添加可执行权限

chmod +x ./Lagrange.OneBot
# 然后运行
./Lagrange.OneBot

启动之后会提示如下

然后我们去编辑一下配置文件 $vi appsettings.json 完整配置参考官方文档,我们这里只关注服务配置
"Implementations": [
{
"Type": "ReverseWebSocket",
"Host": "127.0.0.1",
"Port": 8080,
"Suffix": "/onebot/v11/ws",
"ReconnectInterval": 5000,
"HeartBeatInterval": 5000,
"AccessToken": ""
}
]

这部分的Host和Port后面配置OneBot会回来修改,暂时先不用改动,你也可以先把Port改成别的端口(但要保证不被占用并且在后面配置Nonebot的时候用这个端口提供服务)

然后再运行一次Lagrange会出现一个二维码给我们扫

扫完之后记得勾选【下次登录无需确认】,然后Lagrange就会一直复读下图(如果配置对的话),至此我们的Lagrange就配置好了,先使用Ctrl+C暂时退出应用

Nonebot安装及配置

Nonebot是一个跨平台的Python异步机器人框架
这里我们使用Nonebot对我们Lagrange收到的消息进行处理
NoneBot官网 NoneBot
项目地址 nonebot/nonebot2: 跨平台 Python 异步聊天机器人框架 / Asynchronous multi-platform chatbot framework written in Python (github.com)

这里按照官方文档的快速上手(快速上手 | NoneBot) 操作安装就可以了,但要注意安装适配器的时候需要选中"OneBot V11"协议,Console可选可不选,驱动器使用默认的FastAPI即可,内置插件随意

创建成功后 cd 你的项目名字 进入机器人目录,项目内应该是总共有三个文件.env.prod pyproject.toml README.md,如果在上面修改了Lagrange的端口这里就需要修改一下端口, vi .env.prod 后在 DRIVER=~fastapi ,在后面添加PORT=你设定的端口,然后 :wq 保存退出,如图,如果上面没有改端口还是8080则跳过这步

还有一点非常重要!如果选择了创建虚拟环境,就要先激活虚拟环境才能启动,否则会告诉你nb: command not found...
source venv/bin/activate 激活虚拟环境,想要退出虚拟环境只需要输入 deactivate 就可以了
然后 nb run 测试一下bot是否可以成功运行,成功运行如图

到这里就安装好Nonebot了,接下来就是让Lagrange与NoneBot连接以及让他们一直在后台运行

建立连接以及持续运行

首先测试连接性,打开两个shell,一个运行Lagrange,一个运行NoneBot,如下图所示

我们可以对bot绑定的QQ发送一条消息测试一下,可以看到是完美运行的

然后我们就需要让其一直运行在我们的机器上了,当然你要不嫌麻烦每次都手动启动的话,到这里就可以结束了
方案有很多种,也可以使用Screen,这里演示使用Supervisor[官网] (请注意!Windows上无法使用)
如果是RedHat / CentOS

#1安装 epel 源
yum install -y epel-release
#2安装 supervisor
yum install -y supervisor
#3启动 supervisord 服务
systemctl start supervisord
#4开机自启动
systemctl enable supervisord
#5查看 supervisord 服务状态
systemctl status supervisord

如果是Ubuntu / Debian
sudo apt-get install supervisor

如果没有创建配置文件,则手动创建配置文件到etc中
cd /etc
echo_supervisord_conf > supervisord.conf


Supervisord的详细配置可以自己去搜索一下(绝对不是因为懒得写),这里仅提供一个示例:

; Sample supervisor config file.
[unix_http_server]
; (the path to the socket file)
file = /var/run/supervisor/supervisor.sock

[supervisord]
; (main log file;default $CWD/supervisord.log)
logfile          = /var/log/supervisor/supervisord.log
; (max main logfile bytes b4 rotation;default 50MB)
logfile_maxbytes = 50MB
; (num of main logfile rotation backups;default 10)
logfile_backups  = 10
; (log level;default info; others: debug,warn,trace)
loglevel         = info
; (supervisord pidfile;default supervisord.pid)
pidfile          = /var/run/supervisord.pid
; (start in foreground if true;default false)
nodaemon         = false
; (min. avail startup file descriptors;default 1024)
minfds           = 1024
; (min. avail process descriptors;default 200)
minprocs         = 200


[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl = unix:///var/run/supervisor/supervisor.sock

[include]
files = supervisord.d/*.ini

/etc/supervisord.d中添加两个程序的配置文件 Lagrange.ini OneBot.ini
内容如下 括号内的内容请自行删除!!!

;Lagrange.ini
[program:Lagrange]
command = /opt/Lagrange/Lagrange.OneBot(你的Lagrange安装目录加上软件名字)
directory = /opt/Lagrange(你的Lagrange安装目录)
autorestart = true
startsecs = 3
stdout_logfile = (普通日志存放目录,例如/opt/Lagrange/logs/Lagrange.out.log)
stderr_logfile = (错误日志存放目录,例如/opt/Lagrange/logs/Lagrange.err.log)
stdout_logfile_maxbytes = 2MB
stderr_logfile_maxbytes = 2MB
user = root
priority = 999
numprocs = 1
process_name = %(program_name)s_%(process_num)02d
;NoneBot.ini
[program:OneBot]
command                 = sh -x /opt/BotTest/MyBot/run.sh(将目录替换为你的BOT安装目录)
directory               = /opt/BotTest/Nb(你的BOT安装目录)
autorestart             = true
startsecs               = 3
stopasgroup             =true
killasgroup             =true
stdout_logfile          = /opt/BotTest/logs/OneBot.out.log
stderr_logfile          = /opt/BotTest/logsOneBot.err.log
stdout_logfile_maxbytes = 2MB
stderr_logfile_maxbytes = 2MB
user                    = root
priority                = 999
numprocs                = 1
process_name            = %(program_name)s_%(process_num)02d

细心的小伙伴已经发现了,这个run.sh又是个什么鬼东西,因为我这里配置了虚拟环境,所以直接写了一个脚本启动,内容如下

#run.sh
source /opt/BotTest/venv/bin/activate
/opt/BotTest/venv/bin/nb run

建议还是使用虚拟环境,避免包污染,接下来就剩启动supervisor了
supervisord -c /etc/supervisord.conf
然后使用supervisorctl status检查一下进程运行状态

完美运行,可以在上面配置的日志路径中查看实时运行日志


到这里我们的Bot搭建就结束了,如果遇到问题建议还是首先到各个官方文档查询,看看自己是不是哪一步做错了,同时也欢迎在下方评论区给我留言,关于后续的机器人插件安装可以查看官方文档,我后续也会更新插件相关的文章。