• 拓展文件
  • 【指令脚本】仿赵的.sn功能,根据跑团数据实时更新群名片

注意事项

请注意,这个脚本的使用有亿点点麻烦,当前版本的帮助指引也不是很全面,总之bug很多,也可能没法解决,请做好心理准备。在使用前,请将Dice!更新到最新版,不然群管理权限获取会有更多问题

  • bot为群管理的群方可使用
  • 由于Dice!当前版本缓存机制,设置群管理需bot重启才能读取权限
  • 如果要如果骰娘要开启随跑团数据自动更新功能,建议骰主发送【.strGroupCardSet {FormFeed}】将默认的群名片修改回执关闭,不然会一直弹出来,很麻烦
  • 该lua不能直接使用,需要更改列在最前面的一些变量,有些东西需要去读代码和注释才能搞定
  • 与赵骰不一样,san后面为用户在上一次记录的san值,用以查看pc是否进入不定性疯狂,或许这会比san的上限更常用
  • 更改群名片不会影响到log,这点放心吧

说明

于赵骰基础上改动的.sn指令 ver4.0 made by 32w
发布更新于Dice!论坛,bot为群管理方可使用
由于Dice!缓存机制,设置群管理需bot重启才能读取权限,维斯特拉重启时间为每日:看心情

  • .sn \\改名片,san后面的值为lastsan,第一次使用lastsan=san
  • .st lastsan 70 \\手动设置lastsan
  • .newday \\新的一天,改名片,lastsan=当前san

维斯特拉已支持随跑团数据实时更新群名片。

  • .sn auto on \\开启
  • .sn auto off \\关闭,默认关闭

使用不省略空格的指令调用实时更新,如【.sc 1/1d4】【.st hp-1】可以更新,【.sc1/1d4】【.sthp-1】则不能
(此消息会在使用【.sn help】或第一次在本群使用【.sn】时发送)

效果

源码

--于赵骰基础上改动的.sn指令 made by 32w
--发布更新于Dice!论坛,bot为群管理方可使用
msg_order = {}

local diceQQ="3056492612" --请一定要在这里把这一串改成骰娘的qq号
local allowAuto=true --随跑团数据更新群名片功能的总开关,需要骰主按照教程进行相关配置之后再设置为true。教程我懒得写……很麻烦,可以来问我倒是
local rebootTime="看心情" --既然骰主使用了这个插件,一定也设置好了定时重启功能,请在这里把你的bot的重启时间写一下吧
local version=4.0


msg_order[".sn"]="sn"
function sn(msg)
    local name = string.match(msg.fromMsg,"^[%s]*(.-)[%s]*$",4)--匹配文本
    
    local info=""
    if(name and #name>0) then --sn后面附带有内容
        if(name=="help") then --显示帮助
            if(allowAuto) then
                return "于赵骰基础上改动的.sn指令 ver"..version.." made by 32w\n发布更新于Dice!论坛,bot为群管理方可使用\n由于Dice!缓存机制,设置群管理需bot重启才能读取权限,{self}重启时间为每日:"..rebootTime.."\n.sn   \\\\改名片,san后面的值为lastsan,第一次使用lastsan=san\n.st lastsan 70     \\\\手动设置lastsan\n.newday             \\\\新的一天,改名片,lastsan=当前san\f{self}已支持随跑团数据实时更新群名片。\n.sn auto on  \\\\开启\n.sn auto off  \\\\关闭,默认关闭\n使用不省略空格的指令调用实时更新,如【.sc 1/1d4】【.st hp-1】可以更新,【.sc1/1d4】【.sthp-1】则不能\n(此消息会在使用【.sn help】或第一次在本群使用【.sn】时发送)"
            else
                return "于赵骰基础上改动的.sn指令 ver"..version.." made by 32w\n发布更新于Dice!论坛,bot为群管理方可使用\n由于Dice!缓存机制,设置群管理需bot重启才能读取权限,{self}重启时间为每日:"..rebootTime.."\n.sn   \\\\改名片,san后面的值为lastsan,第一次使用lastsan=san\n.st lastsan 70     \\\\手动设置lastsan\n.newday             \\\\新的一天,改名片,lastsan=当前san\f{self}不支持随跑团数据实时更新群名片(此消息会在使用【.sn help】或第一次在本群使用【.sn】时发送)"
            end
            --return "xxx仿照赵骰且有微小改动的.sn功能ver0.1 made by 32w\n发布于Dice!论坛,访问以获取最新版xxx\n1.使用.sn auto on开启本群随跑团数据更新群名片功能,使用.sn auto off关闭,默认关闭\n  1.1如果骰娘要开启随跑团数据自动更新功能,建议骰主①发送【.strGroupCardSet  {Formfeed}】将默认的群名片修改回执关闭\n  1.2②骰主将代码最前面修改为【local allowAuto=true】\n2.由于Dice!内部缓存机制问题,在设置骰娘群管理权限之后,需要重启骰娘才能读取权限。建议使用该插件的骰主发送【】设定每天五点重启mirai来应对。"
        elseif(name=="auto on") then
            setGroupConf(msg.fromGroup, "cardAutoUpdate", true)
            return "实时更新群名片开"
        elseif(name=="auto off") then
            setGroupConf(msg.fromGroup, "cardAutoUpdate", false)
            return "实时更新群名片关"
        else
            info=name
            local order=".group card "..msg.fromQQ.." "..name
            eventMsg(order, msg.fromGroup, diceQQ)
        end
    else
        info=update_card(msg)
    end
    return "{self}已尝试将群名片修改为『"..info.."』,若不成功请发送『.sn help』"
end

msg_order[".newday"]="newday"
function newday(msg)
        local lastsan=getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "san",0)
        setPlayerCardAttr(msg.fromQQ, msg.fromGroup, "lastsan", lastsan)
        
        update_card(msg)
        
        return "沙漏翻转,{pc}的lastsan值置为"..lastsan..",新的一天到来了"
end

function check_update(msg)
    if(allowAuto) then
        if(getGroupConf(msg.fromGroup, "cardAutoUpdate", false)) then 
            update_card(msg)
        end
    end
end

function update_card(msg)
        local order=".group card "..msg.fromQQ.." "
        --获取角色卡名称
        local pcname=getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "__Name","无名朋友")
        if(pcname=="角色卡") then
            pcname=getUserConf(msg.fromQQ,"nick#"..msg.fromGroup,"")
        end
        
        --获取当前属性
        local hp=getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "hp",0)
        local san=getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "san",0)
        local dex=getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "dex",0)
        
        --获取上限
        local maxhp=math.floor((getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "体型",0)+getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "体质",0))/10)
        --local maxsan=99-getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "cm",0)
        
        --加载用户在上一次记录的san值,用以查看pc是否进入不定性疯狂,或许这会比san的上限更常用。
        --第一次使用sn的时候将会记录当前的san值,如果想要更改,请使用【.newday coc】或者【.st lastsan xx】指令
        --如果仍然希望显示san的上限,将这一块代码用--[[]]注释掉,并且将上面一行定义的maxsan前面的注释去除
        local maxsan=getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "lastsan",getPlayerCardAttr(msg.fromQQ, msg.fromGroup, "san",0))
        setPlayerCardAttr(msg.fromQQ, msg.fromGroup, "lastsan", maxsan)
        --到这里为一块
        
        info=pcname.." hp"..hp.."/"..maxhp.." san"..san.."/"..maxsan.." dex"..dex
        eventMsg(order..info, msg.fromGroup, diceQQ)
        print("changCardOk")
        return info
end

--以下部分监听.sc\.st hp\.st san指令,如果不使用实时更新角色卡功能可全部删去
msg_order[".sc "]="sctest"--请注意这里.sc后面跟着的空格很重要,如果删去则会陷入无限循环
function sctest(msg)
    local rest = string.match(msg.fromMsg,"^[%s]*(.-)[%s]*$",5)--匹配文本
    eventMsg(".sc"..rest, msg.fromGroup, msg.fromQQ)
    --执行sc,这里之所以不会陷入无限循环是因为函数只匹配有空格的sc,不匹配无空格的。算是绕了个小圈子
    sleepTime(5000)--确保属性修改在前,延迟更新群名片
    check_update(msg)
end

msg_order[".st hp"]="sthp"--请注意这里的空格很重要,如果删去则会陷入无限循环
function sthp(msg)
    local rest = string.match(msg.fromMsg,"^[%s]*(.-)[%s]*$",7)--匹配文本
    eventMsg(".sthp"..rest, msg.fromGroup, msg.fromQQ)
    sleepTime(5000)
    check_update(msg)
end

msg_order[".st san"]="stsan"--请注意这里的空格很重要,如果删去则会陷入无限循环
function stsan(msg)
    local rest = string.match(msg.fromMsg,"^[%s]*(.-)[%s]*$",8)--匹配文本
    eventMsg(".stsan"..rest, msg.fromGroup, msg.fromQQ)
    sleepTime(5000)
    check_update(msg)
end

下载地址

sn4.zip
3kB
4 天 后

想问一下,装上之后,发送。sn,然后骰子会在群里面一直重复发送那串第一次用时候才会发送的消息刷屏,我该怎么修复这个情况呢?

    6 个月 后

    请问,是不是装上这个插件之后,小窗给骰子发送属性录入和属性变化就无法使用了呢,还是我漏掉了什么设置…?

    17 天 后

    大佬你好,安装成功以后不知道怎么设置每日重启时间,在“看心情”里应该把看心情修改成什么格式才行呢?还是说手动重启一次就行了?谢谢大佬!

      314159Zx 这个rebootTime只出现在了帮助词条里,说明这只是给使用此脚本的用户看的,还是要头猪本人手动重启,如果你把看心情改成每天早上六点,那么帮助词条就会发生相应的变化,而你则需要在每天早上六点手动重启

      5 个月 后
      32老师好久没上论坛了,我来做点优化好了

      适用于go-cghttp框架dice的sn插件优化

      sn41.zip
      3kB

      优化如下:

      • 1.使用新版本dice函数获取骰娘账号,不需要骰主手动打开文件填写;
      • 2.在接收到.sn指令时,若在dice缓存中的骰娘群权限不是管理员,将会使用gocq的api来自动获取最新信息,省去
        了每次都要重启的麻烦。

      其他代码都没动过,从我的水平没觉得32老师高技术力的代码有什么优化的必要(

      此优化仅适用于gocq框架,且在使用前需要配置好http通信

      关于http通信配置,可以参考gocg的api调用配置http通信部分
      如果HTTP监听地址中的15700改成了其他的数字,请手动打开此插件,修改第6行的port值为对应的数字。

      测试发现骰娘刚被设为管理时,短时间依然会有读不到权限的情况,原因不明。不过稍等一小段时间就能正常使用。

        ray91 作为群管的时候

        这应该是预期行为吧,毕竟群管权限<群主

        12 天 后

        由于收到反馈,存在长时间骰娘依然读不到权限的情况,这里做一个小更新。
        但我也不知道为什么

        • 更新.sn init指令,手动获取当前最新权限
        sn42.zip
        3kB
        5 个月 后

        小补丁(填坑)

        • 增加了私聊窗口检测
        • 首次使用.sn指令时将会附带插件说明
        • .sn help也写为一个指令,将会出现在 [扩展指令] 词条中
        sn43.zip
        3kB
        说点什么吧...