diff --git a/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api b/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api index 1973b4879..6ef85562f 100644 --- a/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api +++ b/mirai-console/backend/mirai-console/compatibility-validation/jvm/api/jvm.api @@ -331,6 +331,7 @@ public abstract interface class net/mamoe/mirai/console/command/CommandSender : public static fun from (Lnet/mamoe/mirai/event/events/GroupMessageEvent;)Lnet/mamoe/mirai/console/command/MemberCommandSenderOnMessage; public static fun from (Lnet/mamoe/mirai/event/events/GroupTempMessageEvent;)Lnet/mamoe/mirai/console/command/GroupTempCommandSenderOnMessage; public static fun from (Lnet/mamoe/mirai/event/events/MessageEvent;)Lnet/mamoe/mirai/console/command/CommandSenderOnMessage; + public static fun from (Lnet/mamoe/mirai/event/events/MessageSyncEvent;)Lnet/mamoe/mirai/console/command/OtherClientCommandSenderOnMessageSync; public static fun from (Lnet/mamoe/mirai/event/events/OtherClientMessageEvent;)Lnet/mamoe/mirai/console/command/OtherClientCommandSenderOnMessage; public static fun from (Lnet/mamoe/mirai/event/events/StrangerMessageEvent;)Lnet/mamoe/mirai/console/command/StrangerCommandSenderOnMessage; public abstract fun getBot ()Lnet/mamoe/mirai/Bot; @@ -355,6 +356,7 @@ public final class net/mamoe/mirai/console/command/CommandSender$Companion { public final fun from (Lnet/mamoe/mirai/event/events/GroupMessageEvent;)Lnet/mamoe/mirai/console/command/MemberCommandSenderOnMessage; public final fun from (Lnet/mamoe/mirai/event/events/GroupTempMessageEvent;)Lnet/mamoe/mirai/console/command/GroupTempCommandSenderOnMessage; public final fun from (Lnet/mamoe/mirai/event/events/MessageEvent;)Lnet/mamoe/mirai/console/command/CommandSenderOnMessage; + public final fun from (Lnet/mamoe/mirai/event/events/MessageSyncEvent;)Lnet/mamoe/mirai/console/command/OtherClientCommandSenderOnMessageSync; public final fun from (Lnet/mamoe/mirai/event/events/OtherClientMessageEvent;)Lnet/mamoe/mirai/console/command/OtherClientCommandSenderOnMessage; public final fun from (Lnet/mamoe/mirai/event/events/StrangerMessageEvent;)Lnet/mamoe/mirai/console/command/StrangerCommandSenderOnMessage; public final fun of (Lnet/mamoe/mirai/contact/Friend;)Lnet/mamoe/mirai/console/command/FriendCommandSender; @@ -557,6 +559,11 @@ public final class net/mamoe/mirai/console/command/OtherClientCommandSenderOnMes public fun getFromEvent ()Lnet/mamoe/mirai/event/events/OtherClientMessageEvent; } +public final class net/mamoe/mirai/console/command/OtherClientCommandSenderOnMessageSync : net/mamoe/mirai/console/command/OtherClientCommandSender, net/mamoe/mirai/console/command/CommandSenderOnMessage { + public synthetic fun getFromEvent ()Lnet/mamoe/mirai/event/events/MessageEvent; + public fun getFromEvent ()Lnet/mamoe/mirai/event/events/MessageSyncEvent; +} + public abstract interface class net/mamoe/mirai/console/command/PluginCustomCommandSender : net/mamoe/mirai/console/command/CommandSender, net/mamoe/mirai/console/command/SystemCommandSender { public abstract fun getOwner ()Lnet/mamoe/mirai/console/plugin/Plugin; public fun getPermitteeId ()Lnet/mamoe/mirai/console/permission/PermitteeId; diff --git a/mirai-console/backend/mirai-console/src/command/CommandSender.kt b/mirai-console/backend/mirai-console/src/command/CommandSender.kt index ef80b6c87..fa3717f3d 100644 --- a/mirai-console/backend/mirai-console/src/command/CommandSender.kt +++ b/mirai-console/backend/mirai-console/src/command/CommandSender.kt @@ -54,9 +54,9 @@ import kotlin.coroutines.CoroutineContext * - [MessageEvent.toCommandSender] * - [FriendMessageEvent.toCommandSender] * - [GroupMessageEvent.toCommandSender] - * - [TempMessageEvent.toCommandSender] * - [StrangerMessageEvent.toCommandSender] * - [OtherClientMessageEvent.toCommandSender] + * - [MessageSyncEvent.toCommandSender] * * - [Member.asCommandSender] * - [NormalMember.asTempCommandSender] @@ -243,6 +243,15 @@ public interface CommandSender : CoroutineScope, Permittee { public fun OtherClientMessageEvent.toCommandSender(): OtherClientCommandSenderOnMessage = OtherClientCommandSenderOnMessage(this) + /** + * 构造 [OtherClientCommandSenderOnMessageSync] + * @since 2.13 + */ + @JvmStatic + @JvmName("from") + public fun MessageSyncEvent.toCommandSender(): OtherClientCommandSenderOnMessageSync = + OtherClientCommandSenderOnMessageSync(this) + /** * 构造 [CommandSenderOnMessage] */ @@ -255,6 +264,7 @@ public interface CommandSender : CoroutineScope, Permittee { is GroupTempMessageEvent -> toCommandSender() is StrangerMessageEvent -> toCommandSender() is OtherClientMessageEvent -> toCommandSender() + is MessageSyncEvent -> toCommandSender() else -> throw IllegalArgumentException("Unsupported MessageEvent: ${this::class.qualifiedNameOrTip}") } as CommandSenderOnMessage @@ -817,6 +827,15 @@ public class OtherClientCommandSenderOnMessage internal constructor( public override val fromEvent: OtherClientMessageEvent, ) : OtherClientCommandSender(fromEvent.client), CommandSenderOnMessage +/** + * 代表一个 [其他客户端][OtherClient] 主动在群内、好友聊天等发送消息执行指令 + * @see OtherClientCommandSender 代表一个 [其他客户端][OtherClient] 执行指令, 但不一定是通过私聊方式 + * @since 2.13 + */ +public class OtherClientCommandSenderOnMessageSync internal constructor( + public override val fromEvent: MessageSyncEvent, +) : OtherClientCommandSender(fromEvent.client), CommandSenderOnMessage + // endregion // region PluginCustomCommandSender implementations @@ -869,3 +888,4 @@ public abstract class AbstractPluginCustomCommandSenderJ( } } // endregion + diff --git a/mirai-core-api/compatibility-validation/android/api/android.api b/mirai-core-api/compatibility-validation/android/api/android.api index 2e2f2ab08..99ea5765a 100644 --- a/mirai-core-api/compatibility-validation/android/api/android.api +++ b/mirai-core-api/compatibility-validation/android/api/android.api @@ -2394,7 +2394,9 @@ public final class net/mamoe/mirai/event/events/FriendMessagePreSendEvent : net/ public final class net/mamoe/mirai/event/events/FriendMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/FriendEvent, net/mamoe/mirai/event/events/MessageSyncEvent { public fun (Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getFriend ()Lnet/mamoe/mirai/contact/Friend; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/Friend; @@ -2576,7 +2578,9 @@ public final class net/mamoe/mirai/event/events/GroupMessagePreSendEvent : net/m public final class net/mamoe/mirai/event/events/GroupMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/GroupAwareMessageEvent, net/mamoe/mirai/event/events/MessageSyncEvent { public fun (Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getGroup ()Lnet/mamoe/mirai/contact/Group; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/Member; @@ -2708,7 +2712,9 @@ public final class net/mamoe/mirai/event/events/GroupTempMessagePreSendEvent : n public final class net/mamoe/mirai/event/events/GroupTempMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/GroupAwareMessageEvent, net/mamoe/mirai/event/events/MessageSyncEvent { public fun (Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getGroup ()Lnet/mamoe/mirai/contact/Group; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/NormalMember; @@ -3056,7 +3062,9 @@ public final class net/mamoe/mirai/event/events/MessageRecallEvent$GroupRecall : public fun toString ()Ljava/lang/String; } -public abstract interface class net/mamoe/mirai/event/events/MessageSyncEvent : net/mamoe/mirai/event/events/MessageEvent { +public abstract interface class net/mamoe/mirai/event/events/MessageSyncEvent : net/mamoe/mirai/event/events/MessageEvent, net/mamoe/mirai/event/events/OtherClientEvent { + public fun getBot ()Lnet/mamoe/mirai/Bot; + public abstract fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; } public final class net/mamoe/mirai/event/events/NewFriendRequestEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotEvent, net/mamoe/mirai/event/events/FriendInfoChangeEvent, net/mamoe/mirai/internal/network/Packet { @@ -3215,8 +3223,10 @@ public final class net/mamoe/mirai/event/events/StrangerMessagePreSendEvent : ne } public final class net/mamoe/mirai/event/events/StrangerMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/MessageSyncEvent, net/mamoe/mirai/event/events/StrangerEvent { + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun (Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/Stranger; public synthetic fun getSender ()Lnet/mamoe/mirai/contact/User; diff --git a/mirai-core-api/compatibility-validation/jvm/api/jvm.api b/mirai-core-api/compatibility-validation/jvm/api/jvm.api index bef148cda..9755071f6 100644 --- a/mirai-core-api/compatibility-validation/jvm/api/jvm.api +++ b/mirai-core-api/compatibility-validation/jvm/api/jvm.api @@ -2394,7 +2394,9 @@ public final class net/mamoe/mirai/event/events/FriendMessagePreSendEvent : net/ public final class net/mamoe/mirai/event/events/FriendMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/FriendEvent, net/mamoe/mirai/event/events/MessageSyncEvent { public fun (Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getFriend ()Lnet/mamoe/mirai/contact/Friend; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/Friend; @@ -2576,7 +2578,9 @@ public final class net/mamoe/mirai/event/events/GroupMessagePreSendEvent : net/m public final class net/mamoe/mirai/event/events/GroupMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/GroupAwareMessageEvent, net/mamoe/mirai/event/events/MessageSyncEvent { public fun (Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getGroup ()Lnet/mamoe/mirai/contact/Group; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/Member; @@ -2708,7 +2712,9 @@ public final class net/mamoe/mirai/event/events/GroupTempMessagePreSendEvent : n public final class net/mamoe/mirai/event/events/GroupTempMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/GroupAwareMessageEvent, net/mamoe/mirai/event/events/MessageSyncEvent { public fun (Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getGroup ()Lnet/mamoe/mirai/contact/Group; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/NormalMember; @@ -3056,7 +3062,9 @@ public final class net/mamoe/mirai/event/events/MessageRecallEvent$GroupRecall : public fun toString ()Ljava/lang/String; } -public abstract interface class net/mamoe/mirai/event/events/MessageSyncEvent : net/mamoe/mirai/event/events/MessageEvent { +public abstract interface class net/mamoe/mirai/event/events/MessageSyncEvent : net/mamoe/mirai/event/events/MessageEvent, net/mamoe/mirai/event/events/OtherClientEvent { + public fun getBot ()Lnet/mamoe/mirai/Bot; + public abstract fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; } public final class net/mamoe/mirai/event/events/NewFriendRequestEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotEvent, net/mamoe/mirai/event/events/FriendInfoChangeEvent, net/mamoe/mirai/internal/network/Packet { @@ -3215,8 +3223,10 @@ public final class net/mamoe/mirai/event/events/StrangerMessagePreSendEvent : ne } public final class net/mamoe/mirai/event/events/StrangerMessageSyncEvent : net/mamoe/mirai/event/events/AbstractMessageEvent, net/mamoe/mirai/event/events/MessageSyncEvent, net/mamoe/mirai/event/events/StrangerEvent { + public fun (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun (Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V public fun getBot ()Lnet/mamoe/mirai/Bot; + public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient; public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public fun getSender ()Lnet/mamoe/mirai/contact/Stranger; public synthetic fun getSender ()Lnet/mamoe/mirai/contact/User; diff --git a/mirai-core-api/src/commonMain/kotlin/event/events/MessageSyncEvent.kt b/mirai-core-api/src/commonMain/kotlin/event/events/MessageSyncEvent.kt index 0422179e3..d0707e965 100644 --- a/mirai-core-api/src/commonMain/kotlin/event/events/MessageSyncEvent.kt +++ b/mirai-core-api/src/commonMain/kotlin/event/events/MessageSyncEvent.kt @@ -18,6 +18,7 @@ import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageSource import net.mamoe.mirai.message.data.OnlineMessageSource import net.mamoe.mirai.message.data.source +import net.mamoe.mirai.utils.DeprecatedSinceMirai import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmName @@ -29,18 +30,52 @@ import kotlin.jvm.JvmName * * @see MessageEvent */ -public interface MessageSyncEvent : MessageEvent +public interface MessageSyncEvent : MessageEvent, OtherClientEvent { + public override val client: OtherClient + override val bot: Bot get() = sender.bot // don't rely on `client`, old version does not have client. +} /** * 机器人在其他客户端发送群临时会话消息同步到这个客户端的事件 * * @see MessageSyncEvent */ -public class GroupTempMessageSyncEvent( +public class GroupTempMessageSyncEvent private constructor( + private val _client: OtherClient?, public override val sender: NormalMember, public override val message: MessageChain, - public override val time: Int + public override val time: Int, + @Suppress("UNUSED_PARAMETER") _primaryConstructorMark: Any? ) : AbstractMessageEvent(), GroupAwareMessageEvent, MessageSyncEvent { + /** + * @since 2.13 + */ + public override val client: OtherClient + get() = _client ?: error("client is not set. Please use the new constructor.") + + /** + * @since 2.13 + */ + public constructor( + client: OtherClient, + sender: NormalMember, + message: MessageChain, + time: Int + ) : this(client, sender, message, time, null) + + @Deprecated( + "Please use the new constructor.", + replaceWith = ReplaceWith("GroupTempMessageSyncEvent(client, sender, message, time)"), + level = DeprecationLevel.WARNING + ) + @DeprecatedSinceMirai(warningSince = "2.13") + public constructor( + sender: NormalMember, + message: MessageChain, + time: Int + ) : this(null, sender, message, time, null) + + init { val source = message[MessageSource] ?: error("Cannot find MessageSource from message") check(source is OnlineMessageSource.Incoming.FromTemp) { "source provided to a GroupTempMessageSyncEvent must be an instance of OnlineMessageSource.Incoming.FromTemp" } @@ -58,11 +93,42 @@ public class GroupTempMessageSyncEvent( * * @see MessageSyncEvent */ -public class FriendMessageSyncEvent constructor( +public class FriendMessageSyncEvent private constructor( + private val _client: OtherClient?, public override val sender: Friend, public override val message: MessageChain, - public override val time: Int + public override val time: Int, + @Suppress("UNUSED_PARAMETER") _primaryConstructorMark: Any? ) : AbstractMessageEvent(), FriendEvent, MessageSyncEvent { + /** + * @since 2.13 + */ + public override val client: OtherClient + get() = _client ?: error("client is not set. Please use the new constructor.") + + /** + * @since 2.13 + */ + public constructor( + client: OtherClient, + sender: Friend, + message: MessageChain, + time: Int + ) : this(client, sender, message, time, null) + + @Deprecated( + "Please use the new constructor.", + replaceWith = ReplaceWith("FriendMessageSyncEvent(client, sender, message, time)"), + level = DeprecationLevel.WARNING + ) + @DeprecatedSinceMirai(warningSince = "2.13") + public constructor( + sender: Friend, + message: MessageChain, + time: Int + ) : this(null, sender, message, time, null) + + init { val source = message[MessageSource] ?: throw IllegalArgumentException("Cannot find MessageSource from message") @@ -70,7 +136,7 @@ public class FriendMessageSyncEvent constructor( } public override val friend: Friend get() = sender - public override val bot: Bot get() = super.bot + public override val bot: Bot get() = sender.bot public override val subject: Friend get() = sender public override val senderName: String get() = sender.nick public override val source: OnlineMessageSource.Incoming.FromFriend get() = message.source as OnlineMessageSource.Incoming.FromFriend @@ -81,11 +147,42 @@ public class FriendMessageSyncEvent constructor( * * @see MessageSyncEvent */ -public class StrangerMessageSyncEvent constructor( +public class StrangerMessageSyncEvent private constructor( + private val _client: OtherClient?, public override val sender: Stranger, public override val message: MessageChain, - public override val time: Int + public override val time: Int, + @Suppress("UNUSED_PARAMETER") _primaryConstructorMark: Any?, ) : AbstractMessageEvent(), StrangerEvent, MessageSyncEvent { + /** + * @since 2.13 + */ + public override val client: OtherClient + get() = _client ?: error("client is not set. Please use the new constructor.") + + /** + * @since 2.13 + */ + public constructor( + client: OtherClient, + sender: Stranger, + message: MessageChain, + time: Int + ) : this(client, sender, message, time, null) + + @Deprecated( + "Please use the new constructor.", + replaceWith = ReplaceWith("StrangerMessageSyncEvent(client, sender, message, time)"), + level = DeprecationLevel.WARNING + ) + @DeprecatedSinceMirai(warningSince = "2.13") + public constructor( + sender: Stranger, + message: MessageChain, + time: Int + ) : this(null, sender, message, time, null) + + init { val source = message[MessageSource] ?: throw IllegalArgumentException("Cannot find MessageSource from message") @@ -93,7 +190,7 @@ public class StrangerMessageSyncEvent constructor( } public override val stranger: Stranger get() = sender - public override val bot: Bot get() = super.bot + public override val bot: Bot get() = sender.bot public override val subject: Stranger get() = sender public override val senderName: String get() = sender.nick public override val source: OnlineMessageSource.Incoming.FromStranger get() = message.source as OnlineMessageSource.Incoming.FromStranger @@ -104,19 +201,53 @@ public class StrangerMessageSyncEvent constructor( * * @see MessageSyncEvent */ -public class GroupMessageSyncEvent( - override val group: Group, - override val message: MessageChain, - override val sender: Member, - override val senderName: String, - override val time: Int +public class GroupMessageSyncEvent private constructor( + private val _client: OtherClient?, + public override val group: Group, + public override val message: MessageChain, + public override val sender: Member, + public override val senderName: String, + public override val time: Int, + @Suppress("UNUSED_PARAMETER") _primaryConstructorMark: Any?, ) : AbstractMessageEvent(), GroupAwareMessageEvent, MessageSyncEvent { + /** + * @since 2.13 + */ + public override val client: OtherClient + get() = _client ?: error("client is not set. Please use the new constructor.") + + /** + * @since 2.13 + */ + public constructor( + client: OtherClient, + group: Group, + message: MessageChain, + sender: Member, + senderName: String, + time: Int + ) : this(client, group, message, sender, senderName, time, null) + + @Deprecated( + "Please use the new constructor.", + replaceWith = ReplaceWith("GroupMessageSyncEvent(client, group, message, sender, senderName, time)"), + level = DeprecationLevel.WARNING + ) + @DeprecatedSinceMirai(warningSince = "2.13") + public constructor( + group: Group, + message: MessageChain, + sender: Member, + senderName: String, + time: Int + ) : this(null, group, message, sender, senderName, time, null) + init { val source = message[MessageSource] ?: error("Cannot find MessageSource from message") check(source is OnlineMessageSource.Incoming.FromGroup) { "source provided to a GroupMessageSyncEvent must be an instance of OnlineMessageSource.Incoming.FromGroup" } } - override val bot: Bot get() = group.bot + override val bot: Bot get() = sender.bot override val subject: Group get() = group override val source: OnlineMessageSource.Incoming.FromGroup get() = message.source as OnlineMessageSource.Incoming.FromGroup diff --git a/mirai-core/src/commonMain/kotlin/network/notice/group/GroupMessageProcessor.kt b/mirai-core/src/commonMain/kotlin/network/notice/group/GroupMessageProcessor.kt index c61b902c8..60402c639 100644 --- a/mirai-core/src/commonMain/kotlin/network/notice/group/GroupMessageProcessor.kt +++ b/mirai-core/src/commonMain/kotlin/network/notice/group/GroupMessageProcessor.kt @@ -18,11 +18,8 @@ import net.mamoe.mirai.event.events.GroupMessageEvent import net.mamoe.mirai.event.events.GroupMessageSyncEvent import net.mamoe.mirai.event.events.MemberCardChangeEvent import net.mamoe.mirai.event.events.MemberSpecialTitleChangeEvent -import net.mamoe.mirai.internal.contact.GroupImpl -import net.mamoe.mirai.internal.contact.NormalMemberImpl -import net.mamoe.mirai.internal.contact.info +import net.mamoe.mirai.internal.contact.* import net.mamoe.mirai.internal.contact.info.MemberInfoImpl -import net.mamoe.mirai.internal.contact.newAnonymous import net.mamoe.mirai.internal.message.toMessageChainOnline import net.mamoe.mirai.internal.network.Packet import net.mamoe.mirai.internal.network.components.NoticePipelineContext @@ -139,6 +136,8 @@ internal class GroupMessageProcessor( if (isFromSelfAccount) { collect( GroupMessageSyncEvent( + client = bot.otherClients.find { it.appId == msgHead.fromInstid } + ?: return, // don't compare with dstAppId. diff. message = msgs.map { it.msg }.toMessageChainOnline(bot, group.id, MessageSourceKind.GROUP), time = msgHead.msgTime, group = group, diff --git a/mirai-core/src/commonMain/kotlin/network/notice/priv/PrivateMessageProcessor.kt b/mirai-core/src/commonMain/kotlin/network/notice/priv/PrivateMessageProcessor.kt index 8968c952e..99dadfc65 100644 --- a/mirai-core/src/commonMain/kotlin/network/notice/priv/PrivateMessageProcessor.kt +++ b/mirai-core/src/commonMain/kotlin/network/notice/priv/PrivateMessageProcessor.kt @@ -133,10 +133,12 @@ internal class PrivateMessageProcessor : SimpleNoticeProcessor(type val time = msgHead.msgTime collected += if (fromSync) { + val client = bot.otherClients.find { it.appId == msgHead.fromInstid } + ?: return // don't compare with dstAppId. diff. when (user) { - is FriendImpl -> FriendMessageSyncEvent(user, chain, time) - is StrangerImpl -> StrangerMessageSyncEvent(user, chain, time) - is NormalMemberImpl -> GroupTempMessageSyncEvent(user, chain, time) + is FriendImpl -> FriendMessageSyncEvent(client, user, chain, time) + is StrangerImpl -> StrangerMessageSyncEvent(client, user, chain, time) + is NormalMemberImpl -> GroupTempMessageSyncEvent(client, user, chain, time) is AnonymousMemberImpl -> assertUnreachable() } } else {