Commit 5bd96876 authored by Him188's avatar Him188

Add event broadcast

parent dfa3af56
...@@ -162,7 +162,7 @@ internal class MemberImpl( ...@@ -162,7 +162,7 @@ internal class MemberImpl(
var _specialTitle: String, var _specialTitle: String,
group: GroupImpl, group: GroupImpl,
override val coroutineContext: CoroutineContext, override val coroutineContext: CoroutineContext,
override val permission: MemberPermission override var permission: MemberPermission
) : ContactImpl(), Member, QQ by qq { ) : ContactImpl(), Member, QQ by qq {
override val group: GroupImpl by group.unsafeWeakRef() override val group: GroupImpl by group.unsafeWeakRef()
val qq: QQImpl by qq.unsafeWeakRef() val qq: QQImpl by qq.unsafeWeakRef()
...@@ -182,7 +182,7 @@ internal class MemberImpl( ...@@ -182,7 +182,7 @@ internal class MemberImpl(
newValue newValue
).sendWithoutExpect() ).sendWithoutExpect()
} }
MemberCardChangeEvent.ByBot(oldValue, newValue, this@MemberImpl).broadcast() MemberCardChangeEvent(oldValue, newValue, this@MemberImpl, null).broadcast()
} }
} }
} }
...@@ -190,7 +190,7 @@ internal class MemberImpl( ...@@ -190,7 +190,7 @@ internal class MemberImpl(
override var specialTitle: String override var specialTitle: String
get() = _specialTitle get() = _specialTitle
set(newValue) { set(newValue) {
group.checkBotPermissionOperator() group.checkBotPermission(MemberPermission.OWNER)
if (_specialTitle != newValue) { if (_specialTitle != newValue) {
val oldValue = _specialTitle val oldValue = _specialTitle
_specialTitle = newValue _specialTitle = newValue
...@@ -223,7 +223,7 @@ internal class MemberImpl( ...@@ -223,7 +223,7 @@ internal class MemberImpl(
).sendAndExpect<TroopManagement.Mute.Response>() ).sendAndExpect<TroopManagement.Mute.Response>()
} }
MemberMuteEvent.ByBot(this@MemberImpl, durationSeconds).broadcast() MemberMuteEvent(this@MemberImpl, durationSeconds, null).broadcast()
return true return true
} }
...@@ -241,7 +241,7 @@ internal class MemberImpl( ...@@ -241,7 +241,7 @@ internal class MemberImpl(
).sendAndExpect<TroopManagement.Mute.Response>() ).sendAndExpect<TroopManagement.Mute.Response>()
} }
MemberUnmuteEvent.ByBot(this@MemberImpl).broadcast() MemberUnmuteEvent(this@MemberImpl, null).broadcast()
return true return true
} }
...@@ -256,7 +256,7 @@ internal class MemberImpl( ...@@ -256,7 +256,7 @@ internal class MemberImpl(
member = this@MemberImpl, member = this@MemberImpl,
message = message message = message
).sendAndExpect<TroopManagement.Kick.Response>().success.also { ).sendAndExpect<TroopManagement.Kick.Response>().success.also {
MemberLeaveEvent.Kick.ByBot(this@MemberImpl).broadcast() MemberLeaveEvent.Kick(this@MemberImpl, null).broadcast()
} }
} }
} }
...@@ -304,7 +304,7 @@ internal class GroupImpl( ...@@ -304,7 +304,7 @@ internal class GroupImpl(
newName = newValue newName = newValue
).sendWithoutExpect() ).sendWithoutExpect()
} }
GroupNameChangeEvent.ByBot(oldValue, newValue, this@GroupImpl).broadcast() GroupNameChangeEvent(oldValue, newValue, this@GroupImpl, null).broadcast()
} }
} }
} }
...@@ -324,7 +324,7 @@ internal class GroupImpl( ...@@ -324,7 +324,7 @@ internal class GroupImpl(
newMemo = newValue newMemo = newValue
).sendWithoutExpect() ).sendWithoutExpect()
} }
GroupEntranceAnnouncementChangeEvent.ByBot(oldValue, newValue, this@GroupImpl).broadcast() GroupEntranceAnnouncementChangeEvent(oldValue, newValue, this@GroupImpl, null).broadcast()
} }
} }
} }
...@@ -345,7 +345,7 @@ internal class GroupImpl( ...@@ -345,7 +345,7 @@ internal class GroupImpl(
switch = newValue switch = newValue
).sendWithoutExpect() ).sendWithoutExpect()
} }
GroupAllowMemberInviteEvent.ByBot(oldValue, newValue, this@GroupImpl).broadcast() GroupAllowMemberInviteEvent(oldValue, newValue, this@GroupImpl, null).broadcast()
} }
} }
} }
...@@ -377,7 +377,7 @@ internal class GroupImpl( ...@@ -377,7 +377,7 @@ internal class GroupImpl(
switch = newValue switch = newValue
).sendWithoutExpect() ).sendWithoutExpect()
} }
GroupAllowConfessTalkEvent.ByBot(oldValue, newValue, this@GroupImpl).broadcast() GroupAllowConfessTalkEvent(oldValue, newValue, this@GroupImpl, null).broadcast()
} }
} }
} }
...@@ -398,7 +398,7 @@ internal class GroupImpl( ...@@ -398,7 +398,7 @@ internal class GroupImpl(
switch = newValue switch = newValue
).sendWithoutExpect() ).sendWithoutExpect()
} }
GroupMuteAllEvent.ByBot(oldValue, newValue, this@GroupImpl).broadcast() GroupMuteAllEvent(oldValue, newValue, this@GroupImpl, null).broadcast()
} }
} }
} }
......
...@@ -24,7 +24,7 @@ import net.mamoe.mirai.contact.MemberPermission ...@@ -24,7 +24,7 @@ import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.data.MultiPacket import net.mamoe.mirai.data.MultiPacket
import net.mamoe.mirai.data.Packet import net.mamoe.mirai.data.Packet
import net.mamoe.mirai.event.* import net.mamoe.mirai.event.*
import net.mamoe.mirai.event.events.BotForceOfflineEvent import net.mamoe.mirai.event.events.BotOfflineEvent
import net.mamoe.mirai.network.BotNetworkHandler import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.qqandroid.GroupImpl import net.mamoe.mirai.qqandroid.GroupImpl
import net.mamoe.mirai.qqandroid.MemberImpl import net.mamoe.mirai.qqandroid.MemberImpl
...@@ -119,7 +119,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -119,7 +119,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
@UseExperimental(MiraiExperimentalAPI::class, ExperimentalTime::class) @UseExperimental(MiraiExperimentalAPI::class, ExperimentalTime::class)
override suspend fun init(): Unit = coroutineScope { override suspend fun init(): Unit = coroutineScope {
this@QQAndroidBotNetworkHandler.subscribeAlways<BotForceOfflineEvent> { this@QQAndroidBotNetworkHandler.subscribeAlways<BotOfflineEvent> {
if (this@QQAndroidBotNetworkHandler.bot == this.bot) { if (this@QQAndroidBotNetworkHandler.bot == this.bot) {
this.bot.logger.error("被挤下线") this.bot.logger.error("被挤下线")
close() close()
......
...@@ -18,7 +18,9 @@ import net.mamoe.mirai.contact.MemberPermission ...@@ -18,7 +18,9 @@ import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.data.NoPacket import net.mamoe.mirai.data.NoPacket
import net.mamoe.mirai.data.Packet import net.mamoe.mirai.data.Packet
import net.mamoe.mirai.event.broadcast import net.mamoe.mirai.event.broadcast
import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.message.GroupMessage import net.mamoe.mirai.message.GroupMessage
import net.mamoe.mirai.qqandroid.MemberImpl
import net.mamoe.mirai.qqandroid.QQAndroidBot import net.mamoe.mirai.qqandroid.QQAndroidBot
import net.mamoe.mirai.qqandroid.io.serialization.decodeUniPacket import net.mamoe.mirai.qqandroid.io.serialization.decodeUniPacket
import net.mamoe.mirai.qqandroid.io.serialization.loadAs import net.mamoe.mirai.qqandroid.io.serialization.loadAs
...@@ -103,26 +105,33 @@ internal class OnlinePush { ...@@ -103,26 +105,33 @@ internal class OnlinePush {
this.discardExact(5) this.discardExact(5)
val var4 = readByte().toInt() val var4 = readByte().toInt()
var var5 = 0L var var5 = 0L
val var7 = readUInt().toLong() val target = readUInt().toLong()
if (var4 != 0 && var4 != 1) { if (var4 != 0 && var4 != 1) {
var5 = readUInt().toLong() var5 = readUInt().toLong()
} }
if (var5 == 0L && this.remaining == 1L) {//管理员变更 if (var5 == 0L && this.remaining == 1L) {//管理员变更
val groupUin = content.fromUin val groupUin = content.fromUin
val target = var7
if (this.readByte().toInt() == 1) { val member = bot.getGroupByUin(groupUin)[target] as MemberImpl
println("群uin" + groupUin + "新增管理员" + target) val old = member.permission
return if (this.readByte().toInt() == 1) {
member.permission = MemberPermission.ADMINISTRATOR
MemberPermissionChangeEvent(member, old, MemberPermission.ADMINISTRATOR)
} else { } else {
println("群uin" + groupUin + "减少管理员" + target) member.permission = MemberPermission.MEMBER
MemberPermissionChangeEvent(member, old, MemberPermission.ADMINISTRATOR)
} }
} }
} }
34 -> { 34 -> {
var groupUinOrCode = readUInt().toLong() readUInt().toLong() // uin or code ?
if (readByte().toInt() == 1) { if (readByte().toInt() == 1) {
val target = readUInt().toLong() val target = readUInt().toLong()
val groupUin = content.fromUin val groupUin = content.fromUin
println("群uin" + groupUin + "t掉了" + target)
val member = bot.getGroupByUin(groupUin)[target] as MemberImpl
return MemberLeaveEvent.Kick(member, TODO("踢出时获取管理员"))
} }
} }
...@@ -144,53 +153,57 @@ internal class OnlinePush { ...@@ -144,53 +153,57 @@ internal class OnlinePush {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot, sequenceId: Int): Packet { override suspend fun ByteReadPacket.decode(bot: QQAndroidBot, sequenceId: Int): Packet {
val reqPushMsg = decodeUniPacket(OnlinePushPack.SvcReqPushMsg.serializer(), "req") val reqPushMsg = decodeUniPacket(OnlinePushPack.SvcReqPushMsg.serializer(), "req")
reqPushMsg.vMsgInfos.forEach { msgInfo: MsgInfo -> reqPushMsg.vMsgInfos.forEach { msgInfo: MsgInfo ->
var debug = ""
msgInfo.vMsg!!.read { msgInfo.vMsg!!.read {
if (msgInfo.shMsgType.toInt() == 732) { when {
val groupCode = this.readUInt().toLong() msgInfo.shMsgType.toInt() == 732 -> {
debug = "群 $groupCode " val group = bot.getGroup(this.readUInt().toLong())
when (val internalType = this.readShort().toInt()) { when (val internalType = this.readShort().toInt()) {
3073 -> { 3073 -> { // mute
val operatorUin = this.readUInt().toLong() val operator = group[this.readUInt().toLong()]
debug += " 管理员 $operatorUin" this.readUInt().toLong() // time
val operationTime = this.readUInt().toLong()
debug += " 禁言 "
this.discardExact(2) this.discardExact(2)
val target = this.readUInt().toLong() val target = this.readUInt().toLong()
val time = this.readUInt().toLong() val time = this.readInt()
if (target == 0L) {
debug += "全群" return if (target == 0L) {
if (time == 0) {
GroupMuteAllEvent(origin = true, new = false, operator = operator, group = group)
} else { } else {
debug += target GroupMuteAllEvent(origin = false, new = true, operator = operator, group = group)
} }
if (time == 0L) {
debug += " 解除 "
} else { } else {
debug += " " + time + "s" val member = group[target]
if (time == 0) {
MemberUnmuteEvent(operator = operator, member = member)
} else {
MemberMuteEvent(operator = operator, member = member, durationSeconds = time)
} }
} }
3585 -> {
val operatorUin = this.readUInt().toLong()
debug += " 管理员 $operatorUin"
debug += " 匿名聊天 "
if (this.readInt() == 0) {
debug += " 开启 "
} else {
debug += " 关闭 "
} }
3585 -> { // 匿名
val operator = group[this.readUInt().toLong()]
return GroupAllowAnonymousChatEvent(
origin = group.anonymousChat,
new = this.readInt() == 0,
operator = operator,
group = group
)
} }
4096 -> { 4096 -> {
val dataBytes = this.readBytes(26) val dataBytes = this.readBytes(26)
val message = this.readString(this.readByte().toInt()) val message = this.readString(this.readByte().toInt())
if (dataBytes[0].toInt() != 59) {
println("更改群名为$message") TODO("读取操作人")
/*
return if (dataBytes[0].toInt() != 59) {
GroupNameChangeEvent(origin = group.name, new = )
} else { } else {
println(message + ":" + dataBytes.toUHexString()) println(message + ":" + dataBytes.toUHexString())
debug += message
when (message) { when (message) {
"管理员已关闭群聊坦白说" -> { "管理员已关闭群聊坦白说" -> {
GroupAllowConfessTalkEvent(group.confessTalk, false, ope)
} }
"管理员已开启群聊坦白说" -> { "管理员已开启群聊坦白说" -> {
...@@ -200,6 +213,7 @@ internal class OnlinePush { ...@@ -200,6 +213,7 @@ internal class OnlinePush {
} }
} }
} }
*/
} }
4352 -> { 4352 -> {
println(msgInfo.contentToString()) println(msgInfo.contentToString())
...@@ -209,14 +223,16 @@ internal class OnlinePush { ...@@ -209,14 +223,16 @@ internal class OnlinePush {
println("unknown group internal type $internalType , data: " + this.readBytes().toUHexString() + " ") println("unknown group internal type $internalType , data: " + this.readBytes().toUHexString() + " ")
} }
} }
} else if (msgInfo.shMsgType.toInt() == 528) { }
msgInfo.shMsgType.toInt() == 528 -> {
val content = msgInfo.vMsg.loadAs(OnlinePushPack.MsgType0x210.serializer()) val content = msgInfo.vMsg.loadAs(OnlinePushPack.MsgType0x210.serializer())
println(content.contentToString()) println(content.contentToString())
} else { }
else -> {
println("unknown shtype ${msgInfo.shMsgType.toInt()}") println("unknown shtype ${msgInfo.shMsgType.toInt()}")
} }
} }
println(debug) }
} }
return NoPacket return NoPacket
......
...@@ -12,10 +12,7 @@ ...@@ -12,10 +12,7 @@
package net.mamoe.mirai.contact package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.event.events.MemberCardChangeEvent import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.event.events.MemberLeaveEvent
import net.mamoe.mirai.event.events.MemberMuteEvent
import net.mamoe.mirai.event.events.MemberSpecialTitleChangeEvent
import net.mamoe.mirai.utils.WeakRefProperty import net.mamoe.mirai.utils.WeakRefProperty
import kotlin.time.Duration import kotlin.time.Duration
import kotlin.time.ExperimentalTime import kotlin.time.ExperimentalTime
...@@ -64,13 +61,15 @@ interface Member : QQ, Contact { ...@@ -64,13 +61,15 @@ interface Member : QQ, Contact {
* @see Int.minutesToSeconds * @see Int.minutesToSeconds
* @see Int.hoursToSeconds * @see Int.hoursToSeconds
* @see Int.daysToSeconds * @see Int.daysToSeconds
*
* @see MemberMuteEvent 成员被禁言事件
*/ */
suspend fun mute(durationSeconds: Int): Boolean suspend fun mute(durationSeconds: Int): Boolean
/** /**
* 解除禁言. 机器人无权限时返回 `false`. * 解除禁言. 机器人无权限时返回 `false`.
* *
* @see MemberMuteEvent 成员被禁言事件. * @see MemberUnmuteEvent 成员被取消禁言事件.
*/ */
suspend fun unmute(): Boolean suspend fun unmute(): Boolean
......
...@@ -135,135 +135,81 @@ interface GroupSettingChangeEvent<T> : GroupEvent, BotPassiveEvent { ...@@ -135,135 +135,81 @@ interface GroupSettingChangeEvent<T> : GroupEvent, BotPassiveEvent {
/** /**
* 群名改变. 此事件广播前修改就已经完成. * 群名改变. 此事件广播前修改就已经完成.
*/ */
sealed class GroupNameChangeEvent : GroupSettingChangeEvent<String>, BotPassiveEvent { data class GroupNameChangeEvent(
/**
* 由管理员操作
*/
data class ByOperator(
override val origin: String, override val origin: String,
override val new: String, override val new: String,
val operator: Member override val group: Group,
) : GroupNameChangeEvent() {
override val group: Group
get() = operator.group
}
/** /**
* 机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
data class ByBot( val operator: Member?
override val origin: String, ) : GroupSettingChangeEvent<String>, Packet
override val new: String,
override val group: Group
) : GroupNameChangeEvent()
}
/** /**
* 入群公告改变. 此事件广播前修改就已经完成. * 入群公告改变. 此事件广播前修改就已经完成.
*/ */
sealed class GroupEntranceAnnouncementChangeEvent : GroupSettingChangeEvent<String>, BotPassiveEvent { data class GroupEntranceAnnouncementChangeEvent(
/**
* 由管理员操作
*/
data class ByOperator(
override val origin: String, override val origin: String,
override val new: String, override val new: String,
val operator: Member override val group: Group,
) : GroupEntranceAnnouncementChangeEvent() {
override val group: Group
get() = operator.group
}
/** /**
* 机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
data class ByBot( val operator: Member?
override val origin: String, ) : GroupSettingChangeEvent<String>, Packet
override val new: String,
override val group: Group
) : GroupEntranceAnnouncementChangeEvent()
}
/** /**
* 群 "全员禁言" 功能状态改变. 此事件广播前修改就已经完成. * 群 "全员禁言" 功能状态改变. 此事件广播前修改就已经完成.
*/ */
sealed class GroupMuteAllEvent : GroupSettingChangeEvent<Boolean>, BotPassiveEvent { data class GroupMuteAllEvent(
/**
* 由管理员操作
*/
data class ByOperator(
override val origin: Boolean, override val origin: Boolean,
override val new: Boolean, override val new: Boolean,
val operator: Member override val group: Group,
) : GroupMuteAllEvent() {
override val group: Group
get() = operator.group
}
/** /**
* 由机器人操作 * 操作人. 为 null 时则是机器人操作
*/
val operator: Member?
) : GroupSettingChangeEvent<Boolean>, Packet
/**
* 群 "匿名聊天" 功能状态改变. 此事件广播前修改就已经完成.
*/ */
data class ByBot( data class GroupAllowAnonymousChatEvent(
override val origin: Boolean, override val origin: Boolean,
override val new: Boolean, override val new: Boolean,
override val group: Group override val group: Group,
) : GroupMuteAllEvent() /**
} * 操作人. 为 null 时则是机器人操作
*/
val operator: Member?
) : GroupSettingChangeEvent<Boolean>, Packet
/** /**
* 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成. * 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成.
*/ */
sealed class GroupAllowConfessTalkEvent : GroupSettingChangeEvent<Boolean>, BotPassiveEvent { data class GroupAllowConfessTalkEvent(
/**
* 由管理员操作
*/
data class ByOperator(
override val origin: Boolean, override val origin: Boolean,
override val new: Boolean, override val new: Boolean,
val operator: Member override val group: Group,
) : GroupAllowConfessTalkEvent() {
override val group: Group
get() = operator.group
}
/** /**
* 机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
data class ByBot( val operator: Member?
override val origin: Boolean, ) : GroupSettingChangeEvent<Boolean>, Packet
override val new: Boolean,
override val group: Group
) : GroupAllowConfessTalkEvent()
}
/** /**
* 群 "允许群员邀请好友加群" 功能状态改变. 此事件广播前修改就已经完成. * 群 "允许群员邀请好友加群" 功能状态改变. 此事件广播前修改就已经完成.
*/ */
sealed class GroupAllowMemberInviteEvent : GroupSettingChangeEvent<Boolean>, BotPassiveEvent { data class GroupAllowMemberInviteEvent(
/**
* 由管理员操作
*/
data class ByOperator(
override val origin: Boolean, override val origin: Boolean,
override val new: Boolean, override val new: Boolean,
val operator: Member override val group: Group,
) : GroupAllowMemberInviteEvent() {
override val group: Group
get() = operator.group
}
/** /**
* 机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
data class ByBot( val operator: Member?
override val origin: Boolean, ) : GroupSettingChangeEvent<Boolean>, Packet
override val new: Boolean,
override val group: Group
) : GroupAllowMemberInviteEvent()
}
// endregion // endregion
...@@ -284,22 +230,13 @@ sealed class MemberLeaveEvent : GroupMemberEvent { ...@@ -284,22 +230,13 @@ sealed class MemberLeaveEvent : GroupMemberEvent {
/** /**
* 成员被踢出群. 成员不可能是机器人自己. * 成员被踢出群. 成员不可能是机器人自己.
*/ */
sealed class Kick : MemberLeaveEvent() { data class Kick(
/**
* 被管理员踢出
*/
data class ByOperator(
override val member: Member, override val member: Member,
val operator: Member
) : Kick(), BotPassiveEvent
/** /**
* 被机器人踢出 * 操作人. 为 null 则是机器人操作
*/ */
data class ByBot( val operator: Member?
override val member: Member ) : MemberLeaveEvent(), Packet
) : Kick(), BotActiveEvent
}
/** /**
* 成员主动离开 * 成员主动离开
...@@ -314,47 +251,24 @@ sealed class MemberLeaveEvent : GroupMemberEvent { ...@@ -314,47 +251,24 @@ sealed class MemberLeaveEvent : GroupMemberEvent {
/** /**
* 群名片改动. 此事件广播前修改就已经完成. * 群名片改动. 此事件广播前修改就已经完成.
*/ */
sealed class MemberCardChangeEvent : GroupMemberEvent { data class MemberCardChangeEvent(
/** /**
* 修改前 * 修改前
*/ */
abstract val origin: String val origin: String,
/** /**
* 修改后 * 修改后
*/ */
abstract val new: String val new: String,
abstract override val member: Member
/**
* 由管理员修改
*/
data class ByOperator(
override val origin: String,
override val new: String,
override val member: Member, override val member: Member,
val operator: Member
) : MemberCardChangeEvent(), BotPassiveEvent
/** /**
* 由 [Bot] 修改. 由 [Member.nameCard] * 操作人. 为 null 时则是机器人操作. 可能与 [member] 引用相同, 此时为群员自己修改.
*/ */
data class ByBot( val operator: Member?
override val origin: String, ) : GroupMemberEvent
override val new: String,
override val member: Member
) : MemberCardChangeEvent(), BotActiveEvent
/**
* 该成员自己修改
*/
data class BySelf(
override val origin: String,
override val new: String,
override val member: Member
) : MemberCardChangeEvent(), BotPassiveEvent
}
/** /**
* 群头衔改动. 一定为群主操作 * 群头衔改动. 一定为群主操作
...@@ -385,7 +299,7 @@ data class MemberPermissionChangeEvent( ...@@ -385,7 +299,7 @@ data class MemberPermissionChangeEvent(
override val member: Member, override val member: Member,
val origin: MemberPermission, val origin: MemberPermission,
val new: MemberPermission val new: MemberPermission
) : GroupMemberEvent, BotPassiveEvent ) : GroupMemberEvent, BotPassiveEvent, Packet
// endregion // endregion
...@@ -395,50 +309,25 @@ data class MemberPermissionChangeEvent( ...@@ -395,50 +309,25 @@ data class MemberPermissionChangeEvent(
/** /**
* 群成员被禁言事件. 操作人和被禁言的成员都不可能是机器人本人 * 群成员被禁言事件. 操作人和被禁言的成员都不可能是机器人本人
*/ */
sealed class MemberMuteEvent : GroupMemberEvent { data class MemberMuteEvent(
abstract override val member: Member
abstract val durationSeconds: Int
/**
* 管理员禁言成员
*/
data class ByOperator(
override val member: Member, override val member: Member,
override val durationSeconds: Int, val durationSeconds: Int,
val operator: Member
) : MemberMuteEvent(), BotPassiveEvent
/** /**
* 机器人禁言成员. 通过 [Member.mute] 触发 * 操作人. 为 null 则为机器人操作
*/ */
data class ByBot( val operator: Member?
override val member: Member, ) : GroupMemberEvent, Packet
override var durationSeconds: Int
) : MemberMuteEvent(), BotActiveEvent
}
/** /**
* 群成员被取消禁言事件. 操作人和被禁言的成员都不可能是机器人本人 * 群成员被取消禁言事件. 操作人和被禁言的成员都不可能是机器人本人
*/ */
sealed class MemberUnmuteEvent : GroupMemberEvent, BotPassiveEvent { data class MemberUnmuteEvent(
abstract override val member: Member
/**
* 管理员禁言成员
*/
data class ByOperator(
override val member: Member, override val member: Member,
val operator: Member
) : MemberUnmuteEvent(), BotPassiveEvent
/** /**
* 机器人禁言成员. 通过 [Member.unmute] 触发 * 操作人. 为 null 则为机器人操作
*/ */
data class ByBot( val operator: Member?
override val member: Member ) : GroupMemberEvent, Packet
) : MemberUnmuteEvent(), BotActiveEvent
}
// endregion // endregion
......
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