好感度系统
Dr.Amber
1.3.6
all
User(DreamWorld用户系统)
OlivaDiceCore
一个使用json书写好感度的ovo插件 尚未进行全面测试,可能存在潜在bug Favor.json:词条文件 Config.json:配置文件 警告:因读取错误将导致文件初始化,请多多备份以防意外。 指令前缀:*favor 可用指令:*favor on开启本群好感度、*favor off关闭本群好感度 更新日志:AmberKeter
Favor.json
Config.json
*favor
*favor on
*favor off
遗憾的是目前并没有截图可供参看 范例链接:AmberKeter
基础数据结构: 父键名键名对应值数据类型默认值说明 无[关键词]object/list/stringnull键名用于声明关键词。若值不为Object,则触发模式视为[common] [关键词]modestring“unity”指定响应机制,可选值为unity(全局)、group(仅限群聊)、private(仅限私聊) [关键词]cdint/list/float0.0指定默认回复冷却时间、冷却未到回复与作用域,类型不为list时只指定cd时长,单位为秒(s),当数值不大于0时将关闭cd [关键词]maxint/list0指定默认一日触发上限、已到上限回复与作用域,格式同cd,类型不为list时只指定一日上限,单位为次,当数值不大于0时将关闭max [关键词]returnobject/string/listnull指定回执语句,不为object则触发模式默认为[common]。可选触发模式有:special(特殊用户回复)、level(权限回复)、favor(好感区间回复)、common(一般回复)。优先级依次递减,高优先级回复会覆盖低优先级回复。触发模式的对应值为list。权限回复暂不可用。 specialuidlist/string[]用于记录可触发者的uid(格式为标准uuid),若仅有一人可触发,则值可为字符串 levelintervallist/int[null,null]指定权限组区间,左闭右开,null代表正/负无穷 favorintervallist/int[null,null]指定好感区间,左闭右开,null代表正/负无穷 [触发模式]replyobject/string/listnull设定回执语句,不为object时则直接回复,为null时不回复。 replycdint/float0.0指定该触发模式冷却时间,将覆盖默认冷却时间重新计算 replymaxint0指定该触发模式一日上限,将覆盖默认一日上限重新计算 replysuccessbooltrue指定该触发模式是否记为一次成功的触发,若为false,则触发后将不写入数据,即下一次触发的冷却与上限将不计算本次触发。 replychangelist/int0指定好感变化范围,为0时不变。可使用闭区间的形式。 replyreplystring/listnull指定回复语句,为list时元素可为object cd与max数据结构: 索引默认值数据类型说明 00.0/0float/int冷却时长/一日上限 1nullstring冷却未到/已到上限时的回复语句 2“all”string/list指定作用域,all指全部,为list时可选多个。可选元素:所有触发模式。 reply元素数据结构: 键名默认值数据类型说明 strnullstring/list回复语句,此处仍可使用list,但元素为object时将只可以有str与weights两个键名 weights1int指定权重,可以理解为随机池中存在几个该条回复 successnullbool为null时继续使用默认success changenullint/list为null时继续使用默认change
基础数据结构:
unity
group
private
list
object
special
level
favor
common
触发模式的对应值为list
null
false
reply
cd与max数据结构:
reply元素数据结构:
str
weights
标识符对应值 FavorChange好感变化回复,将自动添加在回复末尾。需手动填写 nick触发者昵称 now当前时间戳 selfid自己的id 时间差值还需等待cd的秒数,仅用于cd回复 一日上限该词条的一日上限,仅用于max回复 change好感变化,仅用于好感变化回复 change_abs好感变化绝对值,仅用于好感变化回复 now_favor当前好感,仅用于好感变化回复 favor原好感,用于好感变化回复与正常回复 好感变化结构: 当为string时,直接回复。 当为object时,若好感变化为正,回复"up"的对应值,若好感变化为负,回复"down"的对应值。
好感变化结构: 当为string时,直接回复。 当为object时,若好感变化为正,回复"up"的对应值,若好感变化为负,回复"down"的对应值。
string
看了眼代码,我怀疑没有OlivaDiceCore的情况下有可能会出现异常
无言HideUsSaveUs OlivaDiceCore用于判断master与管理权限,缺失会导致无法开关的情况
AmberKeter 你可以搞个判断,没有OlivaDiceCore就用备用方案,当然前提是你有备用方案
AmberKeter 但是你前置插件里没写啊。
2022.4.2更新日志:
无言HideUsSaveUs 这就补上.jpg
2022.6.8更新日志:
2022.6.30更新日志:
想看看使用案例。
sfw2099 已录入需求,将在月底进行第一次案列书写。
大佬,青果三版能用么
封不语 啊?
封不语 本插件目前仅适配于OVO3
AmberKeter 太可惜了
关于更早的权限判断问题: 将于未来发布Level插件,以此代替OlivaDiceCore的Master判断,但OlivaDiceCore仍将会是主要方案之一
以下是标准Favor单元: 以下是标准配置文件: 注意:FavorChange字段可以直接定义为字符串,但将不会判断正负以选择不同回复。 以下是标准情况下Favor插件数据文件夹: Favor单元说明: 2行的test指明何种关键词将触发本单元,格式为标准正则字符串。 3行的mode字段指明匹配格式,此处为私聊触发。 4行的cd字段指明冷却时间配置,第一个数字代表冷却的秒数,第二个字符串代表冷却未到的回复,第三个代表作用的范围,此处代表仅作用于common与favor回复,不限制special回复。如果仅需限制一个,可以使用字符串作为最后的元素。 5行的max字段指明一天最高次数上限,格式与cd类似。 6行的return指明返回内容,在无其他内容时默认为common模式,但必须确保回复单元不为dict(即被{}包裹的完整对象),形式如下: 7行的special字段定义指定用户回复,只有特定用户可以触发,特定用户组在9行的uid字段中定义,格式为标准UUID(8-4-4-4-12),获取自己的uid请使用*user info指令。 11行的favor字段定义好感区间回复,只有在好感区间内的用户可以触发,其中interval字段定义好感区间,可以直接指定一个整数,但不建议这么做。 好感区间的标准格式为[ left , right ] 好感区间实质上等同于闭区间,可以理解为由符合left ≤ x ≤ right的实数所构成的集合,当left/right为null时,代表-∞/+∞,即负/正无穷大。 14行的change定义好感变化区间,代表触发后用户的好感变化,同样为闭区间。 15行的cd定义冷却时长,在缺省情况下使用4行定义的默认配置(即4行列表的第一个元素)。 同时还有一个缺省的success字段,定义是否计入今日触发次数,默认为是。 你可能会注意到8、13、18-28行的reply字段不太一样,这是正常的,其代表回复语句的两种格式。 第一种,暴力回复。格式为字符串或元素均为字符串的列表,将不做额外处理直接回复。 第二种,精细回复。格式为元素均为dict(即被{}包裹的完整对象)的列表,此时回复将可以进行细化操作,如概率回复,不同回复产生不同效果等,在一定程度上简化书写。 以18-28行为例,19-24行定义了一个回复单元,25-27行也定义了一个回复单元。 在回复单元中,所有缺省的字段将使用上级设置的默认设置(如cd、success、change) 21行的weights定义该单元权重,默认为1。其定义该单元在总回复池内的个数,用于调节抽中概率。 20行的str定义最终回复,此时强制要求必须为字符串或元素均为字符串的列表。 以下是实际运行情况: 此时琥珀的favor为0,uid为57964ba1-4450-401a-b642-73fad0e6a0b9。 因此触发了common回复,但因为脸比较黑,好几次都没抽中加100的大包。 此时琥珀的favor已达到100,因此执行了favor回复,同时立刻再次触发,导致触发冷却,返回了冷却未到回复,等到冷却结束后再触发就又是正常的favor回复了。同时此处琥珀发现favor的回复没有改变好感,因此捉到了bug的虫脚。 标准范例文件: favor.zip735B
以下是标准Favor单元:
以下是标准配置文件: 注意:FavorChange字段可以直接定义为字符串,但将不会判断正负以选择不同回复。
注意:FavorChange字段可以直接定义为字符串,但将不会判断正负以选择不同回复。
以下是标准情况下Favor插件数据文件夹:
Favor单元说明: 2行的test指明何种关键词将触发本单元,格式为标准正则字符串。 3行的mode字段指明匹配格式,此处为私聊触发。 4行的cd字段指明冷却时间配置,第一个数字代表冷却的秒数,第二个字符串代表冷却未到的回复,第三个代表作用的范围,此处代表仅作用于common与favor回复,不限制special回复。如果仅需限制一个,可以使用字符串作为最后的元素。 5行的max字段指明一天最高次数上限,格式与cd类似。 6行的return指明返回内容,在无其他内容时默认为common模式,但必须确保回复单元不为dict(即被{}包裹的完整对象),形式如下: 7行的special字段定义指定用户回复,只有特定用户可以触发,特定用户组在9行的uid字段中定义,格式为标准UUID(8-4-4-4-12),获取自己的uid请使用*user info指令。 11行的favor字段定义好感区间回复,只有在好感区间内的用户可以触发,其中interval字段定义好感区间,可以直接指定一个整数,但不建议这么做。 好感区间的标准格式为[ left , right ] 好感区间实质上等同于闭区间,可以理解为由符合left ≤ x ≤ right的实数所构成的集合,当left/right为null时,代表-∞/+∞,即负/正无穷大。 14行的change定义好感变化区间,代表触发后用户的好感变化,同样为闭区间。 15行的cd定义冷却时长,在缺省情况下使用4行定义的默认配置(即4行列表的第一个元素)。 同时还有一个缺省的success字段,定义是否计入今日触发次数,默认为是。 你可能会注意到8、13、18-28行的reply字段不太一样,这是正常的,其代表回复语句的两种格式。 第一种,暴力回复。格式为字符串或元素均为字符串的列表,将不做额外处理直接回复。 第二种,精细回复。格式为元素均为dict(即被{}包裹的完整对象)的列表,此时回复将可以进行细化操作,如概率回复,不同回复产生不同效果等,在一定程度上简化书写。 以18-28行为例,19-24行定义了一个回复单元,25-27行也定义了一个回复单元。 在回复单元中,所有缺省的字段将使用上级设置的默认设置(如cd、success、change) 21行的weights定义该单元权重,默认为1。其定义该单元在总回复池内的个数,用于调节抽中概率。 20行的str定义最终回复,此时强制要求必须为字符串或元素均为字符串的列表。
test
标准正则字符串
mode
私聊触发
cd
冷却时间配置
冷却的秒数
冷却未到的回复
作用的范围
此处代表仅作用于common与favor回复,不限制special回复
max
一天最高次数上限
return
返回内容
{}
指定用户回复
uid
标准UUID(8-4-4-4-12)
*user info
好感区间回复
interval
[ left , right ]
由符合left ≤ x ≤ right的实数所构成的集合
left/right
-∞/+∞
负/正无穷大
change
好感变化区间
冷却时长
success
是否计入今日触发次数
该单元权重
最终回复
以下是实际运行情况: 此时琥珀的favor为0,uid为57964ba1-4450-401a-b642-73fad0e6a0b9。 因此触发了common回复,但因为脸比较黑,好几次都没抽中加100的大包。 此时琥珀的favor已达到100,因此执行了favor回复,同时立刻再次触发,导致触发冷却,返回了冷却未到回复,等到冷却结束后再触发就又是正常的favor回复了。同时此处琥珀发现favor的回复没有改变好感,因此捉到了bug的虫脚。
标准范例文件:
2022.8.29更新日志:
2022.8.29 重修好感变化逻辑 2022.6.30 修复权限判断函数报错问题 修复不响应指令的问题 2022.6.8 追加更新内置用户系统 允许牌堆引用 2022.4.2 解决了无法回复的问题
2022.8.29
2022.6.30
2022.6.8
2022.4.2
AmberKeter 牌堆引用是怎么用的啊,大佬有没有例子参考😘
封不语 因为本身是在ovo3时代才开始写的插件,往前兼容需要的时间成本对我一个高三狗来说还是略高
AmberKeter 不,不可惜,就是想要三版的1,谢谢大佬