一、 创建Bot工程
接着上一篇文章,我们已经搭建了协议端的 CQHTTP 和工程端的 NoneBot 2 ,现在我们来开启我们的第一个 Bot 项目:
我们进入创建的虚拟环境:
workon venvbot
然后来到我们的虚拟环境 venvbot 所在的根目录:
cd /usr/local/virtualenvs/venvbot
我们用脚手架直接搭建我们的第一个项目:
nb create
二、 配置Bot端口
创建完成后,我们用 winscp 进入机器人根目录:
刚刚在协议端的 cqhttp 配置时我们知道,在启动前工程端和协议端需要约定好相关的 websocket 通信接口,这样才可以实现监听和机器人的处理。
所以我们需要为刚刚创建的机器人配置相关环境,使其与 cqhttp 建立联系。
我们输入 Ctrl + Alt +H, 查看隐藏文件:
可以看到多出了几个文件,其中前三个都与环境配置有关。第一个表示启动时选用的环境配置文件的后缀,默认为 dev ,意思就是将.env.dev 作为我们默认的环境。
所以我们打开该文件,这里设置的 host 和 port 就是我们工程与 cqhttp 建立联系的通道地址:
我们按需设置后保存(注意这里设置的通道不能够与服务器中在用的本地端口冲突, 具体可以输入 netstat -tnlp 查看)。
然后我们再到 cqhttp 的 hjson 配置文件里填上对应的 ws 接口:
这样我们就完成了配置。
三、 启动 Bot
我们再次回到创建的 Bot 项目根目录,启动机器人:
nb run
莫名出现了加载报错:
具体报错原因显示启动步骤中的环境装载出错:
File "./bot.py", line 8, in <module>
nonebot.init()
File "/usr/local/virtualenvs/venvbot/lib/python3.8/site-packages/nonebot/__init__.py", line 175, in init
env = Env()
File "/usr/local/virtualenvs/venvbot/lib/python3.8/site-packages/nonebot/config.py", line 38, in __init__
__pydantic_self__).__init__(**__pydantic_self__._build_values(
File "/usr/local/virtualenvs/venvbot/lib/python3.8/site-packages/nonebot/config.py", line 53, in _build_values
return deep_update(self._build_secrets_files(_secrets_dir),
TypeError: 'NoneType' object is not callable
我研究了半天也没摸出头脑,一直以为是协议端出错或者为端口的问题,不认为是 NoneBot 的问题。
直到最终去项目官网查了一下 NoneBot 的 Issue。好吧,原来是个bug:https://github.com/nonebot/nonebot2/issues/256
我们按照 issue 的 解决办法给 pydantic 降级:
pip install pydantic==1.7.3
安装完成后我们再次运行:
这次终于成功启动了!!!然后我们再上线 cqhttp (注意要先到其目录下,再设置后台启动) :
nohup ./go-cqhttp >> cqhttp.log 2>&1 &
后台启动完成后,我们再次回来启动Bot:
好的,终于Accept 了!这就表示两边已经成功建立联系了,我们来尝试给机器人发个消息:
可以看到右侧倒数第二行成功出现了我们消息的提示。
我们也可以按照官网的方法进行测试,带上/echo 指令获得自动回复:
到这里,机器人就成功搭建完成了。
本文参考资料:
https://github.com/nonebot/nonebot2/issues/256
如有疑问或错误,欢迎和我私信交流指正。
W.By ChenYX,未经授权,请勿转载!
over~