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
060098a5
Commit
060098a5
authored
Mar 06, 2020
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
No inlining because of Kotlin's stacktrace issue
parent
db28915b
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
43 deletions
+45
-43
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
...monMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
+45
-43
No files found.
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
View file @
060098a5
...
@@ -35,9 +35,9 @@ import kotlin.coroutines.EmptyCoroutineContext
...
@@ -35,9 +35,9 @@ import kotlin.coroutines.EmptyCoroutineContext
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
<
R
>
CoroutineScope
.
subscribeMessages
(
fun
<
R
>
CoroutineScope
.
subscribeMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
crossinline
listeners
:
MessageSubscribersBuilder
<
MessagePacket
<
*
,
*
>>.()
->
R
listeners
:
MessageSubscribersBuilder
<
MessagePacket
<
*
,
*
>>.()
->
R
):
R
{
):
R
{
// contract 可帮助 IDE 进行类型推断. 无实际代码作用.
// contract 可帮助 IDE 进行类型推断. 无实际代码作用.
contract
{
contract
{
...
@@ -60,9 +60,9 @@ inline fun <R> CoroutineScope.subscribeMessages(
...
@@ -60,9 +60,9 @@ inline fun <R> CoroutineScope.subscribeMessages(
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
<
R
>
CoroutineScope
.
subscribeGroupMessages
(
fun
<
R
>
CoroutineScope
.
subscribeGroupMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
crossinline
listeners
:
MessageSubscribersBuilder
<
GroupMessage
>.()
->
R
listeners
:
MessageSubscribersBuilder
<
GroupMessage
>.()
->
R
):
R
{
):
R
{
contract
{
contract
{
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
...
@@ -80,9 +80,9 @@ inline fun <R> CoroutineScope.subscribeGroupMessages(
...
@@ -80,9 +80,9 @@ inline fun <R> CoroutineScope.subscribeGroupMessages(
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
<
R
>
CoroutineScope
.
subscribeFriendMessages
(
fun
<
R
>
CoroutineScope
.
subscribeFriendMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
crossinline
listeners
:
MessageSubscribersBuilder
<
FriendMessage
>.()
->
R
listeners
:
MessageSubscribersBuilder
<
FriendMessage
>.()
->
R
):
R
{
):
R
{
contract
{
contract
{
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
...
@@ -100,9 +100,9 @@ inline fun <R> CoroutineScope.subscribeFriendMessages(
...
@@ -100,9 +100,9 @@ inline fun <R> CoroutineScope.subscribeFriendMessages(
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
<
R
>
Bot
.
subscribeMessages
(
fun
<
R
>
Bot
.
subscribeMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
crossinline
listeners
:
MessageSubscribersBuilder
<
MessagePacket
<
*
,
*
>>.()
->
R
listeners
:
MessageSubscribersBuilder
<
MessagePacket
<
*
,
*
>>.()
->
R
):
R
{
):
R
{
contract
{
contract
{
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
...
@@ -122,9 +122,9 @@ inline fun <R> Bot.subscribeMessages(
...
@@ -122,9 +122,9 @@ inline fun <R> Bot.subscribeMessages(
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
<
R
>
Bot
.
subscribeGroupMessages
(
fun
<
R
>
Bot
.
subscribeGroupMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
crossinline
listeners
:
MessageSubscribersBuilder
<
GroupMessage
>.()
->
R
listeners
:
MessageSubscribersBuilder
<
GroupMessage
>.()
->
R
):
R
{
):
R
{
contract
{
contract
{
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
...
@@ -142,9 +142,9 @@ inline fun <R> Bot.subscribeGroupMessages(
...
@@ -142,9 +142,9 @@ inline fun <R> Bot.subscribeGroupMessages(
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
<
R
>
Bot
.
subscribeFriendMessages
(
fun
<
R
>
Bot
.
subscribeFriendMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
crossinline
listeners
:
MessageSubscribersBuilder
<
FriendMessage
>.()
->
R
listeners
:
MessageSubscribersBuilder
<
FriendMessage
>.()
->
R
):
R
{
):
R
{
contract
{
contract
{
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
listeners
,
InvocationKind
.
EXACTLY_ONCE
)
...
@@ -282,6 +282,8 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -282,6 +282,8 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
}
}
}
}
// TODO: 2020/3/6 这些 lambda 都应该 crossinline, 但这会导致异常时的 stacktrace 不准确 (Kotlin 1.3.70) 待 Kotlin 修复此问题后恢复 inline 结构
/**
/**
* 无任何触发条件.
* 无任何触发条件.
*/
*/
...
@@ -311,11 +313,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -311,11 +313,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* @param ignoreCase `true` 则不区分大小写
* @param ignoreCase `true` 则不区分大小写
*/
*/
@MessageDsl
@MessageDsl
inline
fun
case
(
fun
case
(
equals
:
String
,
equals
:
String
,
ignoreCase
:
Boolean
=
false
,
ignoreCase
:
Boolean
=
false
,
trim
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
crossinline
onEvent
:
@MessageDsl
suspend
T
.(
String
)
->
Unit
onEvent
:
@MessageDsl
suspend
T
.(
String
)
->
Unit
):
Listener
<
T
>
{
):
Listener
<
T
>
{
val
toCheck
=
if
(
trim
)
equals
.
trim
()
else
equals
val
toCheck
=
if
(
trim
)
equals
.
trim
()
else
equals
return
content
({
(
if
(
trim
)
it
.
trim
()
else
it
).
equals
(
toCheck
,
ignoreCase
=
ignoreCase
)
},
{
return
content
({
(
if
(
trim
)
it
.
trim
()
else
it
).
equals
(
toCheck
,
ignoreCase
=
ignoreCase
)
},
{
...
@@ -334,11 +336,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -334,11 +336,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息内容包含 [sub] 中的任意一个元素
* 如果消息内容包含 [sub] 中的任意一个元素
*/
*/
@MessageDsl
@MessageDsl
inline
fun
contains
(
fun
contains
(
sub
:
String
,
sub
:
String
,
ignoreCase
:
Boolean
=
false
,
ignoreCase
:
Boolean
=
false
,
trim
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
crossinline
onEvent
:
MessageListener
<
T
>
onEvent
:
MessageListener
<
T
>
):
Listener
<
T
>
{
):
Listener
<
T
>
{
return
if
(
trim
)
{
return
if
(
trim
)
{
val
toCheck
=
sub
.
trim
()
val
toCheck
=
sub
.
trim
()
...
@@ -363,11 +365,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -363,11 +365,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息内容包含 [sub] 中的任意一个元素
* 如果消息内容包含 [sub] 中的任意一个元素
*/
*/
@MessageDsl
@MessageDsl
inline
fun
containsAny
(
fun
containsAny
(
vararg
sub
:
String
,
vararg
sub
:
String
,
ignoreCase
:
Boolean
=
false
,
ignoreCase
:
Boolean
=
false
,
trim
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
crossinline
onEvent
:
MessageListener
<
T
>
onEvent
:
MessageListener
<
T
>
):
Listener
<
T
>
{
):
Listener
<
T
>
{
return
if
(
trim
)
{
return
if
(
trim
)
{
val
list
=
sub
.
map
{
it
.
trim
()
}
val
list
=
sub
.
map
{
it
.
trim
()
}
...
@@ -396,11 +398,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -396,11 +398,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息内容包含 [sub] 中的任意一个元素
* 如果消息内容包含 [sub] 中的任意一个元素
*/
*/
@MessageDsl
@MessageDsl
inline
fun
containsAll
(
fun
containsAll
(
vararg
sub
:
String
,
vararg
sub
:
String
,
ignoreCase
:
Boolean
=
false
,
ignoreCase
:
Boolean
=
false
,
trim
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
crossinline
onEvent
:
MessageListener
<
T
>
onEvent
:
MessageListener
<
T
>
):
Listener
<
T
>
{
):
Listener
<
T
>
{
return
if
(
trim
)
{
return
if
(
trim
)
{
val
list
=
sub
.
map
{
it
.
trim
()
}
val
list
=
sub
.
map
{
it
.
trim
()
}
...
@@ -434,11 +436,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -434,11 +436,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息的前缀是 [prefix]
* 如果消息的前缀是 [prefix]
*/
*/
@MessageDsl
@MessageDsl
inline
fun
startsWith
(
fun
startsWith
(
prefix
:
String
,
prefix
:
String
,
removePrefix
:
Boolean
=
true
,
removePrefix
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
crossinline
onEvent
:
@MessageDsl
suspend
T
.(
String
)
->
Unit
onEvent
:
@MessageDsl
suspend
T
.(
String
)
->
Unit
):
Listener
<
T
>
{
):
Listener
<
T
>
{
return
if
(
trim
)
{
return
if
(
trim
)
{
val
toCheck
=
prefix
.
trim
()
val
toCheck
=
prefix
.
trim
()
...
@@ -465,11 +467,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -465,11 +467,11 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息的结尾是 [suffix]
* 如果消息的结尾是 [suffix]
*/
*/
@MessageDsl
@MessageDsl
inline
fun
endsWith
(
fun
endsWith
(
suffix
:
String
,
suffix
:
String
,
removeSuffix
:
Boolean
=
true
,
removeSuffix
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
trim
:
Boolean
=
true
,
crossinline
onEvent
:
@MessageDsl
suspend
T
.(
String
)
->
Unit
onEvent
:
@MessageDsl
suspend
T
.(
String
)
->
Unit
):
Listener
<
T
>
{
):
Listener
<
T
>
{
return
if
(
trim
)
{
return
if
(
trim
)
{
val
toCheck
=
suffix
.
trim
()
val
toCheck
=
suffix
.
trim
()
...
@@ -496,7 +498,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -496,7 +498,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果是这个人发的消息. 消息目前只会是群消息
* 如果是这个人发的消息. 消息目前只会是群消息
*/
*/
@MessageDsl
@MessageDsl
inline
fun
sentBy
(
name
:
String
,
crossinline
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
fun
sentBy
(
name
:
String
,
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
content
({
this
is
GroupMessage
&&
this
.
senderName
==
name
},
onEvent
)
content
({
this
is
GroupMessage
&&
this
.
senderName
==
name
},
onEvent
)
/**
/**
...
@@ -510,14 +512,14 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -510,14 +512,14 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果是这个人发的消息. 消息可以是好友消息也可以是群消息
* 如果是这个人发的消息. 消息可以是好友消息也可以是群消息
*/
*/
@MessageDsl
@MessageDsl
inline
fun
sentBy
(
qq
:
Long
,
crossinline
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
fun
sentBy
(
qq
:
Long
,
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
content
({
this
.
sender
.
id
==
qq
},
onEvent
)
content
({
this
.
sender
.
id
==
qq
},
onEvent
)
/**
/**
* 如果是好友发来的消息
* 如果是好友发来的消息
*/
*/
@MessageDsl
@MessageDsl
inline
fun
sentByFriend
(
crossinline
onEvent
:
MessageListener
<
FriendMessage
>):
Listener
<
T
>
=
fun
sentByFriend
(
onEvent
:
MessageListener
<
FriendMessage
>):
Listener
<
T
>
=
content
({
this
is
FriendMessage
})
{
content
({
this
is
FriendMessage
})
{
onEvent
(
this
as
FriendMessage
,
it
)
onEvent
(
this
as
FriendMessage
,
it
)
}
}
...
@@ -539,7 +541,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -539,7 +541,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果是管理员或群主发的消息
* 如果是管理员或群主发的消息
*/
*/
@MessageDsl
@MessageDsl
inline
fun
sentByOperator
(
crossinline
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
fun
sentByOperator
(
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
content
({
this
is
GroupMessage
&&
this
.
sender
.
isOperator
()
},
onEvent
)
content
({
this
is
GroupMessage
&&
this
.
sender
.
isOperator
()
},
onEvent
)
/**
/**
...
@@ -553,7 +555,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -553,7 +555,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果是管理员发的消息
* 如果是管理员发的消息
*/
*/
@MessageDsl
@MessageDsl
inline
fun
sentByAdministrator
(
crossinline
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
fun
sentByAdministrator
(
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
content
({
this
is
GroupMessage
&&
this
.
sender
.
isAdministrator
()
},
onEvent
)
content
({
this
is
GroupMessage
&&
this
.
sender
.
isAdministrator
()
},
onEvent
)
/**
/**
...
@@ -567,7 +569,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -567,7 +569,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果是群主发的消息
* 如果是群主发的消息
*/
*/
@MessageDsl
@MessageDsl
inline
fun
sentByOwner
(
crossinline
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
fun
sentByOwner
(
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
content
({
this
is
GroupMessage
&&
this
.
sender
.
isOwner
()
},
onEvent
)
content
({
this
is
GroupMessage
&&
this
.
sender
.
isOwner
()
},
onEvent
)
/**
/**
...
@@ -581,7 +583,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -581,7 +583,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果是来自这个群的消息, 就执行 [onEvent]
* 如果是来自这个群的消息, 就执行 [onEvent]
*/
*/
@MessageDsl
@MessageDsl
inline
fun
sentFrom
(
groupId
:
Long
,
crossinline
onEvent
:
MessageListener
<
GroupMessage
>):
Listener
<
T
>
=
fun
sentFrom
(
groupId
:
Long
,
onEvent
:
MessageListener
<
GroupMessage
>):
Listener
<
T
>
=
content
({
this
is
GroupMessage
&&
this
.
group
.
id
==
groupId
})
{
content
({
this
is
GroupMessage
&&
this
.
group
.
id
==
groupId
})
{
onEvent
(
this
as
GroupMessage
,
it
)
onEvent
(
this
as
GroupMessage
,
it
)
}
}
...
@@ -597,7 +599,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -597,7 +599,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息内容包含 [M] 类型的 [Message], 就执行 [onEvent]
* 如果消息内容包含 [M] 类型的 [Message], 就执行 [onEvent]
*/
*/
@MessageDsl
@MessageDsl
inline
fun
<
reified
M
:
Message
>
has
(
cross
inline
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
inline
fun
<
reified
M
:
Message
>
has
(
no
inline
onEvent
:
MessageListener
<
T
>):
Listener
<
T
>
=
content
({
message
.
any
{
it
is
M
}
},
onEvent
)
content
({
message
.
any
{
it
is
M
}
},
onEvent
)
/**
/**
...
@@ -611,9 +613,9 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -611,9 +613,9 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果 [filter] 返回 `true` 就执行 `onEvent`
* 如果 [filter] 返回 `true` 就执行 `onEvent`
*/
*/
@MessageDsl
@MessageDsl
inline
fun
content
(
fun
content
(
crossinline
filter
:
T
.(
String
)
->
Boolean
,
filter
:
T
.(
String
)
->
Boolean
,
crossinline
onEvent
:
MessageListener
<
T
>
onEvent
:
MessageListener
<
T
>
):
Listener
<
T
>
=
):
Listener
<
T
>
=
subscriber
{
subscriber
{
if
(
filter
(
this
,
it
))
onEvent
(
this
,
it
)
if
(
filter
(
this
,
it
))
onEvent
(
this
,
it
)
...
@@ -630,7 +632,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -630,7 +632,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息内容可由正则表达式匹配([Regex.matchEntire]), 就执行 `onEvent`
* 如果消息内容可由正则表达式匹配([Regex.matchEntire]), 就执行 `onEvent`
*/
*/
@MessageDsl
@MessageDsl
inline
fun
matching
(
regex
:
Regex
,
crossinline
onEvent
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Unit
):
Listener
<
T
>
=
fun
matching
(
regex
:
Regex
,
onEvent
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Unit
):
Listener
<
T
>
=
always
{
always
{
val
find
=
regex
.
matchEntire
(
it
)
?:
return
@
always
val
find
=
regex
.
matchEntire
(
it
)
?:
return
@
always
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
@@ -650,7 +652,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -650,7 +652,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果消息内容可由正则表达式查找([Regex.find]), 就执行 `onEvent`
* 如果消息内容可由正则表达式查找([Regex.find]), 就执行 `onEvent`
*/
*/
@MessageDsl
@MessageDsl
inline
fun
finding
(
regex
:
Regex
,
crossinline
onEvent
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Unit
):
Listener
<
T
>
=
fun
finding
(
regex
:
Regex
,
onEvent
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Unit
):
Listener
<
T
>
=
always
{
always
{
val
find
=
regex
.
find
(
it
)
?:
return
@
always
val
find
=
regex
.
find
(
it
)
?:
return
@
always
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
@@ -675,7 +677,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -675,7 +677,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
*/
*/
@MessageDsl
@MessageDsl
in
line
infix
fun
String
.
containsReply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
=
in
fix
fun
String
.
containsReply
(
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
=
content
({
this
@
containsReply
in
it
},
{
content
({
this
@
containsReply
in
it
},
{
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
this
.
executeAndReply
(
replier
)
this
.
executeAndReply
(
replier
)
...
@@ -689,7 +691,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -689,7 +691,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
*/
*/
@MessageDsl
@MessageDsl
in
line
infix
fun
Regex
.
matchingReply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Any
?):
Listener
<
T
>
=
in
fix
fun
Regex
.
matchingReply
(
replier
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Any
?):
Listener
<
T
>
=
always
{
always
{
val
find
=
this
@
matchingReply
.
matchEntire
(
it
)
?:
return
@
always
val
find
=
this
@
matchingReply
.
matchEntire
(
it
)
?:
return
@
always
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
@@ -706,7 +708,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -706,7 +708,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
*/
*/
@MessageDsl
@MessageDsl
in
line
infix
fun
Regex
.
findingReply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Any
?):
Listener
<
T
>
=
in
fix
fun
Regex
.
findingReply
(
replier
:
@MessageDsl
suspend
T
.(
MatchResult
)
->
Any
?):
Listener
<
T
>
=
always
{
always
{
val
find
=
this
@
findingReply
.
find
(
it
)
?:
return
@
always
val
find
=
this
@
findingReply
.
find
(
it
)
?:
return
@
always
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
@@ -729,7 +731,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -729,7 +731,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他类型则 [Any.toString] 后回复
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他类型则 [Any.toString] 后回复
*/
*/
@MessageDsl
@MessageDsl
in
line
infix
fun
String
.
startsWithReply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
in
fix
fun
String
.
startsWithReply
(
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
val
toCheck
=
this
.
trimStart
()
val
toCheck
=
this
.
trimStart
()
return
content
({
it
.
trim
().
startsWith
(
toCheck
)
},
{
return
content
({
it
.
trim
().
startsWith
(
toCheck
)
},
{
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
@@ -753,7 +755,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -753,7 +755,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
*/
*/
@MessageDsl
@MessageDsl
in
line
infix
fun
String
.
endsWithReply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
in
fix
fun
String
.
endsWithReply
(
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
val
toCheck
=
this
.
trimEnd
()
val
toCheck
=
this
.
trimEnd
()
return
content
({
it
.
trim
().
endsWith
(
toCheck
)
},
{
return
content
({
it
.
trim
().
endsWith
(
toCheck
)
},
{
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
@@ -776,7 +778,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
...
@@ -776,7 +778,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
}
}
@MessageDsl
@MessageDsl
in
line
infix
fun
String
.
reply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
in
fix
fun
String
.
reply
(
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
val
toCheck
=
this
.
trim
()
val
toCheck
=
this
.
trim
()
return
content
({
it
.
trim
()
==
toCheck
},
{
return
content
({
it
.
trim
()
==
toCheck
},
{
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
...
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