Mirai RhinoJS SDK文档
所有类和类型方法皆为测试阶段,未来可能会有更改。若按照文档的方法调用出现问题,或文档有错字或术语性错误,请在 StageGuard/mirai-rhinojs-sdk 开issue反馈。ISSUE的标题前必须加上[SDK文档]
或者[SDK Documentation]
,否则不予受理/更改。有关文档更新,请查看文档更新日志
由于
v1.6.0
版本的breaking changes,文档大幅度改动。现在只提供对外使用的接口,内部实现的方法没有必要了解。
不同版本的MiraiQQBot.js在方法上略有不同,在方法前会用[http]和[core]标记来表示http版本和core版本独有方法。
类型预览
- Mirai - Mirai RhinoJS主类
- Bot - Bot对象
- MessageChain - 消息链
- MessageSender - 消息发送者(群或好友)
- GroupInfo - 群组信息
- MessageType - 消息类型
- MessageTypeConst - 消息类型常量
- EventType - 事件类型
- EventTypeConst - 事件类型常量
- utils.http - 网络操作类
- utils.file - 文件操作类
- utils.rsync - Rhino中的异步执行
- Log - 日志输出
其他内容
Mirai
Mirai类是基类。
方法预览
返回类型 | 方法 |
---|---|
PlaceHolder | PlaceHolder |
VOID | static init(Object globalObject) |
VOID | static registerClasses2Object(Object object) |
VOID | static loadExternalObject(Object object, String filepath, String name) |
VOID | static [http]setAuthKey(String authKey) |
VOID | static [http]setSever(String server) |
Mirai.Bot |
static getBot(Number qq) |
Mirai.Bot |
static createNewBot(Number qq, String password) |
VOID表示无返回值。
详细方法
➢ VOID static
init(Object
globalObject)
初始化Mirai库,做平台判断和依赖下载等工作。
注:wrapper.js中已初始化,无需再次初始化。
➢ VOID static
registerClasses2Object(Object
object)
注册MessageType
,MessageTypeConst
,EventTypeConst
,Permission
和Log
到object
中,例如:
1 | var M; |
➢ VOID static
loadExternalObject(Object
object, String
filepath, String
name)
加载路径为filepath
的本地文件或网络文件,该文件应该在eval后返回一个对象,将这个对象命名为name
并注册到object
中。
例如:
1 | //外部文件ex.js |
➢ [http] VOID static
setAuthKey(String
authKey)
设置连接http api服务器的验证密钥。
➢ [http] VOID static
setServer(String
server)
设置连接http api服务器地址。
Mirai.Bot
static
getBot(Number
qq);
获取并返回bot对象,若无则返回null
。
Mirai.Bot
static
createNewBot(Number
qq, String
password);
创建一个新的bot,将其添加到BotManager并返回bot对象。参数qq
和password
指定了bot的qq号和密码。
[http]在http版本中不需要传入
password
。
若未指定服务器地址和验证密钥,将抛出Server host or authenticate key isnt set.
异常。
若验证密钥错误,将抛出Authenticate key is invaild.
异常。
Mirai.Bot
Bot是bot对象,提供消息处理功能。
方法预览
返回类型 | 方法 |
---|---|
PlaceHolder | PlaceHolder |
String |
[http]getSessionKey() |
Number |
subscribe(Object subscriber) |
VOID | destroy() |
Number |
send(GroupOrSender target, MessageObject) |
Number |
sendFriendMessage(Sender target, [MessageObject][, Number quoteId]) |
Number |
sendGroupMessage(Group target, [MessageObject][, Number quoteId]) |
Number |
sendTempMessage(Sender target, Group from, [MessageObject][, Number quoteId]) |
Number |
recall(Number target) |
Array |
getFriendList() |
Array |
getGroupList() |
Array |
getGroupMemberList(Group group) |
Boolean |
haveFriend(Sender target) |
VOID | mute(Group group, Sender[, Number time]) |
VOID | unmute(Group group, Sender target) |
VOID | muteAll(Group group) |
VOID | unmuteAll(Group group) |
VOID | kick(Group group, Sender target) |
VOID | handleFriendRequest(JSON iArg, Number isAccept, String msg) |
VOID | handleMemberJoinRequest(JSON iArg, Number isAccept, String msg) |
紫色参数表示聚合类型,将会在方法详细中介绍。
详细方法
➢ [http]String
getSessionKey()
返回当前bot的sessionKey(由http api分配)。
➢ VOID subscribe(Object
subscriber)
订阅当前bot接受到的消息。subscriber
是一个JSON
对象,它的格式是这样的:
1 | bot.subscribe({ |
在参数中,sender
的数据类型为MessageSender
,group
的数据类型为GroupInfo
,message
的类型为MessageChain
,error
的数据类型为Error
或String
。
订阅什么类型消息是可选的:
1 | //只订阅群组消息 |
若再次调用subscribe()
,则会覆盖之前的订阅对象。
➢ VOID destroy()
将这个bot从BotManager中移除并销毁当前bot对象。
➢ Number
send(GroupOrSender target, MessageObject)
发送一条消息,GroupOrSender表示GroupInfo
或MessageSender
,若为GroupInfo
则表示发送群消息,MessageSender
则表示发送好友消息,若无这个好友,但在同一个群,会尝试发送临时消息。
若发送成功则返回消息ID,否则返回0。
聚合消息对象
MessageObject是聚合类消息对象,它可以为以下格式:
1 | //单消息对象 |
不是很懂?以下例子帮助你理解:
1 | send(xxx, At(xxx), Plain("at你!")); |
以下所有MessageObject的意义都与这里相同。
➢ Number
sendFriendMessage(Sender target, [MessageObject][, Number
quoteId])
发送好友消息,Sender表示 Number
类型的用户qq号 或 MessageSender
类型的消息发送者对象,quoteId
是可选项,表示引用回复的消息ID。
若发送成功则返回消息ID,否则返回0。
注意这里的MessageObject,它是被[]
套起来的,换句话说这里传入的MessageObject是单成员数组:
1 | sendFriendMessage(xxx, [Plain("hello")], quoteId); |
以下所有Sender的意义都与这里相同。
➢ Number
sendGroupMessage(Group target, [MessageObject][, Number
quoteId])
发送群组消息,Group表示 Number
类型的群号 或 GroupInfo
类型的群组对象,quoteId
是可选项,表示引用回复的消息ID。
若发送成功则返回消息ID,否则返回0。
这里也需要注意MessageObject。
以下所有Group的意义都与这里相同。
➢ Number
sendTempMessage(Sender target, Group from, [MessageObject][, Number
quoteId])
发送临时消息,target
表示要发送对象,from
表示群组来源,quoteId
是可选项,表示引用回复的消息ID。
若发送成功则返回消息ID,否则返回0。
同样需要注意MessageObject。
➢ Number
recall(Number
target)
撤回一条消息,target
指定了要撤回的消息的ID。
➢ Array
getFriendList()
获取当前bot的好友列表,它的格式是这样的:
1 | [ |
若出现了任何错误,会返回一个空数组。
➢ Array
getGroupList()
获取当前bot的群组列表,它的格式是这样的:
1 | [ |
若出现了任何错误,会返回一个空数组。
➢ Array
getGroupMemberList(Group group)
获取一个群的群员列表数组,group
指定了要查询的群组。它的格式是这样的:
1 | [ |
若出现了任何错误,会返回一个空数组。
➢ Boolean
haveFriend(Sender target)
判断bot是否有这个好友,target
指定了查询的对象。
➢ VOID mute(Group group, Sender[, Number
time])
禁言一个群员,group
指定要操作的群,target
指定要禁言的成员,time
指定禁言的时间(秒)。
注:需要bot有对应权限!
➢ VOID unmute(Group group, Sender target)
解除禁言一个群员,group
指定要操作的群,target
指定要解除禁言的成员。
注:需要bot有对应权限!
➢ VOID muteAll(Group group)
全体禁言一个群组,group
指定要操作的群。
注:需要bot有对应权限!
➢ VOID unmuteAll(Group group)
解除全体禁言一个群组,group
指定要操作的群。
注:需要bot有对应权限!
➢ VOID kick(Group group, Sender target)
踢出群组的某个群员,group
指定要操作的群,target
指定要踢出的群员。
注:需要bot有对应权限!
➢ VOID handleFriendRequest(JSON
iArg, Number
isAccept, String
msg)
处理一个好友请求,iArg
必须为新好友事件的event.toIArg()
方法返回的JSON。isAccept
表示要执行的操作,0
为同意好友请求; 1
为拒绝好友请求; 2
为拒绝添加好友并添加黑名单,不再接收该用户的好友申请。msg
是可选的,表示拒绝同意好友请求的理由。
➢ VOID handleMemberJoinRequest(JSON
iArg, Number
isAccept, String
msg)
处理一个好友请求,iArg
必须为新成员入群事件的event.toIArg()
方法返回的JSON。isAccept
表示要执行的操作,0
为同意入群请求; 1
为拒绝入群请求; 2
为忽略入群请求; 3
为拒绝入群并添加黑名单,不再接收该用户的入群申请; 4
为忽略入群并添加黑名单,不再接收该用户的入群申请。msg
是可选的,表示拒绝入群请求的理由。
注:需要bot有对应权限!
Mirai.MessageChain
MessageChain提供消息链构造方法。
(QQ的一个消息可能是由各种消息构成的,如”文字+图片”。Mirai对此的处理方式是:将这些复合消息转化成各种类型消息构成的消息链。)
方法预览
返回类型 | 方法 |
---|---|
PlaceHolder | PlaceHolder |
Number |
length() |
MessageType.? |
get(MessageTypeConst.? type) |
Boolean |
contain(RegExp regex) |
TempObject | contain(RegExp* / Array[RegExp*] regex) |
self(MessageChain) |
discard(MessageTypeConst.? type) |
self(MessageChain) |
add(MessageObject messages) |
self(MessageChain) |
addF(MessageObject messages) |
String |
toString() |
详细方法
➢ Number
length()
返回消息链中消息对象的数目。
➢ MessageType.?
get(MessageTypeConst.?
type)
返回消息链中第一个类型为type
的消息。
若该链中不存在type
类型的消息,则返回一个新的参数均为null
的type
类型的消息。
➢ Boolean
contain(RegExp
regex)
判断消息链中的文本消息是否匹配regex
正则表达式。
➢ TempObject contain(RegExp*
/ Array[RegExp*]
regex)
判断消息链中的文本消息是否匹配regex
正则表达式,并返回一个临时对象,用于执行后续操作。
参数regex
可以是一个正则表达式字符串或正则表达式对象,或一个包含多个正则表达式的数组,用于一次匹配多个正则表达式。
详情请浏览:contains返回的临时对象和contains正则表达式拓展。
➢ self(MessageChain)
discard(MessageTypeConst.?
type)
删除(丢弃)消息链中所有类型为type
的消息,并返回自己(方便链式调用)。
若消息链无type
类型的消息,则什么也不会做。
➢ self(MessageChain)
add(MessageObject messages)
在消息链末端追加消息对象或消息链,并返回自己(方便链式调用)。
➢ self(MessageChain)
addF(MessageObject messages)
在消息链首端追加消息对象或消息链,并返回自己(方便链式调用)。
➢ String
toString()
返回消息链原始JSON信息字符串。
Mirai.MessageSender
MessageSender消息发送者对象。
MessageSender只从
Bot.subscribe
返回,实例化MessageSender
是没有任何意义的。
构造函数与方法预览
返回类型 | 方法 |
---|---|
Number |
getId() |
String |
getName() |
Permission |
getPermission() |
Number |
getSourceId() |
Number |
send(MessageObject messages) |
Number |
reply(MessageObject messages) |
Number |
at(MessageObject messages) |
VOID | mute(Number time) |
VOID | unmute() |
VOID | kick(String msg) |
String |
toString() |
详细方法
➢ Number
getId()
返回该用户QQ号。
➢ String
getName()
返回该用户名称。
➢ Permission
getPermission()
返回在群群的权限,若为subscribe()的friend返回的MessageSender,则为null
➢ Number
getSourceId()
MessageSender都是通过订阅的消息构造的,该方法返回这条消息的ID用于引用或撤回消息。
➢ Number
send(MessageObject messages)
给这个用户发送私人消息并返回消息ID,若无好友则发送临时消息。
➢ Number
reply(MessageObject messages)
回复这个用户的消息并返回消息ID。
➢ Number
at(MessageObject messages)
at这个用户并发送消息并返回消息ID。
➢ VOID mute(Number
time)
禁言这个用户,time
指定了要禁言的时间(秒),若为subscribe()的friend返回的MessageSender,则什么也不做。
注:需要bot有对应权限。
➢ VOID unmute()
解禁这个用户,若为subscribe()的friend返回的MessageSender,则什么也不做。
注:需要bot有对应权限。
➢ VOID kick(String
msg)
将这个用户踢出群组,msg
为踢出原因,若为subscribe()的friend返回的MessageSender,则什么也不做。
注:需要bot有对应权限。
➢ String
toString()
返回该用户信息。
Mirai.GroupInfo
GroupInfo为群组对象。
GroupInfo只从
Bot.subscribe
返回,实例化GroupInfo
是没有任何意义的。
构造函数与方法预览
返回类型 | 方法 |
---|---|
Number |
getId() |
String |
getName() |
Permission |
getPermission() |
Number |
send(MessageObject messages) |
Number |
reply(MessageObject messages) |
Number |
at(Sender target, MessageObject messages) |
VOID | mute(Sender target, Number time) |
VOID | unmute(Sender target) |
VOID | muteAll() |
VOID | unmuteAll() |
VOID | kick(Sender, String msg) |
String |
toString() |
详细方法
➢ Number
getId()
返回该QQ群的群号。
➢ String
getName()
返回该QQ群的名称。
➢ Permission
getPermission()
返回成员在该群的权限(一般为bot)。
➢ Number
send(MessageObject messages)
给这个群组发送消息并返回消息ID。
➢ Number
reply(MessageObject messages)
GroupInfo都是通过订阅的消息构造的,该方法回复这条消息的发送者并返回消息ID。
➢ Number
at(Sender target, MessageObject messages)
at用户并发送消息并返回消息ID。
➢ VOID mute(Sender target, Number
time)
禁言这个用户,target
指定了要禁言的群成员,time
指定了要禁言的时间(秒)。
注:需要bot有对应权限。
➢ VOID unmute(Sender target)
解禁这个用户,target
指定了要解禁的群成员。
注:需要bot有对应权限。
➢ VOID muteAll()
全体禁言。
注:需要bot有对应权限。
➢ VOID unmuteAll()
解除全体禁言。
注:需要bot有对应权限。
➢ VOID kick(Sender target, String
msg)
将这个用户踢出群组,target
为踢出的群友,msg
为踢出原因,若为subscribe()的friend返回的GroupInfo,则什么也不做。
注:需要bot有对应权限。
➢ String
toString()
返回该群信息。
Mirai.GroupInfo.Permission
该常量集用于表示群组成员权限
Permission.OWNER
群主
Permission.ADMIN
管理员
Permission.MEMBER
普通成员
Mirai.MessageType
MessageType提供各种消息类型的方法,提供给sdk使用者的都是静态方法。
所有子类
类名称 | 对应消息类型 |
---|---|
Source |
源消息连首 |
Quote |
引用(回复) |
Plain |
文字 |
Image |
图片 |
FlashImage |
闪照 |
Face |
QQ表情 |
At |
@某人 |
AtAll |
@全体成员 |
Xml |
XML消息 |
Json2 |
JSON消息 |
App |
APP消息 |
Poke |
戳一戳 |
详细方法
不需要实例化消息类型
Source(Number
id, Number
time)
源消息链首,id
为消息ID,time
为UNIX时间。
构建Source类型消息毫无意义,因为Source只作为群组消息ID的标记,而发送消息不需要消息ID(除了引用)。
Quote(Number
id, Number
senderId, Number
groupId, Mirai.MessageChain
origin)
引用消息,id
为消息ID,senderId
为引用原文发送者QQ号,groupId
为该消息QQ群的群号,origin
为引用原文消息链。
构建Quote类型消息毫无意义,因为发送引用消息的方法是在Bot.sendGroupMessage的第三个参数传入要引用的消息ID或GroupInfo.reply或MessageSender.reply。
Plain(String
text)
文字消息,text
为文本内容。
Image(String
imageId, String
url, String
path)
图片消息,imageId
为图片的UUID,url
为图片的链接,path
为图片本地链接。
三者可以任选一个参数,当同时有多个参数时,http api会按照imageId
>url
>path
的优先级发送图片。
接收到的图片永远不可能会有path
。
FlashImage(String
imageId, String
url, String
path)
闪照消息,用法和Image
完全相同。
Face(Number
faceId, String
name)
QQ表情,faceId
为表情编号(优先级高于后面的name),name
为表情名称。
At(Number
target, String
displayText)
@某人,taeget
为被@的人的QQ号,displayText
为@发送时显示的@文字。
AtAll()
@全体成员。
Xml(String
xml)
XML消息,xml
为XML消息内容。
Json2(String
json)
JSON消息,json
为JSON消息内容。
App(String
app)
APP消息,app
为APP消息内容。
Poke(PokeType.?
name)
Poke(戳一戳)消息,name
为Poke消息内容。
1 | Mirai.MessageType.Image.getImageId(); |
Mirai.MessageTypeConst
MessageTypeConst保存一些静态常量。
SOURCE
源消息链首
QUOTE
引用消息
PLAIN
文字消息
IMAGE
图片消息
FLASHIMAGE
闪照消息
FACE
QQ表情
AT
@某人
ATALL
@全体成员
XML
XML消息
JSON2
JSON消息
APP
APP消息
POKE
戳一戳消息
PokeType
PokeType.POKE
戳一戳
PokeType.SHOWLOVE
比心
PokeType.LIKE
点赞
PokeType.HEARTBROKEN
心碎
PokeType.SIXSIXSIX
666
PokeType.FANGDAZHAO
放大招
Mirai.EventType(Const)
EventType为Bot.subscribe
中的其他事件event的参数中的event
的类型基类
注:
EventType.?
只作为返回参数,构造它们是没有任何意义的。
所有事件类型
在Bot.subscribe
中的event
中,我们可以通过判断event.type
来确定接受到的事件类型。
下面是所有事件类型常量(EventTypeConst.?
):
它们后面对应着event中有的属性
➢BOT_ONLINE
: bot上线
Number
id: bot的qq号
➢BOT_OFFLINE
: bot下线
Number
id: bot的qq号
➢BOT_OFFLINE_FORCE
: bot被挤下线
Number
id: bot的qq号
➢BOT_OFFLINE_DROPPED
: bot异常下线
Number
id: bot的qq号
➢BOT_RELOGIN
: bot重新登录
Number
id: bot的qq号
➢GROUP_RECALL
: 群组撤回消息
Number
senderId: 撤回者QQ号Number
messageId: 撤回的消息的idNumber
time: 撤回时间GroupInfo
group: 事件发生所在的群组MessageSender
operator: 撤回者信息
➢FRIEND_RECALL
: 好友撤回消息
Number
senderId: 撤回者QQ号Number
messageId: 撤回的消息的idNumber
time: 撤回时间
➢BOT_GROUP_PERMISSION_CHANGE
: bot在群的权限被改变
Permission
before: 改前权限Permission
after: 改后权限GroupInfo
group: 事件发生所在群组
➢BOT_MUTE
: bot被禁言
Number
duration: 禁言时长MessageSender
operator: 禁言者
(群组信息可以在event.getOperator().group
找到)
➢BOT_UNMUTE
: bot被解除禁言
MessageSender
operator: 禁言者
(群组信息可以在event.getOperator().group
找到)
➢BOT_JOIN_GROUP
: bot新加入群组
GroupInfo
group: 加入的群组
➢GROUP_NAME_CHANGE
: 群名称改变
String
before: 改之前名称String
after: 改之后名称GroupInfo
group: 事件发生所在群组
➢GROUP_ENTRANCE_ANN_CHANGE
: 入群公告改变
String
before: 改之前入群公告String
after: 改之后入群公告GroupInfo
group: 事件发生所在群组MessageSender
operator: 操作者
➢GROUP_MUTE_ALL
: 群全体禁言事件
Boolean
before: 之前是否禁言Boolean
after: 之后是否禁言GroupInfo
group: 事件发生所在群组MessageSender
operator: 操作者
➢GROUP_ALLOW_ANONYMOUS_CHAT
: 匿名聊天
未写
➢GROUP_ALLOW_CONFESS_TALK
: 坦白说
未写
➢GROUP_ALLOW_MEMBER_INVITE
: 允许成员邀请其他人入群
未写
➢GROUP_MEMBER_JOIN
: 新人入群
MessageSender
member: 入群人信息
(群组信息可以在event.getMember().group
找到)
➢GROUP_MEMBER_KICK
: 群员被踢
MessageSender
target: 被踢人信息MessageSender
operator: 操作者
(群组信息可以在event.getOperator/Target().group
找到)
➢GROUP_MEMBER_QUIT
: 群员退群
MessageSender
member: 退群人信息
(群组信息可以在event.getMember().group
找到)
➢GROUP_MEMBER_NAME_CHANGE
: 群成员昵称改变
String
before: 改之前昵称String
after: 改之后昵称MessageSender
target: 被改昵称的人MessageSender
operator: 操作者(自己或者管理员)
(群组信息可以在event.getOperator/Target().group
找到)
➢GROUP_MEMBER_FAME_CHANHE
: 群特殊头衔改变
String
before: 改之前头衔(空或有)String
after: 改之后头衔MessageSender
target: 被改特殊头衔的人
(群组信息可以在event.getTarget().group
找到)
➢GROUP_MEMBER_PERMISSION_CHANGE
: 群成员权限改变(不能是bot)
Permission
before: 改之前权限Permission
after: 改之后权限MessageSender
target: 被改权限的人
➢GROUP_MEMBER_MUTE
: 群员被禁言
Number
duration: 禁言时长MessageSender
target: 被禁言的人MessageSender
operator: 操作者(自己或者管理员)
➢GROUP_MEMBER_UNMUTE
: 群员被解除禁言
MessageSender
target: 被解除禁言的人MessageSender
operator: 操作者(自己或者管理员)
➢NEW_FRIEND_REQUEST
: 新好友请求事件
Number
eventId: 事件ID,用于标识事件Number
fromId: 新好友QQ号Number
groupId: 新好友来自的群(0
为不是通过群加的好友)String
nickname: 新好友昵称
特殊方法:event.accept()
同意好友请求。event.reject()
拒绝好友请求。event.block()
拒绝并拉黑,不再接收请求。event.toIArg()
用于获取要传入Bot.handleFriendRequest
的一个参数。
(下面有例子)
➢NEW_MEMBER_JOIN_REQUEST
: 新成员入群请求事件
Number
eventId: 事件ID,用于标识事件Number
fromId: 加群人QQ号Number
groupId: 加群群号String
groupName: 加群群名称String
nickname: 加群人昵称
特殊方法:event.accept()
同意加群请求。event.reject()
拒绝加群请求。event.ignore()
忽略加群请求。event.ignoreAndBlock()
忽略加群请求并不再接收请求。event.rejectAndBlock()
拒绝加群请求并不再接收请求。event.toIArg()
用于获取要传入Bot.handleMemberJoinRequest
的一个参数。
所有的属性都可以通过调用event.getXxx()
(get+属性首字母大写)方法来过得。
下面通过一个例子展示用法:
1 | ... |
Mirai.utils.file
file类提供简单的文件读取和写入方法。
方法预览
返回类型 | 方法 |
---|---|
VOID | static create(String path) |
VOID | static remove(String path) |
? |
static read(String path, ? mode) |
VOID | static writeString(String path, String string, Boolean isCover) |
VOID | static writeStream(String path, java.io.InputStream inputStream, Boolean isCover, Boolean isInputStreamClose) |
VOID | static appendString(String path, String appendString) |
详细方法
➢ VOID static
create(String
path)
在path
创建一个文件或目录。
➢ VOID static
remove(String
path)
删除在path
的一个文件或目录。
➢ ?
static
read(String
path, ?
mode)
读取在path
的文件。
如果mode
为Mirai.utils.file.STRING
,则返回文件内容。
如果mode
为Mirai.utils.file.STREAM
,则返回文件输入流。
➢ VOID static
writeString(String
path, String
string, Boolean
isCover)
写入字符串到path
的文件。isCover
设定是否在文件已存在的情况下覆盖文件内容。
➢ VOID static
writeStream(String
path, java.io.InputStream
inputStream, Boolean
isCover, Boolean
isInputStreamClose)
写入字符串到path
的文件。isCover
设定是否在文件已存在的情况下覆盖文件内容。isInputStreamClose
设定是否在写入完成后关闭并回收输入流。
➢ VOID static
appendString(String
path, String
appendString)
追加字符串到path
的文件。
Mirai.utils.http
http类提供简单HTTP POST/GET方法。
方法预览
返回类型 | 方法 |
---|---|
[Number , java.io.InputStream ] |
static getInputStream(String url[, Array headers]) |
String |
static get(String url[, Array headers, Boolean isLineBreak]) |
String |
static post(String url, String params[, Array headers]) |
详细方法
➢ [Number
, java.io.InputStream
] static
getInputStream(String
url[, Array
headers])
读取远程服务器资源并返回输入流,常用于获取图片,音乐等非文字信息。headers
是可选的,指定了请求头,它应该是这样的格式:
1 | [ |
返回的Array中,第一个元素为输入流大小(文件大小),第二个元素为输入流。
➢ String
static
get(String
url[, Array
headers, Boolean
isLineBreak]) |
读取远程服务器资源并返回字符串。isLineBreak
指定是否有换行符,若为false
则读取后的字符串都在一行l。
➢ String
static
post(String
url, String
params[, Array
headers])
向远程服务器发送请求。
Mirai.utils.rsync
rsync类提供在rhino中异步执行的方法。
方法预览
返回类型 | 方法 |
---|---|
PlaceHolder | PlaceHolder |
rsync |
static run(Object func) |
rsync |
static loop(Object func, Number times, Number , interval) |
rsync |
static corun(Object func, Number count) |
rsync |
static flag(String name) |
rsync |
static interval(Number interval) |
rsync |
static co_count(Number count) |
rsync |
static loop_times(Number count) |
self(rsync) |
run(Object func) |
self(rsync) |
loop(Object func, Number times, Number , interval) |
self(rsync) |
corun(Object func, Number count) |
String /self(rsync) |
flag(String name) |
Number /self(rsync) |
interval(Number interval) |
Number /self(rsync) |
co_count(Number count) |
Number /self(rsync) |
loop_times(Number count) |
VOID | sleep(Number duration) |
VOID | stop() |
VOID | restart() |
详细方法
➢ rsync
static
run(Object
func)
创建执行单程异步线程,并返回这个异步线程对象。
rsync调用方法
例如:
1 | rsync.run((s) => { |
输出:
1 | in rsync thread. |
func
中的参数s
表示自身rsync对象,可以对当前异步线程进行sleep()或stop()等操作。
例如:
1 | rsync.run((s) => { |
输出:
1 | in rsync thread. |
stop()是可以将sleep()打断的。
1 | var r = rsync.run((s) => { |
输出:
1 | in rsync thread. |
➢ rsync
static
loop(Object
func, Number
times, Number
, interval)
创建执行循环异步线程并返回这个异步线程对象。times
表示循环执行的次数,-1
表示无限次(默认就是执行无限次),直到调用stop()。interval
表示每次上一次执行完毕到下一次执行的中间间隔(毫秒)。
它的本质是创建一个rsync对象,将标记循环执行次数的属性loop_times
和执行间隔属性interval
设置为参数times
和interval
。
➢ rsync
static
corun(Object
func, Number
count)
创建同时执行count
个单程异步线程并返回这个异步线程对象。count
表示创建同时执行线程的个数,若设置为为1,个则最终效果和rsync.run()相同。
它的本质是创建一个rsync对象,将标记同时执行线程个数的属性co_count
设置为参数count
。
1 | rsync.corun((s, i) => { |
将同时输出:
1 | 我是第0个线程 |
➢ rsync
static
flag(String
name)
创建一个新的异步线程,将线程组名称设置为name
并返回这个异步线程对象。
➢ rsync
static
interval(Number
interval)
创建一个新的异步线程,将上一次执行完毕到下一次执行的中间间隔设置为interval
并返回这个异步线程对象。
当loop_times
为1(默认)时异步线程不会执行第二次,所以interval属性不会起作用。
➢ rsync
static
co_count(Number
count)
创建一个新的异步线程,将同时异步执行线程的个数设置为count
并返回这个异步线程对象。
➢ rsync
static
loop_times(Number
times)
创建一个新的异步线程,将循环执行次数设置为interval
(-1
表示执行无限次)并返回这个异步线程对象。
➢ self(rsync)
run(Object
func)
开始执行异步线程。
若func
为null
,则什么也不会执行。
若当前rsync对象线程已开始执行,则会抛出异常。
➢ self(rsync)
loop(Object
func, Number
times, Number
, interval)
同上方静态方法,若当前rsync对象线程已开始执行,则会抛出异常。
它的本质是将当前rsync对象线程标记循环执行次数的属性loop_times
和执行间隔属性interval
设置为参数times
和interval
。
➢ self(rsync)
corun(Object
func, Number
count)
同上方静态方法,若当前rsync对象线程已开始执行,则会抛出异常。
它的本质是将当前rsync对象标记同时执行线程个数的属性co_count
设置为参数count
。
➢ String
/self(rsync)
flag(String
name)
将当前rsync对象线程组名称设置为name
并返回这个异步线程对象。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象flag
值。
➢ Number
/self(rsync)
interval(Number
interval)
将当前rsync对象上一次执行完毕到下一次执行的中间间隔设置为interval
并返回这个异步线程对象。
当loop_times
为1(默认)时异步线程不会执行第二次,所以interval属性不会起作用。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象interval
值。
➢ Number
/self(rsync)
co_count(Number
count)
将当前rsync对象同时异步执行线程的个数设置为count
并返回这个异步线程对象。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象co_count
值。
➢ Number
/self(rsync)
loop_times(Number
times)
将当前rsync对象循环执行次数设置为times
(-1
表示执行无限次)并返回这个异步线程对象。
若当前rsync对象线程已开始执行,则会抛出异常。
若参数为空,则会返回当前rsync对象loop_times
值。
➢ VOID sleep(Number
duration)
睡眠,duration
表示时长。
➢ VOID stop()
打断并停止线程执行。
➢ VOID restart()
重新执行。
rsync链式调用例子:
1 | //循环执行,以下方法是等价的 |
Mirai.Log
Log类向控制台输出日志,自动适配标准输出流和AutoJS控制台。
方法预览
返回类型 | 方法 |
---|---|
VOID | static v(Object object) |
VOID | static i(Object object) |
VOID | static w(Object object) |
VOID | static e(Object object) |
他们分别对应着verbose,info,warning和error消息,这里只是颜色不同而已。
其他内容
contains返回的临时对象
MessageChain.contains
会返回一个临时对象用于执行.then(Sync)
/.or(Sync)
后续操作
例如:
1 | msg.contains("打招呼").then(() => sender.at("你好呀!")); |
当消息内容满足正则表达式(组)匹配,则会将该临时对象中的flag
标为true
,表示包含满足匹配的消息
这里的
then
并不是Promise中的then
,此then非彼then…
看一下详细方法:
➢ self(TempObject)
then(Object
func)
➢ self(TempObject)
thenSync(Object
func)
➢ self(TempObject)
or(Object
func)
➢ self(TempObject)
orSync(Object
func)
若flag
被标为true
,则then(Sync)
可以被执行,否则执行or(Sync)
。
为了防止消息处理阻塞消息监听线程,你可以调用xxxSync
来异步执行。func
表示一个函数,为执行的内容,这个函数应该有两个(三个)形参:
1 | .then((i, v) => {}); |
其中:
i
表示满足contains表达式中的第几个表达式。
当contains的参数为RegExp
时,这个值是0
,当为Array[RegExp]
时,返回满足的表达式的元素序号。
1 | msg.contains([ |
v
表示匹配结果,请看contains正则表达式拓展
1 | msg.contains([ |
r
表示调用xxxSync
后执行的异步线程对象,也就是一个rsync
对象。
1 | msg.contains("...").thenSync((i, k, r) => Log.i(r)); |
输出:
1 | RsyncThreadGroup-unnamed@xxxxx-x |
上述四个方法都返回自身,可以链式调用
1 | msg.contains([ |
contains正则表达式拓展
此处基于常规正则表达式添加了简便子匹配结果提取方法,简化exec()获得子匹配内容的过程。
它的格式是这样的:
${[type[<properties...>]:]name}
其中[...]
表示为可选项。
例如:${content}
: 隐式定义匹配字符串,不包含空格和换行符,相当于${s:content}
${s:content}
: 显式指定匹配字符串,不包含空格和换行符${s<sp>:content}
: 匹配字符串,包含空格(space),相当于([^\n]+)
${s<lb>:content}
: 匹配字符串,包含换行符(break line),相当于([^ ]+)
${s<lb, sp>:content}
: 匹配字符串,包含所有字符,相当于([\s\S]+)
${s<len=5>:content}
: 匹配字符串,限制匹配长度,相当于([^ \n]{5})
正如你所见,未指定type则默认为匹配字符串(s),properties可以同事指定多个属性,中间用逗号隔开。
某些属性需要设置属性值,如类型s
中的len
属性,表示匹配字符的个数。
它有什么用?
所有匹配结果都将以JSON格式封装至contains返回的临时对象中的.then(Sync)
/.or(Sync)
的第二个参数中,你可以更方便地得到匹配结果。
1 | msg |
所有用户定义的子匹配表达式
(...)
都会被转为非捕获组子匹配表达式(?:...)
拓展匹配格式是无视正则表达式规则的:
1 | msg.contains(/${s:name}/).then(...); |
将匹配连续不包含空格和换行的字符,而$不表示表达式的开始标识符
类型支持:
n
: 匹配数字
属性:
bit=value
指定匹配数字的位数为value
位
s
: 匹配字符,不包括空格符和换行符
属性:
sp
匹配空格lb
匹配换行符len=value
指定匹配字符的长度为value