diff --git a/Lagrange.OneBot/Core/Entity/Message/OneBotGroupMsg.cs b/Lagrange.OneBot/Core/Entity/Message/OneBotGroupMsg.cs index eadcbac8c..81d7e8a0f 100644 --- a/Lagrange.OneBot/Core/Entity/Message/OneBotGroupMsg.cs +++ b/Lagrange.OneBot/Core/Entity/Message/OneBotGroupMsg.cs @@ -4,7 +4,7 @@ namespace Lagrange.OneBot.Core.Entity.Message; [Serializable] -public class OneBotGroupMsg(uint selfId, uint groupUin, List message, string rawMessage, BotGroupMember member, int messageId , uint appid) : OneBotEntityBase(selfId, "message") +public class OneBotGroupMsg(uint selfId, uint groupUin, List message, string rawMessage, BotGroupMember member, int messageId, uint appid, int seq) : OneBotEntityBase(selfId, "message") { [JsonPropertyName("message_type")] public string MessageType { get; set; } = "group"; @@ -14,10 +14,12 @@ public class OneBotGroupMsg(uint selfId, uint groupUin, List mess [JsonPropertyName("message_id")] public int MessageId { get; set; } = messageId; + [JsonPropertyName("message_seq")] public int MessageSeq { get; set; } = seq; + [JsonPropertyName("group_id")] public uint GroupId { get; set; } = groupUin; - + [JsonPropertyName("user_id")] public uint UserId { get; set; } = member.Uin; - + [JsonPropertyName("anonymous")] public object? Anonymous { get; set; } = null; [JsonPropertyName("message")] public List Message { get; set; } = message; @@ -30,7 +32,7 @@ public class OneBotGroupMsg(uint selfId, uint groupUin, List mess } [Serializable] -public class OneBotGroupStringMsg(uint selfId, uint groupUin, string message, BotGroupMember member, int messageId, uint appid) : OneBotEntityBase(selfId, "message") +public class OneBotGroupStringMsg(uint selfId, uint groupUin, string message, BotGroupMember member, int messageId, uint appid, int seq) : OneBotEntityBase(selfId, "message") { [JsonPropertyName("message_type")] public string MessageType { get; set; } = "group"; @@ -40,12 +42,14 @@ public class OneBotGroupStringMsg(uint selfId, uint groupUin, string message, Bo [JsonPropertyName("message_id")] public int MessageId { get; set; } = messageId; + [JsonPropertyName("message_seq")] public int MessageSeq { get; set; } = seq; + [JsonPropertyName("group_id")] public uint GroupId { get; set; } = groupUin; - + [JsonPropertyName("user_id")] public uint UserId { get; set; } = member.Uin; - + [JsonPropertyName("anonymous")] public object? Anonymous { get; set; } = null; - + [JsonPropertyName("message")] public string Message { get; set; } = message; [JsonPropertyName("raw_message")] public string RawMessage { get; set; } = message; diff --git a/Lagrange.OneBot/Core/Entity/Message/OneBotGroupMsgHistorySeq.cs b/Lagrange.OneBot/Core/Entity/Message/OneBotGroupMsgHistorySeq.cs new file mode 100644 index 000000000..113a04a37 --- /dev/null +++ b/Lagrange.OneBot/Core/Entity/Message/OneBotGroupMsgHistorySeq.cs @@ -0,0 +1,14 @@ +using System.Text.Json.Serialization; + +namespace Lagrange.OneBot.Core.Entity.Message; + +[Serializable] +public class OneBotGroupMsgHistorySeq +{ + [JsonPropertyName("group_id")] public uint GroupId { get; set; } + + [JsonPropertyName("start")] public int Start { get; set; } + + [JsonPropertyName("end")] public int End { get; set; } + +} \ No newline at end of file diff --git a/Lagrange.OneBot/Core/Operation/Message/GetGroupMessageHistorySeqOperation.cs b/Lagrange.OneBot/Core/Operation/Message/GetGroupMessageHistorySeqOperation.cs new file mode 100644 index 000000000..1e2c10835 --- /dev/null +++ b/Lagrange.OneBot/Core/Operation/Message/GetGroupMessageHistorySeqOperation.cs @@ -0,0 +1,33 @@ +using System.Text.Json; +using System.Text.Json.Nodes; +using Lagrange.Core; +using Lagrange.Core.Common.Interface.Api; +using Lagrange.Core.Message; +using Lagrange.OneBot.Core.Entity.Action; +using Lagrange.OneBot.Core.Entity.Message; +using Lagrange.OneBot.Core.Operation.Converters; +using Lagrange.OneBot.Database; +using Lagrange.OneBot.Message; +using LiteDB; + +namespace Lagrange.OneBot.Core.Operation.Message; + +[Operation("get_group_msg_history_seq")] +public class GetGroupMessageHistorySeqOperation(MessageService message) : IOperation +{ + public async Task HandleOperation(BotContext context, JsonNode? payload) + { + if (payload.Deserialize(SerializerOptions.DefaultOptions) is { } history) + { + if (await context.GetGroupMessage(history.GroupId, (uint)history.Start, (uint)(history.End == 0 ? history.Start : history.End)) is { } results) + { + var messages = results + .Select(x => message.ConvertToGroupMsg(context.BotUin, x)) + .ToList(); + return new OneBotResult(new OneBotGroupMsgHistoryResponse(messages), 0, "ok"); + } + } + + throw new Exception(); + } +} diff --git a/Lagrange.OneBot/Message/MessageService.cs b/Lagrange.OneBot/Message/MessageService.cs index a213ae855..981a96b47 100644 --- a/Lagrange.OneBot/Message/MessageService.cs +++ b/Lagrange.OneBot/Message/MessageService.cs @@ -109,7 +109,7 @@ private void OnGroupMessageReceived(BotContext bot, GroupMessageEvent e) _ = _service.SendJsonAsync(request); } - + private void OnGroupProMessageReceived(BotContext bot, GroupProMessageEvent e) { var request = ConvertToGroupMsg(bot.BotUin, e.Chain); @@ -121,8 +121,8 @@ public object ConvertToGroupMsg(uint uin, MessageChain chain) var segments = Convert(chain); int hash = MessageRecord.CalcMessageHash(chain.MessageId, chain.Sequence); object request = _stringPost - ? new OneBotGroupStringMsg(uin, chain.GroupUin ?? 0, ToRawMessage(segments), chain.GroupMemberInfo ?? throw new Exception("Group member not found"), hash, chain.Appid) - : new OneBotGroupMsg(uin, chain.GroupUin ?? 0, segments, ToRawMessage(segments), chain.GroupMemberInfo ?? throw new Exception("Group member not found"), hash, chain.Appid); + ? new OneBotGroupStringMsg(uin, chain.GroupUin ?? 0, ToRawMessage(segments), chain.GroupMemberInfo ?? throw new Exception("Group member not found"), hash, chain.Appid, (int)chain.Sequence) + : new OneBotGroupMsg(uin, chain.GroupUin ?? 0, segments, ToRawMessage(segments), chain.GroupMemberInfo ?? throw new Exception("Group member not found"), hash, chain.Appid, (int)chain.Sequence); return request; }