Mirai qq机器人框架kotlin/java教程

  • 前言
    • 资料列表
  • 可能遇到的问题
  • 1.准备
    • i. 配置java环境
    • ii. 配置IDE
    • iii. 下载mirai-console-loader(mcl)作为启动器
      • 其他启动器
  • 2.创建mirai-console插件项目
    • i. 下载
    • ii. 个性化项目
  • 3. 文件夹结构解析
  • 4.kotlin插件代码解析
    • i.所有在以下代码中要引入的库
    • ii.构建主类
    • iii.覆盖插件启用函数
    • iv.监听事件
    • v. 全部代码
    • vi. gradle部分代码
  • 5. Java插件代码解析
    • i. 在下面代码中要引入的库
    • ii. 构建主类
    • iii. 覆盖插件启用函数
    • iv. 监听事件
    • v. 全部代码
    • vi. gradle 部分代码
  • 6. 在IDE内运行
    • i. 更改MiraiRunKt配置
    • ii.运行MiraiRunKt任务
  • 7. 生成插件并运行
    • i. 生成插件
    • ii.在mcl中运行

前言

构建mirai的mirai-console插件教程
用到的概念有
mcl - 指mirai-console-loader,mirai-console官方启动器
mirai - mirai 是一个在全平台下运行,提供 QQ Android 协议支持的高效率机器人库,根据AGPLv3开源

资料列表

以下为一些官方资料
mirai官方github库
mirai-console官方github库
mirai-console-loader(mcl)官方启动器官方github库
这三者的关系可以参考这里
官方实例
mirai官方论坛
官方demo
mirai在线api文档

另,以下是一些资源:
笔者整理的mirai-console插件实例包含kt和java)

可能遇到的问题

  • MiraiOK已经没用了,用mcl(网址在上面)
  • 最好用openjdk不过甲骨文的jdk好像也可以(建议用openjdk, 解释在下面)
  • 根据issue#959目前邀请机器人进200+人的群都不会触发事件
  • 插件id必须为类包格式(xxx.xxx.xxx)
  • 有的时候收不到机器人的信息是因为被tx风控了换号或多发几次以及多挂(可以去论坛看看)
  • 建议看一遍官方文档虽然有点乱
  • 如果遇到问题,可以去mirai论坛上问
  • 如果要在mcl内改登录协议,在login命令后加参数或在config/console/autologin.yml里面设置自动登录命令和登录的协议
  • mcl登录报错环境异常,参考论坛解决方案
  • 改了入口点包路径需要到resources\META-INF\services\net.mamoe.mirai.console.plugin.jvm.JvmPlugin改成对应的类包路径

1.准备

i. 配置java环境

下载mcl所需要的是>=11版本的openjdk,openjdk下载地址,下载教程参考搜索引擎

最好用openjdk而不是甲骨文(Oracle)的jdk,原因

ii. 配置IDE

推荐IDEA吧,其他的也可以,主要是IDEA挺好用的
可以选择安装的官方插件:
Mirai Console IntelliJ 提供错误检查等功能
Kotlin Jvm Blocking Bridge 帮助 Java 用户调用 Kotlin suspend 函数
详细参考官方文档

iii. 下载mirai-console-loader(mcl)作为启动器

官方地址
教程同见官方说明

其他启动器

目前也出了其他启动器,查看这里

2.创建mirai-console插件项目

i. 下载

  1. 从官方实例或笔者整理的mirai-console插件实例中下载最新版的框架到本地,然后用IDE打开文件夹
  2. 使用插件生成,详细查看官网

ii. 个性化项目

  • settings.gradle.kts里改生成的插件.jar名称也就是项目名称, 或者在build.gradle.kts里面获取shadowjar任务改如:
tasks {afterEvaluate {named<net.mamoe.mirai.console.gradle.BuildMiraiPluginTask>("buildPlugin") {archiveBaseName.set("name")archiveClassifier.set("")archiveVersion.set(version)}}
}
  • RunMiraikt这个文件(在test文件夹下)可以在ide里运行,不用复制到mcl或其他启动器
  • buildPlugin这个gradle任务可以生成.jar插件
  • src/main/kotlin/PluginMain主类内可以修改插件信息(mcl用)
  • 最好修改PluginMain.ktJavaPluginMain.java的包名避免插件载入冲突,然后在resources\META-INF\services\net.mamoe.mirai.console.plugin.jvm.JvmPlugin中更改类包名到你改后的名,路径见下面

3. 文件夹结构解析

插件实例代码文件结构

│  build.gradle.kts gradle依赖列表
│  settings.gradle.kts gradle设置
│
├─.run
│      RunMiraiKt.run.xml IDE中运行任务配置,即RunMiraiKt源文件
│
├─run RunMiraiKt默认运行目录
│
└─src├─main│  ├─kotlin│  │      PluginMain.kt  kotlin插件主类│  ├─Java│  │      JavaPluginMain.java java插件主类│  │ │  ├─resources\META-INF\services│  │     net.mamoe.mirai.console.plugin.jvm.JvmPlugin Mirai加载的主类└─test└─kotlinRunMirai.kt RunMiraiKt任务配置

4.kotlin插件代码解析

代码以github上的代码为准,可能会有更新

i.所有在以下代码中要引入的库

//插件信息
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

监听和事件参考官方文档

ii.构建主类

object PluginMain : KotlinPlugin(JvmPluginDescription(id = "org.example.mirai-example",version = "0.1.0")
) {}

其中,kotlinPlugin指继承plugin父类,JvmPluginDescription指声明插件消息和版本

iii.覆盖插件启用函数

override fun onEnable() {//或logger.info("xxx")logger.info { "Plugin loaded" }
}

用kotlin关键字override实现插件启用函数,然后用logger.info()进行日志输出,其中loggerkotlinPlugin类内成员,除了.info()还有.warning()输出警告和.error()输出报错

iv.监听事件

subscribeAlways<>{}这个函数在onEnable函数中开启监听

     globalEventChannel().subscribeAlways<GroupMessageEvent>{//群消息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>{//好友信息}globalEventChannel().subscribeAlways<NewFriendRequestEvent>{//自动同意好友申请accept()}globalEventChannel().subscribeAlways<BotInvitedJoinGroupRequestEvent>{//自动同意加群申请accept()}

v. 全部代码

这些代码是笔者整理的mirai-console插件kotlin版实例中的内容

package org.example.mirai.pluginimport 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.message.code.MiraiCode
import net.mamoe.mirai.utils.info
import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.Image.Key.queryUrl
import net.mamoe.mirai.message.data.PlainText/*
使用kotlin版请把
src/main/resources/META-INF.services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin
文件内容改成"org.example.mirai.plugin.PluginMain"也就是当前主类
使用kt可以把java文件夹删除不会对项目有影响在settings.gradle.kts里改生成的插件.jar名称
build.gradle.kts里改依赖库和插件版本
在主类下的JvmPluginDescription改插件名称,id和版本
用runmiraikt这个配置可以在ide里运行,不用复制到mcl或其他启动器*/object PluginMain : KotlinPlugin(JvmPluginDescription(id = "org.example.mirai-example",name = "插件示例",version = "0.1.0")
) {override fun onEnable() {logger.info { "Plugin loaded" }//配置文件目录 "${dataFolder.absolutePath}/"globalEventChannel().subscribeAlways<GroupMessageEvent>{//群消息group.sendMessage("\uD83D\uDE03")}globalEventChannel().subscribeAlways<FriendMessageEvent>{//好友信息sender.sendMessage("hi")}globalEventChannel().subscribeAlways<NewFriendRequestEvent>{//自动同意好友申请accept()}globalEventChannel().subscribeAlways<BotInvitedJoinGroupRequestEvent>{//自动同意加群申请accept()}}
}

vi. gradle部分代码

plugins {val kotlinVersion = "1.4.30"kotlin("jvm") version kotlinVersionkotlin("plugin.serialization") version kotlinVersionid("net.mamoe.mirai-console") version "2.3.2"
}group = "org.example"
version = "0.1.0"repositories {jcenter()//国内镜像源//华为云maven { url =uri("https://mirrors.huaweicloud.com/repository/maven") }//阿里云maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/jcenter")}//mirai-console的仓库maven {url = uri("https://dl.bintray.com/him188moe/mirai")}//滑动模块的仓库// maven { url = uri("https://dl.bintray.com/karlatemp/misc") }mavenLocal()mavenCentral()
}
dependencies{//在IDE内运行的mcl添加滑块模块,请参考https://github.com/project-mirai/mirai-login-solver-selenium把版本更新为最新//runtimeOnly("net.mamoe:mirai-login-solver-selenium:1.0-dev-15")
}

其中2.3.2是目前最新开发版本,请自行通过官方文档选择版本并更改

5. Java插件代码解析

i. 在下面代码中要引入的库

import net.mamoe.mirai.console.plugin.jvm.JavaPlugin;
//继承对象
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescriptionBuilder;
//构造插件信息
import net.mamoe.mirai.event.GlobalEventChannel;
//全局监听通道
import net.mamoe.mirai.event.events.FriendMessageEvent;
//好友信息事件
import net.mamoe.mirai.event.events.GroupMessageEvent;
//群消息事件

ii. 构建主类

构建mirai插件的主类也就是入口点,必须要继承JavaPlugin

public final class JavaPluginMain extends JavaPlugin {public static final JavaPluginMain INSTANCE = new JavaPluginMain();private JavaPluginMain() {super(new JvmPluginDescriptionBuilder("org.example.mirai-example", "0.1.0").info("EG").build());}}

其中JvmPluginDescriptionBuilder的声明插件信息

iii. 覆盖插件启用函数

@Overridepublic void onEnable() {getLogger().info("日志");}

getLogger()获取日志对象,然后用.info()发送普通日志

iv. 监听事件

GlobalEventChannel.INSTANCE.subscribeAlways(GroupMessageEvent.class, g -> {//监听群消息getLogger().info(g.getMessage().contentToString());});GlobalEventChannel.INSTANCE.subscribeAlways(FriendMessageEvent.class, f -> {//监听好友消息getLogger().info(f.getMessage().contentToString());});

v. 全部代码

package org.example.mirai.plugin;import net.mamoe.mirai.console.plugin.jvm.JavaPlugin;
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescriptionBuilder;
import net.mamoe.mirai.event.GlobalEventChannel;
import net.mamoe.mirai.event.events.FriendMessageEvent;
import net.mamoe.mirai.event.events.GroupMessageEvent;public final class JavaPluginMain extends JavaPlugin {public static final JavaPluginMain INSTANCE = new JavaPluginMain();private JavaPluginMain() {super(new JvmPluginDescriptionBuilder("org.example.mirai-example", "0.1.0").info("EG").build());}@Overridepublic void onEnable() {getLogger().info("日志");GlobalEventChannel.INSTANCE.subscribeAlways(GroupMessageEvent.class, g -> {//监听群消息getLogger().info(g.getMessage().contentToString());});GlobalEventChannel.INSTANCE.subscribeAlways(FriendMessageEvent.class, f -> {//监听好友消息getLogger().info(f.getMessage().contentToString());});}
}

vi. gradle 部分代码

#4-vi.-gradle-部分代码

6. 在IDE内运行

i. 更改MiraiRunKt配置

/src/test/kotlin/RunMirai.kt中的qq号和密码改成你的
如果在根目录下没有run文件夹,则可能报错,新建一个就好了

ii.运行MiraiRunKt任务

如果任务报错先配置任务

然后检查根目录下有没有run文件夹,就是这里的路径,如果没有则创建

然后配置登录配置

7. 生成插件并运行

i. 生成插件

用IDE中gradle的buldplugin任务可以在buid/mirai/下生成一个.jar插件文件

ii.在mcl中运行

把这个.jar文件放到mcl的plugin文件夹下,然后用cmd或者直接打开mcl.cmd运行

有什么评论区问,以后再补充
相关qq群 1044565129

-END-

Mirai qq机器人框架kotlin/java教程相关推荐

  1. 手把手教你配置 免费 开源的qq机器人框架--mirai

    Mirai是一个免费开源高效率 支持全平台的qq机器人框架 应广大网友的需求,今天就来给大家安排教程啦 麻烦来点评论点赞 ~嘿嘿嘿 自己不想折腾的也可以使用我的"你的专属机器人 小染同学&q ...

  2. [最新]整理目前可用的QQ机器人框架

    排名无先后顺序,不定时更新,欢迎留言补充 最新整理的框架:https://www.buyfree.cc/archives/63.html 0.mirai 官网:https://github.com/m ...

  3. Mirai qq机器人ubuntu配置踩坑记录

    Mirai qq机器人ubuntu配置踩坑记录 intellij配置 打包jar ubuntu无界面运行 Mirai GitHub 链接 mirai-github intellij配置 我的是Ulti ...

  4. 2023最新可用QQ机器人框架整理

    排名无先后顺序,不定时更新,欢迎留言补充 1.qy机器人 官网:www.qvbot.com 稳定.高效.免费的QQ机器人框架.支持多种语言二次开发可现实群管.聊天.便民服务等多种功能.功能更强大,无限 ...

  5. 一个基于MFC的QQ机器人框架

    GitHub项目地址:https://github.com/HarmoniaLeo/MFC-QQbot 0x00 这是什么? 欢迎使用本QQ机器人开发框架(如果有人会用的话).本框架是主要使用MFC中 ...

  6. 开发 mirai QQ机器人起步教程

    前言 虽然该文最终是达到以python开发mirai机器人的目的,但起步教程,尤其是环境配置上仍然有大量的相同操作,对其他编程语言仍有借鉴之处 假设你已经安装好了 Java.Python等运行必须的环 ...

  7. mirai 高效率 QQ 机器人框架

    其他文章可以访问以下链接: https://blog.csdn.net/sxf1061700625/article/details/1201312451 QQ控制树莓派(舵机+摄像头+...)_小锋学 ...

  8. Mirai qq机器人 c++版sdk(MiraiCP)

    Mirai机器人c++版 MiraiCP 前言 类似教程 MiraiCP github地址 c++开发mirai 原理 大概流程 实现 使用流程: 1. 使用插件形式 0 配置环境 使用声明 关于Mi ...

  9. [Centos7]Mirai QQ机器人监听播报TeamSpeak3用户状态

    目录 1 安装mirai 1.1 创建用户 1.2 下载mcl-installer 1.3 安装 2 启动并使用 2.1 首次启动 2.2 安装插件 2.2.1 chat-command 2.2.2 ...

  10. 【框架大全】2022年可用QQ机器人框架价格表

    服务器推荐 腾讯云 [腾讯云]爆款2核2G云服务器首年40元(点击进入活动界面) 阿里云 [阿里云]云服务器低至60元/年(点击进入活动界面) 框架价格表 名称 协议 单Q 设备 官网 MYQQ PC ...

最新文章

  1. git 拉去merged 仓库的代码步骤
  2. git解决代码提交冲突
  3. 《Java程序员职场全攻略:从小工到专家》连载十二:大家都是个什么身价
  4. 互联网金融下半场 BAT谁是老大?
  5. ubuntu设置jupyter
  6. python技术是什么意思_python中“//”表示什么意思_后端开发
  7. 百万年薪程序员的7点能力
  8. javascript校验2
  9. js能调用c语言吗,如何从Javascript调用Object-C?
  10. C Tricks(十九)—— 求以任意数为底的对数
  11. CSDN积分获取规则
  12. windows彻底删除php,win10如何彻底删除wps
  13. VMware虚拟机安装及虚拟机下安装XP系统
  14. 微信小程序登陆流程详详详解 看这一篇就够了
  15. 监控的4个黄金指标(google)
  16. C语言编程>第十六周 ④ 请补充fun函数,该函数的功能是将字符串str中的小写字母都改为对应的大写字母,其它字符不变。
  17. ysdk应用宝渠道接入问题记录
  18. 自动擦地机器人需要怎么留电_irobot擦地机器人是否好用,需要和扫地机器人配合么?...
  19. 会员权益HTML,会员权益
  20. 写给自己看的C4D建模笔记

热门文章

  1. 磁盘不见了只剩一个c盘_教你如何处理只剩一个C盘
  2. 前端需要学python吗_python是前端语言吗
  3. Auto CAD指定线段长度和角度的方法
  4. ppt设置外观样式_ppt设置主题样式的方法步骤详解
  5. github开源项目大集合
  6. 五、hive-1.2.1安装
  7. 直线扫描转换-DDA算法
  8. java的英文文献综述_java英文参考文献.doc
  9. java 读取网络js文件_JavaScript 读写文件
  10. 输入1到100带圈字符Ⓢ你以为很容易的/其实特容易翻车的需求