js|<js脚本>
本命令将在匹配后运行js脚本
建议事先使用mujs调试器.exe
进行调试,确认能运行后再输入到面板里面
这个调试器就在面板目录下,直接双击打开
⚠注意:
1.js引擎支持的语法为ES5。
2.setInterval()setTimeout()等Window对象下的语句均不支持(因为需要尽快执行完脚本)。
3.为了避免死循环,尽量避免使用while循环,如要使用,务必加上计数变量并且在循环的开头加上计数break的判断!
4.换行符是\r\n
5.js引擎为严格模式,每一个命令后面需要加分号,请不要使用隐式变量声明等操作,if等代码块无论多短都必须使用{}括起来。
6.js引擎天然阻止混淆后的代码运行,请不要混淆你的js代码。
面板会把一些信息放入js引擎内,以一个全局变量的形式存在,我们将这个称为“环境变量”
正则匹配到的文本将保存在全局文本变量regularTxt
里面,正则匹配到的子匹配项保存在一个全局数组regularTxtList
里面。
如果正则是由群消息触发的,那么来源群号保存在全局变量Group
里面,发送人的QQ号保存在全局变量QQ
里面
如果正则是由私聊消息触发的,那么发送人的QQ号保存在全局变量QQ
里面
console.log
、eq.log
,这两个命令都能将文本输出到命令行
eq.log("hello world!");
⚠注意:
输出的信息会被当成由BDS产生的信息处理,并且会被正则匹配!
一定要注意,⚠不要形成死循环!!!
见下面的示例程序
var t=new Date();
eq.log("日期:"+t.toLocaleDateString());
eq.log("年:"+t.getFullYear());
eq.log("月:"+t.getMonth());
eq.log("日:"+t.getDate());
eq.log("时间:"+t.toLocaleTimeString());
eq.log("星期:"+t.getDay());
eq.log("小时:"+t.getHours());
eq.log("分钟:"+t.getMinutes());
eq.log("秒:"+t.getSeconds());
eq.log("毫秒:"+t.getMilliseconds());
eq.log("13位时间戳:"+t.getTime());
输出结果:
日期:2022-07-19
年:2022
月:6
日:19
时间:12:05:03.498+08:00
星期:2
小时:12
分钟:5
秒:3
毫秒:498
13位时间戳:1658203503498
file.read(path);
path: String
文件路径,用.
代替面板文件
文件夹的路径,不要忘记了路径的右斜杠需要转义(也就是说,双引号里面必须写\\
才能表示\
)
假设面板在C:\Users\Administrator\EQ面板go-cqhttp整合包
里面
那么'.\\1.json'
代表C:\Users\Administrator\EQ面板go-cqhttp整合包\面板文件\1.json
返回值:返回文件的内容,以GB2312编码模式读取成文本。找不到文件或文件内容为空则返回null。
String
或Null
file.write(path,text);
path: String
文件路径,用.
代替面板文件
文件夹的路径,不要忘记了路径的右斜杠需要转义(也就是说,双引号里面必须写\\
才能表示\
)
假设面板在C:\Users\Administrator\EQ面板go-cqhttp整合包
里面
那么'.\\1.json'
代表C:\Users\Administrator\EQ面板go-cqhttp整合包\面板文件\1.json
text: String
要写入文件的文本,以GB2312编码保存。
返回值:无
Null
eq.log(text);
text: String
待输出的文本
返回值:无
Null
eq.sendQQP(qqnumber,text);
qqnumber: String
发送目标的QQ号文本
text: String 需要发送的文本
返回值:无
Null
eq.sendQQG(groupnumber,text,atQQnumber);
groupnumber: String
发送目标的QQ群号文本
text: String
需要发送的文本
atQQnumber: String
需要@群成员的QQ号文本,填”0”或不填表示不@,填”-1”@全体成员(需要是群管理员才能@全体成员)
返回值:无
Null
eq.getOS();
参数:无
返回值:返回操作系统名称,如:Microsoft Windows 10 专业版
返回值类型:String
或Null
eq.getCPUUsage();
参数:无
返回值:返回CPU占用率,精确到两位小数的百分比,如:28
返回值类型:Integer
eq.getMemoryUsage();
参数:无
返回值:返回内存占用率,整数百分比,如:60.66
返回值类型:Float
eq.getTotalRAM();
参数:无
返回值:返回总内存大小,单位KB,如:8320280
返回值类型:Integer
eq.getUsedRAM();
参数:无
返回值:返回已经使用的内存大小,单位KB,如:5156176
返回值类型:Integer
eq.getCPUName();
参数:无
返回值:返回CPU的名称信息,如:Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz
返回值类型:String
或Null
eq.getStatus();
参数:无
返回值:返回BDS启动状态的文本,只有两种值:已启动/未启动
返回值类型:String
eq.getLevelName();
参数:无
返回值:返回当前加载的地图名称文本,如:Bedrock level
返回值类型:String
或Null
eq.getBDSconfig(configName);
configName: String
server.properties文件配置项等号左边的部分,如:server-name
、allow-list
、difficulty
返回值:返回对应配置项的内容文本,如:Dedicated Server
、true
、10
。失败返回null
String/null
相当于你在BDS的控制台输入指令
eq.runcmd(cmd);
参数:
cmd: String
想要执行的控制台命令
返回值:无
返回值类型:null
eq.runQQcmd(cmd);
参数:
cmd: String
想要执行的QQ机器人命令,以最高权限运行
返回值:返回QQ机器人命令的执行结果文本,就像私聊QQ机器人执行命令一样
返回值类型:String
或Null
eq.qq2id(qq);
参数:
qq: String
玩家的QQ号
返回值:返回玩家的游戏名称(玩家ID),如果白名单里面找不到,那么返回null
返回值类型:String
或Null
eq.id2qq(id);
参数:
id: String
玩家的游戏名称
返回值:返回玩家的QQ号,如果白名单里面找不到,那么返回null
返回值类型:String
或Null
eq.getplayersNum();
参数:无
返回值:返回玩家数量,如果服务器未启动则返回0
返回值类型:Integer
eq.getplayersList();
参数:无
返回值:返回玩家列表文本,“、”作为分隔符。如果无玩家在线或服务器未启动,那么返回null
返回值类型:String
或Null
eq.getBDSrunTime();
参数:无
返回值:返回格式为“X日X时X分X秒”的文本。如果BDS未启动,那么返回null
返回值类型:String
或Null
特别提醒:这不是
Windows系统里面的剪切板,而是EQ面板内部给js长期保存数据的容器
eq.writeEQclipBoard(clipBoardName,str);
参数:
clipBoardName: String
剪切板的名字,随便取名字即可,读取时要通过这个名字读取数据。如果没有这个名字的剪切板,那么会自动创建。如果已经有同名字的剪切板,那么会替换里面原有的内容
str: String
想要保存的文本数据。如果为空文本,那么会删除这个剪切板,如果没有这个名字的剪切板并且str为空文本,那么啥也不干。
返回值:无
返回值类型:Null
特别提醒:这不是
Windows系统里面的剪切板,而是EQ面板内部给js长期保存数据的容器
eq.readEQclipBoard(clipBoardName);
参数:
clipBoardName: String
剪切板的名字,保存文本到EQ剪切板时指定的名字,根据这个名字取出文本数据
返回值:返回文本数据。如果没有这个名字的剪切板,那么返回null
返回值类型:String
或Null
我们匹配群消息“签到”,然后执行JS脚本,实现群签到功能
第一次签到给予600单位的LLMoney,以后每次300单位的LLMoney,同时24小时内只能签到一次,所以说需要以QQ为依据保存上一次的签到时间到json文件里面,每次执行脚本时读入json。由于BDS未启动时无法给玩家加钱,所以说要检测BDS是否开启,以免浪费玩家一天一次的签到机会。签到冷却时间未到时需要显示冷却时间剩余多久,所以说要进行简单的数学运算。
下面是直接就能使用的示例:
正则表达式:签到
输入源:QQ群消息
来源群/QQ限制:12345#67890
来源群限制改成您服务器的QQ群,这里假设有两个群要监听群成员签到,第一个群号为12345,第二个群号为67890。您把它改成您服务器的群号即可。
备注:群签到JS
正则命令:
js|function signGroup(){
if(eq.getStatus()=='未启动'){
eq.sendQQG(Group,'很抱歉,服务器没开,无法签到哦',QQ);
return;
}
//读取文件
var json=JSON.parse(file.read(".\\群签到.json"));
//获取现在的时间
var t=new Date();
if (json[QQ]==undefined){
json[QQ]=0;//第一次签到
}
var passedtime=t.getTime()-json[QQ];
if(passedtime>86400000){
//超过24小时
var playerid=eq.qq2id(QQ);
if(playerid==""){
eq.sendQQG(Group,'很抱歉,您的QQ不在服务器白名单里面,无法签到哦',QQ);
return;
}
if(json[QQ]==0){
//第一次签到
eq.runcmd('money add "'+playerid+'" 600');
eq.sendQQG(Group,'签到成功,这是您第一次签到,金币+600,以后每次加300个金币,记得明天再来哦',QQ);
}else{
eq.runcmd('money add "'+playerid+'" 300');
eq.sendQQG(Group,'签到成功,金币+300,记得明天再来哦',QQ);
}
json[QQ]=t.getTime();
file.write(".\\群签到.json",JSON.stringify(json));
}else{
//提示用户等待时间
passedtime=86400000-passedtime;
var hour=Math.floor(passedtime/3600000);
passedtime=passedtime % 3600000;
var minute=Math.floor(passedtime/60000);
passedtime=passedtime % 60000;
var second=Math.floor(passedtime/1000);
eq.sendQQG(Group,'距离上一次签到还没有满一天哦,还剩下'+hour+'时'+minute+'分'+second+'秒',QQ);
}
}
signGroup();