EQ-BDSDtonsoleDocs

正则命令使用JS的语法

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里面

API和接口

调试输出

console.logeq.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类

读入文件

file.read(path);

写入文件

file.write(path,text);

eq类

输出文本到控制台

eq.log(text);

发送QQ私聊消息

eq.sendQQP(qqnumber,text);

发送QQ群聊消息

eq.sendQQG(groupnumber,text,atQQnumber);

获取操作系统名称

eq.getOS();

获取CPU占用率

eq.getCPUUsage();

获取内存占用率

eq.getMemoryUsage();

获取总内存大小

eq.getTotalRAM();

获取已经使用的内存大小

eq.getUsedRAM();

获取CPU名称

eq.getCPUName();

获取BDS启动状态

eq.getStatus();

获取当前加载的地图名称

eq.getLevelName();

获取BDS配置项(server.properties内容)

eq.getBDSconfig(configName);

执行BDS控制台命令

相当于你在BDS的控制台输入指令

eq.runcmd(cmd);

执行QQ机器人命令

eq.runQQcmd(cmd);

以QQ号查询游戏名(ID)

eq.qq2id(qq);

以游戏名(ID)查询QQ号

eq.id2qq(id);

获取当前在线人数

eq.getplayersNum();

获取当前在线玩家列表

eq.getplayersList();

获取BDS运行时间

eq.getBDSrunTime();

保存文本到EQ剪切板

特别提醒:这不是Windows系统里面的剪切板,而是EQ面板内部给js长期保存数据的容器

eq.writeEQclipBoard(clipBoardName,str);

从EQ剪切板读取文本

特别提醒:这不是Windows系统里面的剪切板,而是EQ面板内部给js长期保存数据的容器

eq.readEQclipBoard(clipBoardName);

实战_群签到

我们匹配群消息“签到”,然后执行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();