From b030551221a561cd65bc1b87065f86a0ac0a95eb Mon Sep 17 00:00:00 2001 From: Huang Youzhen Date: Mon, 25 Aug 2025 15:54:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[NativeAPI]=20=E6=8D=95=E6=8D=89=E6=9D=A5?= =?UTF-8?q?=E8=87=AA=20MessageBuilder=20=E4=B8=AD=20Send=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E7=9A=84=E7=89=B9=E5=AE=9A=E6=83=85=E5=86=B5=E4=B8=8B?= =?UTF-8?q?=EF=BC=88=E8=A2=AB=E7=A6=81=E8=A8=80=EF=BC=89=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=8A=9B=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SendMessageEntryPoint.cs | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs b/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs index 014ea3c0..ecae5984 100644 --- a/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs +++ b/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs @@ -1,4 +1,4 @@ -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using Lagrange.Core.Common.Interface; using Lagrange.Core.NativeAPI.NativeModel.Common; using Lagrange.Core.NativeAPI.NativeModel.Message; @@ -45,7 +45,7 @@ int subType { return; } - + byte[]? sum = summary.IsEmpty() ? null : summary.ToByteArrayWithoutFree(); var context = Program.Contexts[index]; @@ -82,7 +82,7 @@ int subType subType ); } - + [UnmanagedCallersOnly(EntryPoint = "AddRecord")] public static void AddRecord(int index, int id, ByteArrayNative byteArrayNative) { @@ -109,7 +109,7 @@ public static void AddLocalRecord(int index, int id, ByteArrayNative byteArrayNa byteArrayNative.ToByteArrayWithoutFree() ); } - + [UnmanagedCallersOnly(EntryPoint = "AddVideo")] public static void AddVideo( int index, @@ -122,7 +122,7 @@ ByteArrayNative thumbnail { return; } - + byte[]? thumb = thumbnail.IsEmpty() ? null : thumbnail.ToByteArrayWithoutFree(); var context = Program.Contexts[index]; @@ -170,12 +170,19 @@ public static IntPtr SendFriendMessage(int index, int id, long friendUin) { return IntPtr.Zero; } - - var message = context.BotContext.SendFriendMessage(friendUin, chain).GetAwaiter().GetResult(); - - IntPtr messagePtr = Marshal.AllocHGlobal(Marshal.SizeOf()); - Marshal.StructureToPtr((BotMessageStruct)message, messagePtr, false); - return messagePtr; + + try + { + var message = context.BotContext.SendFriendMessage(friendUin, chain).GetAwaiter().GetResult(); + + IntPtr messagePtr = Marshal.AllocHGlobal(Marshal.SizeOf()); + Marshal.StructureToPtr((BotMessageStruct)message, messagePtr, false); + return messagePtr; + } + catch + { + return IntPtr.Zero; + } } [UnmanagedCallersOnly(EntryPoint = "SendGroupMessage")] @@ -193,11 +200,18 @@ public static IntPtr SendGroupMessage(int index, int id, long groupUin) return IntPtr.Zero; } - var message = context.BotContext.SendGroupMessage(groupUin, chain).GetAwaiter().GetResult(); + try + { + var message = context.BotContext.SendGroupMessage(groupUin, chain).GetAwaiter().GetResult(); - IntPtr messagePtr = Marshal.AllocHGlobal(Marshal.SizeOf()); - Marshal.StructureToPtr((BotMessageStruct)message, messagePtr, false); - return messagePtr; + IntPtr messagePtr = Marshal.AllocHGlobal(Marshal.SizeOf()); + Marshal.StructureToPtr((BotMessageStruct)message, messagePtr, false); + return messagePtr; + } + catch + { + return IntPtr.Zero; + } } } } From 890aa52c61be285c15a8f4cd6f4eb5e4414b91dd Mon Sep 17 00:00:00 2001 From: Huang Youzhen Date: Wed, 27 Aug 2025 04:16:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[NativeAPI]=20MessageBuilder=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20Mention=20MutliMsg=20=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lagrange.Core.NativeAPI/SendMessageContext.cs | 28 ++++++++++++- .../SendMessageEntryPoint.cs | 40 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/Lagrange.Core.NativeAPI/SendMessageContext.cs b/Lagrange.Core.NativeAPI/SendMessageContext.cs index ca5bf627..69b8098f 100644 --- a/Lagrange.Core.NativeAPI/SendMessageContext.cs +++ b/Lagrange.Core.NativeAPI/SendMessageContext.cs @@ -1,4 +1,4 @@ -using System.Text; +using System.Text; using Lagrange.Core.Message; namespace Lagrange.Core.NativeAPI @@ -87,6 +87,32 @@ public void AddLocalImage(int id, byte[] path, byte[]? summary = null, } } + public void AddMention(int id, long uin, byte[]? display = null) + { + if (MessageBuilders.TryGetValue(id, out var builder)) + { + builder.Mention(uin, display is null ? null : Encoding.UTF8.GetString(display)); + } + } + + public void AddReply(int id /*, BotMessage messages */) + { + throw new NotImplementedException(); + } + + public void AddMultiMsg(int id /*, List messages */) + { + throw new NotImplementedException(); + } + + public void AddMultiMsg(int id, byte[] resId) + { + if (MessageBuilders.TryGetValue(id, out var builder)) + { + builder.MultiMsg(Encoding.UTF8.GetString(resId)); + } + } + public void AddRecord(int id, byte[] record) { if (MessageBuilders.TryGetValue(id, out var builder)) diff --git a/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs b/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs index ecae5984..d36596e4 100644 --- a/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs +++ b/Lagrange.Core.NativeAPI/SendMessageEntryPoint.cs @@ -83,6 +83,46 @@ int subType ); } + //display可选,可以传结构内Length为0或Data为Zero的ByteArrayNative + [UnmanagedCallersOnly(EntryPoint = "AddMention")] + public static void AddMention( + int index, + int id, + long uin, + ByteArrayNative display + ) + { + if (Program.Contexts.Count <= index) + { + return; + } + + byte[]? ds = display.IsEmpty() ? null : display.ToByteArrayWithoutFree(); + + var context = Program.Contexts[index]; + context.SendMessageContext.AddMention( + id, uin, ds + ); + } + + [UnmanagedCallersOnly(EntryPoint = "AddMultiMsg")] + public static void AddMultiMsg( + int index, + int id, + ByteArrayNative resId + ) + { + if (Program.Contexts.Count <= index) + { + return; + } + + var context = Program.Contexts[index]; + context.SendMessageContext.AddMultiMsg( + id, resId.ToByteArrayWithoutFree() + ); + } + [UnmanagedCallersOnly(EntryPoint = "AddRecord")] public static void AddRecord(int index, int id, ByteArrayNative byteArrayNative) {