mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-24 20:43:33 +08:00
[core] Fix private message source target
This commit is contained in:
parent
b8321870aa
commit
89fa2f7ffb
mirai-core-api
compatibility-validation
src/commonMain/kotlin/message/data
mirai-core/src/commonMain/kotlin/message/source
@ -4817,10 +4817,9 @@ public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming
|
||||
public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromFriend : net/mamoe/mirai/message/data/OnlineMessageSource$Incoming {
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromFriend$Key;
|
||||
public abstract fun getSender ()Lnet/mamoe/mirai/contact/Friend;
|
||||
public synthetic fun getSubject ()Lnet/mamoe/mirai/contact/Contact;
|
||||
public final fun getSubject ()Lnet/mamoe/mirai/contact/Friend;
|
||||
public final fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public synthetic fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public abstract fun getSubject ()Lnet/mamoe/mirai/contact/Friend;
|
||||
public final synthetic fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public abstract fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public final fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
@ -4844,10 +4843,9 @@ public final class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$Fro
|
||||
public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromStranger : net/mamoe/mirai/message/data/OnlineMessageSource$Incoming {
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromStranger$Key;
|
||||
public abstract fun getSender ()Lnet/mamoe/mirai/contact/Stranger;
|
||||
public synthetic fun getSubject ()Lnet/mamoe/mirai/contact/Contact;
|
||||
public final fun getSubject ()Lnet/mamoe/mirai/contact/Stranger;
|
||||
public final fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public synthetic fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public abstract fun getSubject ()Lnet/mamoe/mirai/contact/Stranger;
|
||||
public final synthetic fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public abstract fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public final fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
@ -4858,10 +4856,9 @@ public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromTemp$Key;
|
||||
public final fun getGroup ()Lnet/mamoe/mirai/contact/Group;
|
||||
public abstract fun getSender ()Lnet/mamoe/mirai/contact/Member;
|
||||
public synthetic fun getSubject ()Lnet/mamoe/mirai/contact/Contact;
|
||||
public final fun getSubject ()Lnet/mamoe/mirai/contact/Member;
|
||||
public final fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public synthetic fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public abstract fun getSubject ()Lnet/mamoe/mirai/contact/Member;
|
||||
public final synthetic fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public abstract fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public final fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
|
@ -4817,10 +4817,9 @@ public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming
|
||||
public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromFriend : net/mamoe/mirai/message/data/OnlineMessageSource$Incoming {
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromFriend$Key;
|
||||
public abstract fun getSender ()Lnet/mamoe/mirai/contact/Friend;
|
||||
public synthetic fun getSubject ()Lnet/mamoe/mirai/contact/Contact;
|
||||
public final fun getSubject ()Lnet/mamoe/mirai/contact/Friend;
|
||||
public final fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public synthetic fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public abstract fun getSubject ()Lnet/mamoe/mirai/contact/Friend;
|
||||
public final synthetic fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public abstract fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public final fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
@ -4844,10 +4843,9 @@ public final class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$Fro
|
||||
public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromStranger : net/mamoe/mirai/message/data/OnlineMessageSource$Incoming {
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromStranger$Key;
|
||||
public abstract fun getSender ()Lnet/mamoe/mirai/contact/Stranger;
|
||||
public synthetic fun getSubject ()Lnet/mamoe/mirai/contact/Contact;
|
||||
public final fun getSubject ()Lnet/mamoe/mirai/contact/Stranger;
|
||||
public final fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public synthetic fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public abstract fun getSubject ()Lnet/mamoe/mirai/contact/Stranger;
|
||||
public final synthetic fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public abstract fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public final fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
@ -4858,10 +4856,9 @@ public abstract class net/mamoe/mirai/message/data/OnlineMessageSource$Incoming$
|
||||
public static final field Key Lnet/mamoe/mirai/message/data/OnlineMessageSource$Incoming$FromTemp$Key;
|
||||
public final fun getGroup ()Lnet/mamoe/mirai/contact/Group;
|
||||
public abstract fun getSender ()Lnet/mamoe/mirai/contact/Member;
|
||||
public synthetic fun getSubject ()Lnet/mamoe/mirai/contact/Contact;
|
||||
public final fun getSubject ()Lnet/mamoe/mirai/contact/Member;
|
||||
public final fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public synthetic fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public abstract fun getSubject ()Lnet/mamoe/mirai/contact/Member;
|
||||
public final synthetic fun getTarget ()Lnet/mamoe/mirai/Bot;
|
||||
public abstract fun getTarget ()Lnet/mamoe/mirai/contact/ContactOrBot;
|
||||
public final fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
|
@ -149,6 +149,9 @@ public sealed class OnlineMessageSource : MessageSource() {
|
||||
* 接收到的一条消息的 [MessageSource]
|
||||
*/
|
||||
public sealed class Incoming : OnlineMessageSource() {
|
||||
/**
|
||||
* 当 [sender] 为 [bot] 自身时为 bot 的对应表示 (如: [Bot.asFriend], [Bot.asStranger], [Group.botAsMember])
|
||||
*/
|
||||
public abstract override val sender: User
|
||||
|
||||
/// NOTE: DONT use final to avoid contact not available
|
||||
@ -160,9 +163,21 @@ public sealed class OnlineMessageSource : MessageSource() {
|
||||
public companion object Key :
|
||||
AbstractPolymorphicMessageKey<Incoming, FromFriend>(Incoming, { it.safeCast() })
|
||||
|
||||
public abstract override val subject: Friend
|
||||
|
||||
/**
|
||||
* 当 [sender] 为 [bot] 自身时为 [Bot.asFriend]
|
||||
*/
|
||||
public abstract override val sender: Friend
|
||||
public final override val subject: Friend get() = sender
|
||||
public final override val target: Bot get() = sender.bot
|
||||
public abstract override val target: ContactOrBot
|
||||
|
||||
@JvmName("getTarget")
|
||||
@Deprecated("For ABI compatibility", level = DeprecationLevel.HIDDEN)
|
||||
public fun getTargetLegacy(): Bot {
|
||||
if (targetId == bot.id) return subject.bot
|
||||
|
||||
error("Message target isn't bot; $this")
|
||||
}
|
||||
|
||||
final override fun toString(): String {
|
||||
return "[mirai:source:ids=${ids.contentToString()}, internalIds=${internalIds.contentToString()}, from friend $fromId to $targetId at $time]"
|
||||
@ -174,10 +189,23 @@ public sealed class OnlineMessageSource : MessageSource() {
|
||||
public companion object Key :
|
||||
AbstractPolymorphicMessageKey<Incoming, FromTemp>(Incoming, { it.safeCast() })
|
||||
|
||||
/**
|
||||
* 当 [sender] 为 [bot] 自身时为 [Group.botAsMember]
|
||||
*/
|
||||
public abstract override val sender: Member
|
||||
public inline val group: Group get() = sender.group
|
||||
public final override val subject: Member get() = sender
|
||||
public final override val target: Bot get() = sender.bot
|
||||
public abstract override val subject: Member
|
||||
public abstract override val target: ContactOrBot
|
||||
|
||||
public inline val group: Group get() = subject.group
|
||||
|
||||
@JvmName("getTarget")
|
||||
@Deprecated("For ABI compatibility", level = DeprecationLevel.HIDDEN)
|
||||
public fun getTargetLegacy(): Bot {
|
||||
if (targetId == bot.id) return subject.bot
|
||||
|
||||
error("Message target isn't bot; $this")
|
||||
}
|
||||
|
||||
final override fun toString(): String {
|
||||
return "[mirai:source:ids=${ids.contentToString()}, internalIds=${internalIds.contentToString()}, from group temp $fromId to $targetId at $time]"
|
||||
}
|
||||
@ -188,9 +216,21 @@ public sealed class OnlineMessageSource : MessageSource() {
|
||||
public companion object Key :
|
||||
AbstractPolymorphicMessageKey<Incoming, FromStranger>(Incoming, { it.safeCast() })
|
||||
|
||||
/**
|
||||
* 当 [sender] 为 [bot] 自身时为 [Bot.asStranger]
|
||||
*/
|
||||
public abstract override val sender: Stranger
|
||||
public final override val subject: Stranger get() = sender
|
||||
public final override val target: Bot get() = sender.bot
|
||||
|
||||
public abstract override val subject: Stranger
|
||||
public abstract override val target: ContactOrBot
|
||||
|
||||
@JvmName("getTarget")
|
||||
@Deprecated("For ABI compatibility", level = DeprecationLevel.HIDDEN)
|
||||
public fun getTargetLegacy(): Bot {
|
||||
if (targetId == bot.id) return subject.bot
|
||||
|
||||
error("Message target isn't bot; $this")
|
||||
}
|
||||
|
||||
final override fun toString(): String {
|
||||
return "[mirai:source:ids=${ids.contentToString()}, internalIds=${internalIds.contentToString()}, from stranger $fromId to $targetId at $time]"
|
||||
@ -202,6 +242,9 @@ public sealed class OnlineMessageSource : MessageSource() {
|
||||
public companion object Key :
|
||||
AbstractPolymorphicMessageKey<Incoming, FromGroup>(Incoming, { it.safeCast() })
|
||||
|
||||
/**
|
||||
* 当 [sender] 为 [bot] 自身时为 [Group.botAsMember]
|
||||
*/
|
||||
public abstract override val sender: Member
|
||||
public override val subject: Group get() = sender.group
|
||||
public final override val target: Group get() = subject
|
||||
|
@ -16,6 +16,7 @@ import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.contact.ContactOrBot
|
||||
import net.mamoe.mirai.contact.Friend
|
||||
import net.mamoe.mirai.contact.Member
|
||||
import net.mamoe.mirai.contact.Stranger
|
||||
@ -44,7 +45,7 @@ import net.mamoe.mirai.utils.structureToString
|
||||
@Serializable(OnlineMessageSourceFromFriendImpl.Serializer::class)
|
||||
internal class OnlineMessageSourceFromFriendImpl(
|
||||
override val bot: Bot,
|
||||
msg: List<MsgComm.Msg>,
|
||||
private val msg: List<MsgComm.Msg>,
|
||||
) : OnlineMessageSource.Incoming.FromFriend(), IncomingMessageSourceInternal {
|
||||
object Serializer : KSerializer<MessageSource> by MessageSourceSerializerImpl("OnlineMessageSourceFromFriend")
|
||||
|
||||
@ -65,7 +66,35 @@ internal class OnlineMessageSourceFromFriendImpl(
|
||||
override val isOriginalMessageInitialized: Boolean
|
||||
get() = originalMessageLazy.isInitialized()
|
||||
|
||||
override val sender: Friend = bot.getFriendOrFail(msg.first().msgHead.fromUin)
|
||||
override val sender: Friend by lazy {
|
||||
if (fromId == bot.id) {
|
||||
bot.asFriend
|
||||
} else {
|
||||
bot.getFriendOrFail(fromId)
|
||||
}
|
||||
}
|
||||
|
||||
override val subject: Friend by lazy {
|
||||
if (fromId == bot.id) {
|
||||
bot.getFriendOrFail(targetId)
|
||||
} else {
|
||||
bot.getFriendOrFail(fromId)
|
||||
}
|
||||
}
|
||||
override val fromId: Long
|
||||
get() = msg.first().msgHead.fromUin
|
||||
|
||||
override val targetId: Long
|
||||
get() = msg.first().msgHead.toUin
|
||||
|
||||
override val target: ContactOrBot by lazy {
|
||||
if (fromId == bot.id) {
|
||||
bot.getFriendOrFail(targetId)
|
||||
} else {
|
||||
bot
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private val jceData: ImMsgBody.SourceMsg by lazy { msg.toJceDataPrivate(internalIds) }
|
||||
|
||||
@ -80,7 +109,7 @@ internal class OnlineMessageSourceFromFriendImpl(
|
||||
@Serializable(OnlineMessageSourceFromStrangerImpl.Serializer::class)
|
||||
internal class OnlineMessageSourceFromStrangerImpl(
|
||||
override val bot: Bot,
|
||||
msg: List<MsgComm.Msg>,
|
||||
private val msg: List<MsgComm.Msg>,
|
||||
) : OnlineMessageSource.Incoming.FromStranger(), IncomingMessageSourceInternal {
|
||||
object Serializer : KSerializer<MessageSource> by MessageSourceSerializerImpl("OnlineMessageSourceFromStranger")
|
||||
|
||||
@ -102,7 +131,35 @@ internal class OnlineMessageSourceFromStrangerImpl(
|
||||
override val isOriginalMessageInitialized: Boolean
|
||||
get() = originalMessageLazy.isInitialized()
|
||||
|
||||
override val sender: Stranger = bot.getStrangerOrFail(msg.first().msgHead.fromUin)
|
||||
override val sender: Stranger by lazy {
|
||||
if (fromId == bot.id) {
|
||||
bot.asStranger
|
||||
} else {
|
||||
bot.getStrangerOrFail(fromId)
|
||||
}
|
||||
}
|
||||
|
||||
override val subject: Stranger by lazy {
|
||||
if (fromId == bot.id) {
|
||||
bot.getStrangerOrFail(targetId)
|
||||
} else {
|
||||
bot.getStrangerOrFail(fromId)
|
||||
}
|
||||
}
|
||||
|
||||
override val fromId: Long
|
||||
get() = msg.first().msgHead.fromUin
|
||||
|
||||
override val targetId: Long
|
||||
get() = msg.first().msgHead.toUin
|
||||
|
||||
override val target: ContactOrBot by lazy {
|
||||
if (fromId == bot.id) {
|
||||
bot.getStrangerOrFail(targetId)
|
||||
} else {
|
||||
bot
|
||||
}
|
||||
}
|
||||
|
||||
private val jceData: ImMsgBody.SourceMsg by lazy { msg.toJceDataPrivate(internalIds) }
|
||||
|
||||
@ -166,7 +223,7 @@ internal fun MsgComm.Msg.decodeRandom(): Int {
|
||||
@Serializable(OnlineMessageSourceFromTempImpl.Serializer::class)
|
||||
internal class OnlineMessageSourceFromTempImpl(
|
||||
override val bot: Bot,
|
||||
msg: List<MsgComm.Msg>,
|
||||
private val msg: List<MsgComm.Msg>,
|
||||
) : OnlineMessageSource.Incoming.FromTemp(), IncomingMessageSourceInternal {
|
||||
object Serializer : KSerializer<MessageSource> by MessageSourceSerializerImpl("OnlineMessageSourceFromTemp")
|
||||
|
||||
@ -188,15 +245,40 @@ internal class OnlineMessageSourceFromTempImpl(
|
||||
override val isOriginalMessageInitialized: Boolean
|
||||
get() = originalMessageLazy.isInitialized()
|
||||
|
||||
override val sender: Member = with(msg.first().msgHead) {
|
||||
@Suppress("PropertyName")
|
||||
private val _group = with(msg.first().msgHead) {
|
||||
// it must be uin, see #1410
|
||||
// corresponding test: net.mamoe.mirai.internal.notice.processors.MessageTest.group temp message test 2
|
||||
|
||||
// search for group code also is for tests. code may be passed as uin in tests.
|
||||
// clashing is unlikely possible in real time, so it would not be a problem.
|
||||
bot.asQQAndroidBot().getGroupByUinOrCodeOrFail(c2cTmpMsgHead!!.groupUin).getOrFail(fromUin)
|
||||
bot.asQQAndroidBot().getGroupByUinOrCodeOrFail(c2cTmpMsgHead!!.groupUin)
|
||||
}
|
||||
|
||||
override val sender: Member by lazy {
|
||||
_group.getOrFail(fromId)
|
||||
}
|
||||
|
||||
override val target: ContactOrBot by lazy {
|
||||
if (fromId == botId) {
|
||||
_group.getOrFail(targetId)
|
||||
} else bot
|
||||
}
|
||||
|
||||
override val subject: Member by lazy {
|
||||
if (fromId == botId) {
|
||||
_group.getOrFail(targetId)
|
||||
} else {
|
||||
_group.getOrFail(fromId)
|
||||
}
|
||||
}
|
||||
|
||||
override val fromId: Long
|
||||
get() = msg.first().msgHead.fromUin
|
||||
override val targetId: Long
|
||||
get() = msg.first().msgHead.toUin
|
||||
|
||||
|
||||
private val jceData: ImMsgBody.SourceMsg by lazy { msg.toJceDataPrivate(internalIds) }
|
||||
override fun toJceData(): ImMsgBody.SourceMsg = jceData
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user