不再维护此仓库,请前往 iTXTech/mirai-js 查看另一个基于 Mozilla Rhino 和 Mirai 的 SDK。
为Mirai的mirai-api-http提供封装好的适用于全平台的SDK。
Mozilla Rhino: JavaScript in Java
Rhino is an implementation of JavaScript in Java.
Rhino是一个可以在JavaScript上运行Java程序的库。
为Mirai的mirai-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将会有两个版本,它们的用法大部分都是相同的,但略有区别:
core
: 此版本将mirai-core作为依赖使用,不需要预先部署mirai-console,这也意味着使用此版本将无法使用mirai-console插件。http
: 此版本基于mirai-console的插件mirai-api-http,该版本的通讯交互为轮询fetchMessage
接口,处理消息并发送。你只需要在W3school简单学习基础语法就可以开始使用了。
现在开始使用!
出现以下日志,即为运行成功
Bot xxxxxxxxxx created.
Verification thread started for xxxxxxxxxx.
Message subscription thread started for xxxxxxxxxx.
Session is verified: xxxx
现在,你的bot就是复读机了(
尝试对你的BOT发送戳一戳中的666。
尽情享用吧!
提供一些demo帮助快速理解并开发。
所有功能均为测试版,少部分功能(如加群响应,移除群员等功能未测试),若有BUG请开issue反馈。
所有SDK提供的方法请参考SDK文档
Image
/FlashImage
消息无法发送本地图片(#4)。discord
→ discard
。MessageChain.contains
以更好地判断消息Mirai.utils.http
和Mirai.utils.files
兼容rsync.stop()
。MessageChain.__convert
的判断逻辑。文档已更新,MessageChain.contains
的用法请浏览SDK文档。
Mirai.registerClasses2Object
时Mirai.utils
类也会注册到指定对象。Mirai.__BotManager
中的检验管理和消息监听管理,其管理工作移动到Mirai.Bot
。Mirai.utils.rsync
,允许在rhino中异步执行(其本质是Thread
的封装)。Mirai.loadExternalObject
允许加载外部脚本。文档已更新,新事件和方法浏览SDK文档。
BREAKING CHANGES
文档已更新,新事件和方法浏览SDK文档。
Session.sendTempMessage
适配http api 1.6.2版本。EventType.NEW_FRIEND_REQUEST
和EventType.NEW_MEMBER_JOIN_REQUEST
以支持监听新好友请求和新加群请求事件。Session.handleFriendRequest
和Session.handleMemberJoinRequest
以处理新好友请求和新加群请求。文档已更新,新事件和方法浏览SDK文档。
Session.sendTempMessage
以支持发送临时消息。Session.get(Friend/Group/GroupMember)List
以支持获取好友/群/群成员列表。Session.(un)mute(All)
以支持(全体)(解除)禁言。Session.kick
以支持踢出群成员。文档已更新,新用法浏览SDK文档。
Mirai.GroupInfo
的构造函数添加null判断Mirai.connect()
中的post auth修改到Mirai.auth()
,添加Mirai.Session.reAuth()
用于session失效后的重认证文档已更新。
Permission
的父类为Mirai.GroupInfo
GroupSenderInfo.getGroupInfo()
改为GroupSenderInfo.getGroup()
Mirai.EventType(Const)
事件类型,现在可以监听事件了。Mirai.MessageListener.hookOtherMessage(JSON msg)
改为 Mirai.MessageListener.hookEvent(Mirai.EventType.? event)
来hook事件文档已更新。
mirai-api-http
1.5版本的接口/fetchMessage
返回的数据格式。Mirai.MessageType.FlashImage
闪照消息类型,用法与Mirai.MessageType.Image
相同。Mirai.MessageType.Image
构造函数增加了path
参数,表示发送本地图片的路径,该路径是相对于plugins/MiraiAPIHTTP/images/
的。文档未更新。
Session.sendMessage
现在直接可以发送Mirai.MessageType.?
消息而无需仅为了一个消息对象构建消息链。Mirai.GroupInfo.getBotPermission
方法改名为Mirai.GroupInfo.getPermission
Mirai.GroupInfo.Permission
群组权限常量OWNER, ADMIN和MEMBERMirai.EventType
事件类型和Mirai.EventTypeConst
事件类型常量。也就是说现在支持监听事件了。Mirai.MessageListener
中的hookOtherMessage(JSON msg)
改成hookEvent(Mirai.EventType.? event)
)文档未更新。
MessageChain.build
的构造方式(原来的不受影响)Session.getCachedMessage
方法MessageChain.discordMessage
方法MessageChain.addMessage
方法MessageChain.addMessageF
方法MessageChain.toChainArray
方法有关这些新方法的用法请看SDK文档
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/>.