2
0
Эх сурвалжийг харах

Add client properties to MessageSyncEvents, add OtherClientCommandSenderOnMessageSync and MessageSyncEvent.toCommandSender

cssxsh 3 жил өмнө
parent
commit
9db5d2c4b5

+ 7 - 0
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/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/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/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/OtherClientMessageEvent;)Lnet/mamoe/mirai/console/command/OtherClientCommandSenderOnMessage;
 	public static fun from (Lnet/mamoe/mirai/event/events/StrangerMessageEvent;)Lnet/mamoe/mirai/console/command/StrangerCommandSenderOnMessage;
 	public static fun from (Lnet/mamoe/mirai/event/events/StrangerMessageEvent;)Lnet/mamoe/mirai/console/command/StrangerCommandSenderOnMessage;
 	public abstract fun getBot ()Lnet/mamoe/mirai/Bot;
 	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/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/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/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/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 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;
 	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 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 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 abstract fun getOwner ()Lnet/mamoe/mirai/console/plugin/Plugin;
 	public fun getPermitteeId ()Lnet/mamoe/mirai/console/permission/PermitteeId;
 	public fun getPermitteeId ()Lnet/mamoe/mirai/console/permission/PermitteeId;

+ 21 - 1
mirai-console/backend/mirai-console/src/command/CommandSender.kt

@@ -54,9 +54,9 @@ import kotlin.coroutines.CoroutineContext
  * - [MessageEvent.toCommandSender]
  * - [MessageEvent.toCommandSender]
  * - [FriendMessageEvent.toCommandSender]
  * - [FriendMessageEvent.toCommandSender]
  * - [GroupMessageEvent.toCommandSender]
  * - [GroupMessageEvent.toCommandSender]
- * - [TempMessageEvent.toCommandSender]
  * - [StrangerMessageEvent.toCommandSender]
  * - [StrangerMessageEvent.toCommandSender]
  * - [OtherClientMessageEvent.toCommandSender]
  * - [OtherClientMessageEvent.toCommandSender]
+ * - [MessageSyncEvent.toCommandSender]
  *
  *
  * - [Member.asCommandSender]
  * - [Member.asCommandSender]
  * - [NormalMember.asTempCommandSender]
  * - [NormalMember.asTempCommandSender]
@@ -243,6 +243,15 @@ public interface CommandSender : CoroutineScope, Permittee {
         public fun OtherClientMessageEvent.toCommandSender(): OtherClientCommandSenderOnMessage =
         public fun OtherClientMessageEvent.toCommandSender(): OtherClientCommandSenderOnMessage =
             OtherClientCommandSenderOnMessage(this)
             OtherClientCommandSenderOnMessage(this)
 
 
+        /**
+         * 构造 [OtherClientCommandSenderOnMessageSync]
+         * @since 2.13
+         */
+        @JvmStatic
+        @JvmName("from")
+        public fun MessageSyncEvent.toCommandSender(): OtherClientCommandSenderOnMessageSync =
+            OtherClientCommandSenderOnMessageSync(this)
+
         /**
         /**
          * 构造 [CommandSenderOnMessage]
          * 构造 [CommandSenderOnMessage]
          */
          */
@@ -255,6 +264,7 @@ public interface CommandSender : CoroutineScope, Permittee {
             is GroupTempMessageEvent -> toCommandSender()
             is GroupTempMessageEvent -> toCommandSender()
             is StrangerMessageEvent -> toCommandSender()
             is StrangerMessageEvent -> toCommandSender()
             is OtherClientMessageEvent -> toCommandSender()
             is OtherClientMessageEvent -> toCommandSender()
+            is MessageSyncEvent -> toCommandSender()
             else -> throw IllegalArgumentException("Unsupported MessageEvent: ${this::class.qualifiedNameOrTip}")
             else -> throw IllegalArgumentException("Unsupported MessageEvent: ${this::class.qualifiedNameOrTip}")
         } as CommandSenderOnMessage<T>
         } as CommandSenderOnMessage<T>
 
 
@@ -817,6 +827,15 @@ public class OtherClientCommandSenderOnMessage internal constructor(
     public override val fromEvent: OtherClientMessageEvent,
     public override val fromEvent: OtherClientMessageEvent,
 ) : OtherClientCommandSender(fromEvent.client), CommandSenderOnMessage<OtherClientMessageEvent>
 ) : OtherClientCommandSender(fromEvent.client), CommandSenderOnMessage<OtherClientMessageEvent>
 
 
+/**
+ * 代表一个 [其他客户端][OtherClient] 主动在群内、好友聊天等发送消息执行指令
+ * @see OtherClientCommandSender 代表一个 [其他客户端][OtherClient] 执行指令, 但不一定是通过私聊方式
+ * @since 2.13
+ */
+public class OtherClientCommandSenderOnMessageSync internal constructor(
+    public override val fromEvent: MessageSyncEvent,
+) : OtherClientCommandSender(fromEvent.client), CommandSenderOnMessage<MessageSyncEvent>
+
 // endregion
 // endregion
 
 
 // region PluginCustomCommandSender implementations
 // region PluginCustomCommandSender implementations
@@ -869,3 +888,4 @@ public abstract class AbstractPluginCustomCommandSenderJ(
     }
     }
 }
 }
 // endregion
 // endregion
+

+ 11 - 1
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 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 <init> (Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V
+	public fun <init> (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 getBot ()Lnet/mamoe/mirai/Bot;
+	public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient;
 	public fun getFriend ()Lnet/mamoe/mirai/contact/Friend;
 	public fun getFriend ()Lnet/mamoe/mirai/contact/Friend;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Friend;
 	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 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 <init> (Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V
+	public fun <init> (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 getBot ()Lnet/mamoe/mirai/Bot;
+	public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Member;
 	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 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 <init> (Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V
+	public fun <init> (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 getBot ()Lnet/mamoe/mirai/Bot;
+	public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/NormalMember;
 	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 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 {
 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 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 <init> (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun getBot ()Lnet/mamoe/mirai/Bot;
 	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 getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Stranger;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Stranger;
 	public synthetic fun getSender ()Lnet/mamoe/mirai/contact/User;
 	public synthetic fun getSender ()Lnet/mamoe/mirai/contact/User;

+ 11 - 1
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 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 <init> (Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Friend;Lnet/mamoe/mirai/message/data/MessageChain;I)V
+	public fun <init> (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 getBot ()Lnet/mamoe/mirai/Bot;
+	public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient;
 	public fun getFriend ()Lnet/mamoe/mirai/contact/Friend;
 	public fun getFriend ()Lnet/mamoe/mirai/contact/Friend;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Friend;
 	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 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 <init> (Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Group;Lnet/mamoe/mirai/message/data/MessageChain;Lnet/mamoe/mirai/contact/Member;Ljava/lang/String;I)V
+	public fun <init> (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 getBot ()Lnet/mamoe/mirai/Bot;
+	public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Member;
 	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 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 <init> (Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;Lnet/mamoe/mirai/message/data/MessageChain;I)V
+	public fun <init> (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 getBot ()Lnet/mamoe/mirai/Bot;
+	public fun getClient ()Lnet/mamoe/mirai/contact/OtherClient;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getGroup ()Lnet/mamoe/mirai/contact/Group;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/NormalMember;
 	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 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 {
 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 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 <init> (Lnet/mamoe/mirai/contact/OtherClient;Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun <init> (Lnet/mamoe/mirai/contact/Stranger;Lnet/mamoe/mirai/message/data/MessageChain;I)V
 	public fun getBot ()Lnet/mamoe/mirai/Bot;
 	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 getMessage ()Lnet/mamoe/mirai/message/data/MessageChain;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Stranger;
 	public fun getSender ()Lnet/mamoe/mirai/contact/Stranger;
 	public synthetic fun getSender ()Lnet/mamoe/mirai/contact/User;
 	public synthetic fun getSender ()Lnet/mamoe/mirai/contact/User;

+ 147 - 16
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.MessageSource
 import net.mamoe.mirai.message.data.OnlineMessageSource
 import net.mamoe.mirai.message.data.OnlineMessageSource
 import net.mamoe.mirai.message.data.source
 import net.mamoe.mirai.message.data.source
+import net.mamoe.mirai.utils.DeprecatedSinceMirai
 import kotlin.jvm.JvmMultifileClass
 import kotlin.jvm.JvmMultifileClass
 import kotlin.jvm.JvmName
 import kotlin.jvm.JvmName
 
 
@@ -29,18 +30,52 @@ import kotlin.jvm.JvmName
  *
  *
  * @see MessageEvent
  * @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
  * @see MessageSyncEvent
  */
  */
-public class GroupTempMessageSyncEvent(
+public class GroupTempMessageSyncEvent private constructor(
+    private val _client: OtherClient?,
     public override val sender: NormalMember,
     public override val sender: NormalMember,
     public override val message: MessageChain,
     public override val message: MessageChain,
-    public override val time: Int
+    public override val time: Int,
+    @Suppress("UNUSED_PARAMETER") _primaryConstructorMark: Any?
 ) : AbstractMessageEvent(), GroupAwareMessageEvent, MessageSyncEvent {
 ) : 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 {
     init {
         val source = message[MessageSource] ?: error("Cannot find MessageSource from message")
         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" }
         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
  * @see MessageSyncEvent
  */
  */
-public class FriendMessageSyncEvent constructor(
+public class FriendMessageSyncEvent private constructor(
+    private val _client: OtherClient?,
     public override val sender: Friend,
     public override val sender: Friend,
     public override val message: MessageChain,
     public override val message: MessageChain,
-    public override val time: Int
+    public override val time: Int,
+    @Suppress("UNUSED_PARAMETER") _primaryConstructorMark: Any?
 ) : AbstractMessageEvent(), FriendEvent, MessageSyncEvent {
 ) : 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 {
     init {
         val source =
         val source =
             message[MessageSource] ?: throw IllegalArgumentException("Cannot find MessageSource from message")
             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 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 subject: Friend get() = sender
     public override val senderName: String get() = sender.nick
     public override val senderName: String get() = sender.nick
     public override val source: OnlineMessageSource.Incoming.FromFriend get() = message.source as OnlineMessageSource.Incoming.FromFriend
     public override val source: OnlineMessageSource.Incoming.FromFriend get() = message.source as OnlineMessageSource.Incoming.FromFriend
@@ -81,11 +147,42 @@ public class FriendMessageSyncEvent constructor(
  *
  *
  * @see MessageSyncEvent
  * @see MessageSyncEvent
  */
  */
-public class StrangerMessageSyncEvent constructor(
+public class StrangerMessageSyncEvent private constructor(
+    private val _client: OtherClient?,
     public override val sender: Stranger,
     public override val sender: Stranger,
     public override val message: MessageChain,
     public override val message: MessageChain,
-    public override val time: Int
+    public override val time: Int,
+    @Suppress("UNUSED_PARAMETER") _primaryConstructorMark: Any?,
 ) : AbstractMessageEvent(), StrangerEvent, MessageSyncEvent {
 ) : 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 {
     init {
         val source =
         val source =
             message[MessageSource] ?: throw IllegalArgumentException("Cannot find MessageSource from message")
             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 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 subject: Stranger get() = sender
     public override val senderName: String get() = sender.nick
     public override val senderName: String get() = sender.nick
     public override val source: OnlineMessageSource.Incoming.FromStranger get() = message.source as OnlineMessageSource.Incoming.FromStranger
     public override val source: OnlineMessageSource.Incoming.FromStranger get() = message.source as OnlineMessageSource.Incoming.FromStranger
@@ -104,19 +201,53 @@ public class StrangerMessageSyncEvent constructor(
  *
  *
  * @see MessageSyncEvent
  * @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 {
 ) : 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 {
     init {
         val source = message[MessageSource] ?: error("Cannot find MessageSource from message")
         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" }
         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 subject: Group get() = group
     override val source: OnlineMessageSource.Incoming.FromGroup get() = message.source as OnlineMessageSource.Incoming.FromGroup
     override val source: OnlineMessageSource.Incoming.FromGroup get() = message.source as OnlineMessageSource.Incoming.FromGroup
 
 

+ 3 - 4
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.GroupMessageSyncEvent
 import net.mamoe.mirai.event.events.MemberCardChangeEvent
 import net.mamoe.mirai.event.events.MemberCardChangeEvent
 import net.mamoe.mirai.event.events.MemberSpecialTitleChangeEvent
 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.info.MemberInfoImpl
-import net.mamoe.mirai.internal.contact.newAnonymous
 import net.mamoe.mirai.internal.message.toMessageChainOnline
 import net.mamoe.mirai.internal.message.toMessageChainOnline
 import net.mamoe.mirai.internal.network.Packet
 import net.mamoe.mirai.internal.network.Packet
 import net.mamoe.mirai.internal.network.components.NoticePipelineContext
 import net.mamoe.mirai.internal.network.components.NoticePipelineContext
@@ -139,6 +136,8 @@ internal class GroupMessageProcessor(
         if (isFromSelfAccount) {
         if (isFromSelfAccount) {
             collect(
             collect(
                 GroupMessageSyncEvent(
                 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),
                     message = msgs.map { it.msg }.toMessageChainOnline(bot, group.id, MessageSourceKind.GROUP),
                     time = msgHead.msgTime,
                     time = msgHead.msgTime,
                     group = group,
                     group = group,

+ 5 - 3
mirai-core/src/commonMain/kotlin/network/notice/priv/PrivateMessageProcessor.kt

@@ -133,10 +133,12 @@ internal class PrivateMessageProcessor : SimpleNoticeProcessor<MsgComm.Msg>(type
         val time = msgHead.msgTime
         val time = msgHead.msgTime
 
 
         collected += if (fromSync) {
         collected += if (fromSync) {
+            val client = bot.otherClients.find { it.appId == msgHead.fromInstid }
+                ?: return // don't compare with dstAppId. diff.
             when (user) {
             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()
                 is AnonymousMemberImpl -> assertUnreachable()
             }
             }
         } else {
         } else {