Commit e279e79b authored by Him188's avatar Him188

Add `atBot` DSL

parent c5df5fa1
...@@ -24,8 +24,10 @@ import net.mamoe.mirai.message.ContactMessage ...@@ -24,8 +24,10 @@ import net.mamoe.mirai.message.ContactMessage
import net.mamoe.mirai.message.FriendMessage import net.mamoe.mirai.message.FriendMessage
import net.mamoe.mirai.message.GroupMessage import net.mamoe.mirai.message.GroupMessage
import net.mamoe.mirai.message.TempMessage import net.mamoe.mirai.message.TempMessage
import net.mamoe.mirai.message.data.At
import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.firstIsInstance import net.mamoe.mirai.message.data.firstIsInstance
import net.mamoe.mirai.message.data.firstIsInstanceOrNull
import net.mamoe.mirai.utils.SinceMirai import net.mamoe.mirai.utils.SinceMirai
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
...@@ -677,6 +679,18 @@ open class MessageSubscribersBuilder<M : ContactMessage, out Ret, R : RR, RR>( ...@@ -677,6 +679,18 @@ open class MessageSubscribersBuilder<M : ContactMessage, out Ret, R : RR, RR>(
fun sentFrom(groupId: Long, onEvent: MessageListener<GroupMessage, R>): Ret = fun sentFrom(groupId: Long, onEvent: MessageListener<GroupMessage, R>): Ret =
content({ this is GroupMessage && this.group.id == groupId }) { onEvent(this as GroupMessage, it) } content({ this is GroupMessage && this.group.id == groupId }) { onEvent(this as GroupMessage, it) }
/** 如果消息内容包含目标为 [Bot] 的 [At] */
@MessageDsl
fun atBot(): ListeningFilter =
content { message.firstIsInstanceOrNull<At>()?.target == bot.id }
/** 如果消息内容包含目标为 [Bot] 的 [At], 就执行 [onEvent] */
@MessageDsl
@SinceMirai("0.30.0")
fun atBot(onEvent: @MessageDsl suspend M.(String) -> R): Ret =
content({ message.firstIsInstanceOrNull<At>()?.target == bot.id },
{ onEvent.invoke(this, message.contentToString()) })
/** 如果消息内容包含 [N] 类型的 [Message] */ /** 如果消息内容包含 [N] 类型的 [Message] */
@MessageDsl @MessageDsl
inline fun <reified N : Message> has(): ListeningFilter = content { message.any { it is N } } inline fun <reified N : Message> has(): ListeningFilter = content { message.any { it is N } }
......
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