GithubHelp home page GithubHelp logo

misakatat / shiro Goto Github PK

View Code? Open in Web Editor NEW
198.0 5.0 26.0 727 KB

基于OneBot协议的QQ机器人快速开发框架

License: GNU Affero General Public License v3.0

Java 100.00%
onebot onebot-sdk qqbot go-cqhttp mirai-bot cqhttp qq qq-guild qqrobot chatbot

shiro's Introduction

About Me

  • Hi there, I'm MisakaTAT.
  • I'm an FPS gamer. Welcome to play with me! I'm a beginner HAM radio enthusiast with the call sign BG5ISN. Currently, I'm expanding my programming skills and learning Rust. As a developer, I occasionally work on open-source projects.

Find Me

Langs & Tools

shiro's People

Contributors

alexskim avatar aowubulao avatar baishenyaodog avatar catanda avatar dependabot[bot] avatar hollismeynell avatar ilxyil avatar misakatat avatar super5xy avatar w9710mm avatar xiaomujin avatar xihan123 avatar zhengyuelai avatar zhongren233 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  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  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  avatar  avatar  avatar

shiro's Issues

在调用获取群成员列表的时候报错Null

详细描述
经过我的测试之后 我发现 当群人数 达到一定数量后
getGroupMemberList()方法将会返回null导致报错
并且我使用postman工具在 正向WS中 请求 那个会报错的群聊
测试后 发现并没有报错 直接返回了群成员列表
所以我觉得应该是Shiro的问题
image
d15dedf9e655b05514c3570786e56ee9

预期结果
正常返回群成员列表

当前结果
返回null

在最新的RELEASE版本中能否复现?
能够复现

复现方法
在一个群聊人数几百人的群聊中调用getGroupMemberList()方法获取群成员列表

屏幕截图或者日志
java.lang.reflect.InvocationTargetException: null
at jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invokeMethod(InjectionHandler.java:47) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invoke(InjectionHandler.java:72) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.lambda$invokeMessage$2(InjectionHandler.java:255) ~[shiro-2.2.3.jar:na]
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invokeMessage(InjectionHandler.java:251) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invokeGroupMessage(InjectionHandler.java:225) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.process(MessageEvent.java:107) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.group(MessageEvent.java:144) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.handler(MessageEvent.java:63) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.handler.EventHandler.handler(EventHandler.java:121) ~[shiro-2.2.3.jar:na]
at com.mikuac.shiro.task.ShiroAsyncTask.execHandlerMsg(ShiroAsyncTask.java:38) ~[shiro-2.2.3.jar:na]
at jdk.internal.reflect.GeneratedMethodAccessor19.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) ~[spring-aop-6.1.6.jar:6.1.6]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.1.6.jar:6.1.6]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.1.6.jar:6.1.6]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) ~[spring-aop-6.1.6.jar:6.1.6]
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113) ~[spring-aop-6.1.6.jar:6.1.6]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Caused by: java.lang.NullPointerException: Cannot invoke "com.mikuac.shiro.dto.action.common.ActionList.getData()" because the return value of "com.mikuac.shiro.core.Bot.getGroupMemberList(long)" is null
at cn.chengzhiya.mhdfbot.util.DatabaseUtil.getMemberList(DatabaseUtil.java:224) ~[classes/:na]
at cn.chengzhiya.mhdfbot.listener.GroupMessage.onGroupMessage(GroupMessage.java:87) ~[classes/:na]
... 26 common frames omitted

运行或开发环境

  • 系统版本:Widnows 11 23J2 22631.3447
  • Shiro版本:2.2.3
  • 客户端版本:LLOneBot v3.24.0
  • JDK版本:JetBrains Runtime 17.0.9
  • SpringBoot版本:3.2.5

fastjson解析msg报错

详细描述
关于问题的详细描述。
fastjson解析msg报错
预期结果
你希望得到什么结果?
fastjson解析msg不报错
当前结果
实际产生的结果是什么?
fastjson解析msg报错
在最新的RELEASE版本中能否复现?
是否尝试过最新版本的Shiro?
是的
复现方法
如果可以,请提供能够稳定复现的方法。

屏幕截图或者日志
请添加屏幕截图或日志以快速定位问题。
image

运行或开发环境

  • 系统版本:[ 例如 CentOS Linux release 8.2.2004 (Core) ]
  • Shiro版本:[ 例如 v.1.2.7 ]
  • 客户端版本:[ 例如 go-cqhttp v1.0.0-beta8-fix2 ]
  • JDK版本:[ 例如 OpenJDK 17.0.1 2021-10-19 LTS ]
  • SpringBoot版本:[ 例如 2.5.5 ]

插件异常后在控制台无输出

详细描述
插件出现异常后,未将异常信息输出至标准输出

预期结果
将异常栈信息输出至标准输出

当前结果
无异常信息

在最新的RELEASE版本中能否复现?

复现方法
throw new RuntimeException("Test");

屏幕截图或者日志
无报错日志

运行或开发环境

  • 系统版本:[ CentOS 7 ]
  • Shiro版本:[ v.1.2.7 ]
  • 客户端版本:[ go-cqhttp v1.0.0-rc1 ]
  • JDK版本:[ openjdk version "1.8.0_282" ]
  • SpringBoot版本:[ v2.2.6.RELEASE ]

添加@MessageHandler注解和sendMessage方法

功能描述
添加@MessageHandler注解和sendMessage方法
@MessageHandler同时监听PrivateMessage和GroupMessage,sendMessage方法根据Message类型和来源发送消息。比如是PrivateMessage就sendPrivateMessage到Event的userId

新增webscoket client支持。

增加client端支持。

主要就是依赖配置项加载server端或者client端。
@ConditionalOnMissingBean
@ConditionalOnProperty(value = "bot.shiro.ws.server", havingValue = "true")
public WebSocketServerHandler createShiroSeverWebSocketHandler() {}

@ConditionalOnMissingBean
@ConditionalOnProperty(value = "bot.shiro.ws.client", havingValue = "true")
public WebSocketClientHandler createShiroClientWebSocketHandler() {}

[BUG] AT.OFF 不会对消息去除@

详细描述

AT.OFF 不会对消息去除@

预期结果
AT.OFF 对@自己也生效

当前结果
不会对消息去除@

在最新的RELEASE版本中能否复现?

复现方法
@自己

屏幕截图或者日志
image
image

[请求] ActionPathEnum 提供可扩展方式

是这样的,我在 go-cqhttp 看到的一些 request 发现在 ActionPathEnum 没有提供 (例如群精华消息,我找不到) ,于是便打算自行调用 ActionHandler 去做自定义的 API 请求。

但我发现 Enum 是没办法自行使用反射创建的,而且你的 ActionHandler 的 doActionRequest 方法中只能放入 ActionPathEnum 作为请求,因此我现在无法做自定义的 API 请求。如果要在不修改API源代码的前提下做,我只能重新实作一个新的 ActionHandler ,并使用反射获取现有 ActionHandler 的所有实例,极其麻烦。

如果此API会持续更新的话,我就需要每次有新的更新都要修改本API源代码一次,很麻烦。因此我希望你能接受 pull request ? 或者由作者本人去修改。

为 ActionPathEnum 提供可扩展方式很简单,只要创建一个 interface 去定义 enum 的方法 然后由 ActionPathEnum 去继承,最后 ActionHandler 的 doActionRequest 方法 接收 该 Interface 作为参数而不是 ActionPathEnum 就可以了。

public interface ActionPath {

  String getDesc();
  
  String getPath();

}
public enum ActionPathEnum implements ActionPath {

     SOME_ACTION("do_action", "某个请求"); // 更多如此类推

     private final String path;
     private final String desc;
    
    @Override
    public String getPath() {
        return this.path;
    }

    @Override
    public String getDesc() {
        return this.desc;
    }

    private ActionPathEnum(String path, String desc) {
        this.path = path;
        this.desc = desc;
    }
}
@Component
public class ActionHandler {
     // ....
     public JSONObject doActionRequest(WebSocketSession session, ActionPath action, JSONObject params) {
        // ....
        String path = action.getPath();
        String desc = action.getDesc();
        // .....
     }
     // .....
}

文档看不懂,呜呜呜

详细描述
关于问题的详细描述。

预期结果
你希望得到什么结果?

当前结果
实际产生的结果是什么?

在最新的RELEASE版本中能否复现?
是否尝试过最新版本的Shiro?

复现方法
如果可以,请提供能够稳定复现的方法。

屏幕截图或者日志
请添加屏幕截图或日志以快速定位问题。

运行或开发环境

  • 系统版本:[ 例如 CentOS Linux release 8.2.2004 (Core) ]
  • Shiro版本:[ 例如 v.1.2.7 ]
  • 客户端版本:[ 例如 go-cqhttp v1.0.0-beta8-fix2 ]
  • JDK版本:[ 例如 OpenJDK 17.0.1 2021-10-19 LTS ]
  • SpringBoot版本:[ 例如 2.5.5 ]

[问题] Array 类型消息转换时非法 CQ码 处理

/**
* string 消息上报转消息链
* TODO: 非法 CQ 码处理
*
* @param msg 需要修改客户端消息上报类型为 string
* @return 消息链
*/
public static List<MsgChainBean> stringToMsgChain(String msg) {
String splitRegex = "\\[|]";
JSONArray array = new JSONArray();
for (String s1 : msg.split(splitRegex)) {
if (s1.isEmpty()) {
continue;
}
JSONObject object = new JSONObject();
JSONObject params = new JSONObject();
if (!s1.startsWith("CQ:")) {
object.put("type", "text");
params.put("text", s1);
} else {
String[] s2 = s1.split(",");
object.put("type", s2[0].substring(s2[0].indexOf(":") + 1));
Arrays.stream(s2).filter((it) ->
!it.startsWith("CQ:")
).forEach((it) -> {
String key = it.substring(0, it.indexOf("="));
String value = ShiroUtils.unescape(it.substring(it.indexOf("=") + 1));
params.put(key, value);
});
}
object.put("data", params);
array.add(object);
}
return array.toJavaList(MsgChainBean.class);
}

MsgUtil支持更多参数

举例 图片 目前MsgUtils.img 仅仅支持一个参数file
实际onebot-11规定了还有
type cache proxy timeout参数

websocket链接问题

详细描述
在正向链接服务端时,服务端未开启或网络状态差会导致报错。

预期结果
在无法连接到服务端时,在N秒后尝试重新链接。

当前结果
969a0ac9c283b098f0974fff292da711

在最新的RELEASE版本中能否复现?
目前最新版本2.2.0可以复现

复现方法
关闭服务端,开启客户端链接启动shiro

屏幕截图或者日志
969a0ac9c283b098f0974fff292da711

运行或开发环境

  • 系统版本:win10
  • Shiro版本:2.2.0
  • JDK版本:17

2.1.9版本正向ws发送消息出错

详细描述
2.1.9版本使用正向ws连接onebot服务器, 发送消息出错

屏幕截图或者日志
报错日志:

2024-03-25 15:08:38.801 ERROR 26368 --- [ShiroTaskPool-5] c.m.s.h.injection.InjectionHandler       : Invoke method exception: null
java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at com.mikuac.shiro.handler.injection.InjectionHandler.invokeMethod(InjectionHandler.java:47) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.handler.injection.InjectionHandler.invoke(InjectionHandler.java:72) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.handler.injection.InjectionHandler.lambda$invokeMessage$2(InjectionHandler.java:257) ~[shiro-2.1.9.jar:na]
	at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
	at com.mikuac.shiro.handler.injection.InjectionHandler.invokeMessage(InjectionHandler.java:251) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.handler.injection.InjectionHandler.invokeGroupMessage(InjectionHandler.java:225) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.handler.event.MessageEvent.process(MessageEvent.java:107) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.handler.event.MessageEvent.group(MessageEvent.java:144) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.handler.event.MessageEvent.handler(MessageEvent.java:63) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.handler.EventHandler.handler(EventHandler.java:121) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.task.ShiroAsyncTask.execHandlerMsg(ShiroAsyncTask.java:38) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.task.ShiroAsyncTask$$FastClassBySpringCGLIB$$bf2eb263.invoke(<generated>) ~[shiro-2.1.9.jar:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) ~[spring-aop-5.3.23.jar:5.3.23]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: com.mikuac.shiro.exception.ShiroException$SessionCloseException: session been closed.
	at com.mikuac.shiro.handler.ActionHandler.action(ActionHandler.java:108) ~[shiro-2.1.9.jar:na]
	at com.mikuac.shiro.core.Bot.sendGroupMsg(Bot.java:163) ~[shiro-2.1.9.jar:na]
	at top.ikaori.bot.common.util.MessageUtil.sendGroupMsg(MessageUtil.java:41) ~[classes/:na]
	at top.ikaori.bot.common.util.MessageUtil.sendMsg(MessageUtil.java:72) ~[classes/:na]
	at top.ikaori.bot.core.aop.CommandAspect.groupPrefixCheck(CommandAspect.java:77) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.23.jar:5.3.23]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.23.jar:5.3.23]
	at top.ikaori.bot.plugins.Dao$$EnhancerBySpringCGLIB$$c6dfc5ea.dao(<generated>) ~[classes/:na]
	... 25 common frames omitted

启动日志, 中ws连接是正常的:

2024-03-25 15:11:03.371  INFO 10064 --- [           main] o.s.w.s.c.WebSocketConnectionManager     : Connecting to WebSocket at ws://********:3001
2024-03-25 15:11:03.540  INFO 10064 --- [cTaskExecutor-1] c.mikuac.shiro.adapter.WebSocketClient   : Account 379201421 connected
2024-03-25 15:11:03.547  INFO 10064 --- [cTaskExecutor-1] o.s.w.s.c.WebSocketConnectionManager     : Successfully connected

运行或开发环境

  • 系统版本:win10
  • Shiro版本:2.1.9
  • 客户端版本:llonebot
  • JDK版本:jdk17
  • SpringBoot版本:2.7.5

一个奇怪的bug

详细描述
运行的时候偶尔会出现oom报错,是在发图片的时候出现的,重启可以解决,出现的频率也不高,几个月目前只遇到过两三次,但出现之后发图很多都发不出来。

预期结果
你希望得到什么结果?

当前结果
2024-03-25T00:33:19.779+08:00 ERROR 19577 --- [ShiroTaskPool-3] c.m.s.h.injection.InjectionHandler : Invoke method exception: null

java.lang.reflect.InvocationTargetException: null
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invokeMethod(InjectionHandler.java:47) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invoke(InjectionHandler.java:72) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.lambda$invokeMessage$2(InjectionHandler.java:256) ~[shiro-2.1.8.jar:na]
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invokeMessage(InjectionHandler.java:252) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.handler.injection.InjectionHandler.invokeGroupMessage(InjectionHandler.java:226) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.process(MessageEvent.java:107) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.group(MessageEvent.java:144) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.handler(MessageEvent.java:63) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.handler.EventHandler.handler(EventHandler.java:121) ~[shiro-2.1.8.jar:na]
at com.mikuac.shiro.task.ShiroAsyncTask.execHandlerMsg(ShiroAsyncTask.java:38) ~[shiro-2.1.8.jar:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-6.0.2.jar:6.0.2]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.0.2.jar:6.0.2]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.0.2.jar:6.0.2]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) ~[spring-aop-6.0.2.jar:6.0.2]
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) ~[spring-aop-6.0.2.jar:6.0.2]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.lang.OutOfMemoryError: Java heap space

在最新的RELEASE版本中能否复现?

复现方法

屏幕截图或者日志

运行或开发环境

  • 系统版本:ubuntu 18
  • Shiro版本:2.1.8
  • 客户端版本:
  • JDK版本:jdk18
  • SpringBoot版本:

@ 匹配有bug

详细描述
目前@ 匹配有bug,目前只能做到@ 在内容前面,如果@放到内容后面,正则就匹配不上

预期结果
@ 无论放到内容签名还是后面,都可以正常匹配到。

当前结果
实际产生的结果是什么?

目前@ 匹配有bug,目前只能做到@ 在内容前面,如果@放到内容后面,正则就匹配不上

在最新的RELEASE版本中能否复现?
是否尝试过最新版本的Shiro?

复现方法
如果可以,请提供能够稳定复现的方法。

@GroupMessageHandler(at = AtEnum.NEED)
  public void test2(Bot bot, GroupMessageEvent event) {
      // 以注解方式调用可以根据自己的需要来为方法设定参数
      // 例如群组消息可以传递 GroupMessageEvent, Bot, Matcher 多余的参数会被设定为 null
      System.out.println(event.getMessage());
      String message = MsgUtils.builder().face(66).text("消息处理成功").build();
      bot.sendGroupMsg(event.getGroupId(), message, false);
  }

屏幕截图或者日志
请添加屏幕截图或日志以快速定位问题。
image

运行或开发环境

  • 系统版本:mac
  • Shiro版本:v2.0.0
  • 客户端版本: go-cqhttp v1.0.0-rc4
  • JDK版本:openjdk17
  • SpringBoot版本:3.0.2

[Bug]: ArrayMsg的问题

  1. keyboard 的构造层级很多 ArrayMsg中 Map<String, String> data 无法放入
{
    "type": "keyboard",
    "data": {
        "content": {
            "rows": [
                {
                    "buttons": [
                        {
                            "render_data": {
                                "label": "点击前",
                                "visited_label": "点击后",
                                "style": 1
                            },
                            "action": {
                                "type": 2,
                                "data": "/echo 2222",
                                "permission": {
                                    "type": 2,
                                    "specify_user_ids": [
                                        "100000"
                                    ]
                                },
                                "unsupport_tips": "这是一个markdown消息喵~"
                            }
                        }
                    ]
                }
            ]
        }
    }
}
  1. ArrayMsgUtil内重写的方法返回了MsgUtils 导致无法链式调用自己的方法
public class ArrayMsgUtil extends MsgUtils {
    private final List<ArrayMsg> builder = new ArrayList<>();

    @Override
    public MsgUtils text(String text) {
        builder.add(getJsonData("text", m -> m.put("text", text)));
        return this;
    }
}

未知类型的消息引发空指针错误

当前结果
发送qq内置的表情包时, 使用shamrock框架链接百分百出错

临时解决方案: 修改 此处
if (!MsgTypeEnum.text.equals(item.getType()))

下面是错误信息:
Message event process exception: Cannot invoke "com.mikuac.shiro.enums.MsgTypeEnum.equals(Object)" because the return value of "com.mikuac.shiro.model.ArrayMsg.getType()" is null

java.lang.NullPointerException: Cannot invoke "com.mikuac.shiro.enums.MsgTypeEnum.equals(Object)" because the return value of "com.mikuac.shiro.model.ArrayMsg.getType()" is null
at com.mikuac.shiro.common.utils.ShiroUtils.arrayMsgToCode(ShiroUtils.java:249) ~[shiro-2.1.3.jar:na]
at com.mikuac.shiro.common.utils.ShiroUtils.rawConvert(ShiroUtils.java:218) ~[shiro-2.1.3.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.process(MessageEvent.java:104) ~[shiro-2.1.3.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.group(MessageEvent.java:144) ~[shiro-2.1.3.jar:na]
at com.mikuac.shiro.handler.event.MessageEvent.handler(MessageEvent.java:63) ~[shiro-2.1.3.jar:na]
at com.mikuac.shiro.handler.EventHandler.handler(EventHandler.java:121) ~[shiro-2.1.3.jar:na]
at com.mikuac.shiro.task.ShiroAsyncTask.execHandlerMsg(ShiroAsyncTask.java:38) ~[shiro-2.1.3.jar:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-6.0.12.jar:6.0.12]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.0.12.jar:6.0.12]

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.