Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
28e8c5d0
Commit
28e8c5d0
authored
Jan 19, 2020
by
jiahua.liu
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
9e0251e6
3204f204
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
200 additions
and
37 deletions
+200
-37
mirai-console/src/main/kotlin/net/mamoe/mirai/plugin/PluginBase.kt
...sole/src/main/kotlin/net/mamoe/mirai/plugin/PluginBase.kt
+4
-8
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
+5
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
...mmonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
+3
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Message.kt
...commonMain/kotlin/net.mamoe.mirai/message/data/Message.kt
+0
-13
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/LoginFailedException.kt
...Main/kotlin/net.mamoe.mirai/utils/LoginFailedException.kt
+1
-1
mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt
...i-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt
+1
-1
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingBot.java
...-japt/src/main/java/net/mamoe/mirai/japt/BlockingBot.java
+116
-0
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingContact.java
...t/src/main/java/net/mamoe/mirai/japt/BlockingContact.java
+1
-2
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingContacts.java
.../src/main/java/net/mamoe/mirai/japt/BlockingContacts.java
+5
-0
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingGroup.java
...apt/src/main/java/net/mamoe/mirai/japt/BlockingGroup.java
+16
-6
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingMember.java
...pt/src/main/java/net/mamoe/mirai/japt/BlockingMember.java
+4
-1
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/BlockingBotImpl.kt
...t/src/main/kotlin/net/mamoe/mirai/japt/BlockingBotImpl.kt
+39
-0
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/BlockingContacts.kt
.../src/main/kotlin/net/mamoe/mirai/japt/BlockingContacts.kt
+3
-1
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/BlockingContactsImpl.kt
.../main/kotlin/net/mamoe/mirai/japt/BlockingContactsImpl.kt
+2
-3
No files found.
mirai-console/src/main/kotlin/net/mamoe/mirai/plugin/PluginBase.kt
View file @
28e8c5d0
...
...
@@ -101,13 +101,7 @@ class PluginDescription(
}
}
internal
class
PluginClassLoader
(
file
:
File
,
parent
:
ClassLoader
)
:
URLClassLoader
(
arrayOf
(
file
.
toURI
().
toURL
()),
parent
)
{
override
fun
findClass
(
moduleName
:
String
?,
name
:
String
?):
Class
<
*
>
{
return
super
.
findClass
(
name
)
}
}
internal
class
PluginClassLoader
(
file
:
File
,
parent
:
ClassLoader
)
:
URLClassLoader
(
arrayOf
(
file
.
toURI
().
toURL
()),
parent
)
object
PluginManager
{
internal
val
pluginsPath
=
System
.
getProperty
(
"user.dir"
)
+
"/plugins/"
.
replace
(
"//"
,
"/"
).
also
{
...
...
@@ -136,7 +130,9 @@ object PluginManager {
logger
.
info
(
"plugin.yml not found in jar "
+
jar
.
name
+
", it will not be consider as a Plugin"
)
}
else
{
val
description
=
PluginDescription
.
readFromContent
(
URL
(
"jar:file:"
+
file
.
absoluteFile
+
"!/"
+
pluginYml
.
name
).
openConnection
().
inputStream
.
readAllBytes
().
encodeToString
())
PluginDescription
.
readFromContent
(
URL
(
"jar:file:"
+
file
.
absoluteFile
+
"!/"
+
pluginYml
.
name
).
openConnection
().
inputStream
.
use
{
it
.
readBytes
().
encodeToString
()
})
println
(
description
)
pluginsFound
[
description
.
name
]
=
description
pluginsLocation
[
description
.
name
]
=
file
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
View file @
28e8c5d0
...
...
@@ -3,6 +3,8 @@
package
net.mamoe.mirai
import
kotlinx.coroutines.*
import
net.mamoe.mirai.event.broadcast
import
net.mamoe.mirai.event.events.BotOfflineEvent
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.io.logStacktrace
...
...
@@ -41,6 +43,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
fun
instanceWhose
(
qq
:
Long
):
Bot
{
instances
.
forEach
{
@Suppress
(
"PropertyName"
)
if
(
it
.
uin
==
qq
)
{
return
it
}
...
...
@@ -55,6 +58,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
final
override
val
network
:
N
get
()
=
_network
@Suppress
(
"PropertyName"
)
internal
lateinit
var
_network
:
N
final
override
suspend
fun
login
()
=
reinitializeNetworkHandler
(
null
)
...
...
@@ -86,6 +90,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
logger
.
info
(
"Initializing BotNetworkHandler"
)
try
{
if
(
::
_network
.
isInitialized
)
{
BotOfflineEvent
(
this
).
broadcast
()
_network
.
dispose
(
cause
)
}
}
catch
(
e
:
Exception
)
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
View file @
28e8c5d0
...
...
@@ -15,4 +15,6 @@ abstract class BotEvent : Event {
constructor
()
:
super
()
}
class
BotLoginSucceedEvent
(
bot
:
Bot
)
:
BotEvent
(
bot
)
\ No newline at end of file
class
BotLoginSucceedEvent
(
bot
:
Bot
)
:
BotEvent
(
bot
)
class
BotOfflineEvent
(
bot
:
Bot
)
:
BotEvent
(
bot
)
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Message.kt
View file @
28e8c5d0
...
...
@@ -86,19 +86,6 @@ interface Message {
operator
fun
plus
(
another
:
String
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
// `+ ""` will be resolved to `plus(String)` instead of `plus(CharSeq)`
operator
fun
plus
(
another
:
CharSequence
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
// do remove these primitive types, they can reduce boxing
operator
fun
plus
(
another
:
Int
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
operator
fun
plus
(
another
:
Double
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
operator
fun
plus
(
another
:
Long
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
operator
fun
plus
(
another
:
Short
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
operator
fun
plus
(
another
:
Byte
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
operator
fun
plus
(
another
:
Float
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
operator
fun
plus
(
another
:
Number
):
MessageChain
=
this
.
followedBy
(
another
.
toString
().
toMessage
())
}
/**
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/LoginFailedException.kt
View file @
28e8c5d0
...
...
@@ -5,4 +5,4 @@ import net.mamoe.mirai.data.LoginResult
class
LoginFailedException
(
val
result
:
LoginResult
,
message
:
String
=
"Login failed with reason $result"
)
:
Exception
(
message
)
\ No newline at end of file
)
:
RuntimeException
(
message
)
\ No newline at end of file
mirai-demos/mirai-demo-1/src/main/java/demo/subscribe/SubscribeSamples.kt
View file @
28e8c5d0
...
...
@@ -63,7 +63,7 @@ suspend fun main() {
*
* @see MessageSubscribersBuilder
*/
suspend
fun
Bot
.
messageDSL
()
{
fun
Bot
.
messageDSL
()
{
// 监听这个 bot 的来自所有群和好友的消息
this
.
subscribeMessages
{
// 当接收到消息 == "你好" 时就回复 "你好!"
...
...
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingBot.java
View file @
28e8c5d0
package
net.mamoe.mirai.japt
;
import
kotlinx.io.core.ByteReadPacket
;
import
net.mamoe.mirai.BotAccount
;
import
net.mamoe.mirai.data.AddFriendResult
;
import
net.mamoe.mirai.data.ImageLink
;
import
net.mamoe.mirai.message.data.Image
;
import
net.mamoe.mirai.network.BotNetworkHandler
;
import
net.mamoe.mirai.utils.GroupNotFoundException
;
import
net.mamoe.mirai.utils.MiraiInternalAPI
;
import
net.mamoe.mirai.utils.MiraiLogger
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.Nullable
;
import
java.util.List
;
@SuppressWarnings
(
"unused"
)
public
interface
BlockingBot
{
/**
* 账号信息
*/
@MiraiInternalAPI
@NotNull
BotAccount
getAccount
();
/**
* QQ 号码. 实际类型为 uint
*/
long
getUin
();
/**
* 日志记录器
*/
@NotNull
MiraiLogger
getLogger
();
// region contacts
/**
* 与这个机器人相关的 QQ 列表. 机器人与 QQ 不一定是好友
*/
@NotNull
List
<
BlockingQQ
>
getQQs
();
/**
* 获取缓存的 QQ 对象. 若没有对应的缓存, 则会线程安全地创建一个.
*/
@NotNull
BlockingQQ
getQQ
(
long
id
);
/**
* 与这个机器人相关的群列表. 机器人不一定是群成员.
*/
@NotNull
List
<
BlockingGroup
>
getGroups
();
/**
* 获取缓存的群对象. 若没有对应的缓存, 则会线程安全地创建一个.
* 若 {@code id} 无效, 将会抛出 {@link GroupNotFoundException}
*/
@NotNull
BlockingGroup
getGroup
(
long
id
);
/**
* 获取缓存的群对象. 若没有对应的缓存, 则会线程安全地创建一个.
* 若 {@code internalId} 无效, 将会抛出 {@link GroupNotFoundException}
*/
@NotNull
BlockingGroup
getGroupByInternalId
(
long
internalId
);
// endregion
// region network
/**
* 网络模块
*/
@NotNull
BotNetworkHandler
getNetwork
();
/**
* 登录.
* <p>
* 最终调用 [net.mamoe.mirai.network.BotNetworkHandler.login]
*
* @throws net.mamoe.mirai.utils.LoginFailedException
*/
@SuppressWarnings
(
"JavaDoc"
)
void
login
();
// endregion
// region actions
@NotNull
ImageLink
getLink
(
@NotNull
Image
image
);
byte
[]
downloadAsByteArray
(
@NotNull
Image
image
);
@NotNull
ByteReadPacket
download
(
@NotNull
Image
image
);
/**
* 添加一个好友
*
* @param message 若需要验证请求时的验证消息.
* @param remark 好友备注
*/
@NotNull
AddFriendResult
addFriend
(
long
id
,
@Nullable
String
message
,
@Nullable
String
remark
);
/**
* 同意来自陌生人的加好友请求
*/
void
approveFriendAddRequest
(
long
id
,
@Nullable
String
remark
);
// endregion
/**
* 关闭这个 [Bot], 停止一切相关活动. 不可重新登录.
*/
void
dispose
(
@Nullable
Throwable
throwable
);
}
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingContact.java
View file @
28e8c5d0
package
net.mamoe.mirai.japt
;
import
net.mamoe.mirai.Bot
;
import
net.mamoe.mirai.message.data.Message
;
import
net.mamoe.mirai.message.data.MessageChain
;
import
org.jetbrains.annotations.NotNull
;
...
...
@@ -11,7 +10,7 @@ public interface BlockingContact {
* 这个联系人所属 [Bot]
*/
@NotNull
Bot
getBot
();
B
lockingB
ot
getBot
();
/**
* 可以是 QQ 号码或者群号码 [GroupId].
...
...
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingContacts.java
View file @
28e8c5d0
package
net.mamoe.mirai.japt
;
import
net.mamoe.mirai.Bot
;
import
net.mamoe.mirai.contact.Group
;
import
net.mamoe.mirai.contact.Member
;
import
net.mamoe.mirai.contact.QQ
;
...
...
@@ -19,4 +20,8 @@ public final class BlockingContacts {
public
static
BlockingMember
createBlocking
(
Member
member
)
{
return
new
BlockingMemberImpl
(
member
);
}
public
static
BlockingBot
createBlocking
(
Bot
bot
)
{
return
new
BlockingBotImpl
(
bot
);
}
}
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingGroup.java
View file @
28e8c5d0
package
net.mamoe.mirai.japt
;
import
net.mamoe.mirai.contact.Group
;
import
net.mamoe.mirai.data.GroupInfo
;
import
org.jetbrains.annotations.NotNull
;
import
java.util.Map
;
import
java.util.NoSuchElementException
;
@SuppressWarnings
(
"unused"
)
public
interface
BlockingGroup
extends
BlockingContact
{
/**
* 内部 ID
. 内部 ID 为 [GroupId] 的映射
* 内部 ID
*/
long
getInternalId
();
/**
* 群主 (同步事件更新)
* 进行
[updateGroupInfo]
时将会更新这个值.
* 进行
{@link #updateGroupInfo}
时将会更新这个值.
*/
@NotNull
BlockingMember
getOwner
();
/**
* 群名称 (同步事件更新)
* 进行
[updateGroupInfo]
时将会更新这个值.
* 进行
{@link #updateGroupInfo}
时将会更新这个值.
*/
@NotNull
String
getName
();
/**
* 入群公告, 没有时为空字符串. (同步事件更新)
* 进行
[updateGroupInfo]
时将会更新这个值.
* 进行
{@link #updateGroupInfo}
时将会更新这个值.
*/
@NotNull
String
getAnnouncement
();
/**
* 在
[Group]
实例创建的时候查询一次. 并与事件同步事件更新
* 在
{@link Group}
实例创建的时候查询一次. 并与事件同步事件更新
* <p>
* **注意**: 获得的列表仅为这一时刻的成员列表的镜像. 它将不会被更新
*/
@NotNull
Map
<
Long
,
BlockingMember
>
getMembers
();
/**
* 获取群成员. 若此 ID 的成员不存在, 则会抛出
[kotlin.NoSuchElementException]
* 获取群成员. 若此 ID 的成员不存在, 则会抛出
{@link NoSuchElementException}
*/
@NotNull
BlockingMember
getMember
(
long
id
);
/**
...
...
@@ -46,6 +54,7 @@ public interface BlockingGroup extends BlockingContact {
*
* @return 这一时刻的群资料
*/
@NotNull
GroupInfo
updateGroupInfo
();
/**
...
...
@@ -53,5 +62,6 @@ public interface BlockingGroup extends BlockingContact {
*/
boolean
quit
();
@NotNull
String
toFullString
();
}
\ No newline at end of file
mirai-japt/src/main/java/net/mamoe/mirai/japt/BlockingMember.java
View file @
28e8c5d0
package
net.mamoe.mirai.japt
;
import
net.mamoe.mirai.contact.MemberPermission
;
import
org.jetbrains.annotations.NotNull
;
@SuppressWarnings
(
"unused"
)
public
interface
BlockingMember
{
/**
* 所在的群
*/
@NotNull
BlockingGroup
getGroup
();
/**
* 权限
*/
@NotNull
MemberPermission
getPermission
();
/**
...
...
@@ -20,7 +23,7 @@ public interface BlockingMember {
* @param durationSeconds 持续时间. 精确到秒. 范围区间表示为 `(0s, 30days]`. 超过范围则会抛出异常.
* @return 若机器人无权限禁言这个群成员, 返回 `false`
*/
B
oolean
mute
(
int
durationSeconds
);
b
oolean
mute
(
int
durationSeconds
);
/**
* 解除禁言
...
...
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/BlockingBotImpl.kt
0 → 100644
View file @
28e8c5d0
package
net.mamoe.mirai.japt
import
kotlinx.coroutines.runBlocking
import
kotlinx.io.core.ByteReadPacket
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.contact.GroupInternalId
import
net.mamoe.mirai.data.AddFriendResult
import
net.mamoe.mirai.data.ImageLink
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiLogger
import
net.mamoe.mirai.utils.toList
internal
class
BlockingBotImpl
(
private
val
bot
:
Bot
)
:
BlockingBot
{
@MiraiInternalAPI
override
fun
getAccount
():
BotAccount
=
bot
.
account
override
fun
getUin
():
Long
=
bot
.
uin
override
fun
getLogger
():
MiraiLogger
=
bot
.
logger
@UseExperimental
(
MiraiInternalAPI
::
class
)
override
fun
getQQs
():
List
<
BlockingQQ
>
=
bot
.
qqs
.
delegate
.
toList
().
map
{
it
.
blocking
()
}
override
fun
getQQ
(
id
:
Long
):
BlockingQQ
=
bot
.
getQQ
(
id
).
blocking
()
@UseExperimental
(
MiraiInternalAPI
::
class
)
override
fun
getGroups
():
List
<
BlockingGroup
>
=
bot
.
groups
.
delegate
.
toList
().
map
{
it
.
blocking
()
}
override
fun
getGroup
(
id
:
Long
):
BlockingGroup
=
runBlocking
{
bot
.
getGroup
(
id
).
blocking
()
}
override
fun
getGroupByInternalId
(
internalId
:
Long
):
BlockingGroup
=
runBlocking
{
bot
.
getGroup
(
GroupInternalId
(
internalId
)).
blocking
()
}
override
fun
getNetwork
():
BotNetworkHandler
=
bot
.
network
override
fun
login
()
=
runBlocking
{
bot
.
login
()
}
override
fun
getLink
(
image
:
Image
):
ImageLink
=
bot
.
run
{
runBlocking
{
image
.
getLink
()
}
}
override
fun
downloadAsByteArray
(
image
:
Image
):
ByteArray
=
bot
.
run
{
runBlocking
{
image
.
downloadAsByteArray
()
}
}
override
fun
download
(
image
:
Image
):
ByteReadPacket
=
bot
.
run
{
runBlocking
{
image
.
download
()
}
}
override
fun
addFriend
(
id
:
Long
,
message
:
String
?,
remark
:
String
?):
AddFriendResult
=
runBlocking
{
bot
.
addFriend
(
id
,
message
,
remark
)
}
override
fun
approveFriendAddRequest
(
id
:
Long
,
remark
:
String
?)
=
runBlocking
{
bot
.
approveFriendAddRequest
(
id
,
remark
)
}
override
fun
dispose
(
throwable
:
Throwable
?)
=
bot
.
dispose
(
throwable
)
}
\ No newline at end of file
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/BlockingContacts.kt
View file @
28e8c5d0
...
...
@@ -2,10 +2,12 @@
package
net.mamoe.mirai.japt
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.QQ
inline
fun
Group
.
blocking
():
BlockingGroup
=
BlockingContacts
.
createBlocking
(
this
)
inline
fun
QQ
.
blocking
():
BlockingQQ
=
BlockingContacts
.
createBlocking
(
this
)
inline
fun
Member
.
blocking
():
BlockingMember
=
BlockingContacts
.
createBlocking
(
this
)
\ No newline at end of file
inline
fun
Member
.
blocking
():
BlockingMember
=
BlockingContacts
.
createBlocking
(
this
)
inline
fun
Bot
.
blocking
():
BlockingBot
=
BlockingContacts
.
createBlocking
(
this
)
\ No newline at end of file
mirai-japt/src/main/kotlin/net/mamoe/mirai/japt/BlockingContactsImpl.kt
View file @
28e8c5d0
...
...
@@ -3,7 +3,6 @@
package
net.mamoe.mirai.japt
import
kotlinx.coroutines.runBlocking
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.MemberPermission
...
...
@@ -20,7 +19,7 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.toList
internal
class
BlockingQQImpl
(
private
val
delegate
:
QQ
)
:
BlockingQQ
{
override
fun
getBot
():
B
ot
=
delegate
.
bot
override
fun
getBot
():
B
lockingBot
=
delegate
.
bot
.
blocking
()
override
fun
getId
():
Long
=
delegate
.
id
override
fun
sendMessage
(
messages
:
MessageChain
)
=
runBlocking
{
delegate
.
sendMessage
(
messages
)
}
override
fun
sendMessage
(
message
:
String
)
=
runBlocking
{
delegate
.
sendMessage
(
message
.
toMessage
().
toChain
())
}
...
...
@@ -41,7 +40,7 @@ internal class BlockingGroupImpl(private val delegate: Group) : BlockingGroup {
override
fun
updateGroupInfo
():
GroupInfo
=
runBlocking
{
delegate
.
updateGroupInfo
()
}
override
fun
toFullString
():
String
=
delegate
.
toFullString
()
override
fun
getMember
(
id
:
Long
):
BlockingMember
=
delegate
.
getMember
(
id
).
blocking
()
override
fun
getBot
():
B
ot
=
delegate
.
bot
override
fun
getBot
():
B
lockingBot
=
delegate
.
bot
.
blocking
()
override
fun
getAnnouncement
():
String
=
delegate
.
announcement
@UseExperimental
(
MiraiInternalAPI
::
class
)
override
fun
getMembers
():
Map
<
Long
,
BlockingMember
>
=
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment