mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-07 23:04:43 +08:00
Better memory management
This commit is contained in:
parent
da2b279a19
commit
0e30d3d69b
@ -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
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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(),
|
||||
|
@ -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<TSender : QQ, TSubject : Contact> actual constructor(bot: Bot) : MessagePacketBase<TSender, TSubject>(bot) {
|
||||
actual abstract class MessagePacket<TSender : QQ, TSubject : Contact> actual constructor() : MessagePacketBase<TSender, TSubject>() {
|
||||
// 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)
|
||||
|
@ -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<QQ, QQ>(bot), BroadcastControllable {
|
||||
) : MessagePacket<QQ, QQ>(), 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)"
|
||||
|
@ -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<Member, Group>(bot), Event {
|
||||
val group: Group by group.unsafeWeakRef()
|
||||
) : MessagePacket<Member, Group>(), 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
|
||||
|
||||
|
@ -32,18 +32,19 @@ import kotlin.jvm.JvmName
|
||||
* 请查看各平台的 `actual` 实现的说明.
|
||||
*/
|
||||
@UseExperimental(MiraiInternalAPI::class)
|
||||
expect abstract class MessagePacket<TSender : QQ, TSubject : Contact>(bot: Bot) : MessagePacketBase<TSender, TSubject>
|
||||
expect abstract class MessagePacket<TSender : QQ, TSubject : Contact>() : MessagePacketBase<TSender, TSubject>
|
||||
|
||||
/**
|
||||
* 仅内部使用, 请使用 [MessagePacket]
|
||||
*/ // Tips: 在 IntelliJ 中 (左侧边栏) 打开 `Structure`, 可查看类结构
|
||||
@Suppress("NOTHING_TO_INLINE", "UNCHECKED_CAST")
|
||||
@MiraiInternalAPI
|
||||
abstract class MessagePacketBase<TSender : QQ, TSubject : Contact>(_bot: Bot) : Packet, BotEvent {
|
||||
abstract class MessagePacketBase<TSender : QQ, TSubject : Contact> : Packet, BotEvent {
|
||||
/**
|
||||
* 接受到这条消息的
|
||||
*/
|
||||
override val bot: Bot by _bot.unsafeWeakRef()
|
||||
@WeakRefProperty
|
||||
abstract override val bot: Bot
|
||||
|
||||
/**
|
||||
* 消息事件主体.
|
||||
@ -53,6 +54,7 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact>(_bot: Bot) :
|
||||
*
|
||||
* 在回复消息时, 可通过 [subject] 作为回复对象
|
||||
*/
|
||||
@WeakRefProperty
|
||||
abstract val subject: TSubject
|
||||
|
||||
/**
|
||||
@ -60,6 +62,7 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact>(_bot: Bot) :
|
||||
*
|
||||
* 在好友消息时为 [QQ] 的实例, 在群消息时为 [Member] 的实例
|
||||
*/
|
||||
@WeakRefProperty
|
||||
abstract val sender: TSender
|
||||
|
||||
/**
|
||||
|
@ -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<TSender : QQ, TSubject : Contact> actual constructor(bot: Bot) : MessagePacketBase<TSender, TSubject>(bot) {
|
||||
actual abstract class MessagePacket<TSender : QQ, TSubject : Contact> actual constructor() : MessagePacketBase<TSender, TSubject>() {
|
||||
// region 上传图片
|
||||
suspend inline fun uploadImage(image: BufferedImage): Image = subject.uploadImage(image)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user