1. 程式人生 > 其它 >Java版本Mirai食用指南(二) for Mirai2.0.0

Java版本Mirai食用指南(二) for Mirai2.0.0

技術標籤:qq機器人java

Java版本的mirai食用方法,2.0.0版本適用

(二)編寫外掛——基礎篇

目錄


〇、前言

這一篇是關於外掛編寫的環境配置、基本的外掛結構、打包釋出方式。
機器人本體使用:Java版本Mirai食用指南(一) for Mirai2.0.0

一、安裝IDEA

官網:IDEA
本文使用2020.1版本,使用其他版本IDEA可能存在問題。
需要gradle作為包管理器,我記不太清是不是自帶的了,如果沒有的話可以去百度上查一下。

二、安裝IDEA外掛

需要安裝Kotlin Jvm Blocking Bridge和Mirai console外掛
(如果使用Kotlin編寫,則不需要Kotlin Jvm Blocking Bridge)
除了Kotlin Jvm Blocking Bridge,Kotlin版本也應更新到最新版
Mirai console外掛並不是必需的,但是提供一些輔助功能,方便編寫程式

下面無論那種方法,首先開啟IDEA

  • 方法1
    點選連結直接安裝
    Kotlin Jvm Blocking Bridge
    Mirai Console IntelliJ
  • 方法2
    在IDEA中按快捷鍵Ctrl + Alt + s或者點選File->Setting
    在側邊欄裡找到Plugins,然後在Marketplace裡面搜尋Mirai和Kotlin安裝
  • 方法3
    如果前兩種方法不能安裝,可以通過本地檔案安裝……不過我相信你們不需要(如果有需要的話我再放個百度雲連結在這)

三、新建專案

最新版本的Mirai console已經沒有自動生成Mirai專案的功能了,所以需要自己配置,或者從現成的模板修改。

方法1:從模板修改

我自己寫的Java模板
講道理我沒用過github,如果有什麼問題記得在評論告訴我
想要修改裡面的東西的話,可以參看手動配置的部分

方法2:手動配置

首先新建一個gradle專案

  • 1、修改build.gradle如下
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.4.21' //版本必須為1.4及以上 id 'java' id 'net.mamoe.mirai-console' version '2.0.0' //版本號與下面保持一致即可 } group = '0001' // 看著改改就行 repositories { maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' } maven { url 'https://mirrors.huaweicloud.com/repository/maven' } //映象倉庫,加不加看你自己喜好了 mavenCentral() jcenter() } def miraiCoreVersion = "2.0.0" def miraiConsoleVersion = "2.0.0" dependencies { compileOnly 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' compileOnly "net.mamoe:mirai-core:$miraiCoreVersion" compileOnly "net.mamoe:mirai-console:$miraiConsoleVersion" testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' testImplementation "net.mamoe:mirai-core:$miraiCoreVersion" // testImplementation "net.mamoe:mirai-core-qqandroid:$miraiCoreVersion" // 開發Android程式才會用到 testImplementation "net.mamoe:mirai-console:$miraiConsoleVersion" }
  • 2、建立主類
    在Java資料夾下新建Java class(或者先打個包)
    建議打包
    在這裡插入圖片描述

    在這裡插入圖片描述

  • 3、指定主類(Kotlin的就可以自動生成,Java憑什麼就不行)
    在resource資料夾下,新建META-INF\services\net.mamoe.mirai.console.plugin.jvm.JvmPlugin檔案
    在這裡插入圖片描述
    裡面寫主類名,需要utf8編碼格式

com.example.plugin.AAA

四、開始編寫外掛!

主類要求:

1、繼承JavaPlugin
2、靜態初始化單例class,必須public static,並且必須命名為INSTANCE
3、建構函式不接受引數,並呼叫super(description)
public class AAA extends JavaPlugin {
    public static AAA INSTANCE = new AAA();
    private AAA() {
	super(description);
	}
}

其中description可由JvmPluginDescriptionBuilder構建

new JvmPluginDescriptionBuilder(
	"com.example.plugin.Test", // ID 需要遵循語法規定(不過我也不知道是什麼規定),不知道寫什麼的話就寫主類名吧
	"1.0.0" // Version 同樣需要遵循語法規定
	)
    .author("me") //作者
    .name("test") //外掛名稱
    .info("新版本測試") //外掛資訊
    .build()

主類可以過載onLoad和onEnable方法。
onLoad中可以初始化變數、讀取本地資料等,onEnable中進行這個外掛真正的工作。

所以一個基本的外掛主類是這樣的:

package com.example.plugin;

import net.mamoe.mirai.console.extension.PluginComponentStorage;
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 org.jetbrains.annotations.NotNull;

public class AAA extends JavaPlugin {
    public static AAA INSTANCE = new AAA();
    private AAA() {
        super(new JvmPluginDescriptionBuilder(
                        "com.example.plugin.Test", // 需要遵循語法規定,不知道寫什麼的話就寫主類名吧
                        "1.0.0" // 同樣需要遵循語法規定
                )
                        .author("me")
                        .name("test")
                        .info("新版本測試")
                        .build()
        );
    }

    @Override
    public void onLoad(@NotNull PluginComponentStorage $this$onLoad) {

    }

    @Override
    public void onEnable() {
         // 當接受好友訊息時回覆喵
        GlobalEventChannel.INSTANCE.subscribeAlways(FriendMessageEvent.class, (FriendMessageEvent event) ->{
            event.getSender().sendMessage("喵");
        });
    }
}

五、編寫外掛主體

1、參看官方文件
2、看 [目前還不存在的Java版本食用指南(三) for Mirai2.0.0]

六、打包釋出

要求將除了mirai相關元件之外的全部依賴、資原始檔打包
如果build.gradle中添加了

plugins {
    id 'net.mamoe.mirai-console' version '2.0.0'
}

那麼在gradle中就可以 Tasks > mirai > buildPlugin 直接將依賴檔案一同打包

例如我想新增本地依賴,就在dependencies中加入

    compile fileTree(dir:'lib',includes:['*jar'])

然後buildPlugin就會幫我把這些依賴一起打包。
打包好的jar檔案在 build\mirai 資料夾下

把這個檔案放到mcl的plugins資料夾下就好了