Commit 72207a3e authored by Him188's avatar Him188

More actions

parent 33905806
...@@ -171,6 +171,23 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>( ...@@ -171,6 +171,23 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
@MessageDsl @MessageDsl
fun always(onEvent: MessageListener<T>): Listener<T> = subscriber(onEvent) fun always(onEvent: MessageListener<T>): Listener<T> = subscriber(onEvent)
/**
* 如果消息内容 `==` [equals]
*/
@MessageDsl
fun case(
equals: String,
ignoreCase: Boolean = false,
trim: Boolean = true
): ListeningFilter {
return if (trim) {
val toCheck = equals.trim()
content { it.trim().equals(toCheck, ignoreCase = ignoreCase) }
} else {
content { it.equals(equals, ignoreCase = ignoreCase) }
}
}
/** /**
* 如果消息内容 `==` [equals] * 如果消息内容 `==` [equals]
* @param trim `true` 则删除首尾空格后比较 * @param trim `true` 则删除首尾空格后比较
...@@ -199,16 +216,35 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>( ...@@ -199,16 +216,35 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
/** /**
* 如果消息内容包含 [sub] * 如果消息内容包含 [sub]
*/ */
@MessageDsl
inline fun contains( inline fun contains(
sub: String, sub: String,
ignoreCase: Boolean = false, ignoreCase: Boolean = false,
trim: Boolean = true, trim: Boolean = true,
crossinline onEvent: MessageListener<T> crossinline onEvent: MessageListener<T>
): Listener<T> { ): Listener<T> {
val toCheck = if (trim) sub.trim() else sub return if (trim) {
return content({ (if (trim) it.trim() else it).contains(toCheck, ignoreCase = ignoreCase) }, { val toCheck = sub.trim()
onEvent(this, this.message.toString()) content({ it.trimStart().contains(toCheck, ignoreCase = ignoreCase) }, {
}) onEvent(this, this.message.toString().trim())
})
} else {
content({ it.contains(sub, ignoreCase = ignoreCase) }, {
onEvent(this, this.message.toString())
})
}
}
/**
* 如果消息的前缀是 [prefix]
*/
@MessageDsl
fun startsWith(
prefix: String,
trim: Boolean = true
): ListeningFilter {
val toCheck = if (trim) prefix.trim() else prefix
return content { (if (trim) it.trim() else it).startsWith(toCheck) }
} }
/** /**
...@@ -221,11 +257,18 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>( ...@@ -221,11 +257,18 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
trim: Boolean = true, trim: Boolean = true,
crossinline onEvent: @MessageDsl suspend T.(String) -> Unit crossinline onEvent: @MessageDsl suspend T.(String) -> Unit
): Listener<T> { ): Listener<T> {
val toCheck = if (trim) prefix.trim() else prefix return if (trim) {
return content({ (if (trim) it.trim() else it).startsWith(toCheck) }, { val toCheck = prefix.trim()
if (removePrefix) this.onEvent(this.message.toString().substringAfter(toCheck)) content({ it.trimStart().startsWith(toCheck) }, {
else onEvent(this, this.message.toString()) if (removePrefix) this.onEvent(this.message.toString().substringAfter(toCheck).trim())
}) else onEvent(this, this.message.toString().trim())
})
} else {
content({ it.startsWith(prefix) }, {
if (removePrefix) this.onEvent(this.message.toString().removePrefix(prefix))
else onEvent(this, this.message.toString())
})
}
} }
/** /**
...@@ -235,6 +278,30 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>( ...@@ -235,6 +278,30 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
fun endsWith(suffix: String): ListeningFilter = fun endsWith(suffix: String): ListeningFilter =
content { it.endsWith(suffix) } content { it.endsWith(suffix) }
/**
* 如果消息的结尾是 [suffix]
*/
@MessageDsl
inline fun endsWith(
suffix: String,
removeSuffix: Boolean = true,
trim: Boolean = true,
crossinline onEvent: @MessageDsl suspend T.(String) -> Unit
): Listener<T> {
return if (trim) {
val toCheck = suffix.trim()
content({ it.trimStart().startsWith(toCheck) }, {
if (removeSuffix) this.onEvent(this.message.toString().substringBeforeLast(toCheck).trim())
else onEvent(this, this.message.toString().trim())
})
} else {
content({ it.startsWith(suffix) }, {
if (removeSuffix) this.onEvent(this.message.toString().removeSuffix(suffix))
else onEvent(this, this.message.toString())
})
}
}
/** /**
* 如果是这个人发的消息. 消息可以是好友消息也可以是群消息 * 如果是这个人发的消息. 消息可以是好友消息也可以是群消息
*/ */
...@@ -323,8 +390,8 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>( ...@@ -323,8 +390,8 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* 如果 [filter] 返回 `true` * 如果 [filter] 返回 `true`
*/ */
@MessageDsl @MessageDsl
inline fun content(crossinline filter: T.(String) -> Boolean): ListeningFilter = fun content(filter: T.(String) -> Boolean): ListeningFilter =
ListeningFilter { filter(this, it) } ListeningFilter(filter)
/** /**
* 如果 [filter] 返回 `true` 就执行 `onEvent` * 如果 [filter] 返回 `true` 就执行 `onEvent`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment