Git Product home page Git Product logo

kookbc's Introduction

KookBC (Kook Bot Client)

这是一个 JKook API 的标准 Java 客户端实现。

用法

从右侧 Releases 下载最新版本。

  • 如果可能,请始终使用最新版本!

下载后,请将下载的 KookBC 程序放在一个全新目录里。

然后用如下命令行启动 KookBC:

java -jar kookbc-<version>.jar

其中,<version>是 KookBC 的版本。

之后,KookBC 会在当前目录下生成一个名为 kbc.yml 的 KookBC YAML 配置文件并退出。

配置内容详解请见 KookBC YAML 配置详解 。请按照文档的解释,配置您的 KookBC 。

配置完成后,再次使用之前的命令行启动 KookBC ,当如下语句出现时,您的 KookBC 就已经准备就绪,可以使用。

[XX:XX:XX] [Main Thread/INFO] Done! Type "help" for help.

其中,X 为任意可能的值,您可以忽视。

安装一个基于 JKook API 的 插件程序 (假设其基于最新版本的 JKook) ,只需要将其 .jar 文件放入 KookBC 目录下的 plugins 目录即可。

更多 KookBC 的命令行选项可以通过以下命令获得:

java -jar kookbc-<version>.jar --help

其中,<version>是 KookBC 的版本。

更详细的命令行选项见 KookBC 命令行

我们在本仓库的 docs 文件夹下放了一些 KookBC 的相关文档,善用它们会帮助您!

如:
嵌入 KookBC 到您的项目
KookBC 与 Webhook
浅析 KookBC 的结构与工作流程

贡献

很感谢您愿意帮助我们改进 KookBC !

您有两种贡献方法:

  • 提出 Issue
  • 提出 Pull Request

您可以在 Issues 提出您使用 KookBC (不包括其搭载的 Bot 程序) 的过程中遇到的问题,包括但不限于 KookBC 的程序错误,漏洞,或文档错误等。

如果您会 Java 编程 ,并且希望帮助我们改进 KookBC 的程序,请按照以下过程进行您的 Pull Request 过程:

  • 创建一份此仓库的 Fork
  • 从 dev 分支签出您的 Fork 分支,以 fork-<您的 Github 用户名> 命名
  • 在其中做好您的修改
  • 提交,并 Push 到您的 Fork
  • 根据 Pull Request Template ,向我们发出 Pull Request
  • 等待我们审核
  • 若不同意,根据我们的修改意见做出改进,并请求继续
  • 或通过,并被并入 dev 分支,若到这里,您的 Pull Request 过程就宣告结束

上述过程对文档的修改也适用,但请从 doc 分支签出我们不再使用 doc 分支,其已经于 2022/8/18 删除。

但是,Pull Request 的提出遵循一个原则: 一个 Pull Request 只解决一个问题。 如一个 Fork 同时解决了文档错误和程序错误,则应该分别提出 Pull Request。

技术信息

网络通信库: OkHttp 3

Webhook HTTP 服务器库: JLHTTP

JSON 处理库: Google GSON

控制台功能库: JLine 3, TerminalConsoleAppender

日志库: Apache Log4j2

此程序提供了对 SpongePowered Mixin(FabricMC Mixin) 的支持。

版权

Copyright (C) 2022 - 2024 KookBC contributors

在编写 Mixin 支持 的实现代码时引用了部分来自 Mixin 项目的源代码,以及 LegacyLauncher 项目的源代码,在此一并表示感谢。

对于下文,提供如下定义以便于讨论:

  • "此仓库"即 此 GitHub 仓库 及其本地副本,此仓库的 Fork 及其本地副本不等同于此仓库。
  • "此项目"即 此仓库中存放的 KookBC 源代码及其附属内容。
  • "源代码"即 人类直接可读的 Java 程序文本文件。
  • "原始"版本即 使用此仓库中的源代码编译得到的 KookBC 副本。

若你以任何形式使用此项目,则表明你同意此节的内容以及 AGPLv3 许可证的条款。

若你在下文提及的特定情形下使用此项目,则表明你在同意上文内容的同时同意 LGPLv3 许可证的条款。

若此节的内容与 AGPLv3 许可证的条款或 LGPLv3 许可证的条款冲突,以此节内容为准。

若此节的内容在未来有更新,更新的内容适用于此项目的任何版本,同时旧的内容失效。

此仓库的创建者 SNWCreations 享有对此节的内容的最终解释权。

若你只是直接修改了此项目,按照 AGPLv3 许可证的条款以及 LGPLv3 许可证的条款处理。

  • 对此项目的源代码进行直接修改的方式可以认为是"直接修改"。
  • 其他修改方式均认为是"间接修改"。
  • 比如在你自己的项目中,通过使用 extends 关键字对此项目的内容修改得到的 Java 类可以认为是对此项目的间接修改。

对于仅将此项目作为依赖项的,可以在适用 AGPLv3 许可证的同时应用 LGPLv3 许可证的条款,即意味着:

若你的项目只是依赖此项目,并且你依赖的此项目是"原始"版本,你依赖此项目的项目可以不公开源代码并按其他许可证授权。

若你的项目只是依赖此项目,但你依赖的此项目是你基于此仓库直接修改的版本, 你需要依据 AGPLv3 许可证以及 LGPLv3 许可证的条款公开修改过的此项目的源代码, 然后你依赖此项目的项目可以不公开源代码并按其他许可证授权。

kookbc's People

Contributors

deechael avatar flowpeakfish avatar huanmeng-qwq avatar snwcreations avatar xiaoace6716 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

kookbc's Issues

snw.jkook.message.Message类getQuote()方法 连续获取时返回为空

错误日志

[12:37:59] [Event Executor/ERROR]: java.lang.NullPointerException: Cannot invoke "snw.jkook.message.Message.getComponent()" because the return value of "snw.jkook.message.Message.getQuote()" is null
[12:37:59] [Event Executor/ERROR]: 	at com.cnluminous.ChatListener.getHistory(ChatListener.java:43)
[12:37:59] [Event Executor/ERROR]: 	at com.cnluminous.ChatListener.onChannelChat(ChatListener.java:27)
[12:37:59] [Event Executor/ERROR]: 	at snw.kookbc.impl.event.EventExecutorFactoryImpl.lambda$create$0(EventExecutorFactoryImpl.java:48)
[12:37:59] [Event Executor/ERROR]: 	at net.kyori.event.method.SimpleMethodSubscriptionAdapter$MethodEventSubscriber.invoke(SimpleMethodSubscriptionAdapter.java:148)
[12:37:59] [Event Executor/ERROR]: 	at net.kyori.event.SimpleEventBus.post(SimpleEventBus.java:107)
[12:37:59] [Event Executor/ERROR]: 	at snw.kookbc.impl.event.EventManagerImpl.callEvent(EventManagerImpl.java:53)
[12:37:59] [Event Executor/ERROR]: 	at snw.kookbc.impl.network.ListenerImpl.event0(ListenerImpl.java:155)
[12:37:59] [Event Executor/ERROR]: 	at snw.kookbc.impl.network.ListenerImpl.event(ListenerImpl.java:108)
[12:37:59] [Event Executor/ERROR]: 	at snw.kookbc.impl.network.ListenerImpl.lambda$handle$0(ListenerImpl.java:69)
[12:37:59] [Event Executor/ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[12:37:59] [Event Executor/ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[12:37:59] [Event Executor/ERROR]: 	at java.base/java.lang.Thread.run(Thread.java:833)

复现代码

public void getHistory(List<History> histories, snw.jkook.message.Message message){
        snw.jkook.message.Message quote;
        if (message.getQuote()!=null){//has quote
            quote = message.getQuote();

//            quote = BotPlugin.getInstance().getCore().getHttpAPI().getTextChannelMessage(message.getQuote().getId()); //另一种可成功获取消息方法
            if (quote.getSender().getId().equals(BotPlugin.getInstance().getCore().getUser().getId())){//is bot
                if (quote.getQuote()==null){
                    return;
                }
                History history = History.builder().build();
                String qs = quote.getQuote().getComponent().toString().replaceAll(metRegex,"");//question string
                history.setUser(qs);
                String as = quote.getComponent().toString().replaceAll(metRegex,"");//answer string
                if (quote.getComponent() instanceof CardComponent){
                    BaseModule module = ((CardComponent) quote.getComponent()).getModules().get(((CardComponent) quote.getComponent()).moduleCount()-1);
                    if (module instanceof SectionModule){
                        if (((SectionModule) module).getText() instanceof MarkdownElement){
                            as = ((MarkdownElement) ((SectionModule) module).getText()).getContent();
                        }
                    }
                }
                history.setBot(as);
                histories.add(history);
//                System.out.println("qs = " + qs);
//                System.out.println("as = " + as);
            }
            getHistory(histories,quote);
        }

预期效果

根据回复消息内容,连续获取上一条内容直至为空

实际效果

仅能获取到当前回复的消息,无法连续获取

image

Paragraph 无法初始化

您期望得到什么

使用 Paragraph

实际得到什么

报错,无法正常运行

重现错误的步骤

73               .addModule(
                        new SectionModule(
                                new Paragraph(
                                        2,
                                            goldInfo
                                        ),
                                null,
                                null

                        )
                )
[16:31:00] [Event Executor/ERROR]: Unexpected exception while we attempting to execute command from remote.
snw.jkook.command.CommandException: Something unexpected happened.
	at snw.kookbc.impl.command.CommandManagerImpl.exec(CommandManagerImpl.java:427) ~[CommandManagerImpl.class:0.26.11]
	at snw.kookbc.impl.command.CommandManagerImpl.executeCommand0(CommandManagerImpl.java:256) ~[CommandManagerImpl.class:0.26.11]
	at snw.kookbc.impl.network.ListenerImpl.executeCommand(ListenerImpl.java:209) ~[ListenerImpl.class:0.26.11]
	at snw.kookbc.impl.network.ListenerImpl.event0(ListenerImpl.java:148) ~[ListenerImpl.class:0.26.11]
	at snw.kookbc.impl.network.ListenerImpl.event(ListenerImpl.java:102) ~[ListenerImpl.class:0.26.11]
	at snw.kookbc.impl.network.ListenerImpl.lambda$executeEvent$0(ListenerImpl.java:63) ~[ListenerImpl.class:0.26.11]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.IllegalArgumentException: Section module only accepts plain-text, kmarkdown and paragraph.
	at snw.jkook.util.Validate.isTrue(Validate.java:28) ~[Validate.class:0.26.11]
	at snw.jkook.message.component.card.module.SectionModule.<init>(SectionModule.java:36) ~[SectionModule.class:0.26.11]
	at cn.miars.kookbot.command.InfoCommand.onCommand(InfoCommand.java:73) ~[InfoCommand.class:?]
	at snw.kookbc.impl.command.CommandManagerImpl.lambda$executeCommand0$4(CommandManagerImpl.java:257) ~[CommandManagerImpl.class:0.26.11]
	at snw.kookbc.impl.command.CommandManagerImpl.exec(CommandManagerImpl.java:421) ~[CommandManagerImpl.class:0.26.11]
	... 8 more

相关信息

  • KookBC 版本: latest
  • JKook API 版本: latest
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本): 卡尔酱
  • Java 版本: 8
  • 操作系统 (及其版本): MacOS latest

实体对象的数据在更新时不安全

您期望得到什么

在实体的数据被更新时,任何尝试读取数据的操作将被暂停,以避免读取到的数据是旧的。

实际得到什么

根据源代码,数据更新时没有对实体对象上锁,故在更新期间的实体数据是不安全的,此时若发生读取,将得到旧数据。

重现错误的步骤

报错日志

相关信息

  • KookBC 版本: 0.26.13
  • JKook API 版本: 0.48.2
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本): None
  • Java 版本: None
  • 操作系统 (及其版本): None

指派 @SNWCreations 修复,工作在 perf/update-safely 分支进行。

将常用文档放在 README

他们极其容易忽略KookBC/docs里的未在README,md里标出的内容,是否需要将这些内容也顺便写在README,md当中。

禁用插件时未注销其注册的YAML序列化器

您期望得到什么

当一个插件被禁用时,应当注销其注册的YAML序列化器 (通过 ConfigurationSerialization 类注册的)

实际得到什么

代码中未注销序列化器。

重现错误的步骤

报错日志

相关信息

  • KookBC 版本: 0.27.2
  • JKook API 版本: 0.49
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本): 无
  • Java 版本: 无
  • 操作系统 (及其版本): 无

ImageElement 的 circle 属性不工作

您期望得到什么

ImageElement的circle
让图片变成圆形

实际得到什么

并没有效果,还是方的

重现错误的步骤

                            new ImageElement(
                                    user.getAvatarUrl(true),
                                    user.getName(),
                                    true
                            ),

相关信息

  • KookBC 版本: 最新
  • JKook API 版本: 最新
  • 您使用的 Bot 的相关信息 (如 名称、作者、版本): 卡尔酱
  • Java 版本: 8
  • 操作系统 (及其版本): macos 13

找不到类,但是出现了NullPointerException

这个问题不是在我的设备上发生的,它原本由社区成员 Mores.#3552 提交。

您期望得到什么

在找不到类时直接抛出 ClassNotFoundException 。

实际得到什么

抛出了 ClassNotFoundException ,但是其最终原因是操作值为 null 的 byte[] 导致的 NullPointerException

重现错误的步骤

初步分析得:

在一个 JKook 插件中调用一个不存在于 KookBC 而插件本身又未打包的第三方库方法即可触发。

报错日志

https://img.kookapp.cn/assets/2023-03/oifoEduGiw0tq0fy.png

相关信息

  • KookBC 版本: 0.26.13
  • JKook API 版本: 0.48.2
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本): 未知
  • Java 版本: 未知
  • 操作系统 (及其版本): 未知

此异常存在于 Mixin 支持的相关代码中,故指派 @huanmeng-qwq 处理。

重复的类引起的LinkageError错误

您期望得到什么

正确启动

实际得到什么

无法启动

重现错误的步骤

1.插件包含重复的类

报错日志

[23:43:46] [Main Thread/ERROR]: Unexpected situation happened during the execution of main method!
 java.lang.LinkageError: loader constraint violation: when resolving method 'void snw.kookbc.impl.network.ws.Connector.<init>(snw.kookbc.impl.KBCClient)' the class loader snw.kookbc.impl.launch.LaunchClassLoader @65ab7765 of the current class, snw/kookbc/impl/network/ws/OkhttpWebSocketNetworkSystem, and the class loader 'app' for the method's defining class, snw/kookbc/impl/network/ws/Connector, have different Class objects for the type snw/kookbc/impl/KBCClient used in the signature (snw.kookbc.impl.network.ws.OkhttpWebSocketNetworkSystem is in unnamed module of loader snw.kookbc.impl.launch.LaunchClassLoader @65ab7765, parent loader 'bootstrap'; snw.kookbc.impl.network.ws.Connector is in unnamed module of loader 'app')
        at snw.kookbc.impl.network.ws.OkhttpWebSocketNetworkSystem.start(OkhttpWebSocketNetworkSystem.java:37) ~[kookbc-0.27.3.jar:0.27.3]
        at snw.kookbc.impl.KBCClient.startNetwork(KBCClient.java:367) ~[kookbc-0.27.3.jar:0.27.3]
        at snw.kookbc.impl.KBCClient.start(KBCClient.java:230) ~[kookbc-0.27.3.jar:0.27.3]
        at snw.kookbc.Main.startClient(Main.java:174) ~[kookbc-0.27.3.jar:0.27.3]
        at snw.kookbc.Main.start(Main.java:142) ~[kookbc-0.27.3.jar:0.27.3]
        at snw.kookbc.Main.main0(Main.java:63) ~[kookbc-0.27.3.jar:0.27.3]
        at snw.kookbc.Main.main(Main.java:51) ~[kookbc-0.27.3.jar:0.27.3]
        at snw.kookbc.LaunchMain.lambda$launch$2(LaunchMain.java:236) ~[kookbc-0.27.3.jar:0.27.3]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]

相关信息

  • KookBC 版本: 0.27.3
  • Java 版本: 17
  • 操作系统 (及其版本): Window 10

PrivateMessage报错

实现代码

@EventHandler
    public void onButtonClickEvent(UserClickButtonEvent event){
         PrivateMessage privateMessage = Main.INSTANCE.getCore().getHttpAPI().getPrivateMessage(event.getUser(),event.getMessageId());
}

报错内容

[14:52:21] [Update Checker/INFO]: You are using the latest version! :)
[14:52:25] [Event Executor/INFO]: 私聊消息ID -> 1daabefc-4719-4593-8dfb-0f30c11da4ba
[14:52:25] [Event Executor/ERROR]: Unexpected exception while posting event.
[14:52:25] [Event Executor/ERROR]: java.lang.IllegalStateException: Not a JSON Object: ""
[14:52:25] [Event Executor/ERROR]: 	at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:101)
[14:52:25] [Event Executor/ERROR]: 	at snw.kookbc.impl.HttpAPIImpl.getPrivateMessage(HttpAPIImpl.java:306)
[14:52:25] [Event Executor/ERROR]: 	at org.logcraft.events.BindEvent$2.run(BindEvent.java:76)
[14:52:25] [Event Executor/ERROR]: 	at org.logcraft.events.BindEvent.onStartBindButtonClickEvent(BindEvent.java:80)
[14:52:25] [Event Executor/ERROR]: 	at snw.kookbc.impl.event.EventExecutorFactoryImpl.lambda$create$0(EventExecutorFactoryImpl.java:48)
[14:52:25] [Event Executor/ERROR]: 	at net.kyori.event.method.SimpleMethodSubscriptionAdapter$MethodEventSubscriber.invoke(SimpleMethodSubscriptionAdapter.java:148)
[14:52:25] [Event Executor/ERROR]: 	at net.kyori.event.SimpleEventBus.post(SimpleEventBus.java:107)
[14:52:25] [Event Executor/ERROR]: 	at snw.kookbc.impl.event.EventManagerImpl.callEvent(EventManagerImpl.java:53)
[14:52:25] [Event Executor/ERROR]: 	at snw.kookbc.impl.network.ListenerImpl.event0(ListenerImpl.java:156)
[14:52:25] [Event Executor/ERROR]: 	at snw.kookbc.impl.network.ListenerImpl.event(ListenerImpl.java:109)
[14:52:25] [Event Executor/ERROR]: 	at snw.kookbc.impl.network.ListenerImpl.lambda$handle$0(ListenerImpl.java:70)
[14:52:25] [Event Executor/ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[14:52:25] [Event Executor/ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[14:52:25] [Event Executor/ERROR]: 	at java.base/java.lang.Thread.run(Thread.java:834)

请问这个是BUG吗?

在私聊对话中回复机器人发送的消息出现异常

您期望得到什么

获取到被回复的机器人内容消息

实际得到什么

java.lang.IllegalArgumentException

重现错误的步骤

1.回复机器人发送的所有内容

报错日志

Details
2024-04-28 22:17:50.226 |- ERROR [Event Executor] com.cnluminous.kookbc.Application [147] -| Unable to create event from payload.
2024-04-28 22:17:50.226 |- ERROR [Event Executor] com.cnluminous.kookbc.Application [148] -| Event payload: Frame{type=EVENT, sn=1, d={"channel_type":"PERSON","type":9,"target_id":"305357727","author_id":"1404527149","content":"123","extra":{"type":9,"code":"846e30454e905e18ec85eadc88121a93","author":{"id":"1404527149","username":"Luminous夜光","identify_num":"6666","online":true,"os":"Websocket","status":1,"avatar":"https://img.kookapp.cn/avatars/2021-03/ifv8kGKgfs0hs0hs.jpg?x-oss-process=style/icon","vip_avatar":"https://img.kookapp.cn/avatars/2021-03/ifv8kGKgfs0hs0hs.jpg?x-oss-process=style/icon","banner":"","nickname":"Luminous夜光","roles":[],"is_vip":false,"vip_amp":false,"bot":false,"nameplate":[],"decorations_id_map":{"join_voice":10011,"background":10208},"is_sys":false},"visible_only":null,"mention":[],"mention_all":false,"mention_roles":[],"mention_here":false,"nav_channels":[],"kmarkdown":{"raw_content":"123","mention_part":[],"mention_role_part":[],"channel_part":[],"spl":[]},"emoji":[],"quote":{"id":"662e4e6818adcae46f03f72f","rong_id":"fa6180ec-0f0b-4bcd-9fdb-39d4282fd290","type":9,"content":"购买成功!订单号为2024042821260040890727149","create_at":1714310760062,"author":{"id":"305357727","username":"测试机器人","identify_num":"2847","online":true,"os":"Websocket","status":0,"avatar":"https://img.kookapp.cn/assets/bot.png?x-oss-process=style/icon","vip_avatar":"https://img.kookapp.cn/assets/bot.png?x-oss-process=style/icon","banner":"","nickname":"测试机器人","roles":[],"is_vip":false,"vip_amp":false,"bot":true,"nameplate":[],"bot_status":0,"tag_info":{"color":"#0096FF","bg_color":"#0096FF33","text":"机器人"},"is_sys":false,"client_id":"Jcvwg9Tw9deaU_NB","verified":false},"can_jump":true},"last_msg_content":"123","send_msg_device":1},"msg_id":"b9af5cfa-23b4-442e-97a0-48692724b465","msg_timestamp":1714313868901,"nonce":"aHMbqa5qIC4i3Hun6TLRqWaK","from_type":1}}
java.lang.IllegalArgumentException: The bucket name of the provided route is unknown. Report to KookBC authors if you saw this!
	at snw.kookbc.impl.network.Bucket.get(Bucket.java:85)
	at snw.kookbc.impl.network.NetworkClient.getBucket(NetworkClient.java:116)
	at snw.kookbc.impl.network.NetworkClient.call(NetworkClient.java:85)
	at snw.kookbc.impl.network.NetworkClient.getRawContent(NetworkClient.java:65)
	at snw.kookbc.impl.network.NetworkClient.get(NetworkClient.java:51)
	at snw.kookbc.impl.HttpAPIImpl.getPrivateMessage(HttpAPIImpl.java:293)
	at snw.kookbc.impl.entity.builder.MessageBuilder.buildPrivateMessage(MessageBuilder.java:113)
	at snw.kookbc.impl.serializer.event.pm.PrivateMessageReceivedEventDeserializer.deserialize(PrivateMessageReceivedEventDeserializer.java:39)
	at snw.kookbc.impl.serializer.event.pm.PrivateMessageReceivedEventDeserializer.deserialize(PrivateMessageReceivedEventDeserializer.java:31)
	at snw.kookbc.impl.serializer.event.BaseEventDeserializer.deserialize(BaseEventDeserializer.java:37)
	at snw.kookbc.impl.serializer.event.BaseEventDeserializer.deserialize(BaseEventDeserializer.java:27)
	at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69)
	at com.google.gson.Gson.fromJson(Gson.java:991)
	at com.google.gson.Gson.fromJson(Gson.java:1062)
	at com.google.gson.Gson.fromJson(Gson.java:1034)
	at snw.kookbc.impl.event.EventFactory.createEvent(EventFactory.java:79)
	at snw.kookbc.impl.network.ListenerImpl.event0(ListenerImpl.java:145)
	at snw.kookbc.impl.network.ListenerImpl.event(ListenerImpl.java:109)
	at snw.kookbc.impl.network.ListenerImpl.lambda$handle$0(ListenerImpl.java:70)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)

相关信息

  • KookBC 版本:0.29.0
  • JKook API 版本:0.51.0
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本):Springboot集成
  • Java 版本:17
  • 操作系统 (及其版本):Windows11

0.27.3 Cloud命令调度器解析子命令无效

实际得到什么

1.Cloud命令解析器解析子命令时无效,无任何相应结果,并且出现报错

2.解析时无执行器出现空指针异常,具体错误代码片段为


可行修复办法:
} else if(commandObject.getExecutor() != null) {

错误日志

log

[21:13:08] [Event Executor/INFO]: Luminous夜光(User ID: 1404527149) issued command: /greet name
[21:13:09] [Event Executor/ERROR]: Unexpected exception while we attempting to execute command from remote.
snw.jkook.command.CommandException: Something unexpected happened.
at snw.kookbc.impl.command.cloud.CloudCommandManagerImpl.executeCommand(CloudCommandManagerImpl.java:74) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.network.ListenerImpl.executeCommand(ListenerImpl.java:222) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.network.ListenerImpl.event0(ListenerImpl.java:154) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.network.ListenerImpl.event(ListenerImpl.java:108) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.network.ListenerImpl.lambda$handle$0(ListenerImpl.java:69) ~[kookbc-0.27.3.jar:0.27.3]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: snw.jkook.command.CommandException: Something unexpected happened.
at snw.kookbc.impl.command.cloud.CloudBasedCommandManager.executeCommandNow(CloudBasedCommandManager.java:181) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.command.cloud.CloudCommandManagerImpl.executeCommand(CloudCommandManagerImpl.java:68) ~[kookbc-0.27.3.jar:0.27.3]
... 7 more
Caused by: java.lang.NullPointerException: Cannot invoke "snw.jkook.command.CommandExecutor.onCommand(snw.jkook.command.CommandSender, Object[], snw.jkook.message.Message)" because the return value of "snw.jkook.command.JKookCommand.getExecutor()" is null
at snw.kookbc.impl.command.cloud.CloudWrappedCommandExecutionHandler.execute(CloudWrappedCommandExecutionHandler.java:97) ~[kookbc-0.27.3.jar:0.27.3]
at cloud.commandframework.execution.CommandExecutionHandler.executeFuture(CommandExecutionHandler.java:95) ~[kookbc-0.27.3.jar:0.27.3]
at cloud.commandframework.execution.CommandExecutionCoordinator$SimpleCoordinator.coordinateExecution(CommandExecutionCoordinator.java:123) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.command.cloud.CloudBasedCommandManager.executeCommand(CloudBasedCommandManager.java:342) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.command.cloud.CloudBasedCommandManager.executeCommand(CloudBasedCommandManager.java:277) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.command.cloud.CloudBasedCommandManager.executeCommandNow(CloudBasedCommandManager.java:176) ~[kookbc-0.27.3.jar:0.27.3]
at snw.kookbc.impl.command.cloud.CloudCommandManagerImpl.executeCommand(CloudCommandManagerImpl.java:68) ~[kookbc-0.27.3.jar:0.27.3]
... 7 more

相关信息

  • KookBC 版本:0.27.3
  • JKook API 版本:0.49.2
  • Java 版本:OpenJDK Runtime Environment (Alibaba Dragonwell Standard Edition)-17.0.5.0.5+8-GA (build 17.0.5+8)

实验性功能: 对 HTTP 请求超速的处理提供多种策略

它原本由 @Lonely-LY 提出。

您理解并明白,您确认此 Issue 符合下列要求:

  1. 请求添加的功能是为了增强 KookBC 的能力,如可配置性。
  2. 请求添加的功能 不是对 JKook API 的功能扩充 ,如果是,请到 JKook 仓库 提交 Issue ,而不是在这里提交。
  3. 当您的 Issue 不满足上述要求或有其他合理原因时,您的 Issue 将被关闭。

您期望添加什么

改变 KookBC 在存在 HTTP 请求超速时的行为。如让请求线程暂停一小段时间而非抛出异常以结束请求。

设计思路

创建一个接口,命名为 Policy ,其大致声明如下:

public interface Policy {
  void overLimit(HttpAPIRoute route, long nextLimitResetTime);
}

然后提供对应的实现,有 2 种:
AbortRequestPolicy, WaitUntilResetPolicy
前者的 overLimit 方法直接抛出异常,后者使用 nextLimitResetTime 方法作为参数调用 Thread.sleep 。

KookBC 在被 Linux nohup 命令包装时无法工作

它原本由社区成员 Lonely#6788 提交。

您期望得到什么

KookBC 在无控制台模式下正常工作。

实际得到什么

KBCClient#loop 方法出现被依赖库忽略的报错,然后程序自动调用 shutdown 后结束。

重现错误的步骤

  1. 使用 Linux nohup 命令运行 KookBC (格式: nohup java -jar kookbc.jar &)
  2. 异常复现,日志会出现在当前路径的 nohup.out 文件

报错日志

[20:37:14] [Main Thread/ERROR]: Failed to read console input
java.io.IOException: Bad file descriptor
	at java.io.FileInputStream.readBytes(Native Method) ~[?:?]
	at java.io.FileInputStream.read(FileInputStream.java:276) ~[?:?]
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:282) ~[?:?]
	at java.io.BufferedInputStream.read(BufferedInputStream.java:343) ~[?:?]
	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:270) ~[?:?]
	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:313) ~[?:?]
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) ~[?:?]
	at java.io.InputStreamReader.read(InputStreamReader.java:177) ~[?:?]
	at java.io.BufferedReader.fill(BufferedReader.java:162) ~[?:?]
	at java.io.BufferedReader.readLine(BufferedReader.java:329) ~[?:?]
	at java.io.BufferedReader.readLine(BufferedReader.java:396) ~[?:?]
	at net.minecrell.terminalconsole.SimpleTerminalConsole.readCommands(SimpleTerminalConsole.java:180) ~[k.jar:0.26.13]
	at net.minecrell.terminalconsole.SimpleTerminalConsole.start(SimpleTerminalConsole.java:143) ~[k.jar:0.26.13]
	at snw.kookbc.impl.KBCClient.loop(KBCClient.java:277) ~[k.jar:0.26.13]
	at snw.kookbc.Main.main1(Main.java:163) ~[k.jar:0.26.13]
	at snw.kookbc.Main.main0(Main.java:125) ~[k.jar:0.26.13]
	at snw.kookbc.Main.main(Main.java:44) ~[k.jar:0.26.13]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
	at snw.kookbc.LaunchMain.lambda$launch$1(LaunchMain.java:176) ~[k.jar:0.26.13]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]

相关信息

  • KookBC 版本: 0.26.13
  • JKook API 版本: 0.48.2
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本): 无
  • Java 版本: 17
  • 操作系统 (及其版本): Linux 4.18 amd64 (由 CODING 的 Cloud Studio 提供)

命令 root name 中存在的 Markdown 标记字符导致 /help 输出格式在 KOOK 显示混乱

您期望得到什么

命令 root name 中的 Markdown 标记字符被视为普通字符输出。

实际得到什么

如题

重现错误的步骤

  1. 随便注册一个 root name 带 Markdown 标记字符的 JKook 命令 (以 SNWCreations/MCPingBot 的 mcping:about 为例)
  2. 在 KOOK 中对机器人执行 /help
  3. 在 Android 端发现格式异常,期望显示 /mcping:about: 无简介,得到: /mcpingabout 无简介

报错日志

无异常抛出

相关信息

  • KookBC 版本: 0.26.13
  • JKook API 版本: 0.48.2
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本): MCPingBot by SNWCreations, API 0.33
  • Java 版本: 8
  • 操作系统 (及其版本): Linux

此问题暂时仅疑似在移动端出现。

子命令失效了

您期望得到什么

子命令应该正确注册

实际得到什么

子命令直接无效了

重现错误的步骤

代码:
image

在使用新版命令系统时:
image

添加-Dkookbc.cloud=false关闭新版命令系统,正常:
image

相关信息

  • KookBC 版本: 0.27.3
  • JKook API 版本: 0.49.2

OkHttp3 SSL验证错误

重现错误的步骤

1.运行一段时间获得Event时就会报错

报错日志

[09:36:01] [Event Executor/ERROR]: Unable to create event from payload.
[09:36:01] [Event Executor/ERROR]: Event payload: Frame{type=EVENT, sn=24, d={"channel_type":"GROUP","type":9,"target_id":"3986220983085048","author_id":"3356165191","content":"\n/server set phone true","extra":{"type":9,"code":"","guild_id":"9977363072351934","guild_type":0,"channel_name":"文字频道","author":{"id":"3356165191","username":"Clemens_Mine","identify_num":"6666","online":true,"os":"Websocket","status":1,"avatar":"https://img.kookapp.cn/avatars/2024-04/nUZKMLRWdD06j06j.png?x-oss-process=style/icon","vip_avatar":"https://img.kookapp.cn/avatars/2024-04/nUZKMLRWdD06j06j.png?x-oss-process=style/icon","banner":"https://img.kookapp.cn/assets/2024-03/AfrnSJR5fl0ls090.png","nickname":"Clemens_Mine","roles":[36113756],"is_vip":true,"vip_amp":true,"bot":false,"nameplate":[],"decorations_id_map":{"join_voice":10216,"background":10208},"is_sys":false},"visible_only":null,"mention":[],"mention_all":false,"mention_roles":[],"mention_here":false,"nav_channels":[],"kmarkdown":{"raw_content":"/server set phone true","mention_part":[],"mention_role_part":[],"channel_part":[],"spl":[]},"emoji":[],"preview_content":"","last_msg_content":"Clemens_Mine:/server set phone true","send_msg_device":1},"msg_id":"860ffa09-edb9-47c3-9d85-90d6522c51ec","msg_timestamp":1717378560426,"nonce":"NVgViv5WkGfSMutgNxSMdUff","from_type":1}}
[09:36:01] [Event Executor/ERROR]: java.lang.RuntimeException: Unable to load resource
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.storage.EntityStorage.lambda$funcWithRetry$4(EntityStorage.java:280)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.storage.EntityStorage.getChannel(EntityStorage.java:118)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.entity.builder.MessageBuilder.buildChannelMessage(MessageBuilder.java:127)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.serializer.event.channel.ChannelMessageEventDeserializer.deserialize(ChannelMessageEventDeserializer.java:39)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.serializer.event.channel.ChannelMessageEventDeserializer.deserialize(ChannelMessageEventDeserializer.java:31)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.serializer.event.BaseEventDeserializer.deserialize(BaseEventDeserializer.java:37)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.serializer.event.BaseEventDeserializer.deserialize(BaseEventDeserializer.java:27)
[09:36:01] [Event Executor/ERROR]: at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76)
[09:36:01] [Event Executor/ERROR]: at com.google.gson.Gson.fromJson(Gson.java:1227)
[09:36:01] [Event Executor/ERROR]: at com.google.gson.Gson.fromJson(Gson.java:1329)
[09:36:01] [Event Executor/ERROR]: at com.google.gson.Gson.fromJson(Gson.java:1271)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.event.EventFactory.createEvent(EventFactory.java:79)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.network.ListenerImpl.event0(ListenerImpl.java:145)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.network.ListenerImpl.event(ListenerImpl.java:109)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.network.ListenerImpl.lambda$handle$0(ListenerImpl.java:70)
[09:36:01] [Event Executor/ERROR]: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[09:36:01] [Event Executor/ERROR]: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[09:36:01] [Event Executor/ERROR]: at java.base/java.lang.Thread.run(Thread.java:834)
[09:36:01] [Event Executor/ERROR]: Caused by: java.lang.RuntimeException: Unexpected IOException when we attempting to call request.
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.network.NetworkClient.call(NetworkClient.java:101)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.network.NetworkClient.getRawContent(NetworkClient.java:65)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.network.NetworkClient.get(NetworkClient.java:51)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.storage.EntityStorage.lambda$new$2(EntityStorage.java:91)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.storage.EntityStorage.lambda$funcWithRetry$4(EntityStorage.java:275)
[09:36:01] [Event Executor/ERROR]: ... 17 more
[09:36:01] [Event Executor/ERROR]: Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1329)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(CertificateMessage.java:1204)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(CertificateMessage.java:1151)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:421)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:178)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.kt:379)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.kt:337)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:209)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
[09:36:01] [Event Executor/ERROR]: at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154)
[09:36:01] [Event Executor/ERROR]: at snw.kookbc.impl.network.NetworkClient.call(NetworkClient.java:87)
[09:36:01] [Event Executor/ERROR]: ... 21 more
[09:36:01] [Event Executor/ERROR]: Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:290)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.validator.Validator.validate(Validator.java:264)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:321)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:221)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:129)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1313)
[09:36:01] [Event Executor/ERROR]: ... 49 more
[09:36:01] [Event Executor/ERROR]: Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
[09:36:01] [Event Executor/ERROR]: at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
[09:36:01] [Event Executor/ERROR]: at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
[09:36:01] [Event Executor/ERROR]: ... 55 more

相关信息

  • KookBC 版本:0.30.1
  • JKook API 版本:0.52.1
  • Java 版本:11

过长的命令简介可能会使 /help 输出超过限制

您期望得到什么

截断过长的简介,考虑分页。

实际得到什么

/help 的回复可能发送失败

相关信息

  • KookBC 版本: None
  • JKook API 版本: None
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本): None
  • Java 版本: None
  • 操作系统 (及其版本): None

KookBC 在调用 com/sun/jna/platform/win32/Kernel32 发生 NoClassDefFoundError

您期望得到什么

返回 Process 的 pid

实际得到什么

NoClassDefFoundError

重现错误的步骤

更换到 KookBC 0.27.0 版本启动调用此方法就会报错
经过测试使用旧版本的 KookBC 0.26.8 并不会报错

报错日志

image

相关信息

  • KookBC 版本: 0.27.0
  • JKook API 版本: 3e89cde
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本):
  • Java 版本: 8
  • 操作系统 (及其版本): Windows 10 专业工作站版 22H2

accessory与accessory Mode 应该是Nullable的

您期望得到什么

在SectionModule里传入的accessory与accessory Mode 应该是Nullable的

实际得到什么

但是它报错了
https://paste.ubuntu.com/p/8pmGptF4WT/

重现错误的步骤

new SectionModule(new Paragraph(3, Arrays.asList(/* some MarkdownElement...... */)), null, null))

相关信息

  • KookBC 版本:0.26.11
  • JKook API 版本:0.48.2
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本):
  • Java 版本:Java 8
  • 操作系统 (及其版本):Windows 10

ContextModuleSerializer中的deserialize存在错误

您期望得到什么

ContextModuleSerializer中的deserialize能够正确反序列化

实际得到什么

MODULE_MAP获取null

重现错误的步骤

任意包含context类型的模块卡片消息

这个错误是由 33b9c62 导致的

相关信息

  • KookBC 版本: latest
  • JKook API 版本: latest
  • Java 版本: java8
  • 操作系统 (及其版本): win10

使用 Cloud 注册命令报错无法正常返回

您期望得到什么

详细的错误堆栈信息

实际得到什么

重现错误的步骤

1.使用 Cloud 注册一个指令
2.产生报错

报错日志

相关信息

  • KookBC 版本: 0.27.5
  • JKook API 版本: 0.49.2
  • 您使用的 JKook 插件 的相关信息 (如 名称、作者、版本):
  • Java 版本: 11
  • 操作系统 (及其版本): windows 10

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.