Commit ccec3e95 authored by Him188's avatar Him188

Add `OperableEvent`, close #95

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