[Review] Event: review type hierarchy, add UserEvent

This commit is contained in:
Him188 2021-01-08 10:57:26 +08:00
parent 6b11ae7320
commit ea4c82d3c5
3 changed files with 30 additions and 23 deletions

View File

@ -491,7 +491,7 @@ public sealed class ImageUploadEvent : BotEvent, BotActiveEvent, AbstractEvent()
*
* @see isContextIdenticalWith 判断语境相同
*/
public interface MessageEvent : Event, Packet, BotEvent {
public interface MessageEvent : Event, Packet, BotPassiveEvent {
/**
* 与这个消息事件相关的 [Bot]
*/
@ -502,7 +502,9 @@ public interface MessageEvent : Event, Packet, BotEvent {
*
* - 对于好友消息, 这个属性为 [Friend] 的实例, [sender] 引用相同;
* - 对于临时会话消息, 这个属性为 [Member] 的实例, [sender] 引用相同;
* - 对于陌生人消息, 这个属性为 [Stranger] 的实例, [sender] 引用相同
* - 对于群消息, 这个属性为 [Group] 的实例, [GroupMessageEvent.group] 引用相同
* - 对于其他客户端消息, 这个属性为 [OtherClient] 的实例, [OtherClientMessageEvent.client] 引用相同
*
* 在回复消息时, 可通过 [subject] 作为回复对象
*/

View File

@ -1,5 +1,5 @@
/*
* Copyright 2019-2020 Mamoe Technologies and contributors.
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
@ -18,8 +18,7 @@ import net.mamoe.mirai.utils.MiraiInternalApi
public interface OtherClientEvent : BotEvent, Packet {
public val client: OtherClient
override val bot: Bot
get() = client.bot
override val bot: Bot get() = client.bot
}
/**
@ -31,11 +30,11 @@ public data class OtherClientOnlineEvent @MiraiInternalApi constructor(
* 详细设备类型通常非 `null`.
*/
val kind: ClientKind?
) : OtherClientEvent, AbstractEvent()
) : OtherClientEvent, AbstractEvent(), BotPassiveEvent
/**
* 其他设备离线
*/
public data class OtherClientOfflineEvent(
override val client: OtherClient,
) : OtherClientEvent, AbstractEvent()
) : OtherClientEvent, AbstractEvent(), BotPassiveEvent

View File

@ -1,5 +1,5 @@
/*
* Copyright 2019-2020 Mamoe Technologies and contributors.
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
@ -14,10 +14,7 @@
package net.mamoe.mirai.event.events
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Friend
import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.Stranger
import net.mamoe.mirai.contact.*
import net.mamoe.mirai.event.Event
import kotlin.internal.HidesMembers
@ -48,14 +45,6 @@ public interface GroupEvent : BotEvent {
get() = group.bot
}
/**
* 有关群成员的事件
*/
public interface GroupMemberEvent : GroupEvent {
public val member: Member
override val group: Group
get() = member.group
}
/**
* 可由 [Member] [Bot] 操作的事件
@ -85,19 +74,36 @@ public inline val GroupOperableEvent.isByBot: Boolean
public inline val GroupOperableEvent.operatorOrBot: Member
get() = this.operator ?: this.group.botAsMember
/**
* 有关 [User] 的事件
*/
public interface UserEvent : BotEvent {
public val user: User
}
/**
* 有关好友的事件
*/
public interface FriendEvent : BotEvent {
public interface FriendEvent : BotEvent, UserEvent {
public val friend: Friend
public override val bot: Bot get() = friend.bot
override val bot: Bot get() = friend.bot
override val user: Friend get() = friend
}
/**
* 有关陌生人的事件
*/
public interface StrangerEvent : BotEvent {
public interface StrangerEvent : BotEvent, UserEvent {
public val stranger: Stranger
public override val bot: Bot get() = stranger.bot
override val bot: Bot get() = stranger.bot
override val user: Stranger get() = stranger
}
/**
* 有关群成员的事件
*/
public interface GroupMemberEvent : GroupEvent, UserEvent {
public val member: Member
override val group: Group get() = member.group
override val user: Member get() = member
}