Commit ccec3e95 authored by Him188's avatar Him188

Add `OperableEvent`, close #95

parent e2170175
...@@ -17,6 +17,8 @@ import net.mamoe.mirai.data.Packet ...@@ -17,6 +17,8 @@ import net.mamoe.mirai.data.Packet
import net.mamoe.mirai.event.AbstractCancellableEvent import net.mamoe.mirai.event.AbstractCancellableEvent
import net.mamoe.mirai.event.BroadcastControllable import net.mamoe.mirai.event.BroadcastControllable
import net.mamoe.mirai.event.CancellableEvent import net.mamoe.mirai.event.CancellableEvent
import net.mamoe.mirai.event.events.ImageUploadEvent.Failed
import net.mamoe.mirai.event.events.ImageUploadEvent.Succeed
import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
...@@ -107,6 +109,9 @@ data class BeforeImageUploadEvent( ...@@ -107,6 +109,9 @@ data class BeforeImageUploadEvent(
/** /**
* 图片上传完成 * 图片上传完成
*
* @see Succeed
* @see Failed
*/ */
sealed class ImageUploadEvent : BotEvent, BotActiveEvent, AbstractCancellableEvent() { sealed class ImageUploadEvent : BotEvent, BotActiveEvent, AbstractCancellableEvent() {
abstract val target: Contact abstract val target: Contact
...@@ -195,9 +200,8 @@ interface GroupSettingChangeEvent<T> : GroupEvent, BotPassiveEvent, BroadcastCon ...@@ -195,9 +200,8 @@ interface GroupSettingChangeEvent<T> : GroupEvent, BotPassiveEvent, BroadcastCon
data class GroupNameChangeEvent( data class GroupNameChangeEvent(
override val origin: String, override val origin: String,
override val new: String, override val new: String,
override val group: Group, override val group: Group
val isByBot: Boolean // 无法获取 operator ) : GroupSettingChangeEvent<String>, Packet // 无法获取操作人
) : GroupSettingChangeEvent<String>, Packet
/** /**
* 入群公告改变. 此事件广播前修改就已经完成. * 入群公告改变. 此事件广播前修改就已经完成.
...@@ -209,10 +213,8 @@ data class GroupEntranceAnnouncementChangeEvent( ...@@ -209,10 +213,8 @@ data class GroupEntranceAnnouncementChangeEvent(
/** /**
* 操作人. 为 null 时则是机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
val operator: Member? override val operator: Member?
) : GroupSettingChangeEvent<String>, Packet ) : GroupSettingChangeEvent<String>, Packet, OperableEvent
val GroupEntranceAnnouncementChangeEvent.isByBot: Boolean get() = operator != null
/** /**
...@@ -225,10 +227,9 @@ data class GroupMuteAllEvent( ...@@ -225,10 +227,9 @@ data class GroupMuteAllEvent(
/** /**
* 操作人. 为 null 时则是机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
val operator: Member? override val operator: Member?
) : GroupSettingChangeEvent<Boolean>, Packet ) : GroupSettingChangeEvent<Boolean>, Packet, OperableEvent
val GroupMuteAllEvent.isByBot: Boolean get() = operator != null
/** /**
* 群 "匿名聊天" 功能状态改变. 此事件广播前修改就已经完成. * 群 "匿名聊天" 功能状态改变. 此事件广播前修改就已经完成.
...@@ -240,10 +241,9 @@ data class GroupAllowAnonymousChatEvent( ...@@ -240,10 +241,9 @@ data class GroupAllowAnonymousChatEvent(
/** /**
* 操作人. 为 null 时则是机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
val operator: Member? override val operator: Member?
) : GroupSettingChangeEvent<Boolean>, Packet ) : GroupSettingChangeEvent<Boolean>, Packet, OperableEvent
val GroupAllowAnonymousChatEvent.isByBot: Boolean get() = operator != null
/** /**
* 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成. * 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成.
...@@ -251,9 +251,8 @@ val GroupAllowAnonymousChatEvent.isByBot: Boolean get() = operator != null ...@@ -251,9 +251,8 @@ val GroupAllowAnonymousChatEvent.isByBot: Boolean get() = operator != null
data class GroupAllowConfessTalkEvent( data class GroupAllowConfessTalkEvent(
override val origin: Boolean, override val origin: Boolean,
override val new: Boolean, override val new: Boolean,
override val group: Group, override val group: Group
val isByBot: Boolean ) : GroupSettingChangeEvent<Boolean>, Packet // 无法获取操作人
) : GroupSettingChangeEvent<Boolean>, Packet
/** /**
* 群 "允许群员邀请好友加群" 功能状态改变. 此事件广播前修改就已经完成. * 群 "允许群员邀请好友加群" 功能状态改变. 此事件广播前修改就已经完成.
...@@ -265,10 +264,9 @@ data class GroupAllowMemberInviteEvent( ...@@ -265,10 +264,9 @@ data class GroupAllowMemberInviteEvent(
/** /**
* 操作人. 为 null 时则是机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
val operator: Member? override val operator: Member?
) : GroupSettingChangeEvent<Boolean>, Packet ) : GroupSettingChangeEvent<Boolean>, Packet, OperableEvent
val GroupAllowMemberInviteEvent.isByBot: Boolean get() = operator != null
// endregion // endregion
...@@ -294,8 +292,8 @@ sealed class MemberLeaveEvent : GroupMemberEvent { ...@@ -294,8 +292,8 @@ sealed class MemberLeaveEvent : GroupMemberEvent {
/** /**
* 操作人. 为 null 则是机器人操作 * 操作人. 为 null 则是机器人操作
*/ */
val operator: Member? override val operator: Member?
) : MemberLeaveEvent(), Packet { ) : MemberLeaveEvent(), Packet, OperableEvent {
override fun toString(): String { override fun toString(): String {
return "MemberLeaveEvent.Kick(member=$member, operator=$operator)" return "MemberLeaveEvent.Kick(member=$member, operator=$operator)"
} }
...@@ -311,8 +309,6 @@ sealed class MemberLeaveEvent : GroupMemberEvent { ...@@ -311,8 +309,6 @@ sealed class MemberLeaveEvent : GroupMemberEvent {
} }
} }
val MemberLeaveEvent.Kick.isByBot: Boolean get() = operator != null
// endregion // endregion
// region 名片和头衔 // region 名片和头衔
...@@ -336,10 +332,8 @@ data class MemberCardChangeEvent( ...@@ -336,10 +332,8 @@ data class MemberCardChangeEvent(
/** /**
* 操作人. 为 null 时则是机器人操作. 可能与 [member] 引用相同, 此时为群员自己修改. * 操作人. 为 null 时则是机器人操作. 可能与 [member] 引用相同, 此时为群员自己修改.
*/ */
val operator: Member? override val operator: Member?
) : GroupMemberEvent ) : GroupMemberEvent, OperableEvent
val MemberCardChangeEvent.isByBot: Boolean get() = operator != null
/** /**
* 群头衔改动. 一定为群主操作 * 群头衔改动. 一定为群主操作
...@@ -362,10 +356,8 @@ data class MemberSpecialTitleChangeEvent( ...@@ -362,10 +356,8 @@ data class MemberSpecialTitleChangeEvent(
* 不为 null 时一定为群主. 可能与 [member] 引用相同, 此时为群员自己修改. * 不为 null 时一定为群主. 可能与 [member] 引用相同, 此时为群员自己修改.
* 为 null 时则是机器人操作. * 为 null 时则是机器人操作.
*/ */
val operator: Member? override val operator: Member?
) : GroupMemberEvent ) : GroupMemberEvent, OperableEvent
val MemberSpecialTitleChangeEvent.isByBot: Boolean get() = operator != null
// endregion // endregion
...@@ -395,10 +387,8 @@ data class MemberMuteEvent( ...@@ -395,10 +387,8 @@ data class MemberMuteEvent(
/** /**
* 操作人. 为 null 则为机器人操作 * 操作人. 为 null 则为机器人操作
*/ */
val operator: Member? override val operator: Member?
) : GroupMemberEvent, Packet ) : GroupMemberEvent, Packet, OperableEvent
val MemberMuteEvent.isByBot: Boolean get() = operator != null
/** /**
* 群成员被取消禁言事件. 被禁言的成员都不可能是机器人本人 * 群成员被取消禁言事件. 被禁言的成员都不可能是机器人本人
...@@ -408,10 +398,8 @@ data class MemberUnmuteEvent( ...@@ -408,10 +398,8 @@ data class MemberUnmuteEvent(
/** /**
* 操作人. 为 null 则为机器人操作 * 操作人. 为 null 则为机器人操作
*/ */
val operator: Member? override val operator: Member?
) : GroupMemberEvent, Packet ) : GroupMemberEvent, Packet, OperableEvent
val MemberUnmuteEvent.isByBot: Boolean get() = operator != null
// endregion // endregion
......
...@@ -14,6 +14,7 @@ import net.mamoe.mirai.contact.Group ...@@ -14,6 +14,7 @@ import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.event.Event import net.mamoe.mirai.event.Event
import net.mamoe.mirai.utils.MiraiExperimentalAPI
/** /**
* 有关一个 [Bot] 的事件 * 有关一个 [Bot] 的事件
...@@ -51,6 +52,31 @@ interface GroupMemberEvent : GroupEvent { ...@@ -51,6 +52,31 @@ interface GroupMemberEvent : GroupEvent {
get() = member.group get() = member.group
} }
/**
* 可由 [Member] 或 [Bot] 操作的事件
* @see isByBot
* @see operatorOrBot
*/
interface OperableEvent : GroupEvent {
/**
* 操作人, 为 `null` 时为 [Bot] 操作
*/
val operator: Member?
}
/**
* 是否由 [Bot] 操作
*/
val OperableEvent.isByBot: Boolean get() = operator == null
/**
* 当操作人为 [Member] 时获取这个 [Member],
* 当操作人为 [Bot] 时获取 [Group.botAsMember]
*/
@UseExperimental(MiraiExperimentalAPI::class)
val OperableEvent.operatorOrBot: Member
get() = this.operator ?: this.group.botAsMember
/** /**
* 有关好友的事件 * 有关好友的事件
......
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