正因是梦,尤需真活。

使用Go-cqhttp和NoneBot2搭建出属于自己的QQ机器人

2022.11.25

本篇属于一个补档,毕竟补档是检验好活的唯一标准。

一开始我为什么要弄这个QQ机器人已经不记得了,但是当时做的时候一下子就成功了,很意外,而且大概是某个假期回家的路上弄的,弄完后那个假期就啥也没干了,所以当时也没记录下来,导致这次我想在我宿舍机顶盒上重弄一个都得从头开始。

为什么要在宿舍机顶盒呢,就是单纯有这个东西所以才有这份岗位,这个是可以挂载在云服务器上的,而且更加稳定,但是最近挂载在云服务器上的账号登陆不上去,我也懒得处理,干脆在宿舍弄一个,可以扫码登录。

这次记下来的原因也是为了未来在做的时候不用来回翻阅多个文档,所以这个文档只是两篇文档的整合,截取了较低限度的内容,但足以保证其运行,也只能保证其能运行,更多更详细还是得自己去看官方文档,文中诸多地方也不够规范,非科班出身,望见谅。

Go-cqhttp 配置$^{[1]}$

下载解压

从这儿下载最新版本的 go-cqhttp,输入tar -xzvf [文件名]解压

配置使用

  1. 输入./go-cqhttp,直接运行,这时会显示

    未找到配置文件,正在为您生成配置文件中!
    请选择你需要的通信方式:
    > 0: HTTP通信
    > 1: 云函数服务
    > 2: 正向 Websocket 通信
    > 3: 反向 Websocket 通信
    请输入你需要的编号(0-9),可输入多个,同一编号也可输入多个(如: 233)
    您的选择是:
    

    如果无法运行可能还要加一个权限

    chmod 777 go-cqhttp
    
  2. 我们这里选择3反向代理,此时显示

    默认配置文件已生成,请修改 config.yml 后重新启动!
    
  3. 参照 config.mdconfig.yml中填入参数

    其中两处需要修改

    account: # 账号相关
        uin: 123456 # QQ账号
    
    ... ...
    
    - ws-reverse:
        # 反向WS Universal 地址
        # 注意 设置了此项地址后下面两项将会被忽略
        universal: ws://127.0.0.1:6606/onebot/v11/
    

    其中,127.0.0.16606 分别对应下方 NoneBot 配置的 HOSTPORT $^{*}$

  4. 再次运行,这一步到此为止

    若出现下述文字为正常运行,直接进行下一步

    [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/pluginssrc/plugins: 用于存放编写的 bot 插件 .env.env.dev.env.prod: 各环境配置文件 bot.py: bot 入口文件 pyproject.toml: 项目插件配置文件 Dockerfiledocker-compose.yml: Docker 镜像配置文件

配置

env文件

HOST=127.0.0.1        # 配置 NoneBot2 监听的 IP/主机名
PORT=6606             # 配置 NoneBot2 监听的端口
LOG_LEVEL=DEBUG
FASTAPI_RELOAD=true

此处HOSTPORT即对应上方 Go-cqhttp 配置的 config.yml $^{*}$中的HOSTPORT

运行

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-cqhttpNoneBot2,最终效果如下

Web Image

开始使用

人类的本质是复读机,那机器人也得是

编辑一下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")

以上就是最简单的加了复读机插件的机器人,这个最简单的功能也是要加插件的,不然就会像我一样,像个小丑一样

Web Image

自定义反应

我们可以编写一个最基本的回应,不能只会复读,所以我们可以用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!")

能听见,能说出,就这么简单

Web Image

拿来主义

可以直接拿来大佬写好的插件,像逛超市一样挑选自己想要的功能

Web Image

更多功能

还在开发中,未来会单独列一个博客出来


就此一个机器人的框架已经搭出,在上面进行一些小改动,加一些函数即可完成一些简单操作,输入输出··· ···

参考链接