Samarium150 / mirai-console-drift-bottle

mirai-console的漂流瓶插件
GNU Affero General Public License v3.0
32 stars 6 forks source link

feat: save special message as file #5

Closed LaoLittle closed 2 years ago

LaoLittle commented 2 years ago

有时候过太久可能就发不出来了(最近是漂流瓶里的图片根本就发不出来,不知道是不是tx改了什么检测机制?),而像pixiv-helper之类的把本地图片上传的插件就不受影响

LaoLittle commented 2 years ago

不过这样的话按理来说丢出后的提示语应该也不能发出的

LaoLittle commented 2 years ago

貌似是mirai的问题,刚刚看到更新

LaoLittle commented 2 years ago

不过考虑到一些问题,还是问问能不能将图片下载到本地

Samarium150 commented 2 years ago

不过考虑到一些问题,还是问问能不能将图片下载到本地

得加钱 保存图片这个功能本身挺容易实现,但是得重新设计漂流瓶的序列化。当初就是因为嫌麻烦才没写的。现在要实现的话可能还得考虑与现在已经保存的漂流瓶的兼容性。

LaoLittle commented 2 years ago

不过考虑到一些问题,还是问问能不能将图片下载到本地

~得加钱~ 保存图片这个功能本身挺容易实现,但是得重新设计漂流瓶的序列化。当初就是因为嫌麻烦才没写的。现在要实现的话可能还得考虑与现在已经保存的漂流瓶的兼容性。

就是懒 我觉得可以先给个命令,遍历检索漂流瓶中的mirai码下载到本地并替换为对应格式

Samarium150 commented 2 years ago

其实自从 #4 加入用nextMessage之后其他形式的SingleMessage也得考虑如何正确序列化以及回复, 比如转发消息ForwardMessage等,不能和Plaintext在同一条消息内的类型。

LaoLittle commented 2 years ago

其实自从 #4 加入用nextMessage之后其他形式的SingleMessage也得考虑如何正确序列化以及回复, 比如转发消息ForwardMessage等,不能和Plaintext在同一条消息内的类型。

是的

LaoLittle commented 2 years ago

像是PlaintextImage甚至QuoteReply是可以合并在一起的 但是转发消息,视频这种会吞掉消息链的Plaintext之类的 我觉得可以先发送此类消息,然后发送一条你将上面的消息丢入海中

LaoLittle commented 2 years ago

不过我觉得视频就不要保存到本地了,太笨重了

Samarium150 commented 2 years ago

目前我的想法是在不考虑兼容性的情况下,瓶子只存一个ID,比如用UUID,然后内容都保存在data/${PluginID}/${BottleID}目录里,Sea.yml就变成了瓶子ID的集合

LaoLittle commented 2 years ago

我的想法是只保存图片语音,并像你说的用UUID 不过标记的是图片或语音的文件,把类似%image{文件名}%这样的标记upload并序列化成mirai code 然后直接replacedeserializeMiraiCode()

LaoLittle commented 2 years ago

这样貌似也就不需要对Sea里的漂流瓶内容做额外的修改了

LaoLittle commented 2 years ago

捡起旧漂流瓶报错emmmm

文件未找到,虽然可以发送但是报错很难受 还是把MiraiConsoleDriftBottle.logger.error(e)删了吧

LaoLittle commented 2 years ago

感觉直接用imageid的方案确实优于uuid,因为同一张图片的imagid是相同的,磁盘也只会保存一张(虽然貌似会重复写入,但还是只有一张)

Samarium150 commented 2 years ago

捡起旧漂流瓶报错emmmm

文件未找到,虽然可以发送但是报错很难受 还是把MiraiConsoleDriftBottle.logger.error(e)删了吧

可以考虑增加在缓存缺失时重新尝试缓存的功能?

LaoLittle commented 2 years ago

捡起旧漂流瓶报错emmmm 文件未找到,虽然可以发送但是报错很难受 还是把MiraiConsoleDriftBottle.logger.error(e)删了吧

可以考虑增加在缓存缺失时重新尝试缓存的功能?

我觉得不错

LaoLittle commented 2 years ago

还有一个就是,删除文件的那里判断出错了

加个感叹号才对

if (!GeneralConfig.incremental) file.delete()

而且deleteOnExit()是我自动补全选错的...

Samarium150 commented 2 years ago

还有一个就是,删除文件的那里判断出错了

加个感叹号才对

if (!GeneralConfig.incremental) file.delete()

而且deleteOnExit()是我自动补全选错的...

确实,等会儿修。deleteOnExit也能用

Samarium150 commented 2 years ago

还有一个就是,删除文件的那里判断出错了

加个感叹号才对

if (!GeneralConfig.incremental) file.delete()

而且deleteOnExit()是我自动补全选错的...

不过直接删掉缓存图片不太科学,如果别的漂流瓶有相同图片的话就会读不到

LaoLittle commented 2 years ago

还有一个就是,删除文件的那里判断出错了 加个感叹号才对 if (!GeneralConfig.incremental) file.delete() 而且deleteOnExit()是我自动补全选错的...

不过直接删掉缓存图片不太科学,如果别的漂流瓶有相同图片的话就会读不到

还得考虑这个,要不干脆不删了

LaoLittle commented 2 years ago

或者说是记录相同id图片在Sea里的数量?当图片数量为0时删除图片