mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-02 04:30:25 +08:00
Improve member impls
This commit is contained in:
parent
08badca2af
commit
4467f69110
32
mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt
Normal file
32
mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2020 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.
|
||||
*
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.contact
|
||||
|
||||
import net.mamoe.mirai.contact.Member
|
||||
import net.mamoe.mirai.contact.MemberPermission
|
||||
import net.mamoe.mirai.data.MemberInfo
|
||||
import net.mamoe.mirai.utils.cast
|
||||
import net.mamoe.mirai.utils.getValue
|
||||
import net.mamoe.mirai.utils.unsafeWeakRef
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
internal abstract class AbstractMember(
|
||||
group: GroupImpl,
|
||||
coroutineContext: CoroutineContext,
|
||||
memberInfo: MemberInfo
|
||||
) : AbstractUser(group.bot, coroutineContext, memberInfo), Member {
|
||||
final override val group: GroupImpl by group.unsafeWeakRef()
|
||||
|
||||
final override val info: MemberInfoImpl = memberInfo.cast()
|
||||
|
||||
override val nameCard: String get() = info.nameCard
|
||||
override val specialTitle: String get() = info.specialTitle
|
||||
override var permission: MemberPermission by info::permission
|
||||
}
|
@ -27,14 +27,13 @@ import net.mamoe.mirai.internal.network.highway.sizeToString
|
||||
import net.mamoe.mirai.internal.network.protocol.data.proto.Cmd0x352
|
||||
import net.mamoe.mirai.internal.network.protocol.packet.chat.image.LongConn
|
||||
import net.mamoe.mirai.message.data.Image
|
||||
import net.mamoe.mirai.utils.ExternalResource
|
||||
import net.mamoe.mirai.utils.generateImageIdFromResourceId
|
||||
import net.mamoe.mirai.utils.toUHexString
|
||||
import net.mamoe.mirai.utils.verbose
|
||||
import net.mamoe.mirai.utils.*
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.time.measureTime
|
||||
|
||||
internal val User.info: UserInfo? get() = this.castOrNull<AbstractUser>()?.info
|
||||
|
||||
internal open class UserInfoImpl(override val uin: Long, override val nick: String, override val remark: String = "") :
|
||||
UserInfo
|
||||
|
||||
@ -47,6 +46,8 @@ internal abstract class AbstractUser(
|
||||
final override var nick: String = userInfo.nick
|
||||
final override val remark: String = userInfo.remark
|
||||
|
||||
open val info: UserInfo = userInfo
|
||||
|
||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||
override suspend fun uploadImage(resource: ExternalResource): Image {
|
||||
if (BeforeImageUploadEvent(this, resource).broadcast().isCancelled) {
|
||||
|
@ -9,31 +9,25 @@
|
||||
|
||||
package net.mamoe.mirai.internal.contact
|
||||
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.contact.AnonymousMember
|
||||
import net.mamoe.mirai.contact.MemberPermission
|
||||
import net.mamoe.mirai.data.MemberInfo
|
||||
import net.mamoe.mirai.internal.MiraiImpl
|
||||
import net.mamoe.mirai.message.data.Image
|
||||
import net.mamoe.mirai.utils.ExternalResource
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
internal class AnonymousMemberImpl(
|
||||
override val group: GroupImpl,
|
||||
override val coroutineContext: CoroutineContext,
|
||||
private val memberInfo: MemberInfo,
|
||||
group: GroupImpl,
|
||||
coroutineContext: CoroutineContext,
|
||||
memberInfo: MemberInfo,
|
||||
override val anonymousId: String
|
||||
) : AnonymousMember {
|
||||
override val nameCard: String get() = memberInfo.nameCard
|
||||
override val specialTitle: String get() = memberInfo.specialTitle
|
||||
override val permission: MemberPermission get() = memberInfo.permission
|
||||
override val bot: Bot get() = group.bot
|
||||
override val id: Long get() = memberInfo.uin
|
||||
override val nick: String get() = memberInfo.nick
|
||||
override val remark: String get() = memberInfo.remark
|
||||
|
||||
) : AnonymousMember, AbstractMember(group, coroutineContext, memberInfo) {
|
||||
override suspend fun mute(durationSeconds: Int) {
|
||||
checkBotPermissionHigherThanThis("mute")
|
||||
MiraiImpl.muteAnonymousMember(bot, anonymousId, nameCard, group.uin, durationSeconds)
|
||||
}
|
||||
|
||||
override fun toString(): String = "AnonymousMember($nameCard, $anonymousId)"
|
||||
override suspend fun uploadImage(resource: ExternalResource): Image =
|
||||
throw UnsupportedOperationException("Cannot upload image to AnonymousMember")
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ import net.mamoe.mirai.internal.network.protocol.data.jce.StTroopMemberInfo
|
||||
internal class MemberInfoImpl(
|
||||
override val uin: Long,
|
||||
override var nick: String,
|
||||
override val permission: MemberPermission,
|
||||
override var permission: MemberPermission,
|
||||
override var remark: String,
|
||||
override val nameCard: String,
|
||||
override val specialTitle: String,
|
||||
|
@ -28,8 +28,6 @@ import net.mamoe.mirai.internal.network.protocol.packet.chat.receive.createToTem
|
||||
import net.mamoe.mirai.message.MessageReceipt
|
||||
import net.mamoe.mirai.message.data.*
|
||||
import net.mamoe.mirai.utils.currentTimeSeconds
|
||||
import net.mamoe.mirai.utils.getValue
|
||||
import net.mamoe.mirai.utils.unsafeWeakRef
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
@ -40,8 +38,7 @@ internal class NormalMemberImpl constructor(
|
||||
group: GroupImpl,
|
||||
coroutineContext: CoroutineContext,
|
||||
memberInfo: MemberInfo
|
||||
) : NormalMember, AbstractUser(group.bot, coroutineContext, memberInfo) {
|
||||
override val group: GroupImpl by group.unsafeWeakRef()
|
||||
) : NormalMember, AbstractMember(group, coroutineContext, memberInfo) {
|
||||
|
||||
@Suppress("unused") // false positive
|
||||
val lastMessageSequence: AtomicInt = atomic(-1)
|
||||
@ -108,8 +105,6 @@ internal class NormalMemberImpl constructor(
|
||||
return result.getOrThrow()
|
||||
}
|
||||
|
||||
override var permission: MemberPermission = memberInfo.permission
|
||||
|
||||
@Suppress("PropertyName")
|
||||
internal var _nameCard: String = memberInfo.nameCard
|
||||
|
||||
|
@ -22,9 +22,7 @@ import net.mamoe.mirai.event.events.GroupMessageEvent
|
||||
import net.mamoe.mirai.event.events.GroupMessageSyncEvent
|
||||
import net.mamoe.mirai.event.events.MemberCardChangeEvent
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.contact.GroupImpl
|
||||
import net.mamoe.mirai.internal.contact.NormalMemberImpl
|
||||
import net.mamoe.mirai.internal.contact.newAnonymous
|
||||
import net.mamoe.mirai.internal.contact.*
|
||||
import net.mamoe.mirai.internal.message.toMessageChain
|
||||
import net.mamoe.mirai.internal.network.Packet
|
||||
import net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody
|
||||
|
Loading…
Reference in New Issue
Block a user