Skip to content

Commit 4467f69

Browse files
committed
Improve member impls
1 parent 08badca commit 4467f69

File tree

6 files changed

+48
-28
lines changed

6 files changed

+48
-28
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright 2020 Mamoe Technologies and contributors.
3+
*
4+
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
5+
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
6+
*
7+
* https://github.com/mamoe/mirai/blob/master/LICENSE
8+
*/
9+
10+
package net.mamoe.mirai.internal.contact
11+
12+
import net.mamoe.mirai.contact.Member
13+
import net.mamoe.mirai.contact.MemberPermission
14+
import net.mamoe.mirai.data.MemberInfo
15+
import net.mamoe.mirai.utils.cast
16+
import net.mamoe.mirai.utils.getValue
17+
import net.mamoe.mirai.utils.unsafeWeakRef
18+
import kotlin.coroutines.CoroutineContext
19+
20+
internal abstract class AbstractMember(
21+
group: GroupImpl,
22+
coroutineContext: CoroutineContext,
23+
memberInfo: MemberInfo
24+
) : AbstractUser(group.bot, coroutineContext, memberInfo), Member {
25+
final override val group: GroupImpl by group.unsafeWeakRef()
26+
27+
final override val info: MemberInfoImpl = memberInfo.cast()
28+
29+
override val nameCard: String get() = info.nameCard
30+
override val specialTitle: String get() = info.specialTitle
31+
override var permission: MemberPermission by info::permission
32+
}

mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt

+5-4
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,13 @@ import net.mamoe.mirai.internal.network.highway.sizeToString
2727
import net.mamoe.mirai.internal.network.protocol.data.proto.Cmd0x352
2828
import net.mamoe.mirai.internal.network.protocol.packet.chat.image.LongConn
2929
import net.mamoe.mirai.message.data.Image
30-
import net.mamoe.mirai.utils.ExternalResource
31-
import net.mamoe.mirai.utils.generateImageIdFromResourceId
32-
import net.mamoe.mirai.utils.toUHexString
33-
import net.mamoe.mirai.utils.verbose
30+
import net.mamoe.mirai.utils.*
3431
import kotlin.coroutines.CoroutineContext
3532
import kotlin.math.roundToInt
3633
import kotlin.time.measureTime
3734

35+
internal val User.info: UserInfo? get() = this.castOrNull<AbstractUser>()?.info
36+
3837
internal open class UserInfoImpl(override val uin: Long, override val nick: String, override val remark: String = "") :
3938
UserInfo
4039

@@ -47,6 +46,8 @@ internal abstract class AbstractUser(
4746
final override var nick: String = userInfo.nick
4847
final override val remark: String = userInfo.remark
4948

49+
open val info: UserInfo = userInfo
50+
5051
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
5152
override suspend fun uploadImage(resource: ExternalResource): Image {
5253
if (BeforeImageUploadEvent(this, resource).broadcast().isCancelled) {

mirai-core/src/commonMain/kotlin/contact/AnonymousMemberImpl.kt

+8-14
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,25 @@
99

1010
package net.mamoe.mirai.internal.contact
1111

12-
import net.mamoe.mirai.Bot
1312
import net.mamoe.mirai.contact.AnonymousMember
14-
import net.mamoe.mirai.contact.MemberPermission
1513
import net.mamoe.mirai.data.MemberInfo
1614
import net.mamoe.mirai.internal.MiraiImpl
15+
import net.mamoe.mirai.message.data.Image
16+
import net.mamoe.mirai.utils.ExternalResource
1717
import kotlin.coroutines.CoroutineContext
1818

1919
internal class AnonymousMemberImpl(
20-
override val group: GroupImpl,
21-
override val coroutineContext: CoroutineContext,
22-
private val memberInfo: MemberInfo,
20+
group: GroupImpl,
21+
coroutineContext: CoroutineContext,
22+
memberInfo: MemberInfo,
2323
override val anonymousId: String
24-
) : AnonymousMember {
25-
override val nameCard: String get() = memberInfo.nameCard
26-
override val specialTitle: String get() = memberInfo.specialTitle
27-
override val permission: MemberPermission get() = memberInfo.permission
28-
override val bot: Bot get() = group.bot
29-
override val id: Long get() = memberInfo.uin
30-
override val nick: String get() = memberInfo.nick
31-
override val remark: String get() = memberInfo.remark
32-
24+
) : AnonymousMember, AbstractMember(group, coroutineContext, memberInfo) {
3325
override suspend fun mute(durationSeconds: Int) {
3426
checkBotPermissionHigherThanThis("mute")
3527
MiraiImpl.muteAnonymousMember(bot, anonymousId, nameCard, group.uin, durationSeconds)
3628
}
3729

3830
override fun toString(): String = "AnonymousMember($nameCard, $anonymousId)"
31+
override suspend fun uploadImage(resource: ExternalResource): Image =
32+
throw UnsupportedOperationException("Cannot upload image to AnonymousMember")
3933
}

mirai-core/src/commonMain/kotlin/contact/MemberInfoImpl.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import net.mamoe.mirai.internal.network.protocol.data.jce.StTroopMemberInfo
1616
internal class MemberInfoImpl(
1717
override val uin: Long,
1818
override var nick: String,
19-
override val permission: MemberPermission,
19+
override var permission: MemberPermission,
2020
override var remark: String,
2121
override val nameCard: String,
2222
override val specialTitle: String,

mirai-core/src/commonMain/kotlin/contact/NormalMemberImpl.kt

+1-6
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import net.mamoe.mirai.internal.network.protocol.packet.chat.receive.createToTem
2828
import net.mamoe.mirai.message.MessageReceipt
2929
import net.mamoe.mirai.message.data.*
3030
import net.mamoe.mirai.utils.currentTimeSeconds
31-
import net.mamoe.mirai.utils.getValue
32-
import net.mamoe.mirai.utils.unsafeWeakRef
3331
import kotlin.contracts.ExperimentalContracts
3432
import kotlin.contracts.contract
3533
import kotlin.coroutines.CoroutineContext
@@ -40,8 +38,7 @@ internal class NormalMemberImpl constructor(
4038
group: GroupImpl,
4139
coroutineContext: CoroutineContext,
4240
memberInfo: MemberInfo
43-
) : NormalMember, AbstractUser(group.bot, coroutineContext, memberInfo) {
44-
override val group: GroupImpl by group.unsafeWeakRef()
41+
) : NormalMember, AbstractMember(group, coroutineContext, memberInfo) {
4542

4643
@Suppress("unused") // false positive
4744
val lastMessageSequence: AtomicInt = atomic(-1)
@@ -108,8 +105,6 @@ internal class NormalMemberImpl constructor(
108105
return result.getOrThrow()
109106
}
110107

111-
override var permission: MemberPermission = memberInfo.permission
112-
113108
@Suppress("PropertyName")
114109
internal var _nameCard: String = memberInfo.nameCard
115110

mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushGroupMsg.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ import net.mamoe.mirai.event.events.GroupMessageEvent
2222
import net.mamoe.mirai.event.events.GroupMessageSyncEvent
2323
import net.mamoe.mirai.event.events.MemberCardChangeEvent
2424
import net.mamoe.mirai.internal.QQAndroidBot
25-
import net.mamoe.mirai.internal.contact.GroupImpl
26-
import net.mamoe.mirai.internal.contact.NormalMemberImpl
27-
import net.mamoe.mirai.internal.contact.newAnonymous
25+
import net.mamoe.mirai.internal.contact.*
2826
import net.mamoe.mirai.internal.message.toMessageChain
2927
import net.mamoe.mirai.internal.network.Packet
3028
import net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody

0 commit comments

Comments
 (0)