本教程实为mirai的mirai-console插件教程
用到的概念有
mcl
- 指mirai-console-loader,mirai-console官方启动器
mirai
- mirai 是一个在全平台下运行,提供 QQ Android 协议支持的高效率机器人库,根据AGPLv3
开源java
如下为一些官方资料
mirai官方github库
mirai-console官方github库
mirai-console-loader(mcl)官方启动器官方github库
这三者的关系能够参考这里
官方实例git
另,如下是一些资源:
笔者整理的mirai-console插件kotlin版实例
笔者备份的mirai启动器github
下载mcl所须要的是>=1.8版本的openjdk,openjdk15下载地址,下载教程参考搜索引擎web
最好用openjdk而不是甲骨文(Oracle)的jdk,缘由json
推荐IDEA吧,其余的也能够,主要是IDEA挺好用的
能够选择安装的官方插件:
Mirai Console IntelliJ 提供错误检查等功能
Kotlin Jvm Blocking Bridge 帮助 Java 用户调用 Kotlin suspend 函数
详细参考官方文档缓存
官方地址
教程同见官方说明框架
可能的报错:jvm
java.lang.NoSuchMethodError: net.mamoe.mirai.utils.MiraiLogger$Companion.setDefaultLoggerCreator(Lkotlin/jvm/functions/Function1;)V
环境异常
使用插件建立的是旧版的框架,mcl和mirai现已不支持旧版框架maven
从官方实例或者笔者整理的mirai-console插件kotlin版实例中下载最新版的框架到本地,而后用IDE打开文件夹,而后gradle依赖在下载里面都写清楚了ide
src/main/resources/plugin.yml
里改插件信息和入口点settings.gradle.kts
里改生成的插件.jar名称RunMiraikt
这个配置能够在ide里运行,不用复制到mcl或其余启动器buildPlugin
这个任务能够生成.jar插件src/main/kotlin/PluginMain
主类内也能够修改插件信息插件实例代码
mirai-example-kotlin
│ build.gradle.kts gradle依赖列表 │ settings.gradle.kts gradle设置 │ ├─.gradle gradle缓存目录 ├─.idea idea项目配置缓存位置 ├─.run │ RunMiraiKt.run.xml IDE中运行任务配置,即RunMiraiKt源文件 │ ├─gradle grdle文件 │ ├─run RunMiraiKt默认运行目录 │ └─src ├─main │ ├─kotlin │ │ PluginMain.kt 插件主类 │ │ │ └─resources │ │ plugin.yml 插件信息配置 │ └─test └─kotlin RunMirai.kt RunMiraiKt任务配置
//插件信息 import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription //主类继承 import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin //机器人被拉进群的事件 import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent //收到好友信息事件 import net.mamoe.mirai.event.events.FriendMessageEvent //收到群消息事件 import net.mamoe.mirai.event.events.GroupMessageEvent //新好友申请事件 import net.mamoe.mirai.event.events.NewFriendRequestEvent //日志组件(logger)发控制台信息函数 import net.mamoe.mirai.utils.info //消息(messageChain)中的图片类型 import net.mamoe.mirai.message.data.Image //消息(messageChain)中的纯文本类型 import net.mamoe.mirai.message.data.PlainText //监听器 import net.mamoe.mirai.event.Listener //监听范围 import net.mamoe.mirai.event.globalEventChannel //协程范围? import kotlin.coroutines.EmptyCoroutineContext
监听和事件参考官方文档
object PluginMain : KotlinPlugin( JvmPluginDescription( id = "org.example.mirai-example", version = "0.1.0" ) ) { }
其中,kotlinPlugin
指继承plugin父类,JvmPluginDescription
指声明插件消息和版本
override fun onEnable() { //或logger.info("xxx") logger.info { "Plugin loaded" } }
用kotlin关键字override
实现插件启用函数,而后用logger.info()
进行日志输出,其中logger
是kotlinPlugin
类内成员,除了.info()
还有.warning()
输出警告和.error()
输出报错
用subscribeAlways<>{}
这个函数在onEnable
函数中开启监听
globalEventChannel().subscribeAlways( GroupMessageEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //群消息 if (message.contentToString().startsWith("复读")) { group.sendMessage(message.contentToString().replace("复读", "")) } if (message.contentToString() == "hi") { group.sendMessage("hi") } message.forEach { //循环每一个元素在消息里 if (it is Image) { //若是消息这一部分是图片 } if (it is PlainText) { //若是消息这一部分是纯文本 } } } globalEventChannel().subscribeAlways( FriendMessageEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //好友信息 } globalEventChannel().subscribeAlways( NewFriendRequestEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //自动赞成好友申请 accept() } globalEventChannel().subscribeAlways( BotInvitedJoinGroupRequestEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //自动赞成加群申请 accept() }
这些代码是笔者整理的mirai-console插件kotlin版实例中的内容
package org.example.mirai.plugin import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin import net.mamoe.mirai.event.Listener import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent import net.mamoe.mirai.event.events.FriendMessageEvent import net.mamoe.mirai.event.events.GroupMessageEvent import net.mamoe.mirai.event.events.NewFriendRequestEvent import net.mamoe.mirai.event.globalEventChannel import net.mamoe.mirai.utils.info import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.PlainText import kotlin.coroutines.EmptyCoroutineContext /* 在src/main/resources/plugin.yml里改插件信息和入口点 在settings.gradle.kts里改生成的插件.jar名称 用runmiraikt这个配置能够在ide里运行,不用复制到mcl或其余启动器 */ object PluginMain : KotlinPlugin( JvmPluginDescription( id = "org.example.mirai-example", version = "0.1.0" ) ) { override fun onEnable() { logger.info { "Plugin loaded" } //配置文件目录 "${dataFolder.absolutePath}/" globalEventChannel().subscribeAlways( GroupMessageEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //群消息 if (message.contentToString().startsWith("复读")) { group.sendMessage(message.contentToString().replace("复读", "")) } if (message.contentToString() == "hi") { group.sendMessage("hi") } message.forEach { //循环每一个元素在消息里 if (it is Image) { //若是消息这一部分是图片 } if (it is PlainText) { //若是消息这一部分是纯文本 } } } globalEventChannel().subscribeAlways( FriendMessageEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //好友信息 } globalEventChannel().subscribeAlways( NewFriendRequestEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //自动赞成好友申请 accept() } globalEventChannel().subscribeAlways( BotInvitedJoinGroupRequestEvent::class, EmptyCoroutineContext, Listener.ConcurrencyKind.CONCURRENT ) { //自动赞成加群申请 accept() } } }
plugins { val kotlinVersion = "1.4.21" kotlin("jvm") version kotlinVersion kotlin("plugin.serialization") version kotlinVersion id("net.mamoe.mirai-console") version "2.0-M2" } group = "org.example" version = "0.1.0" repositories { //国内镜像源 maven { url =uri("https://mirrors.huaweicloud.com/repository/maven") } maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/jcenter")} maven { url =uri("https://dl.bintray.com/kotlin/kotlin-eap")} mavenLocal() mavenCentral() jcenter() maven("https://dl.bintray.com/kotlin/kotlin-eap") } dependencies{ implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.21") }
其中2.0-M2
是目前最新开发版本,请自行经过官方文档选择版本
把/src/test/kotlin/RunMirai.kt
中的qq号和密码改为你的
若是在根目录下没有run文件夹,则可能报错,新建一个就行了
若是任务报错先配置任务
而后配置登陆配置
用IDE中gradle的buldplugin
任务能够在buid/mirai/
下生成一个.jar插件文件
把这个.jar文件放到mcl的plugin文件夹下,而后用cmd或者直接打开mcl.cmd运行
有什么评论区问,之后再补充
相关qq群 1044565129