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()
......
...@@ -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(
override val origin: String,
/** override val new: String,
* 由管理员操作 override val group: Group,
*/
data class ByOperator(
override val origin: String,
override val new: String,
val operator: Member
) : 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(
override val origin: String,
override val new: String,
override val group: Group,
/** /**
* 由管理员操作 * 操作人. 为 null 时则是机器人操作
*/ */
data class ByOperator( val operator: Member?
override val origin: String, ) : GroupSettingChangeEvent<String>, Packet
override val new: String,
val operator: Member
) : GroupEntranceAnnouncementChangeEvent() {
override val group: Group
get() = operator.group
}
/**
* 由机器人操作
*/
data class ByBot(
override val origin: String,
override val new: String,
override val group: Group
) : GroupEntranceAnnouncementChangeEvent()
}
/** /**
* 群 "全员禁言" 功能状态改变. 此事件广播前修改就已经完成. * 群 "全员禁言" 功能状态改变. 此事件广播前修改就已经完成.
*/ */
sealed class GroupMuteAllEvent : GroupSettingChangeEvent<Boolean>, BotPassiveEvent { data class GroupMuteAllEvent(
override val origin: Boolean,
override val new: Boolean,
override val group: Group,
/** /**
* 由管理员操作 * 操作人. 为 null 时则是机器人操作
*/ */
data class ByOperator( val operator: Member?
override val origin: Boolean, ) : GroupSettingChangeEvent<Boolean>, Packet
override val new: Boolean,
val operator: Member
) : GroupMuteAllEvent() {
override val group: Group
get() = operator.group
}
/**
* 群 "匿名聊天" 功能状态改变. 此事件广播前修改就已经完成.
*/
data class GroupAllowAnonymousChatEvent(
override val origin: Boolean,
override val new: Boolean,
override val group: Group,
/** /**
* 机器人操作 * 操作人. 为 null 时则是机器人操作
*/ */
data class ByBot( val operator: Member?
override val origin: Boolean, ) : GroupSettingChangeEvent<Boolean>, Packet
override val new: Boolean,
override val group: Group
) : GroupMuteAllEvent()
}
/** /**
* 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成. * 群 "坦白说" 功能状态改变. 此事件广播前修改就已经完成.
*/ */
sealed class GroupAllowConfessTalkEvent : GroupSettingChangeEvent<Boolean>, BotPassiveEvent { data class GroupAllowConfessTalkEvent(
/** override val origin: Boolean,
* 由管理员操作 override val new: Boolean,
*/ override val group: Group,
data class ByOperator(
override val origin: Boolean,
override val new: Boolean,
val operator: Member
) : 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(
/** override val origin: Boolean,
* 由管理员操作 override val new: Boolean,
*/ override val group: Group,
data class ByOperator(
override val origin: Boolean,
override val new: Boolean,
val operator: Member
) : 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(
/** override val member: Member,
* 被管理员踢出
*/
data class ByOperator(
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,
val operator: Member
) : MemberCardChangeEvent(), BotPassiveEvent
/** override val member: Member,
* 由 [Bot] 修改. 由 [Member.nameCard]
*/
data class ByBot(
override val origin: String,
override val new: String,
override val member: Member
) : MemberCardChangeEvent(), BotActiveEvent
/** /**
* 该成员自己修改 * 操作人. 为 null 时则是机器人操作. 可能与 [member] 引用相同, 此时为群员自己修改.
*/ */
data class BySelf( val operator: Member?
override val origin: String, ) : GroupMemberEvent
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 override val member: Member,
val durationSeconds: Int,
abstract val durationSeconds: Int
/**
* 管理员禁言成员
*/
data class ByOperator(
override val member: Member,
override 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 override val member: Member,
/**
* 管理员禁言成员
*/
data class ByOperator(
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