mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-03 15:10:14 +08:00
Unified FriendInfoImpl and MemberInfoImpl
This commit is contained in:
parent
1152fe9357
commit
de4bbafbd4
@ -18,4 +18,11 @@ public interface FriendInfo {
|
||||
public val nick: String
|
||||
|
||||
public val remark: String
|
||||
}
|
||||
}
|
||||
|
||||
@LowLevelApi
|
||||
public open class FriendInfoImpl(
|
||||
override val uin: Long,
|
||||
override var nick: String,
|
||||
override var remark: String,
|
||||
) : FriendInfo
|
@ -679,11 +679,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
|
||||
blackList = blackList
|
||||
).sendWithoutExpect()
|
||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||
bot.friends.delegate.add(_lowLevelNewFriend(bot, object : FriendInfo {
|
||||
override val uin: Long get() = fromId
|
||||
override val nick: String get() = fromNick
|
||||
override val remark: String get() = ""
|
||||
}))
|
||||
bot.friends.delegate.add(_lowLevelNewFriend(bot, FriendInfoImpl(fromId, fromNick, "")))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ import net.mamoe.mirai.contact.*
|
||||
import net.mamoe.mirai.data.*
|
||||
import net.mamoe.mirai.internal.contact.OtherClientImpl
|
||||
import net.mamoe.mirai.internal.contact.checkIsGroupImpl
|
||||
import net.mamoe.mirai.internal.contact.uin
|
||||
import net.mamoe.mirai.internal.message.*
|
||||
import net.mamoe.mirai.internal.network.QQAndroidBotNetworkHandler
|
||||
import net.mamoe.mirai.internal.network.QQAndroidClient
|
||||
@ -75,11 +76,7 @@ internal class QQAndroidBot constructor(
|
||||
|
||||
override val asFriend: Friend by lazy {
|
||||
@OptIn(LowLevelApi::class)
|
||||
Mirai._lowLevelNewFriend(this, object : FriendInfo {
|
||||
override val uin: Long get() = this@QQAndroidBot.id
|
||||
override val nick: String get() = this@QQAndroidBot.nick
|
||||
override val remark: String get() = ""
|
||||
})
|
||||
Mirai._lowLevelNewFriend(this, FriendInfoImpl(uin, nick, ""))
|
||||
}
|
||||
|
||||
override val groups: ContactList<Group> = ContactList()
|
||||
|
@ -35,7 +35,7 @@ internal abstract class AbstractUser(
|
||||
friendInfo: net.mamoe.mirai.data.FriendInfo,
|
||||
) : User, AbstractContact(bot, coroutineContext) {
|
||||
final override val id: Long = friendInfo.uin
|
||||
final override val nick: String = friendInfo.nick
|
||||
final override var nick: String = friendInfo.nick
|
||||
final override val remark: String = friendInfo.remark
|
||||
|
||||
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
||||
|
@ -23,6 +23,7 @@ import kotlinx.atomicfu.atomic
|
||||
import net.mamoe.mirai.LowLevelApi
|
||||
import net.mamoe.mirai.contact.Friend
|
||||
import net.mamoe.mirai.data.FriendInfo
|
||||
import net.mamoe.mirai.data.FriendInfoImpl
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.message.MessageReceipt
|
||||
import net.mamoe.mirai.message.data.Message
|
||||
@ -31,20 +32,19 @@ import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
internal class FriendInfoImpl(
|
||||
@JvmField private val jceFriendInfo: net.mamoe.mirai.internal.network.protocol.data.jce.FriendInfo
|
||||
) : FriendInfo {
|
||||
override var nick: String = jceFriendInfo.nick
|
||||
override val uin: Long get() = jceFriendInfo.friendUin
|
||||
override var remark: String = jceFriendInfo.remark
|
||||
}
|
||||
internal fun net.mamoe.mirai.internal.network.protocol.data.jce.FriendInfo.toMiraiFriendInfo(): FriendInfoImpl =
|
||||
FriendInfoImpl(
|
||||
friendUin,
|
||||
nick,
|
||||
remark
|
||||
)
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
internal inline fun FriendInfo.checkIsInfoImpl(): FriendInfoImpl {
|
||||
contract {
|
||||
returns() implies (this@checkIsInfoImpl is FriendInfoImpl)
|
||||
}
|
||||
check(this is FriendInfoImpl) { "A Friend instance is not instance of FriendImpl. Your instance: ${this::class.qualifiedName}" }
|
||||
check(this is FriendInfoImpl) { "A FriendInfo instance is not instance of checkIsInfoImpl. Your instance: ${this::class.qualifiedName}" }
|
||||
return this
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
package net.mamoe.mirai.internal.contact
|
||||
|
||||
import net.mamoe.mirai.contact.MemberPermission
|
||||
import net.mamoe.mirai.data.FriendInfoImpl
|
||||
import net.mamoe.mirai.data.MemberInfo
|
||||
import net.mamoe.mirai.internal.network.protocol.data.jce.StTroopMemberInfo
|
||||
|
||||
@ -17,12 +18,12 @@ internal class MemberInfoImpl(
|
||||
override val uin: Long,
|
||||
override var nick: String,
|
||||
override val permission: MemberPermission,
|
||||
override val remark: String,
|
||||
override var remark: String,
|
||||
override val nameCard: String,
|
||||
override val specialTitle: String,
|
||||
override val muteTimestamp: Int,
|
||||
override val anonymousId: String?,
|
||||
) : MemberInfo {
|
||||
) : MemberInfo, FriendInfoImpl(uin, nick, remark) {
|
||||
constructor(
|
||||
jceInfo: StTroopMemberInfo,
|
||||
groupOwnerId: Long
|
||||
|
@ -308,7 +308,7 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
|
||||
data.friendList.forEach {
|
||||
// atomic
|
||||
bot.friends.delegate.add(
|
||||
FriendImpl(bot, bot.coroutineContext, FriendInfoImpl(it))
|
||||
FriendImpl(bot, bot.coroutineContext, it.toMiraiFriendInfo())
|
||||
).also { currentFriendCount++ }
|
||||
}
|
||||
logger.verbose { "正在加载好友列表 ${currentFriendCount}/${totalFriendCount}" }
|
||||
|
@ -228,18 +228,16 @@ private suspend fun QQAndroidBot.createGroupForBot(groupUin: Long): Group? {
|
||||
}
|
||||
|
||||
private fun MsgComm.Msg.getNewMemberInfo(): MemberInfo {
|
||||
return object : MemberInfo {
|
||||
override val nameCard: String
|
||||
get() = msgHead.authNick.takeIf { it.isNotEmpty() }
|
||||
?: msgHead.fromNick
|
||||
override val permission: MemberPermission get() = MemberPermission.MEMBER
|
||||
override val specialTitle: String get() = ""
|
||||
override val muteTimestamp: Int get() = 0
|
||||
override val uin: Long get() = msgHead.authUin
|
||||
override val nick: String = msgHead.authNick.takeIf { it.isNotEmpty() }
|
||||
?: msgHead.fromNick
|
||||
override val remark: String get() = ""
|
||||
}
|
||||
return MemberInfoImpl(
|
||||
nameCard = msgHead.authNick.ifEmpty { msgHead.fromNick },
|
||||
permission = MemberPermission.MEMBER,
|
||||
specialTitle = "",
|
||||
muteTimestamp = 0,
|
||||
uin = msgHead.authUin,
|
||||
nick = msgHead.authNick.ifEmpty { msgHead.fromNick },
|
||||
remark = "",
|
||||
anonymousId = null
|
||||
)
|
||||
}
|
||||
|
||||
internal suspend fun MsgComm.Msg.transform(bot: QQAndroidBot): Packet? {
|
||||
|
@ -20,13 +20,9 @@ import kotlinx.io.core.readUByte
|
||||
import kotlinx.io.core.readUInt
|
||||
import net.mamoe.mirai.JavaFriendlyAPI
|
||||
import net.mamoe.mirai.contact.MemberPermission
|
||||
import net.mamoe.mirai.data.MemberInfo
|
||||
import net.mamoe.mirai.event.events.*
|
||||
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.checkIsMemberImpl
|
||||
import net.mamoe.mirai.internal.contact.newMember
|
||||
import net.mamoe.mirai.internal.contact.*
|
||||
import net.mamoe.mirai.internal.message.contextualBugReportException
|
||||
import net.mamoe.mirai.internal.network.MultiPacketByIterable
|
||||
import net.mamoe.mirai.internal.network.Packet
|
||||
@ -126,22 +122,18 @@ internal object OnlinePushPbPushTransMsg :
|
||||
)
|
||||
}
|
||||
} else {
|
||||
val newOwner = group.get(to) ?: group.newMember(object : MemberInfo {
|
||||
override val nameCard: String
|
||||
get() = ""
|
||||
override val permission: MemberPermission
|
||||
get() = MemberPermission.OWNER
|
||||
override val specialTitle: String
|
||||
get() = ""
|
||||
override val muteTimestamp: Int
|
||||
get() = 0
|
||||
override val uin: Long
|
||||
get() = to
|
||||
override val nick: String
|
||||
get() = ""
|
||||
override val remark: String
|
||||
get() = ""
|
||||
}).also { owner ->
|
||||
val newOwner = (group[to] ?: group.newMember(
|
||||
MemberInfoImpl(
|
||||
to,
|
||||
"",
|
||||
MemberPermission.OWNER,
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
0,
|
||||
null
|
||||
)
|
||||
)).also { owner ->
|
||||
owner.checkIsMemberImpl().permission = MemberPermission.OWNER
|
||||
group.members.delegate.add(owner)
|
||||
results.add(MemberJoinEvent.Retrieve(owner))
|
||||
|
@ -24,7 +24,7 @@ import net.mamoe.mirai.JavaFriendlyAPI
|
||||
import net.mamoe.mirai.Mirai
|
||||
import net.mamoe.mirai.contact.Friend
|
||||
import net.mamoe.mirai.contact.Member
|
||||
import net.mamoe.mirai.data.FriendInfo
|
||||
import net.mamoe.mirai.data.FriendInfoImpl
|
||||
import net.mamoe.mirai.event.events.*
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.contact.*
|
||||
@ -457,11 +457,13 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
0xB3L to lambda528 { bot ->
|
||||
// 08 01 12 52 08 A2 FF 8C F0 03 10 00 1D 15 3D 90 5E 22 2E E6 88 91 E4 BB AC E5 B7 B2 E7 BB 8F E6 98 AF E5 A5 BD E5 8F 8B E5 95 A6 EF BC 8C E4 B8 80 E8 B5 B7 E6 9D A5 E8 81 8A E5 A4 A9 E5 90 A7 21 2A 09 48 69 6D 31 38 38 6D 6F 65 30 07 38 03 48 DD F1 92 B7 07
|
||||
val body = vProtobuf.loadAs(Submsgtype0xb3.SubMsgType0xb3.MsgBody.serializer())
|
||||
val new = Mirai._lowLevelNewFriend(bot, object : FriendInfo {
|
||||
override val uin: Long get() = body.msgAddFrdNotify.fuin
|
||||
override val nick: String get() = body.msgAddFrdNotify.fuinNick
|
||||
override val remark: String get() = ""
|
||||
})
|
||||
val new = Mirai._lowLevelNewFriend(
|
||||
bot, FriendInfoImpl(
|
||||
uin = body.msgAddFrdNotify.fuin,
|
||||
nick = body.msgAddFrdNotify.fuinNick,
|
||||
remark = "",
|
||||
)
|
||||
)
|
||||
bot.friends.delegate.add(new)
|
||||
return@lambda528 sequenceOf(FriendAddEvent(new))
|
||||
},
|
||||
@ -693,6 +695,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
|
||||
val from = bot.nick
|
||||
if (from != to) {
|
||||
bot.nick = to
|
||||
bot.asFriend.checkIsFriendImpl().nick = to
|
||||
add(BotNickChangedEvent(bot, from, to))
|
||||
}
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user