Dice! Master手册¶
手册更新时间:20220607
这是Dice!于2022.12.15更新2.6.6rc(638)后对应的Master手册。
用户指令请参考用户手册。
更多内容可参看Dice!论坛。
本手册中[DiceData]一律指代Dice!存档目录,当前版本格式为[框架根目录]/Dice[DiceQQ]
前言¶
感谢您选择Dice!
此手册将帮助您了解Dice!的基本使用和配置
如果在使用中遇到任何问题或者有任何建议,请在阅读文档后访问Dice!论坛提出你的想法
如果你认为此文档中有任何错误或值得改进的地方,欢迎点击右上方 Edit on GitHub 按钮修改文档。或者你也可以在论坛提出你的想法
祝跑团顺利!
目录¶
更新说明(2.6.6)¶
- 新增: 变量赋值转义标识var
- 新增: 转义send定向发送的消息
- 新增: toml读写
- 新增: webui远程获取模块资源
- 新增: webui可进行mod调序
- 优化: webui可定制化
- 修复: rc附带奖惩骰时无法调取属性
2.6.5¶
- 重写认主机制
- 恢复cloud update远程更新
- reply与msg_order合并,新增限制项lock
- 优化消息转义,支持case、grade条件输出等,支持welcome有限转义
- 留档每日数据至/user/daily/
- 优化
mod on/off
热插拔,支持mod get安装/info信息/detail详细信息/delete卸载/reload重载/update更新/reinstall重装
- WebUI新增模块管理页
- mod新增image与audio子目录
- 支持TimeZoneLag项手动调整时差
- 新增各项lua交互特性,新增函数getSelfData,msg:format等
- json等数据结构采用fifo特性
2.6.4¶
- WebUI优化回执跨行编辑,同步reply的触发词多对一
- 新增
.mod on/off/list
指令 - mod新增event子目录,支持循环
cycle
/定时clock
/代理hook
类型事件 - 更新log指令,允许自定义log名
- 更新ob指令
- 新增
.link state/list
2.6.3¶
2.6.2¶
- 可使用.str reset指令重置过时的文本而无需重启了
- reply新增触发限制条件,
reply set
时可加入Limit字段 - 优化.setcoc指令,可使用.setcoc show查看
- getUserConf支持获取用户名称
- getGroupConf支持获取群名片/群权限/最后发言
- WebUI页面为Master配置项添加说明
- 角色卡、用户配置、群配置支持读写table
- lua新增函数log,用于向框架或通知窗口输出日志
- 允许设置全局默认rc房规
- 允许lua修改5级以下信任
2.6.1¶
QQ框架(Dice!2.5.0+)¶
2.5.0版本,Dice!本体由酷Q插件改为了独立于框架的dll,由作为框架插件的DiceDriver加载,具体能实现的接口视框架条件而不同。先驱跑路后,Dice!驱动器目前支持Mirai、MyQQ、MyQQA、OnoQQAir、go-cqhttp框架,也在跟进OvQQ等更新。由于不同版本适配进度不同,你可能无法找到以下所有版本。Miria加载DiceDriver须使用MiraiNative插件。
QQ登录协议¶
同一QQ在同一类型设备(手Q/电脑/平板)登录时会将原先设备挤占下线,因此骰娘在框架登录所用设备应与人工登录所用设备错开。
选择一个框架¶
MiraiAndroid是当前不使用模拟器在手机挂载Dice的唯一选择,MiraiDice也支持在Linux、MacOS等系统挂载Dice,详见Dice! 论坛 Mirai版教程。
框架接口差异¶
- Mirai2.*(MiraiNative转接):
- 支持手Q/平板登录
- 不能多开QQ,启动即登录
- 无法处理登录设备异常(但支持设备锁验证)
- 不能响应来自自己的消息
- 无法获取未加入群的群信息
- 支持Windows, Linux, MacOS, Android, iOS(停更中)
- HiMyQQ:
- 由于程序不支持附加调试,存在未排除的异常风险
- 固定PC设备登录,协议可以选PC版QQ或者PC版TIM等
- 允许多开QQ,支持扫码登录
- 无法私聊发送语音文件
- MyQQA(MQ安卓版):
- 由于程序不支持附加调试,存在未排除的异常风险
- 支持手Q/平板登录
- 允许多开QQ,但不支持启动自动登录
- 选择手表协议登录时支持扫码登录
- 接收好友申请时无法获取验证信息
- 因为程序缺陷,会出现连接服务器失败、“与服务器北京时间相差超过1秒”等问题
- 能接收频道消息,但发送频道消息疑似需要申请官方接口
- go-cqhttp: 2. 支持手Q/平板/手表登录 3. 不能多开QQ,但DiceDriver支持一键启动多个go-cqhttp.exe 4. 支持扫码登录
框架目录结构¶
Mirai目录¶
非Windows系统可能目录稍微不一致,但文档中提到的应该适用于任何操作系统。Android版目录位置为内部存储空间/Android/data/io.github.mzdluo123.mirai.android/files/
2.5.0+版本升级¶
- Mirai版本:执行Update.sh/更新.cmd
- MiraiAndroid: 安装新版APK
- 其他版本: 需要将更新版的w4123.Dice.dll放入Diceki文件夹替换旧文件,并重载DiceDriver插件;如果DiceDriver同时有新版则必须同步更新
- 请关注论坛以获得具体版本的更新方法
从低版本升级到2.5.0+¶
迁移骰娘存档到整合包¶
将对应版本的存档目录[DiceData]复制到新框架根目录下。
- 原Dice2.4.0及以上版本:根目录下的Dice[DiceQQ]文件夹
- 原Dice2.3.8exp9及以上版本酷Q骰娘:根目录下的DiceData文件夹CQ根目录下的DiceData文件夹
如为原Dice2.3.8exp10(555)及以下版本:将data/app/com.w4123.dice复制到新目录[DiceData]/com.w4123.dice的位置。data/app/com.w4123.dice
Mirai框架升级¶
- 按照论坛中教程,使用新安装方法安装新版本Mirai
- 迁移Dice[DiceQQ]目录
- 将根目录下device.json复制到根目录下(让Mirai继续使用先前的登录信息)
WebUI配置面板(推荐)¶
WebUI是全平台可用的图形化配置页面,通过Dice!初始化时运行的监听端口访问。
WebUI 基础使用¶
在登录成功以后,Dice!会向Master(没有Master的情况下,自己) 发送WebUI运行的端口。如图中运行在8080端口。默认情况下,WebUI运行在一个随机的未使用的端口,但你可以通过WebUIPort属性更改。
启动初始化
在本地(运行Dice的同一个设备)浏览器中输入http://127.0.0.1:端口
进入WebUI 请一定要输入http://否则某些浏览器会卡死 .system gui
指令也会引导打开WebUI
如果你在远程访问WebUI,请确定已配置好防火墙等,并使用对应的IP地址或域名访问(而不是127.0.0.1)
端口访问WebUI
提示登录时,默认用户名为admin,密码为password,进入WebUI后可在WebUI配置栏更改密码。WebUI默认只允许本地访问,所以如果设备只有你一个人能访问(不是共享的云服务器等)不更改密码也无所谓。 主界面
可以在上面执行管理操作,应该都符合直觉。需要注意的是你可以直接点击表格修改其中内容,表格中的修改无需点击保存等,会在编辑完成后自动生效。
WebUI 配置¶
WebUI有三个配置项,更改配置后重启才会生效
EnableWebUI
- 启用WebUI, 0为禁用, 1为启用, 默认为1
WebUIPort
- WebUI端口, 0为随机, 其他为固定端口
WebUIAllowInternetAccess
- 允许从非本地地址访问WebUI, 0为不允许, 1为允许, 默认为0, 也就是WebUI默认只能从本地访问。如果你使用Docker网络等,你可能需要将此项设置为1才能在Docker宿主机上访问WebUI。
WebUI 环境变量¶
可以通过环境变量设置WebUI配置。环境变量具有较高优先级。
DICE_WEBUI_PORT
设置端口,0为随机端口
DICE_WEBUI_PORT_USE_VARIABLE
使用另一个环境变量的值作为端口,比DICE_WEBUI_PORT有更高优先级,可用于PaaS等平台
DICE_WEBUI_ALLOW_INTERNET_ACCESS
0为不允许, 1为允许
配置远程访问¶
WebUI 使用 HTTP Digest验证,密码保存为Digest,理论上比较安全。然而,如果需要暴露到公网,我们仍然推荐使用nginx或apache等配置好TLS然后反向代理到Dice WebUI以确保安全。
当然,允许远程访问前请务必更改密码,不然再安全也没用。
GUI管理面板(已停更)¶
任意Windows框架可对骰娘发送.system gui
打开图形界面(确认进入GUI,取消进入WebUI)。请注意此页面仍可使用,但将不会继续更新并有可能在未来版本移除,推荐使用上方提到的WebUI进行设置修改。
(MiraiNative)右键托盘图标(流泪猫猫头)->(插件菜单)Dice!->综合管理Mirai面板入口
(OQ等)切换至插件列表页->Dice.Driver(右键)->设置插件。单框架多开时请使用指令,避免错乱
可在界面内设置Master、调整用户信任、修改CustomMsg文本、修改全局配置
图形界面2
骰主(Master)¶
Master是骰娘的控制者,每个骰娘同时至多只能有一个Master。Master可以控制骰娘的发言和行为,并进行大量个性化配置,也对骰娘行为负责。受信任用户也可以获得对骰娘的部分权限,但只有Master拥有发放和回收高级权限的权限。
新生骰娘默认为无主状态,你可以在WebUI/GUI管理面板完成认主(推荐,WebUI支持全平台)或在聊天栏输入口令认主。无主骰娘在启动时将向自身账号及框架日志窗口输出认主口令,在聊天栏中对骰娘发送对应口令将绑定发送者账号为Master。也可直接在管理面板设置Master。认主时将自动开启全类型通知窗口,建议将部分通知特别是通知窗口0转移到专门的小群。
.master delete
解除绑定,骰娘此时会重回无主状态,清空通知窗口,但先前设定的配置不会初始化。
.master reset [新masterQQ]
解除绑定,骰娘此时会认主[新masterQQ](原Master保留信任级别)
.master admin
添加管理时自动将私聊添加为监视窗口,管理可以用.admin delete
放弃权限,清除窗口可以私聊.admin notice - me
控制台指令¶
状态查看¶
.admin state
可以查看当前的全局设置和黑白名单情况
遥控开关¶
.admin boton/botoff [群号]
//等效于所在群群管使用.bot on/off.dismiss [群号]
//可以遥控骰娘退出所在的群,即使骰娘不在,也能将该群移出白名单
消息发送(.send)¶
send用于用户与管理员间的远程交流
.send 待发送消息
(任何人可用)向Master发送消息
.send [窗口] [待发送消息]
//向指定窗口发送消息(权限4限定;权限5用户发送的消息不会标明转发来源,等效于骰娘亲自说话)
窗口是指QQ收发消息的聊天窗口。窗口参数识别一下6种格式:
- qq [QQ号]
- group [群号]
- discuss [讨论组号]
- notice [通知类型](仅send可用)
- this(发送指令的窗口)
- me(发送者的私聊窗口)
消息转发(.link)¶
link用于管理员与特定窗口保持交流(尤其是新加入、待审核的群),或者操纵骰娘跑团
.link to/from/with [窗口]
当前窗口向目标窗口单向转发/单向接收/双向转发消息
.link close
关闭从当前聊天窗口发起的消息转发
.link start
开启上次建立的链接
对象窗口为群/讨论组时,可省略group/discuss,直接输入群号;对象为私聊时,qq可简写为q
转发自Master的消息不会标明转发来源,等效于骰娘亲自说话
无法确认目标聊天窗口是否存在,可能会导致没有反应
系统指令(.system)¶
.system save
//立即存储所有数据(相当于执行所有停用应用时的操作)
.system load
//立即读取外置文件(模块、牌堆和角色卡模板)。便于不重载应用的反复调试。save/load涉及的文件见附录。
.system state
//显示插件运行时间及内存占用等硬件信息
.system rexplorer
//杀死资源管理器后重启。当 Windows 服务器内存占用逐渐随时间而升高时,考虑由资源管理器逐渐占用内存导致,可能适用该指令。权限5可用。
一键清群(.master groupclr)¶
遍历群列表并退出符合条件的群,也可以在应用菜单中【一键清退】。部分框架群列表上限500,请避免群数超过500。单次清群上限受GroupClearLimit
调节(默认一次至多退20个群)。
.master groupclr
可以实现一键退群,无参数时默认参数为unpower
.master groupclr [天数]
将退出当前所有骰娘在指定天数内未发言的群
.master groupclr unpower
将退出当前所有骰娘不是群管/群主的群
.master groupclr preserve
将退出当前所有无许可使用
的群
.master groupclr black
将退出当前所有黑名单群和有危险的黑名单用户的群
全局配置¶
配置项目表见附录
.admin [关键词]
//查看配置项状态,如.admin Private
.admin [关键词]=[数值]
//修改配置项。一般的开关项1表示开启,0表示关闭
通知窗口¶
运行过程中产生的提醒、警告等通知消息会分类型发送给设置的通知窗口。所有通知被分为0-9共十个等级,其中0-5会被骰娘用于内置广播,6-9用于自定义(具体通知类型见附录)。当产生通知时,会向通知窗口中所有接收该类型通知的窗口发送消息。如果没有窗口能发送消息,骰娘会将通知发送给自己;无论如何所有通知会自动保存在"[DiceData]\audit"中,请定期整理该文件夹。 由于通知窗口0会产生较多日志型消息,建议将通知窗口0转移到专门的小群。
.admin notice [窗口] +/-[通知类型](...+/-[通知类型])
//增减通知窗口类型
.admin notice - [窗口]
//直接移除指定窗口。
.send notice [通知类型] [通知文本]
//向指定类型窗口广播通知
例:
.admin notice group 928626681 -0-1-2-3-4+5
变更通知类型的接收情况
.admin notice - this
直接移除当前通知窗口
全局开关(.admin DisabledGlobal=0/1)¶
DisabledGlobal=1等价于.admin off(全局关闭)。开启时一切如常,关闭则进入静默状态,所有群聊/讨论组会相当于.bot off状态而无视群内设置,私聊会回复关闭中的信息。也可以用.admin on/off 操作全局开启/关闭,也可以在应用菜单中点击"全局开关"自动切换。
定时点事件(.admin clock)¶
.admin clock +/- [任务名] [时]:[分]
添加/移除 定时任务
内置定时任务:on-全局开启;off-全局关闭;clear-黑名单清群
允许调用自定义任务,参考plugin手册
每日执行,如果当日错过不会补回。
定时开启和定时关闭时会向窗口4发送通知文本
清群为基于黑名单清群(=.master groupclr black)
定时长事件¶
以下事件会在Dice!每运行固定时间后执行一次
.admin AutoSaveInterval=5
//定时保存用户数据(min),默认每5分钟保存一次
.admin AutoRemake=0
//定时重启(h),默认关闭。
定时系统监测报警(.admin SystemAlarmRAM/SystemAlarmCPU/SystemAlarmDisk=90) :每半小时监测一次系统内存、CPU、硬盘占用(%),超过阈值即报警。报警状态下每5分钟监测一次,如果数值升高超过1个百分点则继续报警,低于阈值则会提醒解除报警。设置在1-99时生效。
用户策略¶
用户记录(.user)¶
用户在使用指令或被授予信任后会生成用户记录
.user state
//查看自己用户记录
.user trust [用户qq]
//查看用户信任级别(4以上限定,上级对下级屏蔽)
.user trust [用户qq] [信任级别]
//调整用户信任级别(4以上限定,只能调整下级用户,最高为255)
.user diss [用户qq]
//最轻的拉黑用户(type=local,danger=1)
用户授信(.user trust)¶
每名登记用户会标记信任级别,初始为0。级别越高享受的权限越多,上级包含下级的所有权限。
.admin whiteqq (-) [白名单QQ]
可以为用户授予信任1(带减号为收回信任)
信任级别 | 权限 |
---|---|
1 | (白名单)为群分发使用许可,允许使用某些指令 |
2 | 黑名单豁免 |
3 | 响应退群指令,接受不良记录共享(warning) |
4 | (后台管理)查看、分发和收回低于4的用户权限,原管理权限 |
5 | (骰主级)查看、分发和收回低于自身的用户权限,系统操作指令 |
过期数据自动清理(.admin InactiveUserLine/InactiveGroupLine=360)¶
最后活跃天数超过InactiveUserLine的用户,其记录及角色卡会在清理用户时被清除;最后活跃天数超过InactiveGroupLine的群,其记录及开团信息会在清群时被清除。(配置项为0时不生效)
清理过期数据会在定时任务clear
中自动执行,在执行清群时也会在退群的同时检测目标群是否会被清理。
监听好友申请(.admin ListenFriendRequest=1)¶
默认开启,仅好友验证方式为【需要验证信息】或【需要回答问题并由我确认】时有效,拦截消息并决定通过或拒绝。黑名单用户必定拒绝。同意好友邀请时将发送strAddFriend,特别地,通过受信任用户的好友时会发送strAddFriendWhiteQQ。当好友验证方式为【允许任何人】或【需要正确回答问题】时,通过开启ListenFriendAdd,也会向通过的好友发送strAddFriend,注意这种方式通过的好友可能仅为单向好友。
允许陌生好友邀请(.admin AllowStranger=0/1/2)¶
默认为1。决定是否接受陌生人的好友邀请:2-无条件接受;1-无用户记录不接受;0-无信任不接受。该项设定建议配合QQ自带的【允许陌生人邀请我加入群聊】选项。
单群设置(.group)¶
.group ([群号])+/-[词条]
//修改单群设置,群内原地使用可省略群号
词条 | 效果 | 修改条件 |
---|---|---|
许可使用 | 私用模式/审核模式可正常邀请入群/群内使用 | 信任1 |
未审核 | 审核模式下标记新加入无【许可使用】的群,拒绝指令 | 信任1 |
免清 | 清群时和搜查黑名单时略过该群 | 信任2 |
免黑 | 发生在该群的不良记录无效;不搜查黑名单 | 信任4 |
忽略 | 不接受任何该群的事件 | 信任4 |
协议无效 | 不接受除云黑外的事件 | 信任4 |
停用指令 | 停止响应指令(.bot off) | 信任或群管 |
禁用回复 | 停止响应回复(.reply off) | 信任或群管 |
拦截消息 | 拦截消息,阻止低优先级插件响应 | 信任或群管 |
禁用jrrp/禁用me/禁用ob/禁用draw/禁用help | 禁用对应指令 | 信任或群管 | |
- 原群白名单自动初始化为【许可使用】+【免清】
- 重要的大群(跑团交流群、骰娘群)请加【免清】+【免黑】或【忽略】,以免意料之外的自动退群
.admin whitegroup
查看当前【许可使用】或【免清】或【免黑】的群列表
授权许可(!authorize)¶
受信任用户可通过在群内发送!authorize或在任意窗口发送!authorize +[群号]来为目标群添加【许可使用】。非信任用户也可在群内使用!authorize [理由]向窗口2发送许可申请。
!authorize (+[群号])
//受信任用户为本群+许可使用
!authorize (+[群号]) [理由]
//非信任用户申请本群许可
撤销许可使用需要使用.group [群号] -许可使用
批量群处理(.groups)¶
取群列表.groups list(管理限定)
.groups list idle //按闲置天数降序列出群
.groups list size //按群规模降序列出群
.groups list [群管词条] //列出带有词条的群
监听群邀请(.admin ListenGroupRequest=1)¶
默认开启。接收用户的群邀请(小群邀请将由QQ系统自动通过,因此骰娘无法处理或知晓邀请人),拒绝来自黑名单的邀请,邀请来自受信任用户时通过且自动为群添加【许可使用】,非信任用户时视私用模式开关状态处理。通过邀请的同时标记邀请人。如果回执为【已同意】却实际并未入群,考虑接口出错或腾讯屏蔽。
入群检测(.admin ListenGroupAdd=1)¶
默认开启。入群时反馈群信息(群名、群号、群人数、邀请人),遍历群员,获取群主信息(临时创建的群可能无法获取群管理信息)、检索黑名单,为私用模式二次确认【许可使用】,为审核模式检查【许可使用】;群内发现黑名单时会通知,有管理员是黑名单时会触发退群(群未设置【免清】或【免黑】时)。发送strAddGroup。
私用模式(.admin Private=1)¶
认主时私骰作成进入私用模式,仅在受信任用户或【许可使用】群邀请时接受邀请,在新加入管理员无信任用户(否则为群自动添加【许可使用】)且无【许可使用】的群时自动退出,退出时自动留言。也可以用.admin only/public
切换私用/公用状态。
审核模式(.admin CheckGroupLicense=0/1/2)¶
入群后,对于无【许可使用】的群,将自动标记【未审核】并发送strAddGroupNoLicense。该项生效时将拒绝提供除help之外的其他服务,其余指令仅authorize/dismiss/bot有效。该项为1时拒绝所有【未审核】的群(不溯及审核模式开启前已加入的群),该项为2时拒绝所有无【许可使用】的群(含开启前已加入的群)。
审核模式与私用模式的差别:
- 审核模式会在未许可群停留,增加潜在风险;
- 留在群内有更高向用户群引流的概率;
- 由于自动入群的小群无法正常给群加【许可使用】,骰娘在无法识别群管理的情况下会自动退群,需要受信任用户额外使用一次!authorize [群号],重复邀请;
黑名单(.admin blackqq/blackgroup)¶
任何情况下,来自黑名单的邀请不会被通过,指令除了dismiss都不会被响应
.admin blackgroup (-) ([黑名单理由]) [黑名单群号]
可以添加群黑名单(带减号是删除)
.admin blackqq (-) ([黑名单理由]) [黑名单QQ]
可以添加用户黑名单(带减号是删除),带理由时危险等级为2且通知对方,否则危险等级为1。
.admin blackfriend
//查看好友列表内的黑名单用户
危险的黑名单用户包括群内权限更高的用户或非免清群内相同权限用户(可选),同时危险等级需要达到2。危险等级只有1的黑名单用户不通知、不会触发退群。
现在自己、Master、信任2以上用户都不会新加入黑名单。
不良行为检测(.admin ListenGroupKick/ListenGroupBan/ListenSpam=1)¶
默认开启。分别开启后,移出、禁言、刷屏会被加入黑名单。生成危险等级2的不良记录后,会自动向通知5窗口广播生成的!warning指令。warning指令:接收到信任3或记录可识别的骰娘warning时,骰娘将自动录入黑名单。骰娘通过这一机制实现不良记录的传递共享。
拉黑群时会自动移除【许可使用】。
刷屏在程序内定义为发送指令超过20/30s,实际解释权归Master所有
邀请人连带(.admin KickedBanInviter/BannedBanInviter=1)¶
默认开启。被移出/禁言时将入群邀请者同时加入黑名单。
邀请者责任源于协议中不得擅自拉群的规定,这里的擅自是双向的:一边无视骰娘协议,一边无视群内意愿
云操作(.cloud)¶
查看更新(.cloud update)¶
注意:此功能可能暂时不可用。对于Mirai请执行更新.cmd或Update.sh以进行更新。
远程获取Dice!正式版及开发版信息
.cloud update
//检查版本更新
.cloud update release
//下载最新发布版
.cloud update dev
//下载最新开发版(使用测试版/开发版请保持与开发者的交流)
同步不良记录(.cloud black)¶
该指令会从后台获取经核验的不良记录,并更新本地黑名单库。骰娘不会自动同步云端记录。
不良记录¶
读取外源记录文件¶
将其他来源的不良记录BlackList.json重命名为BlackListEx.json,放置于[DiceData]/conf目录下。Dice!加载时会自动读取并更新记录,之后该文件会被销毁。两种情况下已有记录不会在读取时更新:DiceMaid就是自己;危险等级与本地记录不同。
云记录注销¶
当前记录核销在群(928626681)内完成,入群后可使用以下指令:
- isbanqq=[qq] 查询目标QQ的云记录
- 查询wid=[wid] 获取wid对应的记录
- erase=[wid] 注销wid对应的记录,仅记录中的当事骰娘(DiceMaid)和骰主(masterQQ)可用
可私聊司令塔BotShiki(Pope)(530136753)
(具体角色可能会有变动)进行上述操作。也可请求管理来完成注销,最通用证明材料为:当事人对当事骰娘发送.admin isban [本人QQ],连同骰娘回复将聊天记录转发给管理。
用户自行解黑¶
云记录核销之后,所有骰娘并不会自动同步。遇到尚未注销黑名单的骰娘,请用户自行解黑。方法为对已注销的骰娘发送.admin isban [QQ],将得到的warning指令保存,用于私聊未注销的骰娘。由于骰娘存在连接后台失败的可能,导致无法获取记录更新的信息,因此无法保证指令有效。这时请联系相应骰主。
其他机制¶
框架消息富文本转义(CQ码)¶
DiceDriver会将不同框架下接收的QQ富文本消息(图片、语音等)转换为统一的CQ码,发送时则会转义回框架格式
[CQ:image,file=xxx.abc]
将本地[框架根目录]/data/image/xxx.abc
位置的图片上传并在消息中发送
[CQ:image,id=xxx]
接收消息中的图片,id与服务器缓存图片对应,但区分群聊图片与私聊图片。群聊调用私聊消息的图片id将无法正常发送图片,反之同理。
[CQ:record,file=xxx.silk]
将本地[框架根目录]/data/record/xxx.silk
位置的语音上传并覆盖整条消息内容发送(Mirai不限制文件后缀)
[CQ:face,id=xxx]
发送对应id的QQ黄豆表情
[CQ:emoji,id=xxx]
发送对应十进制编码的Unicode字符
[CQ:reply,id=xxx]
(群聊且限定在开头适用)回复引用指定id的消息
消息送间隔(.admin SendIntervalIdle=500)¶
一般地,Dice!的待发送QQ消息不会立即发送,而是进入发送队列排队发送,并在每次发送后等待固定时间,即发送间隔(ms)。SendIntervalIdle
控制闲时发送间隔,SendIntervalBusy
控制忙时发送间隔。
特别地,Dice!识别一条待发送消息中的分页符('\f'
),并沿分页符将消息拆成多条,依序送入消息发送队列。分页符无法在指令输入时直接录入,可以输入{FormFeed}作为消息分段,调用时会自动转义。
回复引用原消息(.admin ReferMsgReply=1)¶
(仅gocq及MQ系列可用)开启后所有公屏消息回复将引用原消息。
本系骰识别¶
Dice2.5.0+可以通过调用后台接口以识别目标QQ是否在Dice!云端有登记信息。新入群遍历群成员时将统计可识别本系骰数量。由于禁言反制和踢出反制是Dice!的默认协议,让Dice!骰去禁言/踢出另一只Dice!骰无疑是愚蠢的,因此在执行group ban/kick前会先查询目标是否为Dice!骰,是则不会进行实际操作。基于骰主所拥有的隐私权,云端不可见(CloudVisible=0)的Dice!骰不会被识别。
个性化¶
文本转义标识¶
回复文本中可以通过特定的{}标记转义文本,当前花括号支持嵌套。
指令回复中对用户(消息来源)的通用转义如下:
{nick}
-取用户昵称,优先级为群内nn>全局nn>群名片>QQ昵称。{pc}
-取用户角色名,未录入角色卡则同{nick}。
部分转义方法:
{at:目标用户}
-at用户,省略参数则at消息对象;{help:条目名}
-获取帮助文档指定条目;{ran:最小值~最大值}
-从范围中随机取值;{sample:分项1|分项2(...|分项n)}
-从所有分项中随机均匀抽取一项插入文本。例:{sample:效果拔群|干得漂亮}
;{case:uid?账号1=1号专属文本&账号2=2号专属文本&else=通用文本}
-根据消息语境中的变量分条件回复;{grade:user.favor?0=用户&100=亲爱的&else=讨厌鬼}
-根据消息语境中的变量分档位回复;{wait:5000}
-处理时延迟指定的毫秒数{var:变量名?值}
-赋值变量并打印{var:变量1=值1&变量2=值2}
-多变量赋值,不打印
其他转义标识:
{br}
换行{FormFeed}
分条发送
扩展模块mod¶
扩展模块放入[DiceData]/mod/读取,可加载自定义回执、自定义回复与帮助词条,详见开发手册。mod按序读取,且从后向前覆盖。
.mod list
查看已加载mod列表
.mod on 模块名
启用指定模块
.mod off 模块名
停用指定模块
.mod info 模块名
指定模块简介信息
.mod detail 模块名
指定模块详细信息
.mod delete 模块名
卸载指定模块
个性化WebUI¶
Dice!2.6.6更新后将WebUI主页面写出到[DiceData]/webui/index.html
,同时webui目录可通过WebUI端口访问。
自定义¶
自定义帮助词条(.helpdoc)¶
.helpdoc [词条名] [词条内容]
—— 自定义帮助词条
词条内容以&开头表示重定向,如.helpdoc 追仙子 &追仙
后,.help追仙子 将重定向到追仙的词条
词条名不需要是源代码中已有的,请随意添加
特别地,部分词条会存在引用的情况,自定义时可以只自定义被引用的词条。
{
"设定":"Master:{master_ID}\n好友申请:需要使用记录\n入群邀请:黑名单制,非黑即入\n讨论组使用:允许\n移出反制:拉黑群和操作者\n禁言反制:默认拉黑群和群主\n刷屏反制:警告\n邀请人责任:有限连带\n窥屏可能:{窥屏可能}\n其他插件:{其他插件}{姐妹骰}\n骰娘用户群:{骰娘用户群}\n私骰分享群:192499947\n开发交流群:1029435374",
"骰娘用户群":"【未设置】",
"窥屏可能":"有",
"其他插件":"【未设置】"
}
自定义回复(.reply)¶
消息检测触发的顺序为特殊指令->自定义指令(Type=Order
)>内建指令->自定义回复(Type=Reply
),检测触发词的顺序为完全匹配->前缀匹配->模糊匹配->正则匹配。触发回复也会算入刷屏计数!(脚本中可通过写入msg.ignored = true
无视计数)
.reply set (Type=[回复性质](Reply/Order))
[匹配模式](Match/Search/Prefix/Regex)=[触发词1|触发词2]
(Limit=[触发限制])
[回复模式](Deck/Text/Lua)=[回复词]
- 回复性质:决定该回复由
停用指令
(bot off)还是禁用回复
(reply off)控制开关。该项可省略,默认由reply控制。 - 匹配模式:Match-完全匹配;Prefix-前缀匹配;Search-模糊匹配;Regex-正则匹配。
- 触发限制:可填入零至多项触发条件,多项条件以
;
分隔,在触发词匹配后检查是否会被触发(一项不满足就不触发)。不触发的消息不计入刷屏、不进入当日计数、不进入冷却计时。 - 回复模式:Deck-牌堆(回复词以分隔符'|'切割为牌堆)Text-直接返回回复词;Lua-将回复词作为Lua语句执行,将返回值回复。
.reply show [触发词]
查看回复注释
.reply get [触发词]
查看回复本文
.reply del [触发词]
清除触发词
.reply list
列出全部触发词
默认可使用.help回复列表
查询触发词,帮助文档对所有人可见,建议手动修饰。
触发条件¶
用户名单user_id:
- 正向名单
user_id:
:只有所列ID中的用户才触发,ID以|分隔user_id:触发用户1|触发用户2|...
- 反向名单
user_id:!
:只有所列ID中的用户不触发,ID以|分隔user_id:!触发用户1|触发用户2|...
- 正向名单
群聊名单grp_id:
所有私聊的id视为0,写入正向名单表示不限制私聊,写入反向名单表示私聊不触发
- 正向名单
grp_id:
:只有所列ID中的群聊才触发,ID以|分隔,grp_id:触发群号1|触发群号2|...
- 反向名单
grp_id:!
:只有所列ID中的群聊不触发,ID以|分隔grp_id:!触发群号1|触发群号2|...
- 正向名单
触发概率prob:百分比概率触发
prob:概率
冷却计时cd:计时器中有一个正在冷却状态则不触发,若触发则为每个计时器增加冷却时间。每个计时器以
&
分隔,计时器名称为空时默认取回复关键词。计量单位:
chat
-以聊天窗口为单位;user
-以用户为单位;global
-全局共享cd:[计时器名称]@[计量单位]=[冷却秒数]&...
[计时器名称]
可省略,视为取本回复的关键词;@[计量单位]
可省略,视为@chat
。特别地,当两者均省略时,cd:秒数
表示以聊天窗口为单位,为本回复独立计算特定秒数的冷却。今日计数today:计数器中有一个达到上限则不触发,若触发则为每个计数器+1。每个计数器以
&
分隔,计时器名称为空时默认取回复关键词。today:[计数器名称]@[计量单位]=[计数上限]&...
省略机制同cd。
用户阈值user_var:UserConf中变量为特定值或以上或以下触发,每项以&分隔,
字段=值
表示等于时触发,字段=值+
表示大于等于时触发,字段=值-
表示小于等于时触发。特别地,trust
表示信任等级user_var:[变量1]=[阈值1]&[变量2]=[阈值2]+&[变量3]=[阈值3]-
群聊阈值grp_var:群聊时取GroupConf,格式同user_var,使用时推荐搭配
grp_id:!0
排除私聊自身阈值self_var:取DiceMaid自身UserConf,格式同user_var
骰娘识别dicemaid:根据对方是否识别为Dice!骰娘判别是否触发,消息来源为自己时不作判别
- 仅骰娘触发
dicemaid:only
- 骰娘不触发
dicemaid:off
- 仅骰娘触发
自定义回执文本(.str)¶
将系统处理事件的回执替换为自定义文本
.[键值] [文本]
——自定义骰娘的某项回执.[键值] reset
——重置为原生文本
.[键值] NULL
——自定义文本为空白
.[键值] show
——查看自定义文本
如果没有设置,strSelfName和strSelfCall将预设为QQ昵称,并且{self}会自动替换为strSelfCall,前者用于自我展示,后者用于自称。强烈建议自定义strHlpMsg和strAddFriend、strAddGroup,向不熟悉的用户介绍私骰的特别之处(申请、使用须知)。
例:
.strSelfName 测试姬 //入群等自我介绍场合使用
.strSelfCall 本骰娘 //回执中用作自称,{self}的重定向
.strBotOn {self}开始工作了
.strAddGroup Shiki(Judgement), Servant Ruler, 四季映姫·ヤマザナドゥ。来,细数你的罪孽吧
.strRollFumble 大失败 就像是见了阎王一样
.strNameSet 以后就称呼{old_nick}的名称为{new_nick}了
自定义敏感词库(.admin censor)¶
敏感词设置.admin censor .admin censor +([触发等级])=\[敏感词0](|[敏感词1]...)
//添加敏感词 .admin censor -\[敏感词0](|[敏感词1]...)
//移除敏感词
例:.admin censor +=nmsl
//将“nmsl”设置为Warning级 .admin censor +Danger=nn老公|nn主人
//将“nn老公”、“nn主人”设置为Danger级 .admin censor -手枪
//移除敏感词“手枪”
匹配机制¶
骰娘会模糊匹配指令标识符(.)开头的消息,并返回所含敏感词的最高触发等级
匹配过程自动跳过文本中的特殊符号和空格,且大小写不敏感
受信任用户会相应降低触发等级,信任4以上用户将不触发检测
触发等级¶
使用指令设置Ignore等级可以临时屏蔽词库中不该生效的词,对外置词库这一等级是无意义的
Ignore //无视
Notice //仅在0级窗口通知
Caution //提醒用户,并在1级窗口提醒
Warning //【默认等级】警告用户,并在1级窗口提醒
Danger //警告用户且拒绝指令,并在3级窗口警告
*请避免为纯字母/数字的敏感词设置较高触发等级,这些字符存在误匹配图片码的可能性
词库批量加载¶
load会读取存档目录中/conf/censor下所有文本文件
字符编码默认按GBK读取,若字符为UTF8,可在开头先起一行"#UTF8"
一词一行
触发等级默认为Warning,读取到"#[触发等级]"时,后续录入的词调整为响应等级,如"#Danger"
词库文件示例: 以下内容表示以utf-8编码,读取4个敏感词 "nmsl":Warning,"nn老公":Danger,"nn主人":Danger,"sb":Notice
#UTF8
nmsl
#Danger
nn老公
nn主人
#Notice
sb
外置牌堆¶
将牌堆文件放入[DiceData]/PublicDeck内并重启或load,即可使用牌堆内的条目。牌堆名以'_'开头时,无法直接使用draw命令抽取。
支持作者¶
溯洄正在为后续的开发计划众筹:https://afdian.net/@suhuiw4123
欢迎在爱发电支持Shiki:https://afdian.net/@dice_shiki
也可以微信赞赏Shiki:
常见问题¶
登录失败¶
- 当前版本过低[00020]:所有非本地原因的登录失败都会返回错误码00020,该错误码的官方说明即为“当前版本过低”,实际原因可能是账号登录被tx判定有风险等,可以选择更换登录协议等方法尝试。 00020
- 登录环境被判定风险:Mirai或gocq的登录设备信息在
device.json
中,设备信息可能被标记风险,可通过删除账号的原device.json
重新尝试(Mirai删除bots文件夹下账号信息)。 - 骰娘账号手机登录时,在同一wifi下登录框架有更高成功率。若如此且框架为mirai或gocq,可在登录成功后将设备信息文件
device.json
迁移至用于稳定运行的网络环境(gocq可额外迁移登录会话文件session.token
)。 - gocq显示密码错误或账号被冻结但实际并没有:原理不明,常见于刚解除冻结后,可尝试删除config.yml中的密码改为扫码登录。
框架登录通过的成功率:同wifi下扫码登录>异地扫码登录>短信验证登录>无验证登录
账号风控(消息屏蔽)¶
账号被QQ屏蔽最常见的特征有:群聊消息无法成功发送,但私聊消息可以;长文本消息无法成功发送,但短文本可以。
验证是否被屏蔽最直接的方式为查看框架日志,如有发送消息的记录但实际并没有,则可以断定被屏蔽。除此之外的快捷检测方式为在群内发送暗骰指令.rh
,如果私聊能正常收到结果但群聊无回执,则高概率为被屏蔽。
当账号被屏蔽时,建议暂停工作,避免带病上班,同时将账号作为正常QQ使用(养号)。
网络连接失败¶
- 心跳报告失败:心跳只是向后台发送骰娘当前状态,不影响骰娘运行
- jrrp获取失败:访问境外jrrp服务器失败会向后台报错,但用户会正常收到回执,不影响使用
- log上传失败:访问境外log服务器失败,需要手动从\user\log\文件夹提取txt
- 不良记录上传失败:无法生成云黑wid,可以在官群内发warning申请补录
命令行窗口无动静,按回车有¶
在窗口标题栏右键属性->选项->编辑选项
页下,关闭快速编辑模式
,确定。
Dice驱动器启动失败¶
[Fatal]: listen tcp 127.0.0.1:15800: bind: Only one usage of each socket address <protocol/network address/port> is normally permitted.¶
ws连接的端口被占用(极大可能是多个go-cqhttp程序使用相同默认的初始端口),需要修改config.yaml
使每个go-cqhttp配置的端口各不相同:
# config.yml 底端部分
# 连接服务列表
servers:
# 正向WS设置
- ws:
# 正向WS服务器监听地址,修改此处以避免冲突
address: 127.0.0.1:15801
middlewares:
<<: *default # 引用默认中间件
磁盘空间占用增多¶
- Mirai一键脚本使用.git更新文件,会造成.git文件夹堆积,如无回退需要可以直接删除;
- Dice目录下
user/log/
所存储的.log记录文件不会在log结束后销毁,部分log可能存在长期记录而不被关闭的情况,需要手动清理;
忘记WebUI管理密码¶
删除conf/WebUIPassword.digest
,密码将自动重置。
Mirai红字报错¶
W/MiraiNative: 当前运行环境 64 可能不与 Mirai Native 兼容,推荐使用 32位 JRE 运行 Mirai Native¶
Mirai启动时检测64位jre启动,而官方版本的MiraiNative只支持32位。请使用MiraiDiceWindows一键脚本部署后的更新.cmd
,并确保根目录没有64位jre后以启动Mirai.cmd
启动(该启动方式将强制使用根目录下的32位jre而非环境变量中的)。
W/MCL Addon: iTXTech Soyuz 未安装,Soyuz MCL Handler 特性已禁用¶
无影响。
附录¶
配置项目表¶
详见WebUIMaster设置
页
注:Disabled是不可用的意思!
指令禁用对信任4以上用户无效
DisabledBlock仅在区分插件优先级的框架生效,高优先级插件将拦截事件而非传递给低优先级插件处理
对.me特别处理的理由是其在跑团中几乎零作用,却可以制造骰娘自己说话的假象,引发风险。
通知类型表¶
- 通知级别:事件
- 0(调试):启动初始化、自定义回执文本、接收响应的warning、非黑受邀入群、非黑好友申请、刷屏初次提醒
- 1(提醒):解除禁言提醒、增减黑名单、接收warning处理反馈、申请/入群检测到黑名单、黑名单触发退群、接收陌生warning、自定义全局设置、信任等级变动、遥控单群退群/群设置
- 2(敏感):撤销管理员、批量修改群设置、接收send信息、群聊清查
- 3(警告):刷屏二次提醒、原生不良记录、系统负载报警
- 4(用户通知):切换公用/私用、定时开关
- 5(骰娘广播):生成warning
文件位置表¶
文件路径 | 说明 | 读写时机 |
---|---|---|
[DiceData]/conf/BlackList.json | 黑名单记录 | 修改时写入 |
[DiceData]/conf/Console.xml | Master配置 | 修改时写入 |
[DiceData]/conf/CustomCensor.json | 自定义敏感词库 | 修改时写入 |
[DiceData]/conf/censor/ | 敏感词库 | load时只读 |
[DiceData]/conf/CustomHelp.json | 自定义帮助文本 | 修改时写入 |
[DiceData]/conf/CustomMsg.json | 自定义回执文本 | 修改时写入 |
[DiceData]/conf/CustomMsgReply.json | 关键词回复文本 | 修改时写入 |
[DiceData]/conf/LinkList.json | 链接索引 | 修改时写入 |
[DiceData]/conf/ModList.json | 模块索引 | 修改时写入 |
[DiceData]/conf/NoticeList.json | 通知窗口列表 | 修改时写入 |
[DiceData]/conf/WebUIPassword.digest | WebUI密码 | 修改时写入 |
[DiceData]/user/ChatConf.dat | 群聊配置 | 退出或save时写入 |
[DiceData]/user/DiceToday.json | 今日统计 | 修改时写入 |
[DiceData]/user/HelpStatic.json | 帮助统计 | 修改时写入 |
[DiceData]/user/PlayerCards.RDconf | 角色卡记录 | 退出或save时写入 |
[DiceData]/user/UserConf.dat | 用户配置 | 退出或save时写入 |
[DiceData]/user/session/ | 团内记录(先攻、ob) | 修改时写入 |
[DiceData]/audit/ | 消息通知日志 | 更新时写入 |
[DiceData]/mod/ | 模块文件 | load时只读 |
[DiceData]/plugin/ | 脚本文件 | load及调用时只读 |
[DiceData]/PublicDeck/ | 外置牌堆 | load时只读 |
[DiceData]/CardTemp/ | 角色卡模板 | load时只读 |