diff --git a/Lagrange.OneBot/Core/Operation/Message/GetEssenceMessageListOperation.cs b/Lagrange.OneBot/Core/Operation/Message/GetEssenceMessageListOperation.cs index 2b2acf122..8a5a42bcd 100644 --- a/Lagrange.OneBot/Core/Operation/Message/GetEssenceMessageListOperation.cs +++ b/Lagrange.OneBot/Core/Operation/Message/GetEssenceMessageListOperation.cs @@ -67,7 +67,7 @@ private static List ConvertToSegment(IEnumerable elem var segment = type switch { 1 => new OneBotSegment("text", new TextSegment(msg["text"]?.GetValue() ?? "")), - 2 => new OneBotSegment("face", new FaceSegment(msg["face_index"]?.GetValue() ?? 0)), + 2 => new OneBotSegment("face", new FaceSegment(msg["face_index"]?.GetValue() ?? 0)), 3 => new OneBotSegment("image", new ImageSegment(msg["image_url"]?.GetValue() ?? "", "")), 4 => new OneBotSegment("video", new VideoSegment(msg["file_thumbnail_url"]?.GetValue() ?? "")), _ => throw new InvalidDataException("Unknown type found in essence msg") diff --git a/Lagrange.OneBot/Message/Entity/FaceSegment.cs b/Lagrange.OneBot/Message/Entity/FaceSegment.cs index 8d86b3ff0..b0c837925 100644 --- a/Lagrange.OneBot/Message/Entity/FaceSegment.cs +++ b/Lagrange.OneBot/Message/Entity/FaceSegment.cs @@ -5,7 +5,7 @@ namespace Lagrange.OneBot.Message.Entity; [Serializable] -public partial class FaceSegment(int id) +public partial class FaceSegment(uint id) { public FaceSegment() : this(0) { } @@ -18,13 +18,23 @@ public FaceSegment() : this(0) { } [SegmentSubscriber(typeof(FaceEntity), "face")] public partial class FaceSegment : SegmentBase { - private static readonly ushort[] Excluded = [358, 359]; - + private static readonly uint[] Excluded = { 358, 359 }; + public override void Build(MessageBuilder builder, SegmentBase segment) { - if (segment is FaceSegment faceSegment) builder.Face(ushort.Parse(faceSegment.Id), faceSegment.IsLarge ?? false); + if (segment is FaceSegment faceSegment) + { + if (uint.TryParse(faceSegment.Id, out uint faceId)) + { + builder.Face(faceId, faceSegment.IsLarge ?? false); + } + else + { + throw new ArgumentException($"Invalid Face ID: {faceSegment.Id}"); + } + } } - + public override SegmentBase? FromEntity(MessageChain chain, IMessageEntity entity) { if (entity is not FaceEntity faceEntity) throw new ArgumentException("Invalid entity type.");