【QQ机器人】给纯新手的通俗易懂使用教程,长期接受评论私信答疑[基于mirai](中)
给大家继续介绍Mirai机器人的使用教程。在编写本文的过程中,我完全超出了篇幅字数的预料,为了让读者有更好的观感,我决定把这篇文档设置为中篇。本篇的内容继续于up主投稿的上篇,主要介绍安装好Mirai后的使用方法。封面与文章无关,单纯随手找的(。本篇的内容比较长,而且对于使用Mirai都必要的而非选择性的,希望读者耐心看完。如果你还没有看过上篇,或者mirai还没有安装部署好,那可以先观看我写的(上)篇,链接为:


首先,Mirai官方的使用教程文档的页面只有一个,链接为:https://github.com/mamoe/mirai/blob/dev/docs/ConsoleTerminal.md,我个人认为其中提到的内容太少了,而且有些说法不好理解,我会用尽量更加通俗易懂的语言讲其中重要的内容。
请注意,up主是一个熟悉的使用者而不是插件制作者,up主只是通过一些插件作为案例,介绍Mirai插件的安装和配置,案例插件都已经过其作者本人同意,文章介绍到的插件版本为文章编辑时的版本,不能保证为插件的完整使用体验,插件更新后造成的内容上差异请以插件最新版作者说明为准!
还要注意的是,大部分的插件都发布于GitHub平台,这是大多数程序员包括插件作者的选择,本文章为了保障插件的版本为最新版,以及为了保障插件作者的成果,本文章将不会提供插件的额外下载渠道,因此如果你不能正常访问GitHub,那使用起来会造成很大的不便因此请读者尽量克服网络造成的困难。如果你对于这个问题完全没有解决办法,可以私聊我,我会提供非免费的网络工具,但是仅作为教程需要,不会收取任何利益,不会有任何利益推广,同时也不会承担任何使用网络工具造成的其他后果。

在上篇中,我们成功安装部署了mcl,即现在已经可以使用Mirai框架,但是为了使这个框架真正有用,我们要根据自己的需要,来给mcl安装并配置插件,使其拥有我们想要的功能。因此本文章主要会讨论一下问题:
一、mcl的简单使用介绍
二、插件的下载和安装
三、插件的配置与权限分配

一、MCL的简单用户使用介绍
首先,我们要看看mcl目录下的各个文件是干啥用的,以我的机器人为例,其文件夹目录如下:

官方使用文档对于文件夹的解释如下:

其中比较重要的文件夹是 config、data、plugins,对于一般的用户来说,大部分的使用只需要在这三个文件夹之间操作。大体上来说,plugins是用来放置插件的文件夹,config是用来修改插件设置的文件夹,data是用来存放预设的配置、数据和资源的文件夹。具体的使用方法我会在第二部分用实际插件作为举例。
在我们刚刚安装mcl别的啥也没装的情况下,这三个文件夹大概这样:
plugins里面有两个文件:

data文件夹是空的:

config文件夹里面有一个名为Console的文件夹:

其中Console为Mirai的基础设置文件夹,包括机器人的自动登录信息啥的,一般情况下如果你没有遇到登录的问题,不需要打开文件手动修改。
在我们安装了若干个插件后,plugins文件夹大概是这样的:

在使用起来后config文件夹的内容大概如下:

data文件夹大概是这样:

根据plugins文件夹就可以直接看出来,目前mcl安装了8个插件,其中一些插件在另外两个文件夹分别生成了一个一长串名字对应的文件夹,但是并不是所有插件都需要数据文件和配置文件。本系列教程将会通过几个插件的安装和配置作为案例,给大家介绍不同插件的不同安装和配置方法。本系列教程中出现的插件都已经过作者本人同意,教程中提到的插件都是根据自己需要安装的,本文只是借这些插件的特殊点而向读者示范安装过程,对于读者来说需要根据需要来安装。但对于本篇来说,我们只会介绍最基本的两个插件,这两个插件是官方钦定的必装插件。

二、插件的详细安装过程和配置案例
本部分会根据通过介绍具体的插件安装和配置过程,来给大家讲一下mirai插件的使用。首先我们要知道,插件的发布平台为Mirai Forum:https://mirai.mamoe.net/category/11/%E6%8F%92%E4%BB%B6%E5%8F%91%E5%B8%83,一般来说,插件的作者会将做好的插件项目发布在这个平台上,使用者会在这个平台上寻找需要的插件,或者讨论和交流使用中的问题,其中大部分插件都适用于现在的mcl,但是有部分是不适用的,以后我会再说这个问题。

接下来我要介绍刚刚提到的两个官方基础插件,chat-command和mirai-api-http。单纯这两个插件对于使用者来说,几乎没有作用,但是这两个作为官方插件,是大部分功能性插件的前置插件,也几乎是必须安装的,官方文档解释如下:

先介绍一下这俩插件的作用:
1.chat-command:允许在聊天环境通过以 "/" 起始的消息执行指令。意味着有些指令你不需要在mcl的命令框中执行,在群里或者私聊机器人也可以。
2.mirai-api-http:提供 HTTP 支持,允许使用其他编程语言的插件。原本的mcl主要语言是Kotlin,能让开发者用其他语言编写的插件也能运行,总之能让mcl装更多插件。
mcl的插件有两种办法安装,一种是下载jar文件,然后放到plugins里面,另一种是指令安装,在此我都详细说一下,先说方法,后面是演示:

jar安装:主要的安装方法,几乎所有的插件都能这样安装,大部分插件作者都选择这种下载,需要打开Github,给不熟悉的读者说一下Github的下载方法:在一个项目中点旁边的Releases:

点击需要下载的文件,等一下就可以下载了。往下翻能翻到之前的版本文件,我们没有其他需求只需要下载最新的就行。除不需要下载两个Source code(.zip和.tar gz)文件外,选择下载我们需要的版本文件,有些还需要额外下载一些文件后面会举例。

然后直接将文件放到到plugins文件夹,再启动mcl,安装就结束了,比较简单快捷。
其中要注意的点:
1.在遇到有两个jar文件的这种,我们选择下载mirai2版本的,另一个jar就不需要了,但是比如下图里还有一个data.zip,一般来说作者放这个文件肯定是需要用到的,所以需要下载,用法看作者说明。再说一次不需要下载两个Source code。

2.下载如果没有加速器可能会很慢,可能点了之后很久才有反应,但是文件本身不大,多等就行。
3.通过jar安装插件时,需要先关上mcl(记得用stop或者exit指令关),放到plugins文件夹之后,再启动mcl,此时才会加载插件并生成相应的配置文件。

另一个是指令安装,少部分的插件支持这个方法,所以不必须掌握,两个官方插件可以这样安装,下面是演示:
在你的mcl文件夹目录下摁住shift右键空白处会出现一个新的选项:

点击 在此处打开Powershell窗口会出现蓝框,左上角会有当前机器人的目录:

我们之所以用“蓝框”而不是“黑框”,是因为蓝框可以通过这种方法快速打开并且切换到mcl的目录,省去了黑框使用打开文件夹指令的时间以及教程的内容。对于我们来说,一般情况下蓝框与黑框用起来没有其它区别。使用蓝框时同黑框一样,注意一下在上篇中提到的注意事项,在此不多赘述了。
之后输入安装指令,一般来说作者会给你一条写好的指令,只需要右键复制到蓝框里回车执行即可,例如:

或者:
在回车后执行时会显示安装进度,开始下载并安装,完成后关闭蓝框即可。
下面是分别用两种方法的安装这两个必装插件的详细示范:

■chat-command:
项目地址为https://github.com/project-mirai/chat-command
功能为允许在聊天环境通过以 "/" 起始的消息执行指令。作为众多插件的前置插件,这个插件是功能插件中的基础,很多插件的指令是并不能在命令行里执行的,而是必须在群里或者私聊机器人的时候执行的,这类型的插件就必须要chat-command作为前置插件。

打开上面标题里的项目地址,可以看到介绍页面中提到了/perm配置指令的权限,很多使用者只是把这个插件当成一个前置插件,
没有细看就去下载安装了,结果发现插件根本不能用,这是因为这个插件需要先规定哪些人可以使用,哪些人不能使用,即需要分配使用权限,所以我们在安装过后就开始讲mirai的权限系统。
打开后点击release打开下载页面

可以看到,这插件最后更新已经是25 Jan 2021了,然后点我们要下的chat-command-0.5.1.jar

下载好后,先关上mcl,再放到plugins文件夹里

然后再启动mcl:

从划横线的部分我们就能看到,插件安装成功,加载的插件数变为2。

打开config文件夹也能看到生成了配置文件夹,不过里面的文件基本不需要配置。所以至此chat-command的安装就结束了,但是前文中提到的权限还没有设置。那接下来就开始讲mirai权限系统,官方的教程文档为:https://github.com/mamoe/mirai/blob/dev/mirai-console/docs/Permissions.md

权限系统本应是为了开发者设置的,其说明文档也被mirai分类到了开发者的部分,但是很多插件都将权限直接交给用户配置和使用,这显然增加了用户使用难度,但是同时也增加了插件使用的自由度。但是也并不是所有的插件都需要通过权限配置,只是如果说某个插件需要这样配置,那么这个指令就相当于功能的开关。通过分配权限,我们可以将功能根据我们的需要开放给特定的个人和场合。

因为其设计上是面向插件开发者,所以使用起来比较复杂,我们在运行中的mcl的命令行里输入/perm就能看到所有权限相关的命令

其中,/perm 是对于 /permission的简写,注意是perm而不是prem,所有以/permission开头的质量都可以用/perm简写。< >中括起来的为必要参数,[ ]中括起来的为选填参数,我们经常要用到的指令功能大致为:
/perm permit <被许可人ID> <权限ID>或者/perm add 或/perm grant:授权对象以某权限
/perm cancel <被许可人ID> <权限ID>或者/perm deny 或/perm remove:取消授权对象的某权限
/perm listPermissions或者/perm lp:列举出所有的权限
/perm permitPermissions <被许可人ID>或者/perm pp:显示对象的已授权权限
其中,对象的表示,也就是连续的两个< >中第一个<被许可人ID>要填的参数,其表示规则为:

第二个 <权限ID>要填的参数是权限,而权限的列举,输入/perm lp即可查看当前mcl所涉及到的权限及其功能:

随你安装的插件越来越多,这个表也会越来越长。<权限>部分中,一条权限的全程是由aa:bb.cc组成,表示的是aa插件的bb权限组中的cc权限。如果用星号*代替cc,则aa:bb.*表示的是aa插件bb权限组的所有的权限,如果你用*代替整个aa:bb.cc,只写一个星号*,则表示是所有的插件的所有权限。
上面两个图的前一个表列举了所有可用的被许可人对象,后一个表中列举了当前加载的插件所能授予的所有权限,两者相结合就能完全应对于用户对于各种插件的各种权限分配需求。而如果你看到这里对于理解这个表里的内容十分困惑的话,可以先理解并使用以下几个命令(以下文中所有的中括号[ ]都不需要输入,只是为了方便表示):
/perm u[qq号] * (是你本人的qq号而不是机器人的)这条指令会授予你这个qq号所有的权限,也就是说一旦你授予了这个权限,这个qq号将可以在qq上执行任何mcl控制的指令,类似于设置管理员。这样设置的好处是以后如果有新插件添加了新的需要配置的权限时,这个qq号会直接获得其权限。
/perm g[qq群号] * 这条会给这个群所有的权限,其中重点说了不表示群成员,也就是意味着群有了权限,但是群里的人没有权限,这可能有点难以理解,这样区分的原因是一些插件的功能是针对群的,而且设有开关,类似于我要不要让这个群开启xx插件的xx功能,而这个对象为群的插件,就是这个功能的开关。
/perm m[qq群号].* * 这条指令相比于上条,是给了这个群所有的群成员,也就是这个群里的成员可以在这个群里使用所有的指令,但是私聊机器人不行。
以上几条指令都是赋予全部的权限,如果需要单独对某个群的某个人赋予某样权限,那还是要按照表中的规则设置。
要注意的地方:1.不难看出,有些插件的权限是针对单独跟机器人聊天有效的,有的是针对群生效的,在使用上面几条指令的时候是无差别授予权限的。2.一般来说/perm u[qq号] *.*给自己全部权限的使用不需要额外注意,方便就完事了,但是要谨慎使用/perm g[qq群号] *.*,之所以这样说,是因为有些插件会通过权限系统设置一些额外的功能,对于个人不是很明显,有时候这些功能对于绝大部分群来说并不一定合适,一般可以对一个专门管理机器人的群设置这个指令,比如你建一个只有你和机器人的群(我建议你确实这样做,方便测试),对于这个群使用这个指令完全没问题,后面会有具体的插件能体现出这一点。

好,讲了这么多,还是要回归chat-command的配置上来,那么我用配置这个插件的权限作为示范来讲一下权限的发放。
首先,mcl有一条指令的效果是显示当前运行状态,这条指令为/status,在命令行里执行是这样的:

而如果说我们要想在qq里给机器人发消息也能随时看到这条消息,那我们就要通过chat-command插件。但是这个插件又不能允许所有人都随随便便使用,而是规定只有被允许的人才能使用,继而需要我们手动分配权限。
使用/perm lp查询所有权限可以看到下图红色部分,chat-command的权限只有一条,所以我需要直接分配整个插件的权限*,而权限的全称是net.mamoe.mirai.console.chat-command:*,如果说我要给我自己的qq号这个权限,那我就要输入/perm add u[qq号] net.mamoe.mirai.console.chat-command:*

输入完成功后会显示一行OK。当然如果觉得每次都输一长串太麻烦了,我们当然也可以直接给我们自己所有插件,成为拥有所有插件的所有权限的管理员:

一个短短的 “ * ” 即涵盖了所有。如果你已经给了自己所有的权限,然后再删除自己的某条权限就会报错,但是一般来说我们不会这样操作。

现在我们有了chat-command的权限之后,我们私聊机器人看看效果:

可以看到,我们在qq聊天中成功调用了命令行中的指令,在命令行中也有所反馈

当然,不只是这条指令,我们现在可以在qq聊天窗口中执行所有支持的指令,这也包括mcl的控制指令。比如输入/help

显示的内容和在命令行里输入/help是相同的。而/help列举出来的命令都是可以在qq窗口里执行的,比如我输入了/stop

你会发现mcl真的关上了(别忘了一会儿再打开)
当然,既然我们执行权限只给了一个对象:u[qq号],那么效果就是只有我们自己拥有了使用这条指令的权限,你可以根据所需再给其他人或者群分配权限,但是一定要谨慎分配。
好了,至此我们完成了chat-command的安装和配置,迈过了卡住众多mcl初次使用者这一权限分配的坎。现在我们已经可以从qq聊天里执行机器人的指令了。

■mirai-api-http:
项目地址为https://github.com/project-mirai/mirai-api-http

功能为提供 HTTP 支持,允许使用其他编程语言的插件。这个插件的存在只要是为了让用其他语言的插件开发者,也能通过他们熟悉的语言编写程序。对于我们使用者来说,我们只需要下载安装和配置一下就好。其中也要我们配置文件setting.yml,我们后面会演示到。
如之前所说,我会演示一遍用指令安装插件,这里如果说读者完全不想这样安装可以打开项目地址直接下载jar即可。首先打开安装mcl的文件夹,摁住shift右键文件夹空白处,不要右键到别的文件。

这样我们就有了一个位置已经在mcl里的命令行

如果你是win11,右键是这样的

我选择了深色主题,所以是黑色的,命令行也是黑色的,总之我们打开了标题是PowerShell的窗口。
输入以下代码,注意要用右键复制到命令行,然后回车执行
可以看到mcl运行并提示了很短几行就结束了

这个时候我们可以直接关掉这个蓝框,继续通过打开mcl.cmd那个黑框启动。之后在启动时我们就能看到下载的过程,下载结束后mcl会正常运行

我之所以不建议用这个方法,是因为网络环境可能会导致无法正常下载,如下图,这可能是由于网络环境造成的,也可能是指令不对,但是相较于解决在GitHub下载的问题,这个问题可能更加不好找原因,所以尽量使用下载jar安装插件的方法。

另外值得注意的是,如果一个插件支持这个方法安装,那么在安装过后,即使你把下载下来的jar删掉,再重启mcl,启动器会自动检测,如果不存在jar或者版本不一致,mcl会自动下载,所以通过这种方式安装的插件,在卸载时需要额外的操作,在以后我会介绍卸载的过程。
好,看到启动之后现在我们有三个插件了,我们来进行一下配置,这时候先要关掉mcl。

注意,mirai所有的插件配置都是要在mcl已经关闭的情况下配置的,配置完毕再打开才生效。不要边运行mcl边改配置文件,那样的修改会完全无效!一定要先关闭mcl,再修改配置文件!
下面来介绍插件的配置和使用,官方文档里已经比较清楚的写了这个插件的使用方法

打开config文件夹里的net.mamoe.mirai-api-http文件夹,里面有一个setting.yml文件,如果你没有这个文件,你需要手动建这个文件夹并且建一个 新建文档.txt ,然后把他改成setting.yml。如果你没有文本编辑的软件,你可以下载任何一个,这里我使用的是notepad3,下载地址为https://www.rizonesoft.com/cutebean/10403/。这个软件不是必要的,但是会减少你在修改这类配置文件时,出现格式错误的概率,也能帮你更好地修改配置文档。

使用文本编辑软件打开后可以更加条理清晰地阅读代码

在这里我们要做两件事:
1.把官方文档模板里的代码复制到配置文件里,即以下文字全部替换setting.yml里面原有的内容
2.记录下verifyKey的内容,文档中给出的是1234567890,这个地方相当于你在此设置了一个密码,这串字符相当于以后通讯连接的秘钥,你可以改成对你来说更好记住的,长度和内容都没有限制,也不像密码一样必须保密,只要记住就好了。当然如果你懒得改,就用默认的话,那就要记住你的verifyKey是1234567890。

3.手动保存文档,千万不要忘记保存。如果你编辑一半的时候才想起来mcl还在运行着没有关,那你要先关闭mcl,然后在一下弹窗时之后选择否。再之后如果你保存了,那你刚刚做的修改都会生效。

但是如果你先保存并退出了编辑,再关闭mcl,你会发现你改的配置就白改了。所以还是再提醒,修改配置文档之前要先关闭mcl。
经过这一系列设置,我们现在开启了http adapter和websocket adapter,端口为8080。我们不大需要明白这个啥adapter跟这个端口,还有VerifyKey是干啥,只要做到能在以后如果有别的插件配置的时候,配置的项目需要我们填这几个信息,我们能想起来我们之前配置过这里就行。比如下图就是某个插件的配置文件用到了这些信息:

这时候就要填对mirai-api-http里配置好的相应信息,我们才能正常用这个插件。

好了现在我们完成了两大基础插件的配置,为实装其他插件打下了坚实的基础。同时,写到这里时,本文的篇幅已经超过8千字了,我完全没有想到单纯讲这两个插件花了这么多的篇幅。为了让读者有更好的观感,我决定把这篇文档设置为(中)篇。之前提到的更多功能性插件,我会在(下)篇中再慢慢为大家讲解。同时,再次向所有参与开发了Mirai的作者以及平台上所有插件作者表示感谢!!!
总之,非常感谢你坚持看到这里,这篇教程编写时的时间跨度比较长,中间可能有些地方没有很好的连贯,对此我表示非常抱歉!如果发现了文章中有错误的地方请及时告诉我,感谢大家的意见和建议!