日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mirai qq机器人框架kotlin/java教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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. 下載

  • 從官方實例或筆者整理的mirai-console插件實例中下載最新版的框架到本地,然后用IDE打開文件夾
  • 使用插件生成,詳細查看官網
  • 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.kt或JavaPluginMain.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()進行日志輸出,其中logger是kotlinPlugin類內成員,除了.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教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。