暂不支持QQ频道 你需要关注其他框架
wssy001 发布的帖子
-
RE: 如何以较低的内存占用运行mirai
@I-love-study 我去年的猜想正确 ,要想mirai运行时降低内存占用就得干掉JVM(Hotspot),方式有两种:
1:可以换VM编译
2:移植mirai协议至其他语言
我采用的是方式1,成功地用GraalVM编译mirai-core项目(用的是OpenJDK 19,Ubuntu 20.04 Docker镜像,mirai-core 2.13.3),机器人登录成功后内存仅占用60MB
同一套代码打成JAR包方式运行成功后则需要160MB的内存
但方式2可以做到把内存压到30MB以内,比如:mirai-go -
RE: 怎么使用mirai-core 登录
@Aye10032
我是mirai-core 2.13.2用户
新版的话 登录问题看论坛的一个帖子,大致步骤是:
mirai选Android Pad协议
手机QQ保持登录
然后mirai登录,触发手机验证码 -
RE: 上传群文件回执问题
@1130600015
我用的是mirai-core-jvm 2.13.2import net.mamoe.mirai.event.events.GroupMessageEvent; bot.getEventChannel() .subscribeAlways(GroupMessageEvent.class, groupMessageHandler::handle);
可以点击此处在线查看Mirai提供的事件列表 -
RE: 上传群文件回执问题
群文件上传成功会触发GroupMessageEvent,你只需要判断该event中是否包含FileMessage即可。
个人建议,在你处理GroupMessageEvent代码中打个断点,然后上传一个群文件看看GroupMessageEvent中有哪些信息是你需要的。
顺带说一下,群文件删除是会触发MessageRecallEvent.GroupRecall事件,但从中无法获取被删除文件的信息,可能需要其他方法或途径实现,还是等待大佬答疑解惑吧。 -
RE: 如何将内存占用映射到QQ昵称上
获取机器人实时占用信息,这个调用JDK自带的方法(也可以使用非常棒的第三方库Oshi),对数据进行一些格式化即可,网上还是有不少使用案例,Ctrl + CV即可。
貌似Mirai还没支持Bot的昵称修改,建议自定义一个关键词、指令,让bot将信息发送至目标QQ或QQ群。也可以使用定时任务让Bot主动推送系统资源占用情况。 -
Image.isUploaded()失效了?
项目有个需求,当上传的图片过大时先返回一个“图片正在上传中……”的提示。
查看文档,发现了这个Image.isUploaded()方法
照着注释试了几次,发现效果不符预期,返回结果总是false。环境:
OpenJDK 17 Mac OS Monterey 12.6.1 mirai-core-jvm 2.13.0-RC2 SpringBoot Maven 项目
测试操作
我先是如下操作File file = new File(photoPath); try (ExternalResource resource = ExternalResource.create(file)) { String suffix = FileNameUtil.getSuffix(file); // 我能确保该方法返回的imageId与Bot.uploadImage()返回的一致 String imageId = generateImageId(resource.getMd5(), suffix); Image image = Image.fromId(imageId); // false,即使我能确保QQ服务器中存在该图片 return Image.isUploaded(image, bot); } catch (Exception e) { return false; }
查看源码,又通过Image.Builder构造Image对象
File file = new File(photoPath); try ( ExternalResource resource = ExternalResource.create(file) ) { BufferedImage bufferedImage = ImageIO.read(file); String suffix = FileNameUtil.getSuffix(file); String imageId = generateImageId(resource.getMd5(), suffix); Image.Builder builder = Image.Builder.newBuilder(imageId); builder.setType(); builder.setSize(); builder.setWidth(); builder.setHeight(); // 我能确保上述参数与Bot.uploadImage()返回的一致 Image image = builder.build(); // 仍然是false,图片的确在服务器上 return Image.isUploaded(image, bot); } catch (Exception e) { return null; }
不确定是不是BUG。X (
暂时的替代方法如下:
通过Image.queryUrl()获取图片的URL,调用http GET请求获取目标图片,也可通过状态码来进行简易判断。 -
RE: Bot定时主动发送一条消息
@ConstantineQAQ 无非就是一个定时任务的编写 这里说一个原生方案, 用ScheduledExecutorService啊,JDK自带的,网上有使用方法
-
RE: 想问问如何在 mirai-core 中使用 Myabtis-plus
关于spring环境的建议,个人看法是:
认清mirai机器人在项目中的角色。如果你的项目简单、业务围绕机器人展开,不太建议使用spring;但如果mirai在你的项目中仅充当一个用户交互方式(例:消息通知、消息传递等),建议使用spring环境。当然,如果你熟悉spring或springboot,那为啥不用spring或springboot反而去用mirai的依赖环境?mybatis-plus使用了spring的AOP、事务等内容,导致它与非spring(或非springboot)项目不能完美兼容。当你使用mybatis-plus作为ORM时,你的项目注定是spring(或springboot)的!
-
RE: 如何实现把小程序卡片发送至群?
你是指卡片消息?卡片消息相关文档
相关示例:
XmlMessageBuilder xmlMessageBuilder = new XmlMessageBuilder(); xmlMessageBuilder.setAction("web"); xmlMessageBuilder.setBrief("只是一条关于XX的说明"); xmlMessageBuilder.setSourceName("来源于XX APP"); xmlMessageBuilder.item(-23296, 2, itemBuilder -> { itemBuilder.picture("图片URL"); itemBuilder.title("标题是:XXX"); itemBuilder.summary("sth here", "#000000"); return null; }); xmlMessageBuilder.item(0, 6, itemBuilder -> { itemBuilder.summary("sth here", "#000000"); return null; }); MessageChain chain = new MessageChainBuilder() .append(new SimpleServiceMessage(95, xmlMessageBuilder.getText())) .build();
当然也可以直接利用现成的XML/JSON卡片数据,直接构造一条卡片消息。
-
RE: mirai有无可以发送自定义xml的插件a我记得之前有看见过
可以自行构造 相关文档 mirai我记得是可以直接发送XML/JSON的,但是服务消息这块很不稳定(腾讯对于QQ服务消息这块比较严,搞了个token,暂不清楚如何获取)。个人建议可以把简单的卡片消息直接渲染成一张图片发送出去。此外,QQ的卡片消息在Mac OS,IOS,PC和Android上没有做好统一渲染,尤其是Mac OS用户比较惨。
-
RE: Java + Springboot 导致后台有收到消息,而实际群消息没有返回的问题
没有返回?可否告知你的mirai-core版本,我这边是mirai-core 2.10.x + springboot 2.6.x,正常使用中。另外,建议debug一下,判断是mirai-core的问题还是说项目代码逻辑问题。