diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt index ada894249..2d740a1f4 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt @@ -306,20 +306,19 @@ internal class MemberImpl( } internal class MemberInfoImpl( - private val jceInfo: StTroopMemberInfo, - private val groupOwnerId: Long + jceInfo: StTroopMemberInfo, + groupOwnerId: Long ) : MemberInfo { - override val uin: Long get() = jceInfo.memberUin - override val nameCard: String get() = jceInfo.sName ?: "" - override val nick: String get() = jceInfo.nick - override val permission: MemberPermission - get() = when { - jceInfo.memberUin == groupOwnerId -> MemberPermission.OWNER - jceInfo.dwFlag == 1L -> MemberPermission.ADMINISTRATOR - else -> MemberPermission.MEMBER - } - override val specialTitle: String get() = jceInfo.sSpecialTitle ?: "" - override val muteTimestamp: Int get() = jceInfo.dwShutupTimestap?.toInt() ?: 0 + override val uin: Long = jceInfo.memberUin + override val nameCard: String = jceInfo.sName ?: "" + override val nick: String = jceInfo.nick + override val permission: MemberPermission = when { + jceInfo.memberUin == groupOwnerId -> MemberPermission.OWNER + jceInfo.dwFlag == 1L -> MemberPermission.ADMINISTRATOR + else -> MemberPermission.MEMBER + } + override val specialTitle: String = jceInfo.sSpecialTitle ?: "" + override val muteTimestamp: Int = jceInfo.dwShutupTimestap?.toInt() ?: 0 } /** diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt index 06720d94e..8f1ab906c 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt @@ -74,8 +74,6 @@ internal class OnlinePush { // println(pbPushMsg.msg.msgBody.richText.contentToString()) val flags = extraInfo?.flags ?: 0 return GroupMessage( - bot = bot, - group = group, senderName = pbPushMsg.msg.msgHead.groupInfo.groupCard, sender = group[pbPushMsg.msg.msgHead.fromUin], message = pbPushMsg.msg.toMessageChain(), diff --git a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt index 25d9e7640..a9172742c 100644 --- a/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt +++ b/mirai-core/src/androidMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt @@ -9,7 +9,6 @@ package net.mamoe.mirai.message -import net.mamoe.mirai.Bot import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.utils.MiraiInternalAPI @@ -18,7 +17,7 @@ import net.mamoe.mirai.utils.MiraiInternalAPI * 平台相关扩展 */ @UseExperimental(MiraiInternalAPI::class) -actual abstract class MessagePacket actual constructor(bot: Bot) : MessagePacketBase(bot) { +actual abstract class MessagePacket actual constructor() : MessagePacketBase() { // suspend inline fun uploadImage(image: Bitmap): Image = subject.uploadImage(image) //suspend inline fun uploadImage(image: URL): Image = subject.uploadImage(image) //suspend inline fun uploadImage(image: Input): Image = subject.uploadImage(image) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/FriendMessage.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/FriendMessage.kt index 8ead2fe6a..d4d03120b 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/FriendMessage.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/FriendMessage.kt @@ -13,12 +13,16 @@ import net.mamoe.mirai.Bot import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.event.BroadcastControllable import net.mamoe.mirai.message.data.MessageChain +import net.mamoe.mirai.utils.getValue +import net.mamoe.mirai.utils.unsafeWeakRef class FriendMessage( bot: Bot, - override val sender: QQ, + sender: QQ, override val message: MessageChain -) : MessagePacket(bot), BroadcastControllable { +) : MessagePacket(), BroadcastControllable { + override val sender: QQ by sender.unsafeWeakRef() + override val bot: Bot get() = sender.bot override val subject: QQ get() = sender override fun toString(): String = "FriendMessage(sender=${sender.id}, message=$message)" diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/GroupMessage.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/GroupMessage.kt index f14d0689e..5752b8755 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/GroupMessage.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/GroupMessage.kt @@ -22,8 +22,6 @@ import kotlin.jvm.JvmName @Suppress("unused", "NOTHING_TO_INLINE") class GroupMessage( - bot: Bot, - group: Group, val senderName: String, /** * 发送方权限. @@ -31,9 +29,10 @@ class GroupMessage( val permission: MemberPermission, sender: Member, override val message: MessageChain -) : MessagePacket(bot), Event { - val group: Group by group.unsafeWeakRef() +) : MessagePacket(), Event { override val sender: Member by sender.unsafeWeakRef() + val group: Group get() = sender.group + override val bot: Bot get() = sender.bot override val subject: Group get() = group diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt index 0bfd0a01e..36c19d890 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt @@ -32,18 +32,19 @@ import kotlin.jvm.JvmName * 请查看各平台的 `actual` 实现的说明. */ @UseExperimental(MiraiInternalAPI::class) -expect abstract class MessagePacket(bot: Bot) : MessagePacketBase +expect abstract class MessagePacket() : MessagePacketBase /** * 仅内部使用, 请使用 [MessagePacket] */ // Tips: 在 IntelliJ 中 (左侧边栏) 打开 `Structure`, 可查看类结构 @Suppress("NOTHING_TO_INLINE", "UNCHECKED_CAST") @MiraiInternalAPI -abstract class MessagePacketBase(_bot: Bot) : Packet, BotEvent { +abstract class MessagePacketBase : Packet, BotEvent { /** * 接受到这条消息的 */ - override val bot: Bot by _bot.unsafeWeakRef() + @WeakRefProperty + abstract override val bot: Bot /** * 消息事件主体. @@ -53,6 +54,7 @@ abstract class MessagePacketBase(_bot: Bot) : * * 在回复消息时, 可通过 [subject] 作为回复对象 */ + @WeakRefProperty abstract val subject: TSubject /** @@ -60,6 +62,7 @@ abstract class MessagePacketBase(_bot: Bot) : * * 在好友消息时为 [QQ] 的实例, 在群消息时为 [Member] 的实例 */ + @WeakRefProperty abstract val sender: TSender /** diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt index 6d3ca3cbc..389598f07 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt @@ -16,7 +16,6 @@ import kotlinx.coroutines.withContext import kotlinx.io.core.Input import kotlinx.io.core.use import kotlinx.io.streams.inputStream -import net.mamoe.mirai.Bot import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.message.data.Image @@ -35,7 +34,7 @@ import javax.imageio.ImageIO * JVM 平台相关扩展 */ @UseExperimental(MiraiInternalAPI::class) -actual abstract class MessagePacket actual constructor(bot: Bot) : MessagePacketBase(bot) { +actual abstract class MessagePacket actual constructor() : MessagePacketBase() { // region 上传图片 suspend inline fun uploadImage(image: BufferedImage): Image = subject.uploadImage(image)