搭建kimo寄佬的AtriBot

搭建自己的QQ机器人,让它帮你管理群、发送消息,查资料,陪你逗逼,等等。
我使用的是go-cqhttp + atri!!

在linux上部署

前提准备:

  1. 一个服务器,或者一台电脑(我的打算是部署在服务器上,腾讯云的1h2g,ubuntu轻量云服务器)。
  2. python>=3.8 的运行环境。
  3. 耐心
  4. 一台电脑。

配置go-cqhttp

使用mirai以及MiraiGo开发的cqhttp golang原生实现, 并在cqhttp原版的基础上做了部分修改和拓展。
新版本的nonebot的协议适配已经将cqhttp改为onebot v11。但是cqhttp的配置不受影响。

    前往go-cqhttp release下载cqhttp对应的linux服务端go-cqhttp_linux_amd64.tar.gz文件。

    进入服务器,新建一个cqhttp文件夹:

1
2
cd ~
mkdir cqhttp && cd cqhttp

    之后把这个文件夹上传上去,这里我推荐国产的finalshell。然后解压该文件:

1
tar -xvzf go-cqhttp_linux_amd64.tar.gz

    解压完成以后应该是这些文件:

files

    运行./go-cqhttp,等待出现以下,并选择3: 反向 Websocket 通信,因为我们用的是atri,需要用到反向 websocket 通信,按下数字键3,完成选择:

go-cqhttp

    此时,按下ctrl+c结束进程,然后修改config.yml

注释里有 // 的需要自己自定义。其他的我也弄不懂,所以建议不要动。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# go-cqhttp 默认配置文件

account: # 账号相关
uin: 2730292563 # // QQ账号 这里写机器人的qq账号,推荐自己的小号,别用自己常用的号。
password: 'Fchen19190' # // QQ账号密码 这里写你的bot的账号密码,可以留空,运行gocq时选择扫码,也可以输入密码。

# ...

heartbeat:
# 心跳频率, 单位秒
# -1 为关闭心跳
interval: 5

message:
# 上报数据类型
# 可选: string,array
post-format: array

# ...

# 连接服务列表
servers:
# 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
#- http: # http 通信
#- ws: # 正向 Websocket
#- ws-reverse: # 反向 Websocket
#- pprof: #性能分析服务器
# 反向WS设置
- ws-reverse:
# 反向WS Universal 地址
# 注意 设置了此项地址后下面两项将会被忽略
universal: ws://127.0.0.1:10010/onebot/v11/ws # // 反向 websockets 通信地址,按照我写的就行。
# 反向WS API 地址
#api: ws://your_websocket_api.server # // 由于设置了 universal,这里注释掉即可。
# 反向WS Event 地址
#event: ws://your_websocket_event.server # // 由于设置了 universal,这里注释掉即可。
# 重连间隔 单位毫秒
reconnect-interval: 3000
middlewares:
<<: *default # 引用默认中间件

    _config.yml设置好之后,继续运行./go-cqhttp

  • 会出现两种情况:
    • 你没设置密码。运行go-cqhttp后会出现二维码,手机端qq扫码即可。
    • 你设置了密码。1. 可能会成功登录;2. 登录不了:建议下载一个windows版的cq,运行gocq之后,会在本地生成device.jsonsession.token,复制进服务器gocq文件夹后,再运行./go-cqhhtp,此时,如果没有意外情况,可以使用./go-cqhttp faststart设置快速启动。

    虽然会出现黄色字段,但是不用管,等最后设置好nonebot后,就可以连通了:

1
[2022-01-09 01:03:23] [WARNING]: 连接到反向WebSocket Universal服务器 universal: ws://127.0.0.1:8080/onebot/v11/ws 时出现错误: dial tcp: lookup your_websocket_universal.server on 127.0.0.53:53: no such host

    按下ctrl+c结束进程,并输入 cd ~返回home文件夹。
    到这,你的cqhttp就配置成功了!

配置atri

传送门:atri
高性能文爱萝卜子,糅杂了各类有趣小功能。

    从Github库下载好ATRI-main.zip压缩包,或者通过git clone来拉取(建议的方法,因为在不修改源码的前提下,可以随时保持更新),

如果显示zip: command not found.,就需要下载zip功能,命令行敲出sudo apt install zip即可安装。

ATRI

    放进你的服务器目录中,然后通过unzip ATRI-main.zip命令解压此压缩包,

我建议把ATRI-main文件夹名称改为atri,以方便后期的调试,

    再通过cd atri进入文件夹,并输入以下命令安装atri所需的依赖:

1
2
python -m pip install --upgrade pip # 升级pip至最新版本
pip install -r requirements.txt # 下载 atri 依赖包

    安装完依赖之后,再修改下文件夹中的config.yml文件,这里我们只做最初的改动:

记得将InlineGoCQHTTPenable改为false。我们暂时采用GO-CQHttpatri分开运行的方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
BotSelfConfig:
host: "127.0.0.1" # 监听ip,要和cq-http中的设置保持一致。
port: 20000 # 监听端口,要和cq-http中的设置保持一致。
debug: false
superusers: ["1234567890"] # 超级用户qq号码。注意:这不是机器人qq号,这是一个和机器人沟通的账号。
nickname: ["ATRI", "Atri", "atri", "亚托莉", "アトリ"] # 你给机器人取的昵称,可以自定义。
command_start: ["", "/"]
command_sep: ["."]
session_expire_timeout: 60
proxy: "" # 请参考文档

InlineGoCQHTTP: # 在atri文件夹内调用cqhttp,这边建议cq-http和atri分开跑比较好呢!
enabled: false
accounts: # 可多个账号,具体请参考文档
- uin: 1234567890
password: ""
protocol: 3

download_domain: "github.com"
download_version: "v1.0.0-rc1"

SauceNAO:
key: ""

Setu:
reverse_proxy: true # 请参考文档
reverse_proxy_domain: "i.pixiv.re"

    修改好之后,就可以通过以下命令来启动atri啦!

1
python main.py

screen 让你的机器人跑起来

安装screen模块:

    Ubuntu可以使用screen -v查看是否安装screen,如果没有安装。,则通过如下命令安装screen

1
2
sudo apt update
sudo apt install -y screen

screen简单命令

创建一个screen

    例如:screen -S [name]

1
screen -S cqhttp

    这样,你就创建好了一个screen,现在按住ctrl a+d来退出,如果你还想查看的话,也可以通过screen -r cqhttp来查看。

查看当前运行中的screen

    例如:screen -ls

1
2
3
4
5
ubuntu@VM-16-11-ubuntu:~$ screen -ls
There are screens on:
2183677.cqhttp (03/04/2022 09:55:58 PM) (Detached)
2182766.atri (03/04/2022 09:52:23 PM) (Detached)
2 Sockets in /run/screen/S-ubuntu.

    注意上述命令中的数字2183677.cqhttp,它非常有用,我们可以通过screen -r 2183677的方式来重新加入,也可以通过screen -r cqhttp来进入screen。

销毁一个screen

    例如:screen -X -S [name] quit。按上文所述,我们查到cqhttp的数字为2183677,当然也直接可以输入screen的名称来杀死这个screen:

1
screen -X -S 2183677 quit

或者

1
screen -X -S cqhttp quit

将atri和cqhttp连通

    大体思路:在cqhttp的文件夹内创建一个screen用来运行cqhttp,然后退出当前screen,cd到atri文件夹,仍按照上述步骤操作,这样,cqhttp才能和atri连通。

1
2
cd cqhttp
screen -S cqhttp

    此时,我们已经开启了cqhttp的screen窗口,这时,我们就可以先通过./go-cqhttp faststartcqhttp运行起来,然后通过ctrl a+d退出当前screen。再然后,进入到atri文件夹内。

1
2
3
cd ~
cd atri
screen -S atri

    同样的,atri窗口已经开启,通过python main.py让atri运行,然后ctrl a+d退出。
    此时,我们再screen -r cqhttp返回cq的screen,发现已经连接上atri辣!
    我们对机器人发一个/ping,机器人便会回复,

atri

    OK! 那么,你有没有成功呢?

问题汇总

风控

丢包率较高

最近遇到的问题

  • sbtx
    cq-http