StageGuard / mirai-rhinojs-sdk

为Mirai API Http提供封装好的适用于Mozilla Rhino的SDK,适配Auto.js。
GNU Affero General Public License v3.0
11 stars 4 forks source link

Deprecated

不再维护此仓库,请前往 iTXTech/mirai-js 查看另一个基于 Mozilla Rhino 和 Mirai 的 SDK。

mirai-rhinojs-sdk

Miraimirai-api-http提供封装好的适用于全平台的SDK。

Mozilla Rhino是什么?

Mozilla Rhino: JavaScript in Java

Rhino

Rhino is an implementation of JavaScript in Java.

Rhino是一个可以在JavaScript上运行Java程序的库。


简介

Miraimirai-api-http提供封装好的适用于全平台的SDK。

如何适用全平台?

Windows/Linux用户可以下载rhino运行库运行脚本。

安卓用户可以在Termux配置java环境或下载基于rhino的应用(如Auto.js)

如何简单易用?

下面提供一个简单的例子:

//将消息类型等静态常量注册进全局对象
Mirai.registerClasses2Object(this);
//设置http api服务器地址和验证密钥
Mirai.setServer("http://localhost:8081/");
Mirai.setAuthKey("stageguard");
//创建一个新的bot
var bot = Mirai.createNewBot(你的qq号);
//订阅bot消息
bot.subscribe({
  //订阅群组消息
  group: (group, sender, message) => {
    message.contains("回复测试").then(() => {
        //回复这个群友,以下方法是等价的
        group.reply("回复你了1");
        group.reply(Plain("回复你了2"));
        sender.reply("回复你了3");
        bot.sendGroupMessage(group, [Plain("回复你了4")], sender.getSourceId());
      }).contains("at测试").then(() => {
        //at这个群友,以下方法是等价的
        sender.at("at你了1");
        group.at(sender, "at你了2");
        group.send(At(sender) + Plain("at你了3"));
        bot.send(group, At(sender) + Plain("at你了4"));
        bot.send(group, At(sender), Plain("at你了5"));
        bot.sendGroupMessage(group, [At(sender), Plain("at你了6")]);
      }).contains("私聊我").then(() => {
        //自动判断有无好友
        sender.send("私聊你了1");
        //自动判断有无好友
        bot.send(sender, "私聊你了2");
        //手动判断
        if(bot.haveFriend(sender)) {
          bot.sendFriendMessage(sender, [Plain("私聊你了3")]);
        } else {
          bot.sendTempMessage(sender, group, [Plain("私聊你了3")]);
        }
      }).contains("禁言").then(() => {
        //group中的permission参数表示的是bot在这个群组的权限
        //sender中的permission参数表示消息发送者在这个群组的权限
        if(group.getPermission() == MEMBER || sender.getPermission() == OWNER) {
          group.send("我没有权限做那个!");
        } else {
          //若无At类型消息,get()则返回一个参数都为null的新消息对象
          if(message.get(AT).getTarget() != null) {
            //禁言60秒,以下方法都是等价的
            //获取at类型消息的target参数(被at的人的qq号)
            var target = message.get(AT).getTarget();
            bot.mute(group, target, 60);
            bot.unmute(group, target);
            group.mute(target, 60);
            group.unmute(target);
          }
        }
      });
  },
  friend: (sender, message) => {},
  //订阅其他事件
  event: (event) => {
    switch(event.type) {
      //自动拒绝好友请求
      case NEW_FRIEND_REQUEST:
        event.reject();
      break;
      //bot下线
      case BOT_OFFLINE:
      case BOT_OFFLINE_FORCE:
      case BOT_OFFLINE_DROPPED:
        bot.destroy();
      break;
    }
  },
  error: (e) => {
    Log.e(e);
  },
});

mirai-rhinojs-sdk提供了非常灵活的语法,允许你多种方式实现同一功能,尽量做到符合逻辑,同时提供多种消息类型构造方式:

sender.send(At(1355416608), Plain("at你了"));
//文本消息的构造函数可以省略
sender.send(At(1355416608), "at你了");
//伪操作符重载
//伪操作符重载方式不能省略文本消息的构造函数
sender.send(At(1355416608) + Plain("at你了"));

mirai-rhinojs-sdk将会有两个版本,它们的用法大部分都是相同的,但略有区别:


快速开始:

我不会JavaScript

你只需要在W3school简单学习基础语法就可以开始使用了。

我会JavaScript

现在开始使用!

core版本 core版本暂不可用,请等待发布


http版本 ### 部署mirai-console 前往[mirai-console](https://github.com/mamoe/mirai-console)和[mirai-api-http](https://github.com/mamoe/mirai-api-http)的release界面下载最新版本的wrapper和mirai-api-http,按照mirai-api-http的README做好配置。 安卓用户请浏览[mzdluo123/MiraiAndroid](https://github.com/mzdluo123/MiraiAndroid)项目下载mirai android app或浏览[我的博客](https://stageguard.top/2020/04/01/run-qqbot-on-termux-android/#%E8%AF%A6%E7%BB%86%E8%BF%87%E7%A8%8B)在termux部署。 ### 运行脚本 请选择你的平台查看
Android(AutoJS) ### 新建一个脚本并复制以下内容 ```javascript //导入MiraiQQBot库 eval(http.get("https://raw.githubusercontent.com/StageGuard/mirai-rhinojs-sdk/master/source/wrapper.js").body.string()); //注册一些常量对象到全局对象 Mirai.registerClasses2Object(scope); //http api服务器地址 Mirai.setServer("http://localhost:8080/"); //验证密钥 Mirai.setAuthKey("stageguard"); //创建新的bot var bot = Mirai.createNewBot(你的bot qq号); //订阅bot消息 bot.subscribe({ //订阅群组消息 group: (group, sender, message) => { group.send(message); }, friend: (sender, message) => { if(message.get(POKE).getName() == SIXSIXSIX) { sender.send(Poke(LIKE)); } }, }); ``` ### 运行脚本
Windows/Linux/Android(Termux) ### 下载rhino运行库 前往[mozilla/rhino](https://github.com/mozilla/rhino)项目release界面下载rhino运行库(rhino-xxx.jar而不是rhino-runtime-xxx.jar) ### 新建一个js脚本,复制以下内容 ```javascript //导入MiraiQQBot库 (function(http_get) { eval(http_get("https://raw.githubusercontent.com/StageGuard/mirai-rhinojs-sdk/master/source/wrapper.js")); }((url) => { var connection = (new java.net.URL(url)).openConnection(), bufferedReader, line, result = ""; connection.setDoInput(true); var bufferedReader = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getInputStream())); while ((line = bufferedReader.readLine()) != null) result += (line + "\n"); bufferedReader.close(); return result; })); //注册一些常量对象到全局对象 Mirai.registerClasses2Object(scope); //http api服务器地址 Mirai.setServer("http://localhost:8080/"); //验证密钥 Mirai.setAuthKey("stageguard"); //创建新的bot var bot = Mirai.createNewBot(你的bot qq号); //订阅bot消息 bot.subscribe({ //订阅群组消息 group: (group, sender, message) => { group.send(message); }, friend: (sender, message) => { message.contains(SIXSIXSIX).then(() => sender.send(Poke(LIKE))); }, }); ``` ### 运行脚本 ``` java -jar rhino.js -f your_script.js ```


出现以下日志,即为运行成功

Bot xxxxxxxxxx created.
Verification thread started for xxxxxxxxxx.
Message subscription thread started for xxxxxxxxxx.
Session is verified: xxxx

现在,你的bot就是复读机了(

尝试对你的BOT发送戳一戳中的666。

Poke消息

尽情享用吧!

提供一些demo帮助快速理解并开发。


所有功能均为测试版,少部分功能(如加群响应,移除群员等功能未测试),若有BUG请开issue反馈。

所有SDK提供的方法请参考SDK文档


To-Do

更新日志

2020.06.26 → 1.6.4

2020.05.31 → 1.6.3

文档已更新,MessageChain.contains的用法请浏览SDK文档

2020.05.17 → 1.6.2

2020.05.02 → 1.6.1

文档已更新,新事件和方法浏览SDK文档

2020.05.02 → 1.6.0

BREAKING CHANGES

文档已更新,新事件和方法浏览SDK文档

2020.04.14 → 1.5.1

文档已更新,新事件和方法浏览SDK文档

2020.04.12 → 1.5_alpha

文档已更新,新用法浏览SDK文档

2020.04.07 → 1.4.1_alpha

文档已更新。

2020.04.07 → 1.4_alpha

文档已更新。

2020.04.06 → 1.3.1_alpha

文档未更新。

2020.04.06 → 1.3_alpha

文档未更新。

2020.04.05 → 1.2_alpha

有关这些新方法的用法请看SDK文档

2020.04.05 → 1.1_alpha

License

mirai-rhinojs-sdk
Copyright (C) 2020  StageGuard

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.