Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.9.0插件新生成的图片无法正常发送 #82

Closed
Pika-Lee opened this issue Sep 3, 2020 · 12 comments
Closed

1.9.0插件新生成的图片无法正常发送 #82

Pika-Lee opened this issue Sep 3, 2020 · 12 comments
Labels
plugin support Migrate legacy CoolQ plugin to Mirai Native

Comments

@Pika-Lee
Copy link

Pika-Lee commented Sep 3, 2020

描述这个Bug
更新1.9.0后,CQ插件加载后新生成(如从网络下载获取)的图片还是会存放在 \jre\bin\data\image,但由于1.9.0目录结构的改变,只有在data\image中的图片才能够正常发送。因此这类插件将无法正常发送图片

复现步骤
1.某插件从网上抓取了一张图片,默认保存在 \jre\bin\data\image目录下
2.mirai发送消息时,由于目录结构改变,只能从data\image读取图片,返回空
3.机器人发出的消息不带图片

期望的行为
mirai native能够兼容此类插件,使其在旧目录下生成的图片也能够正常发送。

截图和日志
QQ截图20200903163616

运行环境

  • 操作系统:[例子:Windows Server 2016]
  • mirai core 版本:[例子:1.2.2]
  • mirai console 版本:[例子:1.0]
  • mirai native 版本:[例子:1.9.0-M3-1]
  • Java 运行时版本:[例子:1.8.0 252]

更多信息
希望native能兼容一下旧图片位置,有些CQ插件已经停止维护了,插件本身难以通过修改代码来解决图片生成位置的问题,麻烦mirai能适配一下这类插件。

@Pika-Lee Pika-Lee added the bug Something isn't working label Sep 3, 2020
@PeratX PeratX added plugin support Migrate legacy CoolQ plugin to Mirai Native and removed bug Something isn't working labels Sep 3, 2020
@PeratX
Copy link
Member

PeratX commented Sep 3, 2020

确认用的是mirai native 1.9.0而非rc版本吗?从1.9.0正式版本开始,会强制设定插件的运行目录到本目录,如果无法使用,请替换稍后上传的CQP.dll帮助我们测试

@Pika-Lee
Copy link
Author

Pika-Lee commented Sep 3, 2020

确认用的是mirai native 1.9.0而非rc版本吗?从1.9.0正式版本开始,会强制设定插件的运行目录到本目录,如果无法使用,请替换稍后上传的CQP.dll帮助我们测试

确认,我用的是正式版,不是rc

@PeratX
Copy link
Member

PeratX commented Sep 3, 2020

好的,请您替换CQP.dllMiraiConsole\data\MiraiNative,不需要理会启动时的警告。
CQP.zip

@Pika-Lee
Copy link
Author

Pika-Lee commented Sep 3, 2020

好的,请您替换CQP.dllMiraiConsole\data\MiraiNative,不需要理会启动时的警告。
CQP.zip

替换了之后还是不出图,插件生成的图片还是位于 \jre\bin\data\image
222

@PeratX
Copy link
Member

PeratX commented Sep 3, 2020

还是易语言的问题,krnl.fne里面会修改目录

@PeratX PeratX closed this as completed in 2a9122d Sep 3, 2020
@Pika-Lee
Copy link
Author

Pika-Lee commented Sep 3, 2020

还是易语言的问题,krnl.fne里面会修改目录

图片中的那个插件确实是易语言写的,感谢修复。

不过好像不只是易语言的问题,另外一个插件不是用易语言写的,也出现了同样的问题。

我刚才问了一下那个插件作者,他说是和取目录地址的写法有关,和语言无关。他直接取的是根目录(CQ根目录-->\jre\bin\)下的/data文件夹,然后生成的图片还是位于 \jre\bin\data\image。(他的插件不是用易语言写的)

那个插件作者可能比较忙,刚才我问他也没有和我解释太多,上面一段我大概转述了一下他说的意思。我的个人理解是在1.9.0环境下,他插件用到的取目录方法还是取到了\jre\bin\而没有取到新目录地址,所以导致了插件生成的图片无法正常发送。

您看能不能这样?保持现有的策略不变(强制设定插件的运行目录到新目录),发送图片时默认取新目录data\image,如果找不到对应图片文件的话,再尝试从\jre\bin\data\image获取一次?

@PeratX
Copy link
Member

PeratX commented Sep 3, 2020

取目录不知道指的是什么,易语言载入插件时候会强制调用SetCurrentDirectory改变运行目录到exe所在位置,mirai native在加载之后也会调用SetCurrentDirectory设置正确的运行目录,但是易语言的取运行目录只会返回exe所在路径

@PeratX
Copy link
Member

PeratX commented Sep 3, 2020

还是易语言的问题,krnl.fne里面会修改目录

图片中的那个插件确实是易语言写的,感谢修复。

不过好像不只是易语言的问题,另外一个插件不是用易语言写的,也出现了同样的问题。

我刚才问了一下那个插件作者,他说是和取目录地址的写法有关,和语言无关。他直接取的是根目录(CQ根目录-->\jre\bin\)下的/data文件夹,然后生成的图片还是位于 \jre\bin\data\image。(他的插件不是用易语言写的)

那个插件作者可能比较忙,刚才我问他也没有和我解释太多,上面一段我大概转述了一下他说的意思。我的个人理解是在1.9.0环境下,他插件用到的取目录方法还是取到了\jre\bin\而没有取到新目录地址,所以导致了插件生成的图片无法正常发送。

您看能不能这样?保持现有的策略不变(强制设定插件的运行目录到新目录),发送图片时默认取新目录data\image,如果找不到对应图片文件的话,再尝试从\jre\bin\data\image获取一次?

现在的修复已经保留了jre文件夹下的data目录,可能需要管理员权限

@Pika-Lee
Copy link
Author

Pika-Lee commented Sep 3, 2020

取目录不知道指的是什么,易语言载入插件时候会强制调用SetCurrentDirectory改变运行目录到exe所在位置,mirai native在加载之后也会调用SetCurrentDirectory设置正确的运行目录,但是易语言的取运行目录只会返回exe所在路径

我看了一下截图中那个易语言插件的源码,eventStartup中有调用CQ.取应用目录 () ,这个目录应该被mirai的SetCurrentDirectory正确修改到了\data\MiraiNative\plugins
111

而涉及图片存储的代码有调用取运行目录 (),这里应该取的是exe的运行目录(CQ根目录-->\jre\bin\),这样就和前文截图中的图片存储位置对上了。
33333

应该是这里使用了取运行目录 (),所以插件生成的图片保存到了\jre\bin\data\image,而1.9.0以后的版本在处理[CQ:image,file=XXX]的时候,直接从data\image读取图片文件,因此图片没能在mirai中正常发送。

而且我发现这一问题不是个例,很多CQ插件其实都用到了类似**取运行目录 ()**的方法(不论是什么语言写的插件),在1.9.0-M3-1的环境下,这些插件一被加载,会在\jre\bin\data\image生成图片/图片文件夹。
456

现在的修复已经保留了jre文件夹下的data目录,可能需要管理员权限

感谢修复。要是mirai能将**取运行目录 ()**的地址解析成\jre\bin\往上两级目录的地址就好了,这样就能完美适配新图片目录了。或者能兼容一下旧图片目录地址的读取也行。

@PeratX
Copy link
Member

PeratX commented Sep 4, 2020

取运行目录 () 是易语言一大败笔,官方从未想过要修改,一直有人提出。

@Pika-Lee
Copy link
Author

Pika-Lee commented Sep 9, 2020

刚才安装了新发布的1.9.1版native,旧目录的图片已经可以正常显示了,感谢。

现在的修复已经保留了jre文件夹下的data目录,可能需要管理员权限
bug
不过还有点小问题,上图中的红色提示内容貌似每次启动mirai的时候都会弹出,无论是否以管理员的方式启动。

@PeratX
Copy link
Member

PeratX commented Sep 9, 2020

刚才安装了新发布的1.9.1版native,旧目录的图片已经可以正常显示了,感谢。

现在的修复已经保留了jre文件夹下的data目录,可能需要管理员权限
bug
不过还有点小问题,上图中的红色提示内容貌似每次启动mirai的时候都会弹出,无论是否以管理员的方式启动。

好的,这个将会修复

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
plugin support Migrate legacy CoolQ plugin to Mirai Native
Projects
None yet
Development

No branches or pull requests

2 participants