iTXTech / mirai-console-loader

模块化、轻量级且支持完全自定义的 mirai 加载器。
GNU Affero General Public License v3.0
733 stars 62 forks source link

插件加载出错 #181

Closed auuuu4 closed 1 year ago

auuuu4 commented 1 year ago

报错

net.mamoe.mirai.console.plugin.loader.PluginLoadException: Exception while enabling SecondHandGoods-Plugin
    at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.enable(BuiltInJvmPluginLoaderImpl.kt:314)
    at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.enable(BuiltInJvmPluginLoaderImpl.kt:39)
    at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.enable(JvmPluginLoader.kt)
    at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.enable(JvmPluginLoader.kt:54)
    at net.mamoe.mirai.console.plugin.PluginManager.enablePlugin(PluginManager.kt:173)
    at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.enableAllLoadedPlugins$mirai_console(PluginManagerImpl.kt:181)
    at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:359)
    at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:512)
    at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:182)
    at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:181)
    at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.main(MiraiConsoleTerminalLoader.kt:59)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.itxtech.mcl.Utility.bootJars(Utility.java:86)
    at org.itxtech.mcl.Utility.bootJars(Utility.java:76)
    at org.itxtech.mcl.Utility.bootMirai(Utility.java:98)
    at org.itxtech.mcl.module.builtin.Boot.boot(Boot.java:113)
    at org.itxtech.mcl.module.ModuleManager.phaseBoot(ModuleManager.java:123)
    at org.itxtech.mcl.Loader.lambda$start$4(Loader.java:196)
    at org.itxtech.mcl.Loader.tryCatching(Loader.java:151)
    at org.itxtech.mcl.Loader.start(Loader.java:196)
    at org.itxtech.mcl.Loader.main(Loader.java:84)
Caused by: net.mamoe.mirai.console.permission.PermissionRegistryConflictException: Conflicting Permission registry. new: PermissionImpl(id=moon.top.plugin:*, description='The base permission', parent=PermissionImpl(id=*:*, description='The root permission', parent=<self>)), existing: PermissionImpl(id=moon.top.plugin:*, description='The base permission', parent=PermissionImpl(id=*:*, description='The root permission', parent=<self>))
    at net.mamoe.mirai.console.internal.permission.AbstractConcurrentPermissionService.register(AbstractConcurrentPermissionService.kt:29)
    at net.mamoe.mirai.console.permission.PermissionService.register$default(PermissionService.kt:103)
    at net.mamoe.mirai.console.internal.plugin.JvmPluginInternal$parentPermission$2.invoke(JvmPluginInternal.kt:126)
    at net.mamoe.mirai.console.internal.plugin.JvmPluginInternal$parentPermission$2.invoke(JvmPluginInternal.kt:125)
    at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    at net.mamoe.mirai.console.internal.plugin.JvmPluginInternal.getParentPermission(JvmPluginInternal.kt:125)
    at net.mamoe.mirai.console.internal.plugin.JvmPluginInternal.internalOnEnable$mirai_console(JvmPluginInternal.kt:226)
    at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.enable(BuiltInJvmPluginLoaderImpl.kt:308)
    ... 23 more

插件类


object SecondHandGoodsPlugin : KotlinPlugin(
    JvmPluginDescription(
        id = "moon.top.plugin",
        name = "SecondHandGoods-Plugin",
        version = "1.0-beta",
    ) {
        author("m2on")
        info("""二手物品市场自动检测插件""")
    }
) {
    override fun onEnable() {
        SecondHandGoodsPlugin.reloadPluginData(GoodsData)
        SecondHandGoodsPlugin.reloadPluginConfig(CommandConfig)
        fun checkEnabled(group: Group,enabled:Boolean,toDo:()->Unit){
            if(enabled){
                toDo()
            }else{
                SecondHandGoodsPlugin.launch {
                    group.sendMessage("此群不在白名单中,功能未开启")
                }
            }
        }
        GlobalEventChannel.subscribeAlways<GroupMessageEvent> { event->
            var isListen = GoodsData.groupWhiteList.contains(event.group.id)
            var group = event.group
            var content = event.message.content
            val firSpa = content.indexOf(" ")
            if(Regex(CommandConfig.addGoods).containsMatchIn(content)){
                try {
                    checkEnabled(group,isListen)
                    {
                        val secSpa = content.indexOf(" ",firSpa+1)
                        val thiSpa = content.indexOf(" ",secSpa+1)
                        val goodsName = content.substring(firSpa+1,secSpa)
                        val goodsDesc = content.substring(secSpa+1,secSpa)
                        val goodsPrice = content.substring(secSpa+1).toDouble()
                        GoodsServiceImpl.addGoods(sender.id,goodsName,goodsPrice,goodsDesc,group)
                    }
                }catch (e:Exception){
                    e.printStackTrace()
                    val secSpa = content.indexOf(" ",firSpa+1)
                    val goodsName = content.substring(firSpa+1,secSpa)
                    SecondHandGoodsPlugin.launch {
                        group.sendMessage(At(sender.id) +" 物品${goodsName}上架失败,请检查格式是否错误或联系管理员")
                    }
                }
            }else if(Regex(CommandConfig.removeGoods).containsMatchIn(content)){
                checkEnabled(group,isListen)
                {
                    val goodsName = content.substring(firSpa + 1)
                    GoodsServiceImpl.removeGoods(sender.id, goodsName, group)
                }
            }else if(Regex(CommandConfig.addGroupWhite).containsMatchIn(content)){
                checkEnabled(group,isListen)
                {
                    val addGroup = content.substring(firSpa + 1)
                    GroupServiceImpl.addWhitelistGroup(group, addGroup.toLong())
                }
            }else if(Regex(CommandConfig.removeGroupWhite).containsMatchIn(content)){
                checkEnabled(group,isListen)
                {
                    val removeGroup = content.substring(firSpa + 1)
                    GroupServiceImpl.removeWhitelistGroup(group, removeGroup.toLong())
                }
            }else if(Regex(CommandConfig.addAdmin).containsMatchIn(content)){
                checkEnabled(group,isListen)
                {
                    val qq = content.substring(firSpa + 1).toLong()
                    GroupServiceImpl.addAdmin(qq, group)
                }
            }else if(Regex(CommandConfig.removeAdmin).containsMatchIn(content)){
                checkEnabled(group,isListen)
                {
                    val qq = content.substring(firSpa + 1).toLong()
                    GroupServiceImpl.removeAdmin(qq, group)
                }
            }
        }
        logger.info { "二手市场插件已加载" }
    }
}

autoData

object GoodsData :AutoSavePluginData("GoodsData"){
    val goodsList:MutableMap<String,MutableList<Goods>> by value()
    val groupWhiteList:MutableList<Long> by value()
    val adminQQList:MutableMap<String,MutableList<Long>> by value()
    val goodsNameList:MutableMap<String,MutableList<String>> by value()
    val botOwner by value(0L)
}

实体类

@Serializable
class Goods {
    var goodName = ""
    var sellerQQ = 0L
    var addTime = ""
    var describe = ""
    var price = 0.0

    constructor(goodName: String, sellerQQ: Long, addTime: String, describe: String, prive: Double) {
        this.goodName = goodName
        this.sellerQQ = sellerQQ
        this.addTime = addTime
        this.describe = describe
        this.price = prive
    }
}

一开始的时候因为实体类没有序列化,AutoData报错了,加上序列化后错误改变成了现在这个。看不出是什么问题,我在想是不是因为实体类的序列化。

cssxsh commented 1 year ago

Caused by: net.mamoe.mirai.console.permission.PermissionRegistryConflictException: Conflicting Permission

检查 plugins 目录下是否有相同的插件