作为一名公主连结玩家,尤其作为是摸鱼会长,为了更好的组织成员打公会战和交♂流感情,给群里加入一个机器人(妈)将是不二的选择!说实话,当初配置(调教)妈也用了好几天,各种奇怪的bug和环境问题老难受,老折磨了≧ ﹏ ≦。为了新人避坑,就写个简单的教程吧,有空就写下怎么编一个简单的插件。
一. 准备
需要的东西主要有三样如下:服务器,go-cqhttp或者mirai,HoshinoBot
【12.17更新】更新mirai的食用方法。因为go-cqhttp使用中有大量的风险管控,会吞掉许多消息,所以如果真的想搞事建议使用mirai而不是go-cqhttp(当然go-cqhttp也不是绝对安全的)。
演示用版本:
服务器:CentOS 7.8,64位
Java:java 8/11
框架:go-cqhttp-v0.9.31 /mirai
HoshinoBot:最新即可
二. 结构说明
实际上,HoshinoBot是有一键安装脚本 的,但是这个脚本为了兼容环境用到了docker,虽然docker是有很多好处,但是要频繁更改机器人的配置和调试,稍微有点不方便(其实是不怎么会docker),所以就直接选择了screen挂起就好。为了后续开发,我觉得有必要讲下go-cqhttp和HoshinoBot的各自任务和交互方式。

如图,go-cqhttp相当于一个QQ客户端,负责接收群里(或者用户)的消息以及发送消息,在在基层。HoshinoBot为真正的机器人,与go-cqhttp通过反向ws建立连接(也可以ws或者http),go-cqhttp会转发一切收到的合法的消息给HoshinoBot,而HoshinoBot可以检测关键词产生回复。回复还是要先发给go-cqhttp,然后才能发到群里。除了被动发送消息,HoshinoBot本身可以设置定时任务等,主动发出消息。
emmm,还是挺清晰的结构,只要确保环回反向ws的时候两者的端口一致就可以进行通信。
三. 安装本体
1. 安装go-cqhttp
github上的releases库:https://github.com/Mrs4s/go-cqhttp/releases 
用uname指令查看系统架构
如果显示x86_64则为64位系统,对应amd64
根据自己的系统版本选择相应的包下载,最新版本我不是很推荐,因为用go-cqhttp-v0.9.31-fix2的时候,出现了大量“账号被风控”的情况,导致图片发不出去(才,才不是因为发的是涩图),后面测试发现go-cqhttp-v0.9.31就没这个奇怪的bug了。 这里我选择的包为go-cqhttp-v0.9.31-linux-amd64(https://github.com/Mrs4s/go-cqhttp/releases/download/v0.9.31/go-cqhttp-v0.9.31-linux-amd64)。 
打开linux终端,依次输入如下指令
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | #新建一个screen窗口并进入#如果没有该命令则yum install screen安装,可以学下screen的简单用法
 screen -S gocqhttp
 
 #创建文件夹
 sudo mkdir /home/qqbot/gocqhttp
 cd /home/qqbot/gocqhttp
 
 #下载包,也可以本地上传
 #如果慢可以试下,还是本地挂代理下载比较快
 #sudo wget https://hub.fastgit.org/Mrs4s/go-cqhttp/releases/download/v0.9.31/go-cqhttp-v0.9.31-linux-amd64
 sudo wget https://github.com/Mrs4s/go-cqhttp/releases/download/v0.9.31/go-cqhttp-v0.9.31-linux-amd64
 
 #第一次试运行
 sudo chmod 755 ./go-cqhttp-v0.9.31-linux-amd64
 sudo ./go-cqhttp-v0.9.31-linux-amd64
 
 #运行后提示[INFO]: 默认配置文件已生成, 请编辑 config.json 后重启程序.
 #这时候ls查看当前目录下会发现多了许多文件,我们需要配置config.json
 
 | 
config.json文件里需要配置QQ账号和密码,反向ws的路径尤其是端口号。go-cqhttp支持三种协议,可以根据需求开启。
| 12
 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
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 
 | {"uin": 你的QQ账号,
 "password": "你的QQ密码",
 "encrypt_password": false,
 "password_encrypted": "",
 "enable_db": true,
 "access_token": "#建议设置token提高安全性",
 "relogin": {
 "enabled": true,
 "relogin_delay": 3,
 "max_relogin_times": 0
 },
 "_rate_limit": {
 "enabled": false,
 "frequency": 1,
 "bucket_size": 1
 },
 "ignore_invalid_cqcode": false,
 "force_fragmented": false,
 "heartbeat_interval": 0,
 #http协议配置
 "http_config": {
 #不用就关了吧,防止端口占用冲突
 "enabled": false,
 "host": "0.0.0.0",
 "port": 5700,
 "timeout": 0,
 "post_urls": {}
 },
 #正向ws配置
 "ws_config": {
 #不用就关了吧,防止端口占用冲突
 "enabled": false,
 "host": "0.0.0.0",
 "port": 6700
 },
 #反向ws配置
 "ws_reverse_servers": [
 {
 #默认关闭,要打开
 "enabled": true,
 #设置url,8080端口和'/ws/'这个部分路径与HoshinoBot的配置相关联,设置了url下面的就不用管了
 "reverse_url": "ws://127.0.0.1:8080/ws/",
 "reverse_api_url": "ws://you_websocket_api.server",
 "reverse_event_url": "ws://you_websocket_event.server",
 "reverse_reconnect_interval": 3000
 }
 ],
 "post_message_format": "string",
 "use_sso_address": false,
 "debug": false,
 "log_level": "",
 "web_ui": {
 "enabled": true,
 "host": "127.0.0.1",
 "web_ui_port": 9999,
 "web_input": false
 }
 }
 
 | 
配置完成后就可以尝试第二次运行go-cqhttp。
请一定留意以上两条:
- 最好使用新账号
- 登录帐号成功后至少一个星期内请不要在手机或者其他设备登录QQ,否则会引起异地登录导致封号
| 12
 3
 4
 5
 6
 7
 8
 
 | #再次运行sudo ./go-cqhttp-v0.9.31-linux-amd64
 #最后进入go-cqhttp的控制台就是成功了
 #可以尝试给机器人qq发消息,理论上go-cqhttp的控制台会显示出来
 
 #挂起这一个screen
 ctrl + a + d
 #再次进入这个screen可以screen -r gocqhttp
 
 | 

到这里go-cqhttp就安装完成了。比较可能出现的问题是运行go-cqhttp-v0.9.31-linux-amd64 失败,请确保给足权限。还有就是启动失败,结合控制台的信息查看是不是端口占用了,再去解决。
1.1 安装mirai 
此点作为补充,个人是建议使用mirai而不是go-cqhttp,如果需要考虑发送消息的安全性,则可直接跳过本点,直接安装HoshinoBot
mirai的下载和启动方法十分复杂,直接使用方便快捷的启动器MCL(mirai-console-loader)
进入服务器终端
| 12
 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
 
 | #新建screenscreen -S mirai
 
 #新建目录
 sudo mkdir /home/qqbot/mirai
 cd /home/qqbot/mirai
 
 #从Release中下载最新版的zip:https://github.com/iTXTech/mirai-console-loader/releases,这里我选择v1.0.3
 #url为https://github.com/iTXTech/mirai-console-loader/releases/download/v1.0.3/mcl-1.0.3.zip
 sudo wget https://github.com/iTXTech/mirai-console-loader/releases/download/v1.0.3/mcl-1.0.3.zip
 #解压到当前目录
 sudo unzip -o -d ./ ./mcl-1.0.3.zip
 
 #第一次运行mcl
 sudo java -jar mcl.jar
 #此时会自动下载控制台和核心的jar,下载成功会提示'mirai-console started successfully'并进入交互控制台
 
 #输入exit退出控制台
 > exit
 
 #ls查看当前目录确保有plugins,config等文件夹
 
 #然后下载配置NoneBot插件
 #从Release中下载最新版的mirai-jar:https://github.com/yyuueexxiinngg/onebot-kotlin/releases
 #这里我选择onebot-mirai-0.3.3-all.jar
 #url为https://github.com/yyuueexxiinngg/onebot-kotlin/releases/download/0.3.3/onebot-mirai-0.3.3-all.jar
 cd /home/qqbot/mirai/plugins
 sudo wget https://github.com/yyuueexxiinngg/onebot-kotlin/releases/download/0.3.3/onebot-mirai-0.3.3-all.jar
 
 cd ..
 #再次运行mcl
 sudo java -jar mcl.jar
 #最后提示'1 plugin(s) enabled'即成功加载插件
 
 #输入exit退出控制台,一定要先退出才能编辑配置,否则修改配置无效
 > exit
 
 | 
然后我们需要编辑配置文件,进入/home/qqbot/mcl/config/OneBot,修改settings.yml,主要修改ws_reverse部分
| 12
 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
 
 | proxy: ''bots:
 
 12345654321:
 cacheImage: false
 cacheRecord: false
 heartbeat:
 enable: false
 interval: 1500
 http:
 enable: false
 host: 0.0.0.0
 port: 5700
 accessToken: ''
 postUrl: ''
 postMessageFormat: string
 secret: ''
 
 timeout: 0
 ws_reverse:
 
 - enable: true
 postMessageFormat: string
 reverseHost: 127.0.0.1
 
 reversePort: 8080
 accessToken: ''
 
 reversePath: /ws
 reverseApiPath: /api
 reverseEventPath: /event
 useUniversal: true
 useTLS: false
 reconnectInterval: 3000
 ws:
 enable: false
 postMessageFormat: string
 wsHost: 0.0.0.0
 wsPort: 6700
 accessToken: ''
 
 | 
然后修改自动登录的信息,进入/home/qqbot/mcl/config/Console,修改AutoLogin.yml
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | accounts: -
 account: 123456
 password:
 
 kind: PLAIN
 
 value: pwd
 
 
 configuration:
 
 protocol: ANDROID_PAD
 
 | 
然后再次运行 mcl:
| 12
 3
 4
 5
 6
 
 | cd /home/qqbot/mirai#第三次启动mcl
 sudo java -jar mcl.jar
 #最后提示'Login successful'表示登录成功
 
 #最后ctrl + a + d 挂起screen
 
 | 
当然挂起screen前你可以输入exit退出mcl控制台,回到配置AutoLogin.yml的一步,修改configuration的protocol为ANDROID_PHONE,以便接收类似戳一戳等只有在手机端才能接收的消息类型,然后再启动mcl。
至此,mirai安装完成。
2. 安装HoshinoBot
HoshinoBot的安装非常简单,最难受的估计就是python的环境和模块下载了。
怎么安装python3.8和配置环境变量不多说了,虽然很烦,但是教程挺多的。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | #新建另一个screenscreen -S hoshino
 
 #下载
 cd /home/qqbot
 git clone https://github.com/Ice-Cirno/HoshinoBot.git
 cd HoshinoBot
 
 #安装依赖
 #注意用sudo pip安装的话也要用sudo python运行,不然会找不到包
 sudo pip3 install -r requirements.txt
 
 cd hoshino
 #重命名下文件夹
 mv config_example config
 
 | 
我们观察下hoshino文件夹下的文件:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | config #配置文件夹modules #模组存放文件夹
 
 #以下消息操作的函和基本操作的封装
 util
 aiorequests.py
 __init__.py
 log.py
 msghandler.py
 priv.py  R.py
 service.py
 trigger.py
 typing.py
 
 | 
然后我们要配置HoshinoBot,需要修改hsohino目录下的__bot__.py,原来的备注就说明得很清楚了,我们主要是修改端口。
| 12
 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
 41
 42
 43
 44
 45
 46
 47
 
 | """这是一份实例配置文件
 将其修改为你需要的配置,并将文件夹config_example重命名为config
 """
 
 
 
 PORT = 8080
 HOST = '127.0.0.1'
 
 
 DEBUG = False
 
 
 SUPERUSERS = [10000]
 NICKNAME = ''
 
 COMMAND_START = {''}
 COMMAND_SEP = set()
 
 
 
 
 RES_PROTOCOL = 'file'
 
 RES_DIR = r'./res/'
 
 RES_URL = 'http://127.0.0.1:5000/static/'
 
 
 
 
 
 
 MODULES_ON = {
 'botmanage',
 'dice',
 'groupmaster',
 
 
 
 'pcrclanbattle',
 'priconne',
 
 
 
 }
 
 | 
| 12
 3
 4
 5
 6
 
 | cd /home/qqbot/HoshinoBotsudo python3 ./run.py
 #运行成功即可进入HoshinoBot得控制台
 #为了验证可以对机器人发送消息'在?',如果有回复则成功
 
 ctrl + a + d #挂起screen
 
 | 

具体的使用手册请查看https://github.com/Ice-Cirno/HoshinoBot 
如果加了群之后机器人对该群的消息不回应,可以尝试重启go-cqhttp和HoshinoBot。
四. 安装插件
机器人的选择其实很多,可以去https://www.pcrbot.com/看看,但是个人觉得功能目前最强大还是HoshinoBot,因为有大量的插件可以使用,甚至yobot也能成为他的一个挂件。下面讲下怎么安装插件。 
github项目:https://github.com/pcrbot 
很多插件都可以在上面找到,HoshinoBot刚下载下来的时候也有很多插件。
HoshinoBot安装插件的方式大同小异,基本上是把插件拉进/hoshino/modules文件夹,然后在上面说过的__bot__.py的MODULES_ON选项添加模组的名字。部分插件安装方式可能有差别,具体看插件的README.md。
pcr模拟抽卡
HoshinoBot本身就带有pcr的抽卡,但是很抱歉的是没有包含各种静态资源(比如角色头像和卡池json),导致各种bug。为此,开发者编写了新的抽卡插件,不妨按照教程安装一波:https://github.com/pcrbot/gacha 
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | cd /home/qqbot/HoshinoBot/hoshino/modules/priconne#清除原来的目录
 sudo rm gacha/ -rf
 git clone https://github.com/pcrbot/gacha.git
 cd gacha
 #移动文件
 sudo mv _pcr_data.py ../_pcr_data.py
 sudo mv CHARA_NAME.json ../CHARA_NAME.json
 sudo mv CHARA_PROFILE.json ../CHARA_PROFILE.json
 
 | 
使用更新卡池可以更新卡池,但是还抽不了卡,虽然新的角色头像在查询文件缺失的时候会自动下载,但网络真的不稳定…而且它只下载头像…各种静态资源还是需要预先下载。
我们之前在__bot__.py里我们设置了
表示静态资源存储在/home/qqbot/HoshinoBot/res/下,我们需要把静态资源扔到里面。所以静态资源哪里找?加开发者的群1044540742就能找到,为了偷懒就扔个链接:(我真的不想要百度云,但是暂时还没找到好的方式)
| 12
 
 | 链接:https://pan.baidu.com/s/1HQsCuOw3IsdKD-6uHJXRuA 提取码:jpij
 
 | 
下载完解压得到的img文件夹扔到/home/qqbot/HoshinoBot/res/下即可
12.3 更新* 贴一波官方的下载地址
| 12
 
 | https://download.yobot.win/hoshinobot/res.tar.gz
 
 | 
然后重启HoshinoBot,再重启go-cqhttp,安装完成!

原神抽卡/娱乐
极其简单的安装方式,因为静态文件都已经集成在插件了,不用额外下载到res里。
项目地址:https://github.com/pcrbot/Genshin_Impact_bot 
| 12
 3
 4
 5
 
 | cd /home/qqbot/HoshinoBot/hoshino/modules/git clone https://github.com/pcrbot/Genshin_Impact_bot.git
 #如果下载速度是真滴慢,可以在本地下载完了再上传,但是要注意里面用了中文文件名,要注意文件名乱码问题
 #乱码了用convmv改码
 #convmv -f GBK -t UTF-8 --notest -r dict
 
 | 
然后修改__bot__.py文件
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | MODULES_ON = {
 'botmanage',
 'dice',
 'groupmaster',
 
 
 
 'pcrclanbattle',
 'priconne',
 
 
 
 'Genshin_Impact_bot'
 }
 
 | 
理论上按照插件的教程做就好了,插件名字也会提示你怎么写,一般插件名字和插件文件夹名字相同(实际上插件名字是另外定义的)。
最后重启HoshinoBot(如果发现消息发不出去且go-cqhttp提示风控,那还要把go-cqhttp在HoshinoBot重启后重启一次)。

具体的玩法和指令看项目的README.md
先写到这,改天有空了再继续写怎么自定义插件和写插件
无聊的可以去摸一波官方的开发者文档:https://github.com/pcrbot/hoshinobot-development-documentation 
12.3 更新:
HoshinoBot的开发团队更新了安装教程 ,写得比我的要详细和全面得多,特别是有把yobot当作HoshinoBot插件使用的部分。
那天开发者的qq群解散了,想找原因才就去上官网,结果发现了这份教程。,刚好是写完这篇东西不久。解散和发教程的原因,emmm,一言难尽,总之这种行为也太打击开发者的热情了。