本篇属于一个补档,毕竟补档是检验好活的唯一标准。
一开始我为什么要弄这个QQ机器人已经不记得了,但是当时做的时候一下子就成功了,很意外,而且大概是某个假期回家的路上弄的,弄完后那个假期就啥也没干了,所以当时也没记录下来,导致这次我想在我宿舍机顶盒上重弄一个都得从头开始。
为什么要在宿舍机顶盒呢,就是单纯有这个东西所以才有这份岗位,这个是可以挂载在云服务器上的,而且更加稳定,但是最近挂载在云服务器上的账号登陆不上去,我也懒得处理,干脆在宿舍弄一个,可以扫码登录。
这次记下来的原因也是为了未来在做的时候不用来回翻阅多个文档,所以这个文档只是两篇文档的整合,截取了较低限度的内容,但足以保证其运行,也只能保证其能运行,更多更详细还是得自己去看官方文档,文中诸多地方也不够规范,非科班出身,望见谅。
Go-cqhttp 配置$^{[1]}$
下载解压
先从这儿下载最新版本的 go-cqhttp,输入tar -xzvf [文件名]
解压
配置使用
-
输入
./go-cqhttp
,直接运行,这时会显示未找到配置文件,正在为您生成配置文件中! 请选择你需要的通信方式: > 0: HTTP通信 > 1: 云函数服务 > 2: 正向 Websocket 通信 > 3: 反向 Websocket 通信 请输入你需要的编号(0-9),可输入多个,同一编号也可输入多个(如: 233) 您的选择是:
如果无法运行可能还要加一个权限
chmod 777 go-cqhttp
-
我们这里选择
3
反向代理,此时显示默认配置文件已生成,请修改 config.yml 后重新启动!
-
参照 config.md在
config.yml
中填入参数其中两处需要修改
account: # 账号相关 uin: 123456 # QQ账号 ... ... - ws-reverse: # 反向WS Universal 地址 # 注意 设置了此项地址后下面两项将会被忽略 universal: ws://127.0.0.1:6606/onebot/v11/
其中,
127.0.0.1
和6606
分别对应下方 NoneBot 配置的HOST
和PORT
$^{*}$。 -
再次运行,这一步到此为止
若出现下述文字为正常运行,直接进行下一步
[WARNING]: 连接到反向WebSocket Universal服务器 ws://127.0.0.1:6606/onebot/v11/ 时出现错误: dial tcp 127.0.0.1:6606: connect: connection refused
NoneBot2 配置$^{[2]}$
安装 NoneBot2
请确保你的 Python 版本 >= 3.8。
pip install nb-cli
使用
# 直接使用 nb 命令
nb
# 或使用 Python 执行 module
python -m nb_cli
通常情况下,你可以直接在命令行使用 nb 命令,但如果命令行出现 Command not found 错误,这是由于环境变量 PATH 没有正确配置或未配置导致的,可以使用第二种方式代替。
我就是当时一直不能使用nb
命令,后来发现文档里写了,所以兄弟们好好看文档啊!
在那个交互界面中选择create
一路填写机器人叫啥,存放插件的文件夹叫啥,使用的框架,选择onebot
!!!这里选框架的时候要按一下空格!!!
自动生成目录结构,详细看文档
📦 haoqi
├── 📂 haoqi # 或是 src
│ └── 📜 plugins
├── 📜 .env # 可选的
├── 📜 .env.dev # 可选的
├── 📜 .env.prod # 可选的
├── 📜 .gitignore
├── 📜 bot.py
├── 📜 docker-compose.yml
├── 📜 Dockerfile
├── 📜 pyproject.toml
└── 📜 README.md
HaoQi/plugins
或 src/plugins
: 用于存放编写的 bot 插件
.env
、.env.dev
、.env.prod
: 各环境配置文件
bot.py
: bot 入口文件
pyproject.toml
: 项目插件配置文件
Dockerfile
、docker-compose.yml
: Docker 镜像配置文件
配置
env文件
HOST=127.0.0.1 # 配置 NoneBot2 监听的 IP/主机名
PORT=6606 # 配置 NoneBot2 监听的端口
LOG_LEVEL=DEBUG
FASTAPI_RELOAD=true
此处HOST
和PORT
即对应上方 Go-cqhttp 配置的 config.yml
$^{*}$中的HOST
和PORT
。
运行
nb run
下面说的咱也没看懂,反正就用nb run
总不会出问题
Always use `nb run` to start the bot instead of manually running!
创建Tmux窗口双开$^{[3]}$
tmux new -s qqbot # 新建会话
Ctrl+b % # 划分左右两个窗格
Ctrl+b <arrow key> # 方向键左右,将光标切换到其他窗格
tmux attach -t qqbot # 下次使用时再次接入会话
在两个窗口分别运行Go-cqhttp
和NoneBot2
,最终效果如下
开始使用
人类的本质是复读机,那机器人也得是
编辑一下bot.py
文件
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import nonebot
from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapter
app = nonebot.get_asgi()
driver = nonebot.get_driver()
driver.register_adapter(ONEBOT_V11Adapter)
nonebot.load_builtin_plugins("echo")
nonebot.load_from_toml("pyproject.toml")
if __name__ == "__main__":
nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
nonebot.run(app="__mp_main__:app")
以上就是最简单的加了复读机插件的机器人,这个最简单的功能也是要加插件的,不然就会像我一样,像个小丑一样
自定义反应
我们可以编写一个最基本的回应,不能只会复读,所以我们可以用python写一个最简单的(人生苦短我用python
from nonebot.adapters.onebot.v11 import Bot, Event
from nonebot.plugin import on_keyword
greet = on_keyword(['hi','hello'], priority=5)
@greet.handle()
async def _(bot: Bot, event: Event):
await greet.send("Hello world!")
能听见,能说出,就这么简单
拿来主义
可以直接拿来大佬写好的插件,像逛超市一样挑选自己想要的功能
更多功能
还在开发中,未来会单独列一个博客出来
就此一个机器人的框架已经搭出,在上面进行一些小改动,加一些函数即可完成一些简单操作,输入输出··· ···
参考链接
- [1] go-cqhttp文档
- [2] Nonebot文档
- [3] 曾经的文档