RT.随着插件的深入开发,发现Dice!提供的读取数据文件函数已经不能够满足对更高自由度的追求(

UserConf等文件为字节流文件,如果需要浏览和修改其中的一些数据较为困难,且如果需要将Lua脚本的数据和其他插件,比如mirai插件、nonebot2等共通,将带来巨大的阻碍(痛哭)

所以下午花了点时间对getUserConf,setUserConf,getGroupConf,setGroupConf,getUserToday,setUserToday函数进行了重写,配合json.lua读写json文件

对内置函数的优化:更高的自由度,可随时查看的json文件;第三参数存储的数据类型为任何lua支持的数据类型;支持一次读写多个数据,避免了需要读取多个数据时带来的重复劳动。

示例:
local v1,v2,v3=GetUserToday(msg.fromQQ, {"key1","key2","key3"}, {d1,d2,d3})
SetUserConf(msg.fromQQ,{"key1","key2","key3"},{value1,value2,value3})
至少我觉得这样舒服点

至于json的相关知识,可以看这里,写的真的很详细!w

若要实现UserToday的定时清空,建议使用Dice!的定时任务,可以在这里找到

实际上这可以当做一个模板,只需稍稍修改即可随时使用

json-io.txt
6kB

请修改开头的json.lua和你的文件路径,修改文件后缀名为.lua后即可在需要时require导入

没有json.lua?(修改后缀)

json.txt
10kB

当然,如果已经大规模使用了内置函数,那么..你可能需要花点功夫转移数据( 比如将所有的数据项重新读入新的json中 嗯…虽然但是,如果不是重度开发患者/对自由度有更高追求/需要数据共通的人来说,内置的完全够用了

纯属摸鱼乱写的有更好的想法还请告诉我


呃,有人问清空UserToday的函数该怎么写(

taskcall.txt
460B

然后按照定时任务注册一下就好了(嗯

    2 个月 后
    9 天 后

    还是进行一波预警(,因为UserConf.json数据文件仅有一个,在实际使用中,若字段达到一定数量后,有可能出现同时读写同一文件而导致意想不到的错误。

    最安全有效的方法是使用数据库,但因为当时配置luasql过程中出现了奇怪的问题解决无果才使用本方法。后对数据和文件结构进行了优化,对每一个用户以QQ作为文件夹名,文件夹内按照数据种类分成不同的json文件,将能有效解决此类问题。

    | -- 数据文件目录
          | -- QQ1
                 | --文件1.json
                 | --文件2.json
                 | --文件3.json
          | -- QQ2
                 | --文件1.json
                 | --文件2.json
                 | --文件3.json

    修改方式为将原函数增加filename参数用于指定具体的数据文件即可,创建文件夹/文件可用lua的os.execute执行系统命令即可。linux下,创建文件夹mkdir xx等。

    以下为可能的优化案(linux环境下)

    io.txt
    7kB
    说点什么吧...