跳至主要內容

# 选择类型

当前主流的原生 mirai 程序有两种类型,一种是基于 mirai-core 开发,一种是基于 mirai-console 开发 (即插件)。

# 基于 mirai-core

基于 mirai-core 开发的程序一般将 mirai-core 作为程序的支持库。 若基于 mirai-core 开发,你将无法载入 mirai-console 插件,该程序也无法被 mirai-console 当作插件加载 (如果你写了两份主类可以当我没说,但完全没必要) , 但你可以只把 mirai 仅当作你程序中的一个支持库来使用,登录、发消息、注册事件等等 mirai 已经给你封装好了,直接使用即可。

转跳到 部署 mirai-core 开发环境

# 基于 mirai-console

基于 mirai-console 开发的程序,就是我们所说的插件。 若基于 mirai-console 开发,你的插件可以发布到论坛给别人使用。虽说基于 mirai-core 开发也能发布给别人使用,但插件的通用性明显更强。
基于 mirai-console 开发可以享受 mirai-core 没有的命令系统、配置文件系统 (可自动保存) 等等,

转跳到 部署插件开发环境

# 部署 mirai-core 开发环境

选择这条路,你可能会在本文遇到一些仅支持 mirai-console 不支持 mirai-core 的特性,但大多无伤大雅,这会在文中标注「不支持 mirai-core」。

# 添加依赖

# Gradle

请编辑你的构建脚本,根据情况添加内容

完成之后,可进行一个可选操作: 分离 API 和实现open in new window

# Maven

在 pom.xml 中添加

需要注意的是,导入到 Maven 中的 mirai-core 包需要带有 -jvm 后缀

# 导入Jar包

下载以下包的 all.jar

或者下载以下包的 all.jar

并将其作为库导入到项目即可。

# 部署插件开发环境

# 创建项目

你有多种方式可以创建项目,任选一种即可,一般建议使用 IntelliJ 插件。

# IntelliJ 插件

到 Jetbrains 插件仓库open in new window 即可一键安装该插件到你的 IntelliJ IDEA,你也可以在 IDEA 的插件 Marketplace 搜索 mirai-console 来安装该插件。安装完毕后,点击「新建项目」,你就能在「生成器」找到「Mirai Console 插件」了,如图,填写信息就能创建插件项目,非常方便。

intellij_插件.jpg

# 模板项目

我觉得官方的文档非常详细 https://github.com/project-mirai/how-to-use-plugin-template

# Gradle 插件

请编辑你的构建脚本,根据情况添加内容,自行将 VERSION 替换为你想要使用的 mirai-console 版本。版本通常与 mirai 的 Releasesopen in new window 中的版本相同。

是的,加入这段内容后重新加载你的 Gradle 项目就完成了。

# 添加库

能用插件最好别用这种方法

以上 3 种方法均为使用 Gradle 插件,不使用 Gradle 插件的方法即为添加以下几个库作为依赖并配置主类服务即可。都是重复操作,先按照 部署 mirai-core 开发环境 操作然后补以下依赖,再「 手动配置主类服务」即可。

(提示: 点进链接选择版本,然后就会有选择不同构建工具生成不同添加依赖代码的选项卡。导入Jar包的方法依然是下载 all.jar)

# 额外配置

这些都是 mirai-console 相关的,如果你不是基于 mirai-console 开发的,这部分与你无关,你可以直接跳到 完成部分。

# Gradle 插件的额外配置

项目默认使用的 jvm 版本为 1.8,而很多常用的特性要在 11 或以上才有,部分库也要求使用 11 或以上,故最好指定 jvm 版本

# 手动配置主类服务

mirai-console 使用了 Java SPI,SPI 将服务接口和具体的服务实现分离开来,将服务调用方和服务实现者解耦,能够提升程序的扩展性、可维护性。修改或者替换服务实现并不需要修改调用方。(转自 知乎open in new window)

要使 mirai-console 能够认出你的插件,你需要在 /META-INF/services/ 下新建文件 net.mamoe.mirai.console.plugin.jvm.JvmPlugin,在该文件内键入插件主类路径,且保证该文件内只有一行插件主类路径。如

你也可使用 AutoServiceopen in new window 来自动配置服务信息。

# 新建主类

新建的主类在 Kotlin 要继承 KotlinPlugin,在 Java 要继承 JavaPlugin。

在 Java 要新建一个无参数的构造函数并在里面填入插件描述,必须要无参数的构造函数,并使用公开静态字段将其实例化,使其成为与 Kotlin 类似的单例类。

之后,该重写插件加载/启用/卸载方法了。

# 重写插件加载/启用/卸载方法

这三个方法分别为onLoadonEnableonDisable。 加载顺序为 onLoadonEnableonDisable。 其中 onLoad 仅会执行一次,由于插件可能会被加载或卸载,故 onEnableonDisable 可能会被执行多次。

特殊地,可以在 onLoad 中注册一个 PostStartupExtension (runAfterStartup) 钩子,runAfterStartup 中的代码将会在 mirai-console 加载完毕后执行 (此时所有插件已加载且机器人自动登录完成),按照正常的插件生命周期,执行顺序一般为 onLoadonEnablerunAfterStartuponDisable

(钩子是编程时常用的名词,一般指作为触发器参数的 lambda)

重写 onLoad/onEnable/onDisable 和注册 PostStartupExtension 钩子的方法的例子如下。

# 完成

至此,你已经学会如何新建项目了。接下来,你好,Mirai。

开发入门篇 /02/ Hello Mirai

# 注意事项

如果你的项目是用 IDEA 插件生成的,有时候会出现 kotlin 版本获取错误(其实是正确的,只是源里没有),导致类似 1.7.20 was not found 之类的错误,这种情况下请到 build.gradle(.kts) 文件将 1.7.20 改为 1.7.10

两个鬼故事八字起名测量分一元休闲食品加盟傅姓起名大全大全荡然无存的意思八字起名靠谱吗顶楼闵雪雅是谁推下去的祝福成语运行内存朝日电视台宠物公司起名大全起名成语寓意好姓王 起名推荐妃嫔这职业英文品牌起名字大全boujou01234可以组成多少个不重复的三位数放课后的职员室贾 男孩起名装饰公司起名词语两个电视剧武则天刘晓庆7画字有什么起名字用特种兵之战狼下载公司起名字多少笔画好贵妃网seniu货到付款什么意思高姓起名有寓意的阿房宫赋原文及翻译医疗室play道具走绳结吴小安少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化